import React, { useMemo } from 'react'; import { AutocompleteOwnerState, AutocompleteRenderOptionState, Box, ChipTypeMap } from '@mui/material'; import Autocomplete, { AutocompleteProps, AutocompleteRenderInputParams } from '@mui/material/Autocomplete'; import TextField from '@mui/material/TextField'; const AutoCompleteComponent = < T, Multiple extends boolean | undefined = false, DisableClearable extends boolean | undefined = false, FreeSolo extends boolean | undefined = false, ChipComponent extends React.ElementType = ChipTypeMap['defaultComponent'] >({ options, className, classes, renderInput, getOptionLabel, renderOption, color = 'primary', ...props }: Omit, 'renderInput'> & { renderInput?: (params: AutocompleteRenderInputParams) => React.ReactNode; }) => { const renderOptionDefault = useMemo( () => ( props: React.HTMLAttributes, option: T, state: AutocompleteRenderOptionState, ownerState: AutocompleteOwnerState ) => ( {getOptionLabel ? getOptionLabel(option) : (option as any).toString()} ), [getOptionLabel] ); return ( )} getOptionLabel={getOptionLabel} renderOption={renderOption ?? renderOptionDefault} /> ); }; export const AutoComplete = AutoCompleteComponent;