@servicetitan/table 43.1.0 → 44.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/demo/column-hiding/product.js.map +1 -1
- package/dist/demo/master-detail/product.js.map +1 -1
- package/dist/demo/overview/product.js.map +1 -1
- package/dist/filters/standard-filter-with-multiselect/filter-cell-ext.js.map +1 -1
- package/dist/filters/standard-filter-with-multiselect/standard-filter-with-multiselect.js.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/demo/column-hiding/product.ts"],"sourcesContent":["export enum UserRole {\n Unspecified,\n Technician,\n GeneralOffice,\n Admin,\n Owner,\n}\n\nexport enum Supplier {\n Dan = 1,\n Adam,\n Charlie,\n Benjamin,\n}\n\nexport interface Product {\n ProductID: number;\n ProductName: string;\n Supplier: Supplier;\n CategoryID: number;\n MadeIn: string;\n QuantityPerUnit: string;\n UnitPrice: number;\n UnitsInStock: number;\n UnitsOnOrder: Date;\n Discontinued: boolean;\n AvailableFor?: UserRole;\n}\n"],"names":["UserRole","Supplier"],"mappings":"AAAA,OAAO,IAAA,AAAKA,kCAAAA;;;;;;WAAAA;MAMX;AAED,OAAO,IAAA,AAAKC,kCAAAA
|
|
1
|
+
{"version":3,"sources":["../../../src/demo/column-hiding/product.ts"],"sourcesContent":["export enum UserRole {\n Unspecified,\n Technician,\n GeneralOffice,\n Admin,\n Owner,\n}\n\nexport enum Supplier {\n Dan = 1,\n Adam,\n Charlie,\n Benjamin,\n}\n\nexport interface Product {\n ProductID: number;\n ProductName: string;\n Supplier: Supplier;\n CategoryID: number;\n MadeIn: string;\n QuantityPerUnit: string;\n UnitPrice: number;\n UnitsInStock: number;\n UnitsOnOrder: Date;\n Discontinued: boolean;\n AvailableFor?: UserRole;\n}\n"],"names":["UserRole","Supplier"],"mappings":"AAAA,OAAO,IAAA,AAAKA,kCAAAA;;;;;;WAAAA;MAMX;AAED,OAAO,IAAA,AAAKC,kCAAAA;+BACF;;;;WADEA;MAKX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/demo/master-detail/product.ts"],"sourcesContent":["export enum UserRole {\n Unspecified,\n Technician,\n GeneralOffice,\n Admin,\n Owner,\n}\n\nexport enum Supplier {\n Dan = 1,\n Adam,\n Charlie,\n Benjamin,\n}\n\nexport interface Product {\n ProductID: number;\n ProductName: string;\n Supplier: Supplier;\n CategoryID: number;\n QuantityPerUnit: string;\n UnitPrice: number;\n UnitsInStock: number;\n UnitsOnOrder: Date;\n Discontinued: boolean;\n AvailableFor?: UserRole;\n}\n"],"names":["UserRole","Supplier"],"mappings":"AAAA,OAAO,IAAA,AAAKA,kCAAAA;;;;;;WAAAA;MAMX;AAED,OAAO,IAAA,AAAKC,kCAAAA
|
|
1
|
+
{"version":3,"sources":["../../../src/demo/master-detail/product.ts"],"sourcesContent":["export enum UserRole {\n Unspecified,\n Technician,\n GeneralOffice,\n Admin,\n Owner,\n}\n\nexport enum Supplier {\n Dan = 1,\n Adam,\n Charlie,\n Benjamin,\n}\n\nexport interface Product {\n ProductID: number;\n ProductName: string;\n Supplier: Supplier;\n CategoryID: number;\n QuantityPerUnit: string;\n UnitPrice: number;\n UnitsInStock: number;\n UnitsOnOrder: Date;\n Discontinued: boolean;\n AvailableFor?: UserRole;\n}\n"],"names":["UserRole","Supplier"],"mappings":"AAAA,OAAO,IAAA,AAAKA,kCAAAA;;;;;;WAAAA;MAMX;AAED,OAAO,IAAA,AAAKC,kCAAAA;+BACF;;;;WADEA;MAKX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/demo/overview/product.ts"],"sourcesContent":["export enum UserRole {\n Unspecified,\n Technician,\n GeneralOffice,\n Admin,\n Owner,\n}\n\nexport enum Supplier {\n Dan = 1,\n Adam,\n Charlie,\n Benjamin,\n}\n\nexport interface ProductPackage {\n PackageId: number;\n PackageName: string;\n}\n\nexport interface Product {\n ProductID: number;\n ProductName: string;\n Supplier: Supplier;\n CategoryID: number;\n MadeIn: string;\n QuantityPerUnit: string;\n UnitPrice: number;\n UnitsInStock: number;\n UnitsOnOrder: Date;\n Discontinued: boolean;\n AvailableFor?: UserRole;\n Package?: ProductPackage;\n}\n"],"names":["UserRole","Supplier"],"mappings":"AAAA,OAAO,IAAA,AAAKA,kCAAAA;;;;;;WAAAA;MAMX;AAED,OAAO,IAAA,AAAKC,kCAAAA
|
|
1
|
+
{"version":3,"sources":["../../../src/demo/overview/product.ts"],"sourcesContent":["export enum UserRole {\n Unspecified,\n Technician,\n GeneralOffice,\n Admin,\n Owner,\n}\n\nexport enum Supplier {\n Dan = 1,\n Adam,\n Charlie,\n Benjamin,\n}\n\nexport interface ProductPackage {\n PackageId: number;\n PackageName: string;\n}\n\nexport interface Product {\n ProductID: number;\n ProductName: string;\n Supplier: Supplier;\n CategoryID: number;\n MadeIn: string;\n QuantityPerUnit: string;\n UnitPrice: number;\n UnitsInStock: number;\n UnitsOnOrder: Date;\n Discontinued: boolean;\n AvailableFor?: UserRole;\n Package?: ProductPackage;\n}\n"],"names":["UserRole","Supplier"],"mappings":"AAAA,OAAO,IAAA,AAAKA,kCAAAA;;;;;;WAAAA;MAMX;AAED,OAAO,IAAA,AAAKC,kCAAAA;+BACF;;;;WADEA;MAKX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/filters/standard-filter-with-multiselect/filter-cell-ext.tsx"],"sourcesContent":["import type { ReactElement, ReactNode, FC, ChangeEvent } from 'react';\nimport { runInAction } from 'mobx';\nimport { observer, useLocalStore } from 'mobx-react';\nimport { multiselectOperators, isMultiselectOperator } from './multiselect-operators';\n\nimport type {\n DropDownListChangeEvent,\n MultiSelectChangeEvent,\n MultiSelectFilterChangeEvent,\n ListItemProps,\n MultiSelectTagData,\n} from '@progress/kendo-react-dropdowns';\nimport { DropDownList, MultiSelect } from '@progress/kendo-react-dropdowns';\n\nimport type { GridColumnMenuFilterCellProps as TableColumnMenuFilterCellProps } from '@progress/kendo-react-grid/dist/npm/columnMenu/GridColumnMenuFilterCell';\nimport {\n IsUnaryFilter,\n cellOperatorChange,\n} from '@progress/kendo-react-grid/dist/npm/filterCommon';\n\nimport { Icon, Tooltip } from '@servicetitan/design-system';\n\nimport * as Styles from './filter-cell-ext.module.css';\nimport classNames from 'classnames';\n//\n\ninterface ValueWithLowerCase {\n value: any;\n text: string;\n textLC: string;\n}\n\nexport interface FilterCellExtProps extends TableColumnMenuFilterCellProps {\n options: ValueWithLowerCase[];\n maxFoundValues?: number;\n allowCustomValues?: boolean;\n onlyMultiselectAndEmptyOperators?: boolean;\n handleCustomValuesAsNumber?: boolean;\n multiselectItemRender?(li: ReactElement<HTMLLIElement>, itemProps: ListItemProps): ReactNode;\n multiselectTagRender?(\n tagData: MultiSelectTagData,\n li: ReactElement<HTMLLIElement>\n ): ReactElement<HTMLLIElement>;\n multiselectListNoDataRender?(element: ReactElement<HTMLDivElement>): ReactNode;\n}\n\n// like standard filter cell (rendered for string type), but with support of multiselect operators\nexport const FilterCellExt: FC<FilterCellExtProps> = observer(props => {\n const store = useLocalStore(\n oprops => ({\n get operators() {\n return multiselectOperators.concat(\n oprops.onlyMultiselectAndEmptyOperators\n ? oprops.operators.filter(\n o => o.operator === 'isempty' || o.operator === 'isnotempty'\n )\n : oprops.operators\n );\n },\n get operatorValue() {\n return this.operators.find(item => item.operator === oprops.operator);\n },\n searchQuery: '',\n filterChange(event: MultiSelectFilterChangeEvent) {\n runInAction(() => (this.searchQuery = event.filter.value));\n },\n get filteredValuesSet() {\n const queryLC = this.searchQuery.toLowerCase();\n return oprops.options.filter(v => v.textLC.includes(queryLC));\n },\n get onlyFirstValues() {\n return oprops.maxFoundValues &&\n oprops.maxFoundValues < this.filteredValuesSet.length\n ? oprops.maxFoundValues\n : false;\n },\n get filteredVisibleValues() {\n return this.onlyFirstValues\n ? this.filteredValuesSet.slice(0, this.onlyFirstValues)\n : this.filteredValuesSet;\n },\n get valueTextMap() {\n return new Map(oprops.options.map(o => [o.value, o.text]));\n },\n get multiselectValue() {\n return Array.isArray(oprops.value)\n ? oprops.value.map(v => ({\n value: v,\n text: this.valueTextMap.get(v) ?? v.toString(),\n }))\n : [];\n },\n }),\n props\n );\n\n const {\n operator = '',\n onChange,\n allowCustomValues,\n multiselectItemRender,\n multiselectTagRender,\n multiselectListNoDataRender,\n } = props;\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) =>\n onChange({\n operator,\n value: e.target.value,\n syntheticEvent: e,\n });\n\n const handleMultiselectChange = (e: MultiSelectChangeEvent) => {\n const newValue = e.value.map(\n (v: any) => v.value ?? (props.handleCustomValuesAsNumber ? +v.text : v.text)\n );\n onChange({\n operator,\n value: newValue.length ? newValue : '', // for Kendo to handle empty array as an empty value TODO: check if there is another way\n syntheticEvent: e.syntheticEvent,\n });\n };\n\n // conversions for better compatibility when switching plain/array operators\n const handleOperatorChange = (event: DropDownListChangeEvent) => {\n const newValue =\n isMultiselectOperator(operator) === isMultiselectOperator(event.target.value.operator)\n ? props.value\n : '';\n cellOperatorChange(event, newValue, onChange);\n };\n\n const allowCustomAdd =\n (allowCustomValues &&\n store.searchQuery &&\n (!props.handleCustomValuesAsNumber || !isNaN(+store.searchQuery))) ||\n false;\n\n return (\n <div>\n <DropDownList\n value={store.operatorValue}\n onChange={handleOperatorChange}\n data={store.operators}\n className=\"m-b-1\"\n textField=\"text\"\n />\n {(typeof operator !== 'string' || !IsUnaryFilter(operator)) &&\n (isMultiselectOperator(operator) ? (\n <MultiSelect\n value={store.multiselectValue}\n onChange={handleMultiselectChange}\n filterable\n onFilterChange={store.filterChange}\n allowCustom={allowCustomAdd}\n data={store.filteredVisibleValues}\n textField=\"text\"\n dataItemKey=\"value\"\n className={classNames('m-b-1', Styles.multiSelect)}\n header={allowCustomAdd && <div className={Styles.customItemAddMarker} />}\n footer={\n allowCustomAdd ? (\n <div className={Styles.returnToUse}>\n <Icon name=\"keyboard_return\" />\n to create filter\n </div>\n ) : (\n store.onlyFirstValues && (\n <div className={Styles.returnToUse}>\n First {store.onlyFirstValues} values are shown. <br />\n Type to search for other values.\n </div>\n )\n )\n }\n itemRender={multiselectItemRender}\n tagRender={multiselectTagRender ?? defaultMultiselectTagRender}\n listNoDataRender={multiselectListNoDataRender}\n />\n ) : (\n <input\n className=\"k-input k-input-md k-rounded-md k-input-solid m-b-1\"\n value={props.value}\n onChange={handleInputChange}\n />\n ))}\n </div>\n );\n});\n\nconst defaultMultiselectTagRender = (\n tagData: MultiSelectTagData,\n li: ReactElement<HTMLLIElement>\n): ReactElement<HTMLLIElement> => {\n return (\n <Tooltip\n portal\n text={tagData.text}\n className={Styles.multiSelectTagTooltipWrapper}\n popperClassName={Styles.multiSelectTagTooltip}\n >\n {li}\n </Tooltip>\n );\n};\n"],"names":["runInAction","observer","useLocalStore","multiselectOperators","isMultiselectOperator","DropDownList","MultiSelect","IsUnaryFilter","cellOperatorChange","Icon","Tooltip","Styles","classNames","FilterCellExt","props","store","oprops","operators","concat","onlyMultiselectAndEmptyOperators","filter","o","operator","operatorValue","find","item","searchQuery","filterChange","event","value","filteredValuesSet","queryLC","toLowerCase","options","v","textLC","includes","onlyFirstValues","maxFoundValues","length","filteredVisibleValues","slice","valueTextMap","Map","map","text","multiselectValue","Array","isArray","get","toString","onChange","allowCustomValues","multiselectItemRender","multiselectTagRender","multiselectListNoDataRender","handleInputChange","e","target","syntheticEvent","handleMultiselectChange","newValue","handleCustomValuesAsNumber","handleOperatorChange","allowCustomAdd","isNaN","div","data","className","textField","filterable","onFilterChange","allowCustom","dataItemKey","multiSelect","header","customItemAddMarker","footer","returnToUse","name","br","itemRender","tagRender","defaultMultiselectTagRender","listNoDataRender","input","tagData","li","portal","multiSelectTagTooltipWrapper","popperClassName","multiSelectTagTooltip"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/filters/standard-filter-with-multiselect/filter-cell-ext.tsx"],"sourcesContent":["import type { ReactElement, ReactNode, FC, ChangeEvent } from 'react';\nimport { runInAction } from 'mobx';\nimport { observer, useLocalStore } from 'mobx-react';\nimport { multiselectOperators, isMultiselectOperator } from './multiselect-operators';\n\nimport type {\n DropDownListChangeEvent,\n MultiSelectChangeEvent,\n MultiSelectFilterChangeEvent,\n ListItemProps,\n MultiSelectTagData,\n} from '@progress/kendo-react-dropdowns';\nimport { DropDownList, MultiSelect } from '@progress/kendo-react-dropdowns';\n\nimport type { GridColumnMenuFilterCellProps as TableColumnMenuFilterCellProps } from '@progress/kendo-react-grid/dist/npm/columnMenu/GridColumnMenuFilterCell';\nimport {\n IsUnaryFilter,\n cellOperatorChange,\n} from '@progress/kendo-react-grid/dist/npm/filterCommon';\n\nimport { Icon, Tooltip } from '@servicetitan/design-system';\n\nimport * as Styles from './filter-cell-ext.module.css';\nimport classNames from 'classnames';\n//\n\ninterface ValueWithLowerCase {\n value: any;\n text: string;\n textLC: string;\n}\n\nexport interface FilterCellExtProps extends TableColumnMenuFilterCellProps {\n options: ValueWithLowerCase[];\n maxFoundValues?: number;\n allowCustomValues?: boolean;\n onlyMultiselectAndEmptyOperators?: boolean;\n handleCustomValuesAsNumber?: boolean;\n multiselectItemRender?(li: ReactElement<HTMLLIElement>, itemProps: ListItemProps): ReactNode;\n multiselectTagRender?(\n tagData: MultiSelectTagData,\n li: ReactElement<HTMLLIElement>\n ): ReactElement<HTMLLIElement>;\n multiselectListNoDataRender?(element: ReactElement<HTMLDivElement>): ReactNode;\n}\n\n// like standard filter cell (rendered for string type), but with support of multiselect operators\nexport const FilterCellExt: FC<FilterCellExtProps> = observer(props => {\n const store = useLocalStore(\n oprops => ({\n get operators() {\n return multiselectOperators.concat(\n oprops.onlyMultiselectAndEmptyOperators\n ? oprops.operators.filter(\n o => o.operator === 'isempty' || o.operator === 'isnotempty'\n )\n : oprops.operators\n );\n },\n get operatorValue() {\n return this.operators.find(item => item.operator === oprops.operator);\n },\n searchQuery: '',\n filterChange(event: MultiSelectFilterChangeEvent) {\n runInAction(() => (this.searchQuery = event.filter.value));\n },\n get filteredValuesSet() {\n const queryLC = this.searchQuery.toLowerCase();\n return oprops.options.filter(v => v.textLC.includes(queryLC));\n },\n get onlyFirstValues() {\n return oprops.maxFoundValues &&\n oprops.maxFoundValues < this.filteredValuesSet.length\n ? oprops.maxFoundValues\n : false;\n },\n get filteredVisibleValues() {\n return this.onlyFirstValues\n ? this.filteredValuesSet.slice(0, this.onlyFirstValues)\n : this.filteredValuesSet;\n },\n get valueTextMap() {\n return new Map(oprops.options.map(o => [o.value, o.text]));\n },\n get multiselectValue() {\n return Array.isArray(oprops.value)\n ? oprops.value.map(v => ({\n value: v,\n text: this.valueTextMap.get(v) ?? v.toString(),\n }))\n : [];\n },\n }),\n props\n );\n\n const {\n operator = '',\n onChange,\n allowCustomValues,\n multiselectItemRender,\n multiselectTagRender,\n multiselectListNoDataRender,\n } = props;\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) =>\n onChange({\n operator,\n value: e.target.value,\n syntheticEvent: e,\n });\n\n const handleMultiselectChange = (e: MultiSelectChangeEvent) => {\n const newValue = e.value.map(\n (v: any) => v.value ?? (props.handleCustomValuesAsNumber ? +v.text : v.text)\n );\n onChange({\n operator,\n value: newValue.length ? newValue : '', // for Kendo to handle empty array as an empty value TODO: check if there is another way\n syntheticEvent: e.syntheticEvent,\n });\n };\n\n // conversions for better compatibility when switching plain/array operators\n const handleOperatorChange = (event: DropDownListChangeEvent) => {\n const newValue =\n isMultiselectOperator(operator) === isMultiselectOperator(event.target.value.operator)\n ? props.value\n : '';\n cellOperatorChange(event, newValue, onChange);\n };\n\n const allowCustomAdd =\n (allowCustomValues &&\n store.searchQuery &&\n (!props.handleCustomValuesAsNumber || !isNaN(+store.searchQuery))) ||\n false;\n\n return (\n <div>\n <DropDownList\n value={store.operatorValue}\n onChange={handleOperatorChange}\n data={store.operators}\n className=\"m-b-1\"\n textField=\"text\"\n />\n {(typeof operator !== 'string' || !IsUnaryFilter(operator)) &&\n (isMultiselectOperator(operator) ? (\n <MultiSelect\n value={store.multiselectValue}\n onChange={handleMultiselectChange}\n filterable\n onFilterChange={store.filterChange}\n allowCustom={allowCustomAdd}\n data={store.filteredVisibleValues}\n textField=\"text\"\n dataItemKey=\"value\"\n className={classNames('m-b-1', Styles.multiSelect)}\n header={allowCustomAdd && <div className={Styles.customItemAddMarker} />}\n footer={\n allowCustomAdd ? (\n <div className={Styles.returnToUse}>\n <Icon name=\"keyboard_return\" />\n to create filter\n </div>\n ) : (\n store.onlyFirstValues && (\n <div className={Styles.returnToUse}>\n First {store.onlyFirstValues} values are shown. <br />\n Type to search for other values.\n </div>\n )\n )\n }\n itemRender={multiselectItemRender}\n tagRender={multiselectTagRender ?? defaultMultiselectTagRender}\n listNoDataRender={multiselectListNoDataRender}\n />\n ) : (\n <input\n className=\"k-input k-input-md k-rounded-md k-input-solid m-b-1\"\n value={props.value}\n onChange={handleInputChange}\n />\n ))}\n </div>\n );\n});\n\nconst defaultMultiselectTagRender = (\n tagData: MultiSelectTagData,\n li: ReactElement<HTMLLIElement>\n): ReactElement<HTMLLIElement> => {\n return (\n <Tooltip\n portal\n text={tagData.text}\n className={Styles.multiSelectTagTooltipWrapper}\n popperClassName={Styles.multiSelectTagTooltip}\n >\n {li}\n </Tooltip>\n );\n};\n"],"names":["runInAction","observer","useLocalStore","multiselectOperators","isMultiselectOperator","DropDownList","MultiSelect","IsUnaryFilter","cellOperatorChange","Icon","Tooltip","Styles","classNames","FilterCellExt","props","store","oprops","operators","concat","onlyMultiselectAndEmptyOperators","filter","o","operator","operatorValue","find","item","searchQuery","filterChange","event","value","filteredValuesSet","queryLC","toLowerCase","options","v","textLC","includes","onlyFirstValues","maxFoundValues","length","filteredVisibleValues","slice","valueTextMap","Map","map","text","multiselectValue","Array","isArray","get","toString","onChange","allowCustomValues","multiselectItemRender","multiselectTagRender","multiselectListNoDataRender","handleInputChange","e","target","syntheticEvent","handleMultiselectChange","newValue","handleCustomValuesAsNumber","handleOperatorChange","allowCustomAdd","isNaN","div","data","className","textField","filterable","onFilterChange","allowCustom","dataItemKey","multiSelect","header","customItemAddMarker","footer","returnToUse","name","br","itemRender","tagRender","defaultMultiselectTagRender","listNoDataRender","input","tagData","li","portal","multiSelectTagTooltipWrapper","popperClassName","multiSelectTagTooltip"],"mappings":"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"}
|
package/dist/filters/standard-filter-with-multiselect/standard-filter-with-multiselect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/filters/standard-filter-with-multiselect/standard-filter-with-multiselect.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { observer, useLocalStore } from 'mobx-react';\nimport { fromPromise } from 'mobx-utils';\n\nimport { DropDownList } from '@progress/kendo-react-dropdowns';\n\nimport type { TableColumnMenuProps } from '@servicetitan/design-system';\nimport type { GridColumnMenuFilterUIProps as TableColumnMenuFilterUIProps } from '@progress/kendo-react-grid/dist/npm/interfaces/GridColumnMenuFilterUIProps';\nimport type { IdType } from '@servicetitan/data-query';\nimport type { TableState } from '../../table-state';\n\nimport { TableColumnMenuFilterExt } from './table-column-menu-filter-ext';\nimport type { FilterCellExtProps } from './filter-cell-ext';\nimport { FilterCellExt } from './filter-cell-ext';\n//\n\ntype AcceptableOption = string | number | { value: any; text: string };\n\ninterface OptionsConfig<T, TId extends IdType = never> {\n /* tableState is used to extract values set for multiselect */\n tableState?: TableState<T, TId>;\n /* values longer than maxExtractedLength wouldn't be extracted from tableState (for sanity). Default is 65 characters */\n maxExtractedLength?: number;\n /* set of values for multiselect */\n options?: AcceptableOption[];\n}\n\ninterface FilterCellConfig {\n /* maximum number of values to show in Multiselect dropdown list at one time */\n maxFoundValues?: number;\n /* allow user to input custom values; default: true */\n allowCustomValues?: boolean;\n /* convert user-added Multiselect options to numbers; default: false */\n handleCustomValuesAsNumber?: boolean;\n /* allow only \"Is [not] one of\" and \"Is [not] empty\" operators; default: false */\n onlyMultiselectAndEmptyOperators?: boolean;\n /* Multiselect itemRender property (for very special cases) */\n multiselectItemRender?: FilterCellExtProps['multiselectItemRender'];\n /* Multiselect tagRender property (for very special cases) */\n multiselectTagRender?: FilterCellExtProps['multiselectTagRender'];\n /* Multiselect listNoDataRender property (for very special cases) */\n multiselectListNoDataRender?: FilterCellExtProps['multiselectListNoDataRender'];\n}\n\n/*\n * StandardFilterWithMultiselect is like standard Kendo filter, but with additional operators 'Is one of' / 'Is not one of'.\n * Intended to be used with string fields (though it's possible to adopt for number fields as well, if someone will have a need).\n */\n\nexport function standardFilterWithMultiselect<T, TId extends IdType = never>(\n optionsConfig: OptionsConfig<T, TId> = {},\n filterCellConfig: FilterCellConfig = {}\n) {\n const optionsConfigFull = {\n maxExtractedLength: 64,\n options: [] as string[],\n ...optionsConfig,\n };\n\n const filterCellConfigFull = {\n allowCustomValues: true,\n maxFoundValues: 1000,\n ...filterCellConfig,\n };\n\n // Filter UI with data fetcher\n const FilterUIWithValues: FC<TableColumnMenuFilterUIProps> = observer(props => {\n const store = useLocalStore(\n oprops => ({\n get field() {\n return oprops.firstFilterProps.field as keyof T;\n },\n get itemsFromDataSource() {\n const dataSource = optionsConfigFull.tableState?.dataSource;\n return dataSource && this.field && fromPromise(dataSource.getData({}));\n },\n get valuesfromTableState(): AcceptableOption[] {\n if (\n !this.itemsFromDataSource ||\n !(this.itemsFromDataSource.state === 'fulfilled')\n ) {\n return [];\n }\n return (this.itemsFromDataSource.value.data as T[])\n .map(i => i[this.field])\n .filter(\n v =>\n typeof v === 'number' ||\n (typeof v === 'string' &&\n v.length > 0 &&\n v.length <= optionsConfigFull.maxExtractedLength)\n ) as any[];\n },\n get options() {\n return Array.from(\n new Set(this.valuesfromTableState.concat(optionsConfigFull.options))\n ).map(v => {\n switch (typeof v) {\n case 'string':\n return {\n value: v,\n text: v,\n textLC: v.toLowerCase(),\n };\n case 'number':\n return {\n value: v,\n text: v.toString(),\n textLC: v.toString().toLowerCase(),\n };\n case 'object':\n return {\n value: v.value,\n text: v.text,\n textLC: v.text.toLowerCase(),\n };\n default:\n throw 'Incompatible option type.';\n }\n });\n },\n }),\n props\n );\n\n const {\n firstFilterProps,\n secondFilterProps,\n hideSecondFilter,\n logicData,\n logicValue,\n onLogicChange,\n } = props;\n\n return (\n <div>\n <FilterCellExt\n {...firstFilterProps}\n options={store.options}\n {...filterCellConfigFull}\n />\n {!hideSecondFilter && (\n <div>\n <DropDownList\n data={logicData}\n value={logicValue}\n onChange={onLogicChange}\n className=\"k-filter-and m-b-1-i\"\n textField=\"text\"\n />\n <FilterCellExt\n {...secondFilterProps}\n options={store.options}\n {...filterCellConfigFull}\n />\n </div>\n )}\n </div>\n );\n });\n\n return (props: TableColumnMenuProps) => (\n <TableColumnMenuFilterExt {...props} filterUI={FilterUIWithValues} expanded />\n );\n}\n"],"names":["observer","useLocalStore","fromPromise","DropDownList","TableColumnMenuFilterExt","FilterCellExt","standardFilterWithMultiselect","optionsConfig","filterCellConfig","optionsConfigFull","maxExtractedLength","options","filterCellConfigFull","allowCustomValues","maxFoundValues","FilterUIWithValues","props","store","oprops","field","firstFilterProps","itemsFromDataSource","dataSource","tableState","getData","valuesfromTableState","state","value","data","map","i","filter","v","length","Array","from","Set","concat","text","textLC","toLowerCase","toString","secondFilterProps","hideSecondFilter","logicData","logicValue","onLogicChange","div","onChange","className","textField","filterUI","expanded"],"mappings":";AACA,SAASA,QAAQ,EAAEC,aAAa,QAAQ,aAAa;AACrD,SAASC,WAAW,QAAQ,aAAa;AAEzC,SAASC,YAAY,QAAQ,kCAAkC;AAO/D,SAASC,wBAAwB,QAAQ,iCAAiC;AAE1E,SAASC,aAAa,QAAQ,oBAAoB;AA+BlD;;;CAGC,GAED,OAAO,SAASC,8BACZC,gBAAuC,CAAC,CAAC,EACzCC,mBAAqC,CAAC,CAAC;IAEvC,MAAMC,oBAAoB;QACtBC,oBAAoB;QACpBC,SAAS,EAAE;QACX,GAAGJ,aAAa;IACpB;IAEA,MAAMK,uBAAuB;QACzBC,mBAAmB;QACnBC,gBAAgB;QAChB,GAAGN,gBAAgB;IACvB;IAEA,8BAA8B;IAC9B,MAAMO,qBAAuDf,SAASgB,CAAAA;QAClE,MAAMC,QAAQhB,cACViB,CAAAA,SAAW,CAAA;gBACP,IAAIC
|
|
1
|
+
{"version":3,"sources":["../../../src/filters/standard-filter-with-multiselect/standard-filter-with-multiselect.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { observer, useLocalStore } from 'mobx-react';\nimport { fromPromise } from 'mobx-utils';\n\nimport { DropDownList } from '@progress/kendo-react-dropdowns';\n\nimport type { TableColumnMenuProps } from '@servicetitan/design-system';\nimport type { GridColumnMenuFilterUIProps as TableColumnMenuFilterUIProps } from '@progress/kendo-react-grid/dist/npm/interfaces/GridColumnMenuFilterUIProps';\nimport type { IdType } from '@servicetitan/data-query';\nimport type { TableState } from '../../table-state';\n\nimport { TableColumnMenuFilterExt } from './table-column-menu-filter-ext';\nimport type { FilterCellExtProps } from './filter-cell-ext';\nimport { FilterCellExt } from './filter-cell-ext';\n//\n\ntype AcceptableOption = string | number | { value: any; text: string };\n\ninterface OptionsConfig<T, TId extends IdType = never> {\n /* tableState is used to extract values set for multiselect */\n tableState?: TableState<T, TId>;\n /* values longer than maxExtractedLength wouldn't be extracted from tableState (for sanity). Default is 65 characters */\n maxExtractedLength?: number;\n /* set of values for multiselect */\n options?: AcceptableOption[];\n}\n\ninterface FilterCellConfig {\n /* maximum number of values to show in Multiselect dropdown list at one time */\n maxFoundValues?: number;\n /* allow user to input custom values; default: true */\n allowCustomValues?: boolean;\n /* convert user-added Multiselect options to numbers; default: false */\n handleCustomValuesAsNumber?: boolean;\n /* allow only \"Is [not] one of\" and \"Is [not] empty\" operators; default: false */\n onlyMultiselectAndEmptyOperators?: boolean;\n /* Multiselect itemRender property (for very special cases) */\n multiselectItemRender?: FilterCellExtProps['multiselectItemRender'];\n /* Multiselect tagRender property (for very special cases) */\n multiselectTagRender?: FilterCellExtProps['multiselectTagRender'];\n /* Multiselect listNoDataRender property (for very special cases) */\n multiselectListNoDataRender?: FilterCellExtProps['multiselectListNoDataRender'];\n}\n\n/*\n * StandardFilterWithMultiselect is like standard Kendo filter, but with additional operators 'Is one of' / 'Is not one of'.\n * Intended to be used with string fields (though it's possible to adopt for number fields as well, if someone will have a need).\n */\n\nexport function standardFilterWithMultiselect<T, TId extends IdType = never>(\n optionsConfig: OptionsConfig<T, TId> = {},\n filterCellConfig: FilterCellConfig = {}\n) {\n const optionsConfigFull = {\n maxExtractedLength: 64,\n options: [] as string[],\n ...optionsConfig,\n };\n\n const filterCellConfigFull = {\n allowCustomValues: true,\n maxFoundValues: 1000,\n ...filterCellConfig,\n };\n\n // Filter UI with data fetcher\n const FilterUIWithValues: FC<TableColumnMenuFilterUIProps> = observer(props => {\n const store = useLocalStore(\n oprops => ({\n get field() {\n return oprops.firstFilterProps.field as keyof T;\n },\n get itemsFromDataSource() {\n const dataSource = optionsConfigFull.tableState?.dataSource;\n return dataSource && this.field && fromPromise(dataSource.getData({}));\n },\n get valuesfromTableState(): AcceptableOption[] {\n if (\n !this.itemsFromDataSource ||\n !(this.itemsFromDataSource.state === 'fulfilled')\n ) {\n return [];\n }\n return (this.itemsFromDataSource.value.data as T[])\n .map(i => i[this.field])\n .filter(\n v =>\n typeof v === 'number' ||\n (typeof v === 'string' &&\n v.length > 0 &&\n v.length <= optionsConfigFull.maxExtractedLength)\n ) as any[];\n },\n get options() {\n return Array.from(\n new Set(this.valuesfromTableState.concat(optionsConfigFull.options))\n ).map(v => {\n switch (typeof v) {\n case 'string':\n return {\n value: v,\n text: v,\n textLC: v.toLowerCase(),\n };\n case 'number':\n return {\n value: v,\n text: v.toString(),\n textLC: v.toString().toLowerCase(),\n };\n case 'object':\n return {\n value: v.value,\n text: v.text,\n textLC: v.text.toLowerCase(),\n };\n default:\n throw 'Incompatible option type.';\n }\n });\n },\n }),\n props\n );\n\n const {\n firstFilterProps,\n secondFilterProps,\n hideSecondFilter,\n logicData,\n logicValue,\n onLogicChange,\n } = props;\n\n return (\n <div>\n <FilterCellExt\n {...firstFilterProps}\n options={store.options}\n {...filterCellConfigFull}\n />\n {!hideSecondFilter && (\n <div>\n <DropDownList\n data={logicData}\n value={logicValue}\n onChange={onLogicChange}\n className=\"k-filter-and m-b-1-i\"\n textField=\"text\"\n />\n <FilterCellExt\n {...secondFilterProps}\n options={store.options}\n {...filterCellConfigFull}\n />\n </div>\n )}\n </div>\n );\n });\n\n return (props: TableColumnMenuProps) => (\n <TableColumnMenuFilterExt {...props} filterUI={FilterUIWithValues} expanded />\n );\n}\n"],"names":["observer","useLocalStore","fromPromise","DropDownList","TableColumnMenuFilterExt","FilterCellExt","standardFilterWithMultiselect","optionsConfig","filterCellConfig","optionsConfigFull","maxExtractedLength","options","filterCellConfigFull","allowCustomValues","maxFoundValues","FilterUIWithValues","props","store","oprops","field","firstFilterProps","itemsFromDataSource","dataSource","tableState","getData","valuesfromTableState","state","value","data","map","i","filter","v","length","Array","from","Set","concat","text","textLC","toLowerCase","toString","secondFilterProps","hideSecondFilter","logicData","logicValue","onLogicChange","div","onChange","className","textField","filterUI","expanded"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@servicetitan/table",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "44.0.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"homepage": "https://docs.st.dev/docs/frontend/table",
|
|
6
6
|
"repository": {
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@progress/kendo-ooxml": "~1.6.2",
|
|
20
20
|
"@progress/kendo-react-excel-export": "~5.5.0",
|
|
21
|
-
"@servicetitan/react-hooks": "^
|
|
21
|
+
"@servicetitan/react-hooks": "^9.0.0",
|
|
22
22
|
"classnames": "^2.3.1",
|
|
23
23
|
"memoize-one": "~6.0.0"
|
|
24
24
|
},
|
|
@@ -29,10 +29,10 @@
|
|
|
29
29
|
"@progress/kendo-react-grid": "~5.5.0",
|
|
30
30
|
"@progress/kendo-react-inputs": "~5.5.0",
|
|
31
31
|
"@progress/kendo-react-pdf": "~5.5.0",
|
|
32
|
-
"@servicetitan/data-query": "^
|
|
32
|
+
"@servicetitan/data-query": "^44.0.0",
|
|
33
33
|
"@servicetitan/design-system": "~14.5.3",
|
|
34
|
-
"@servicetitan/form": "^
|
|
35
|
-
"@servicetitan/react-ioc": "^
|
|
34
|
+
"@servicetitan/form": "^44.0.0",
|
|
35
|
+
"@servicetitan/react-ioc": "^39.3.0",
|
|
36
36
|
"@types/accounting": "~0.4.2",
|
|
37
37
|
"@types/react": "~18.2.55",
|
|
38
38
|
"accounting": "~0.4.1",
|
|
@@ -50,9 +50,9 @@
|
|
|
50
50
|
"@progress/kendo-react-grid": "~5.5.0",
|
|
51
51
|
"@progress/kendo-react-inputs": "~5.5.0",
|
|
52
52
|
"@progress/kendo-react-pdf": "~5.5.0",
|
|
53
|
-
"@servicetitan/data-query": "^
|
|
53
|
+
"@servicetitan/data-query": "^44.0.0",
|
|
54
54
|
"@servicetitan/design-system": ">=13.2.1",
|
|
55
|
-
"@servicetitan/form": "^
|
|
55
|
+
"@servicetitan/form": "^44.0.0",
|
|
56
56
|
"@servicetitan/react-ioc": ">21.0.0",
|
|
57
57
|
"accounting": "~0.4.1",
|
|
58
58
|
"formstate": "~2.1.0",
|
|
@@ -68,5 +68,5 @@
|
|
|
68
68
|
"cli": {
|
|
69
69
|
"webpack": false
|
|
70
70
|
},
|
|
71
|
-
"gitHead": "
|
|
71
|
+
"gitHead": "cd7d26dcbb74336efe088749dd930cf31715beed"
|
|
72
72
|
}
|