feat: groupBy tools autocomplete

This commit is contained in:
Ibrahima G. Coulibaly
2025-07-07 14:18:47 +01:00
parent ec360478cc
commit daec8df499
4 changed files with 82 additions and 32 deletions

View File

@@ -1,4 +1,13 @@
import { Autocomplete, Box, Stack, TextField, useTheme } from '@mui/material';
import {
Autocomplete,
Box,
darken,
lighten,
Stack,
styled,
TextField,
useTheme
} from '@mui/material';
import Typography from '@mui/material/Typography';
import SearchIcon from '@mui/icons-material/Search';
import Grid from '@mui/material/Grid';
@@ -8,7 +17,22 @@ import { filterTools, tools } from '@tools/index';
import { useNavigate } from 'react-router-dom';
import _ from 'lodash';
import { Icon } from '@iconify/react';
import { getToolCategoryTitle } from '@utils/string';
const GroupHeader = styled('div')(({ theme }) => ({
position: 'sticky',
top: '-8px',
padding: '4px 10px',
color: theme.palette.primary.main,
backgroundColor: lighten(theme.palette.primary.light, 0.85),
...theme.applyStyles('dark', {
backgroundColor: darken(theme.palette.primary.main, 0.8)
})
}));
const GroupItems = styled('ul')({
padding: 0
});
const exampleTools: { label: string; url: string }[] = [
{
label: 'Create a transparent image',
@@ -65,6 +89,14 @@ export default function Hero() {
autoHighlight
options={filteredTools}
groupBy={(option) => option.type}
renderGroup={(params) => {
return (
<li key={params.key}>
<GroupHeader>{getToolCategoryTitle(params.group)}</GroupHeader>
<GroupItems>{params.children}</GroupItems>
</li>
);
}}
inputValue={inputValue}
getOptionLabel={(option) => option.name}
renderInput={(params) => (