{"version":3,"file":"index.mjs","sources":["../../../src/components/filter-field/index.tsx"],"sourcesContent":["import type { TextFieldProps } from '@mui/material';\nimport { Box, MenuItem, TextField } from '@mui/material';\nimport DateRangePicker from '@mui/lab/DateRangePicker';\nimport { forwardRef, memo, useCallback, useEffect, useState } from 'react';\nimport { useDebounce } from '$hooks';\nimport type { FilterAllowedColumnTypeUnion, SelectItem } from '$types';\n\nconst INPUT_WIDTH = 202;\n\ntype TextFieldDebouncedProps = Omit<TextFieldProps, 'onChange'> & {\n  onChangeDebounced?: (val: any) => void;\n  debounceDelay?: number;\n};\nconst TextFieldDebounced = memo(\n  forwardRef<HTMLDivElement, TextFieldDebouncedProps>(\n    ({ onChangeDebounced, value: initialValue, debounceDelay = 700, ...props }, ref) => {\n      const [value, setValue] = useState(initialValue);\n      const debouncedValue = useDebounce(value, debounceDelay);\n      const onChange = useCallback<\n        React.ChangeEventHandler<HTMLInputElement | HTMLTextAreaElement>\n      >(({ target: { value: v } }) => setValue(v), []);\n      useEffect(() => {\n        onChangeDebounced?.(debouncedValue);\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n      }, [debouncedValue]);\n      return <TextField ref={ref} value={value} onChange={onChange} {...props} />;\n    }\n  )\n);\n\nexport type FilterFieldProps<T = unknown> = {\n  onChange: (value: T) => void;\n  value: T;\n  label: string;\n} & (\n  | { type: 'singleSelect'; items: SelectItem[] }\n  | { type: Exclude<FilterAllowedColumnTypeUnion, 'singleSelect'> }\n);\n\nexport const FilterField: React.FC<FilterFieldProps> = memo(function FilterField(props) {\n  const { onChange, value, label } = props;\n\n  switch (props.type) {\n    case 'string':\n    case 'number':\n      return (\n        <TextFieldDebounced\n          value={value}\n          onChangeDebounced={onChange}\n          label={label}\n          type={props.type === 'number' ? 'number' : 'text'}\n          sx={{ width: INPUT_WIDTH, maxWidth: '100%' }}\n          inputProps={{ style: { height: 'auto' } }}\n        />\n      );\n\n    case 'singleSelect':\n      return (\n        <TextFieldDebounced\n          value={value}\n          onChangeDebounced={onChange}\n          label={label}\n          sx={{ width: INPUT_WIDTH, maxWidth: '100%' }}\n          inputProps={{ style: { height: 'auto' } }}\n          select\n          debounceDelay={0}\n        >\n          <MenuItem value={undefined}>\n            <em>\n              <b>None</b>\n            </em>\n          </MenuItem>\n          {props.items.map((el, i) => (\n            // eslint-disable-next-line react/no-array-index-key\n            <MenuItem key={i} value={el.value as string}>\n              {el.label}\n            </MenuItem>\n          ))}\n        </TextFieldDebounced>\n      );\n\n    case 'date':\n      return (\n        <DateRangePicker\n          value={value}\n          onChange={onChange}\n          renderInput={(startProps: any, endProps: any) => (\n            <>\n              <TextField\n                {...startProps}\n                label={`${label} - Start`}\n                sx={{ width: INPUT_WIDTH, maxWidth: '100%' }}\n                inputProps={{ style: { height: 'auto' }, ...startProps.inputProps }}\n              />\n              <Box sx={{ mx: 2 }}> to </Box>\n              <TextField\n                {...endProps}\n                label={`${label} - End`}\n                sx={{ width: INPUT_WIDTH, maxWidth: '100%' }}\n                inputProps={{ style: { height: 'auto' }, ...startProps.inputProps }}\n              />\n            </>\n          )}\n        />\n      );\n\n    case 'boolean':\n      return (\n        <TextFieldDebounced\n          value={value}\n          onChangeDebounced={v => onChange(v === 'true')}\n          label={label}\n          sx={{ width: INPUT_WIDTH, maxWidth: '100%' }}\n          inputProps={{ style: { height: 'auto' } }}\n          select\n          debounceDelay={0}\n        >\n          <MenuItem value={undefined}>\n            <em>\n              <b>None</b>\n            </em>\n          </MenuItem>\n          <MenuItem value='true'>True</MenuItem>\n          <MenuItem value='false'>False</MenuItem>\n        </TextFieldDebounced>\n      );\n\n    default:\n      return (\n        <TextFieldDebounced\n          value={value}\n          onChangeDebounced={onChange}\n          label={label}\n          sx={{ width: INPUT_WIDTH, maxWidth: '100%' }}\n          inputProps={{ style: { height: 'auto' } }}\n        />\n      );\n  }\n});\n"],"names":["INPUT_WIDTH","TextFieldDebounced","memo","forwardRef","onChangeDebounced","value","initialValue","debounceDelay","props","ref","setValue","useState","debouncedValue","useDebounce","onChange","useCallback","target","v","useEffect","_jsx","TextField","FilterField","label","type","sx","width","maxWidth","inputProps","style","height","_jsxs","select","MenuItem","undefined","em","b","items","map","el","i","DateRangePicker","renderInput","startProps","endProps","_Fragment","Box","mx"],"mappings":"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"}