@mrii/react-table-builder
Version:
library to easily build tables using MUI grid
1 lines • 9.08 kB
Source Map (JSON)
{"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":";;;;;;AAOA,MAAMA,WAAc,GAAA,GAAA,CAAA;AAMpB,MAAMC,mCAAqBC,IACzBC,eAAAA,UAAAA,CACE,CAAC,EAAEC,oBAAmBC,KAAAA,EAAOC,YAAY,GAAEC,eAAgB,GAAG,GAAE,GAAGC,KAAAA,EAAO,EAAEC,GAAQ,GAAA;AAClF,IAAA,MAAM,CAACJ,KAAAA,EAAOK,QAAS,CAAA,GAAGC,QAASL,CAAAA,YAAAA,CAAAA,CAAAA;IACnC,MAAMM,cAAAA,GAAiBC,YAAYR,KAAOE,EAAAA,aAAAA,CAAAA,CAAAA;AAC1C,IAAA,MAAMO,QAAWC,GAAAA,WAAAA,CAEf,CAAC,EAAEC,QAAQ,EAAEX,KAAAA,EAAOY,CAAC,GAAE,GAAE,GAAKP,QAAAA,CAASO,IAAI,EAAE,CAAA,CAAA;AAC/CC,IAAAA,SAAAA,CAAU,IAAM;QACdd,iBAAoBQ,GAAAA,cAAAA,CAAAA,CAAAA;;KAEnB,EAAA;AAACA,QAAAA,cAAAA;AAAe,KAAA,CAAA,CAAA;AACnB,IAAA,qBAAOO,GAACC,CAAAA,SAAAA,EAAAA;QAAUX,GAAKA,EAAAA,GAAAA;QAAKJ,KAAOA,EAAAA,KAAAA;QAAOS,QAAUA,EAAAA,QAAAA;AAAW,QAAA,GAAGN,KAAK;;AACzE,CAAA,CAAA,CAAA,CAAA;MAaSa,WAA0CnB,iBAAAA,IAAAA,CAAK,SAASmB,WAAAA,CAAYb,KAAK,EAAE;AACtF,IAAA,MAAM,EAAEM,QAAQ,GAAET,QAAOiB,KAAAA,GAAO,GAAGd,KAAAA,CAAAA;AAEnC,IAAA,OAAQA,MAAMe,IAAI;QAChB,KAAK,QAAA,CAAA;QACL,KAAK,QAAA;AACH,YAAA,qBACEJ,GAAClB,CAAAA,kBAAAA,EAAAA;gBACCI,KAAOA,EAAAA,KAAAA;gBACPD,iBAAmBU,EAAAA,QAAAA;gBACnBQ,KAAOA,EAAAA,KAAAA;AACPC,gBAAAA,IAAAA,EAAMf,KAAMe,CAAAA,IAAI,KAAK,QAAA,GAAW,WAAW,MAAM;gBACjDC,EAAI,EAAA;oBAAEC,KAAOzB,EAAAA,WAAAA;oBAAa0B,QAAU,EAAA,MAAA;AAAO,iBAAA;gBAC3CC,UAAY,EAAA;oBAAEC,KAAO,EAAA;wBAAEC,MAAQ,EAAA,MAAA;AAAO,qBAAA;AAAE,iBAAA;;QAI9C,KAAK,cAAA;AACH,YAAA,qBACEC,IAAC7B,CAAAA,kBAAAA,EAAAA;gBACCI,KAAOA,EAAAA,KAAAA;gBACPD,iBAAmBU,EAAAA,QAAAA;gBACnBQ,KAAOA,EAAAA,KAAAA;gBACPE,EAAI,EAAA;oBAAEC,KAAOzB,EAAAA,WAAAA;oBAAa0B,QAAU,EAAA,MAAA;AAAO,iBAAA;gBAC3CC,UAAY,EAAA;oBAAEC,KAAO,EAAA;wBAAEC,MAAQ,EAAA,MAAA;AAAO,qBAAA;AAAE,iBAAA;gBACxCE,MAAM,EAAA,IAAA;gBACNxB,aAAe,EAAA,CAAA;;kCAEfY,GAACa,CAAAA,QAAAA,EAAAA;wBAAS3B,KAAO4B,EAAAA,SAAAA;AACf,wBAAA,QAAA,gBAAAd,GAACe,CAAAA,IAAAA,EAAAA;AACC,4BAAA,QAAA,gBAAAf,GAACgB,CAAAA,GAAAA,EAAAA;AAAE,gCAAA,QAAA,EAAA,MAAA;;;;AAGN3B,oBAAAA,KAAAA,CAAM4B,KAAK,CAACC,GAAG,CAAC,CAACC,EAAAA,EAAIC;sCAEpBpB,GAACa,CAAAA,QAAAA,EAAAA;AAAiB3B,4BAAAA,KAAAA,EAAOiC,GAAGjC,KAAK;AAC9BiC,4BAAAA,QAAAA,EAAAA,EAAAA,CAAGhB,KAAK;AADIiB,yBAAAA,EAAAA,CAAAA,CAAAA,CAAAA;;;QAOvB,KAAK,MAAA;AACH,YAAA,qBACEpB,GAACqB,CAAAA,eAAAA,EAAAA;gBACCnC,KAAOA,EAAAA,KAAAA;gBACPS,QAAUA,EAAAA,QAAAA;gBACV2B,WAAa,EAAA,CAACC,YAAiBC,QAC7B,iBAAAb,IAAA,CAAAc,QAAA,EAAA;;0CACEzB,GAACC,CAAAA,SAAAA,EAAAA;AACE,gCAAA,GAAGsB,UAAU;AACdpB,gCAAAA,KAAAA,EAAO,CAAC,EAAEA,KAAM,CAAA,QAAQ,CAAC;gCACzBE,EAAI,EAAA;oCAAEC,KAAOzB,EAAAA,WAAAA;oCAAa0B,QAAU,EAAA,MAAA;AAAO,iCAAA;gCAC3CC,UAAY,EAAA;oCAAEC,KAAO,EAAA;wCAAEC,MAAQ,EAAA,MAAA;AAAO,qCAAA;AAAG,oCAAA,GAAGa,WAAWf,UAAU;AAAC,iCAAA;;0CAEpER,GAAC0B,CAAAA,GAAAA,EAAAA;gCAAIrB,EAAI,EAAA;oCAAEsB,EAAI,EAAA,CAAA;AAAE,iCAAA;AAAG,gCAAA,QAAA,EAAA,MAAA;;0CACpB3B,GAACC,CAAAA,SAAAA,EAAAA;AACE,gCAAA,GAAGuB,QAAQ;AACZrB,gCAAAA,KAAAA,EAAO,CAAC,EAAEA,KAAM,CAAA,MAAM,CAAC;gCACvBE,EAAI,EAAA;oCAAEC,KAAOzB,EAAAA,WAAAA;oCAAa0B,QAAU,EAAA,MAAA;AAAO,iCAAA;gCAC3CC,UAAY,EAAA;oCAAEC,KAAO,EAAA;wCAAEC,MAAQ,EAAA,MAAA;AAAO,qCAAA;AAAG,oCAAA,GAAGa,WAAWf,UAAU;AAAC,iCAAA;;;;;QAO9E,KAAK,SAAA;AACH,YAAA,qBACEG,IAAC7B,CAAAA,kBAAAA,EAAAA;gBACCI,KAAOA,EAAAA,KAAAA;gBACPD,iBAAmBa,EAAAA,CAAAA,CAAKH,GAAAA,QAAAA,CAASG,CAAM,KAAA,MAAA,CAAA;gBACvCK,KAAOA,EAAAA,KAAAA;gBACPE,EAAI,EAAA;oBAAEC,KAAOzB,EAAAA,WAAAA;oBAAa0B,QAAU,EAAA,MAAA;AAAO,iBAAA;gBAC3CC,UAAY,EAAA;oBAAEC,KAAO,EAAA;wBAAEC,MAAQ,EAAA,MAAA;AAAO,qBAAA;AAAE,iBAAA;gBACxCE,MAAM,EAAA,IAAA;gBACNxB,aAAe,EAAA,CAAA;;kCAEfY,GAACa,CAAAA,QAAAA,EAAAA;wBAAS3B,KAAO4B,EAAAA,SAAAA;AACf,wBAAA,QAAA,gBAAAd,GAACe,CAAAA,IAAAA,EAAAA;AACC,4BAAA,QAAA,gBAAAf,GAACgB,CAAAA,GAAAA,EAAAA;AAAE,gCAAA,QAAA,EAAA,MAAA;;;;kCAGPhB,GAACa,CAAAA,QAAAA,EAAAA;wBAAS3B,KAAM,EAAA,MAAA;AAAO,wBAAA,QAAA,EAAA,MAAA;;kCACvBc,GAACa,CAAAA,QAAAA,EAAAA;wBAAS3B,KAAM,EAAA,OAAA;AAAQ,wBAAA,QAAA,EAAA,OAAA;;;;AAI9B,QAAA;AACE,YAAA,qBACEc,GAAClB,CAAAA,kBAAAA,EAAAA;gBACCI,KAAOA,EAAAA,KAAAA;gBACPD,iBAAmBU,EAAAA,QAAAA;gBACnBQ,KAAOA,EAAAA,KAAAA;gBACPE,EAAI,EAAA;oBAAEC,KAAOzB,EAAAA,WAAAA;oBAAa0B,QAAU,EAAA,MAAA;AAAO,iBAAA;gBAC3CC,UAAY,EAAA;oBAAEC,KAAO,EAAA;wBAAEC,MAAQ,EAAA,MAAA;AAAO,qBAAA;AAAE,iBAAA;;AAGhD,KAAA;AACF,CAAG;;;;"}