\n
\n \n onModelChange(value === '' ? null : value)\n }\n />\n {model !== null && (\n \n )}\n
\n
\n );\n};\n","import React, { ChangeEvent, useCallback, useEffect, useState } from 'react';\nimport { CustomFilterProps, useGridFilter } from 'ag-grid-react';\nimport {\n IAfterGuiAttachedParams,\n IDoesFilterPassParams,\n} from 'ag-grid-community';\nimport { filterStyles } from './styles';\nimport { ProductTypes } from 'lib/api/generated';\n\nexport default ({\n model,\n onModelChange,\n getValue,\n ...rest\n}: CustomFilterProps) => {\n const [closeFilter, setCloseFilter] = useState<(() => void) | undefined>();\n const [unappliedModel, setUnappliedModel] = useState(model);\n\n const doesFilterPass = useCallback(\n (params: IDoesFilterPassParams) => {\n const filterText: string = model;\n switch (filterText) {\n case ProductTypes.Ct:\n case ProductTypes.Gt:\n case ProductTypes.Sh:\n return params.data.product === filterText;\n default:\n return true;\n }\n },\n [model]\n );\n\n const afterGuiAttached = useCallback(\n ({ hidePopup }: IAfterGuiAttachedParams) => {\n setCloseFilter(() => hidePopup);\n },\n []\n );\n\n // register filter handlers with the grid\n useGridFilter({\n doesFilterPass,\n afterGuiAttached,\n });\n\n useEffect(() => {\n setUnappliedModel(model);\n }, [model]);\n\n const onProductChange = ({\n target: { value },\n }: ChangeEvent