File "AutoCompleteControl.js"

Full Path: /home/bytebmoc/tideswithin.com/settings/src/Settings/AutoComplete/AutoCompleteControl.js
File size: 2.15 KB
MIME-type: text/x-java
Charset: utf-8

/*
* The native selectControl doesn't allow disabling per option.
*/

import DOMPurify from "dompurify";
import {Autocomplete} from "@mui/material";
import TextField from '@material-ui/core/TextField';
import './AutoComplete.scss';
import { makeStyles } from "@material-ui/styles";

const useStyles = makeStyles(() => ({
    autoComplete: {
        fontSize: "12px"
    }
}));

const AutoCompleteControl = ({field, disabled, value, options, label, onChange }) => {
    let selectDisabled = !Array.isArray(disabled) && disabled;
    const classes = useStyles();

    return (
        <>
            <Autocomplete
                classes={{
                    input: classes.autoComplete,
                    option: classes.autoComplete
                }}
                disabled={selectDisabled}
                disablePortal
                value={ value }
                id={field.id}
                options={options}
                isOptionEqualToValue={(option, value) => {
                    const optionValue = typeof option.value === "string" ? option.value.toLowerCase() : option.value;
                    const valueValue = typeof value.value === "string" ? value.value.toLowerCase() : value.value;
                    return optionValue === valueValue;
                }}
                getOptionLabel={(option) => {
                    if ( option && option.label ) {
                        return option.label;
                    }
                    const selectedOption = options.find( item => item.value === option );
                    if ( selectedOption ) {
                        return selectedOption.label;
                    }
                    return option;
                } }
                onChange={(event, newValue) => {
                    let value = newValue && newValue.value ? newValue.value : '';
                    onChange(value);
                }}
                renderInput={(params) => <TextField {...params}
                    label={label}
                    margin="normal"
                    variant="outlined"
                    fullWidth
                />}
            />
        </>
    );
}
export default AutoCompleteControl