@servicetitan/table 41.1.0 → 41.3.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.
Files changed (221) hide show
  1. package/dist/demo/column-hiding/products.d.ts +1 -1
  2. package/dist/demo/column-hiding/products.d.ts.map +1 -1
  3. package/dist/demo/column-hiding/products.js.map +1 -1
  4. package/dist/demo/column-hiding/table.d.ts +1 -1
  5. package/dist/demo/column-hiding/table.d.ts.map +1 -1
  6. package/dist/demo/column-hiding/table.js.map +1 -1
  7. package/dist/demo/column-hiding/table.store.d.ts +3 -2
  8. package/dist/demo/column-hiding/table.store.d.ts.map +1 -1
  9. package/dist/demo/column-hiding/table.store.js.map +1 -1
  10. package/dist/demo/filters/async-select-filter.d.ts +1 -1
  11. package/dist/demo/filters/async-select-filter.d.ts.map +1 -1
  12. package/dist/demo/filters/async-select-filter.js.map +1 -1
  13. package/dist/demo/filters/categories.d.ts +2 -2
  14. package/dist/demo/filters/categories.d.ts.map +1 -1
  15. package/dist/demo/filters/categories.js.map +1 -1
  16. package/dist/demo/filters/multiselect-filter.d.ts +1 -1
  17. package/dist/demo/filters/multiselect-filter.d.ts.map +1 -1
  18. package/dist/demo/filters/multiselect-filter.js.map +1 -1
  19. package/dist/demo/filters/range-filter.d.ts +1 -1
  20. package/dist/demo/filters/range-filter.d.ts.map +1 -1
  21. package/dist/demo/filters/range-filter.js.map +1 -1
  22. package/dist/demo/filters/select-filter.d.ts +2 -2
  23. package/dist/demo/filters/select-filter.d.ts.map +1 -1
  24. package/dist/demo/filters/select-filter.js.map +1 -1
  25. package/dist/demo/filters/single-select-filter.d.ts +1 -1
  26. package/dist/demo/filters/single-select-filter.d.ts.map +1 -1
  27. package/dist/demo/filters/single-select-filter.js.map +1 -1
  28. package/dist/demo/filters/table.store.d.ts +3 -2
  29. package/dist/demo/filters/table.store.d.ts.map +1 -1
  30. package/dist/demo/filters/table.store.js.map +1 -1
  31. package/dist/demo/footer-page-size/table.d.ts +1 -1
  32. package/dist/demo/footer-page-size/table.d.ts.map +1 -1
  33. package/dist/demo/footer-page-size/table.js.map +1 -1
  34. package/dist/demo/master-detail/detail-table.d.ts +2 -2
  35. package/dist/demo/master-detail/detail-table.d.ts.map +1 -1
  36. package/dist/demo/master-detail/detail-table.js.map +1 -1
  37. package/dist/demo/master-detail/detail-table.store.d.ts.map +1 -1
  38. package/dist/demo/master-detail/detail-table.store.js.map +1 -1
  39. package/dist/demo/master-detail/master-table.store.d.ts +2 -2
  40. package/dist/demo/master-detail/master-table.store.d.ts.map +1 -1
  41. package/dist/demo/master-detail/master-table.store.js.map +1 -1
  42. package/dist/demo/master-detail/product-details.d.ts +1 -1
  43. package/dist/demo/master-detail/product-details.d.ts.map +1 -1
  44. package/dist/demo/master-detail/product-details.js.map +1 -1
  45. package/dist/demo/master-detail/products.d.ts +1 -1
  46. package/dist/demo/master-detail/products.d.ts.map +1 -1
  47. package/dist/demo/master-detail/products.js.map +1 -1
  48. package/dist/demo/master-detail/table-master-detail.d.ts +1 -1
  49. package/dist/demo/master-detail/table-master-detail.d.ts.map +1 -1
  50. package/dist/demo/master-detail/table-master-detail.js.map +1 -1
  51. package/dist/demo/overview/actions-cell.d.ts +2 -2
  52. package/dist/demo/overview/actions-cell.d.ts.map +1 -1
  53. package/dist/demo/overview/actions-cell.js.map +1 -1
  54. package/dist/demo/overview/products.d.ts +1 -1
  55. package/dist/demo/overview/products.d.ts.map +1 -1
  56. package/dist/demo/overview/products.js.map +1 -1
  57. package/dist/demo/overview/table.d.ts +2 -2
  58. package/dist/demo/overview/table.d.ts.map +1 -1
  59. package/dist/demo/overview/table.js.map +1 -1
  60. package/dist/demo/overview/table.store.d.ts +1 -1
  61. package/dist/demo/overview/table.store.d.ts.map +1 -1
  62. package/dist/demo/overview/table.store.js.map +1 -1
  63. package/dist/demo/row-details/row-details-table.d.ts +1 -1
  64. package/dist/demo/row-details/row-details-table.d.ts.map +1 -1
  65. package/dist/demo/row-details/row-details-table.js.map +1 -1
  66. package/dist/demo/row-details/row-details-table.store.d.ts +1 -1
  67. package/dist/demo/row-details/row-details-table.store.d.ts.map +1 -1
  68. package/dist/demo/row-details/row-details-table.store.js.map +1 -1
  69. package/dist/demo/state-caching/beverages.d.ts +1 -1
  70. package/dist/demo/state-caching/beverages.d.ts.map +1 -1
  71. package/dist/demo/state-caching/beverages.js.map +1 -1
  72. package/dist/demo/state-caching/products.d.ts +1 -1
  73. package/dist/demo/state-caching/products.d.ts.map +1 -1
  74. package/dist/demo/state-caching/products.js.map +1 -1
  75. package/dist/demo/state-caching/state-caching-table.d.ts +1 -1
  76. package/dist/demo/state-caching/state-caching-table.d.ts.map +1 -1
  77. package/dist/demo/state-caching/state-caching-table.js.map +1 -1
  78. package/dist/demo/state-caching/state-caching-table.store.d.ts +2 -2
  79. package/dist/demo/state-caching/state-caching-table.store.d.ts.map +1 -1
  80. package/dist/demo/state-caching/state-caching-table.store.js.map +1 -1
  81. package/dist/details/expand-column.d.ts +2 -2
  82. package/dist/details/expand-column.d.ts.map +1 -1
  83. package/dist/details/expand-column.js.map +1 -1
  84. package/dist/editable-cell/boolean-editable-cell.d.ts.map +1 -1
  85. package/dist/editable-cell/boolean-editable-cell.js.map +1 -1
  86. package/dist/editable-cell/get-action-cell.d.ts +3 -3
  87. package/dist/editable-cell/get-action-cell.d.ts.map +1 -1
  88. package/dist/editable-cell/get-action-cell.js.map +1 -1
  89. package/dist/editable-cell/get-editable-cell.d.ts +4 -4
  90. package/dist/editable-cell/get-editable-cell.d.ts.map +1 -1
  91. package/dist/editable-cell/get-editable-cell.js.map +1 -1
  92. package/dist/editable-cell/get-select-editable-cell.d.ts +3 -3
  93. package/dist/editable-cell/get-select-editable-cell.d.ts.map +1 -1
  94. package/dist/editable-cell/get-select-editable-cell.js.map +1 -1
  95. package/dist/editable-cell/text-editable-cell.d.ts.map +1 -1
  96. package/dist/editable-cell/text-editable-cell.js.map +1 -1
  97. package/dist/export/export.d.ts +1 -1
  98. package/dist/export/export.d.ts.map +1 -1
  99. package/dist/export/export.js.map +1 -1
  100. package/dist/filters/async-select/async-select-filter.d.ts +3 -3
  101. package/dist/filters/async-select/async-select-filter.d.ts.map +1 -1
  102. package/dist/filters/async-select/async-select-filter.js.map +1 -1
  103. package/dist/filters/column-menu-filters.d.ts +2 -2
  104. package/dist/filters/column-menu-filters.d.ts.map +1 -1
  105. package/dist/filters/column-menu-filters.js.map +1 -1
  106. package/dist/filters/datetime-filter/datetime-filter.js.map +1 -1
  107. package/dist/filters/field-values-filter.d.ts +1 -1
  108. package/dist/filters/field-values-filter.d.ts.map +1 -1
  109. package/dist/filters/field-values-filter.js.map +1 -1
  110. package/dist/filters/multiselect-filter/multiselect-filter.d.ts +2 -2
  111. package/dist/filters/multiselect-filter/multiselect-filter.d.ts.map +1 -1
  112. package/dist/filters/multiselect-filter/multiselect-filter.js.map +1 -1
  113. package/dist/filters/numeric-filter-extended/numeric-filter-extended.d.ts.map +1 -1
  114. package/dist/filters/numeric-filter-extended/numeric-filter-extended.js.map +1 -1
  115. package/dist/filters/range-filter/range-filter.d.ts.map +1 -1
  116. package/dist/filters/range-filter/range-filter.js.map +1 -1
  117. package/dist/filters/select-filter/operators.d.ts +1 -1
  118. package/dist/filters/select-filter/operators.d.ts.map +1 -1
  119. package/dist/filters/select-filter/operators.js.map +1 -1
  120. package/dist/filters/select-filter/select-filter.d.ts +3 -3
  121. package/dist/filters/select-filter/select-filter.d.ts.map +1 -1
  122. package/dist/filters/select-filter/select-filter.js.map +1 -1
  123. package/dist/filters/select-filter/value-getter.d.ts +1 -1
  124. package/dist/filters/select-filter/value-getter.d.ts.map +1 -1
  125. package/dist/filters/select-filter/value-getter.js.map +1 -1
  126. package/dist/filters/single-select/single-select-filter.d.ts +3 -3
  127. package/dist/filters/single-select/single-select-filter.d.ts.map +1 -1
  128. package/dist/filters/single-select/single-select-filter.js.map +1 -1
  129. package/dist/filters/standard-filter-with-multiselect/filter-cell-ext.d.ts +3 -3
  130. package/dist/filters/standard-filter-with-multiselect/filter-cell-ext.d.ts.map +1 -1
  131. package/dist/filters/standard-filter-with-multiselect/filter-cell-ext.js.map +1 -1
  132. package/dist/filters/standard-filter-with-multiselect/standard-filter-with-multiselect.d.ts +4 -4
  133. package/dist/filters/standard-filter-with-multiselect/standard-filter-with-multiselect.d.ts.map +1 -1
  134. package/dist/filters/standard-filter-with-multiselect/standard-filter-with-multiselect.js.map +1 -1
  135. package/dist/filters/standard-filter-with-multiselect/table-column-menu-filter-ext.d.ts +1 -1
  136. package/dist/filters/standard-filter-with-multiselect/table-column-menu-filter-ext.d.ts.map +1 -1
  137. package/dist/filters/standard-filter-with-multiselect/table-column-menu-filter-ext.js.map +1 -1
  138. package/dist/filters/time-filter/time-filter.d.ts.map +1 -1
  139. package/dist/filters/time-filter/time-filter.js.map +1 -1
  140. package/dist/select-cell/select-cell.d.ts +2 -2
  141. package/dist/select-cell/select-cell.d.ts.map +1 -1
  142. package/dist/select-cell/select-cell.js.map +1 -1
  143. package/dist/table-state.d.ts +6 -5
  144. package/dist/table-state.d.ts.map +1 -1
  145. package/dist/table-state.js.map +1 -1
  146. package/dist/table.d.ts +5 -4
  147. package/dist/table.d.ts.map +1 -1
  148. package/dist/table.js.map +1 -1
  149. package/dist/use-observing-table-state/demo/components/use-observing-table-state-demo.d.ts +2 -2
  150. package/dist/use-observing-table-state/demo/components/use-observing-table-state-demo.d.ts.map +1 -1
  151. package/dist/use-observing-table-state/demo/components/use-observing-table-state-demo.js.map +1 -1
  152. package/dist/use-observing-table-state/use-observing-table-state.d.ts +3 -2
  153. package/dist/use-observing-table-state/use-observing-table-state.d.ts.map +1 -1
  154. package/dist/use-observing-table-state/use-observing-table-state.js.map +1 -1
  155. package/dist/use-observing-table-state/use-observing-table-state.stories.d.ts +1 -1
  156. package/dist/use-observing-table-state/use-observing-table-state.stories.d.ts.map +1 -1
  157. package/dist/utils/filters.d.ts +1 -1
  158. package/dist/utils/filters.d.ts.map +1 -1
  159. package/dist/utils/filters.js.map +1 -1
  160. package/dist/utils/use-td-props.d.ts +2 -2
  161. package/dist/utils/use-td-props.d.ts.map +1 -1
  162. package/dist/utils/use-td-props.js.map +1 -1
  163. package/package.json +8 -8
  164. package/src/demo/column-hiding/products.ts +2 -1
  165. package/src/demo/column-hiding/table.store.ts +4 -2
  166. package/src/demo/column-hiding/table.tsx +4 -2
  167. package/src/demo/filters/async-select-filter.tsx +2 -1
  168. package/src/demo/filters/categories.tsx +2 -2
  169. package/src/demo/filters/multiselect-filter.tsx +2 -1
  170. package/src/demo/filters/range-filter.tsx +2 -1
  171. package/src/demo/filters/select-filter.tsx +5 -3
  172. package/src/demo/filters/single-select-filter.tsx +2 -1
  173. package/src/demo/filters/table.store.ts +4 -7
  174. package/src/demo/footer-page-size/table.tsx +2 -1
  175. package/src/demo/master-detail/detail-table.store.ts +2 -1
  176. package/src/demo/master-detail/detail-table.tsx +6 -3
  177. package/src/demo/master-detail/master-table.store.ts +4 -3
  178. package/src/demo/master-detail/product-details.ts +1 -1
  179. package/src/demo/master-detail/products.ts +2 -1
  180. package/src/demo/master-detail/table-master-detail.tsx +4 -2
  181. package/src/demo/overview/actions-cell.tsx +4 -3
  182. package/src/demo/overview/products.ts +2 -1
  183. package/src/demo/overview/table.store.ts +2 -1
  184. package/src/demo/overview/table.tsx +5 -4
  185. package/src/demo/row-details/row-details-table.store.ts +1 -1
  186. package/src/demo/row-details/row-details-table.tsx +4 -3
  187. package/src/demo/state-caching/beverages.ts +1 -1
  188. package/src/demo/state-caching/products.ts +1 -1
  189. package/src/demo/state-caching/state-caching-table.store.ts +2 -2
  190. package/src/demo/state-caching/state-caching-table.tsx +2 -1
  191. package/src/details/expand-column.tsx +4 -2
  192. package/src/editable-cell/boolean-editable-cell.tsx +3 -2
  193. package/src/editable-cell/get-action-cell.tsx +3 -3
  194. package/src/editable-cell/get-editable-cell.tsx +4 -4
  195. package/src/editable-cell/get-select-editable-cell.tsx +7 -5
  196. package/src/editable-cell/text-editable-cell.tsx +5 -3
  197. package/src/export/export.tsx +1 -1
  198. package/src/filters/async-select/async-select-filter.tsx +7 -14
  199. package/src/filters/column-menu-filters.tsx +4 -7
  200. package/src/filters/datetime-filter/datetime-filter.tsx +4 -4
  201. package/src/filters/field-values-filter.tsx +5 -3
  202. package/src/filters/multiselect-filter/multiselect-filter.tsx +6 -6
  203. package/src/filters/numeric-filter-extended/numeric-filter-extended.tsx +6 -4
  204. package/src/filters/range-filter/range-filter.tsx +5 -3
  205. package/src/filters/select-filter/operators.ts +1 -1
  206. package/src/filters/select-filter/select-filter.tsx +9 -16
  207. package/src/filters/select-filter/value-getter.ts +1 -1
  208. package/src/filters/single-select/single-select-filter.tsx +7 -7
  209. package/src/filters/standard-filter-with-multiselect/filter-cell-ext.tsx +4 -5
  210. package/src/filters/standard-filter-with-multiselect/standard-filter-with-multiselect.tsx +7 -6
  211. package/src/filters/standard-filter-with-multiselect/table-column-menu-filter-ext.tsx +1 -1
  212. package/src/filters/time-filter/time-filter.tsx +4 -2
  213. package/src/select-cell/select-cell.tsx +3 -3
  214. package/src/table-state.ts +6 -9
  215. package/src/table.tsx +10 -24
  216. package/src/use-observing-table-state/demo/components/use-observing-table-state-demo.tsx +4 -2
  217. package/src/use-observing-table-state/use-observing-table-state.stories.tsx +1 -1
  218. package/src/use-observing-table-state/use-observing-table-state.ts +4 -2
  219. package/src/utils/__tests__/filters.test.ts +1 -1
  220. package/src/utils/filters.ts +2 -6
  221. package/src/utils/use-td-props.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/filters/select-filter/select-filter.tsx"],"sourcesContent":["import { Component, SyntheticEvent, ReactNode, Fragment, KeyboardEvent, FC } from 'react';\n\nimport {\n Checkbox,\n TableFilterCellProps,\n Radio,\n Input,\n Spinner,\n BodyText,\n} from '@servicetitan/design-system';\nimport { IdType } from '@servicetitan/data-query';\n\nimport {\n CustomColumnMenuFilterSingleOpts,\n renderCustomColumnMenuFilter,\n} from '../column-menu-filters';\nimport { makeObservable, observable, runInAction, toJS } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { getSimpleValue } from './value-getter';\nimport { objectSearch } from './object-search';\nimport { selectColumnMenuFilterOperators } from './operators';\n\nexport type SelectFilterDataFetcher<TO> = (opts: { search?: string }) => Promise<{ data: TO[] }>;\n\nexport interface SelectFilterSearchOptions<TO = any> {\n placeholder?: string;\n filter(search: string): (item: TO) => boolean | undefined;\n}\n\ninterface SelectorProps<TO> {\n search?: SelectFilterSearchOptions<TO>;\n selected: TO[];\n data?: TO[];\n dataFetcher?: SelectFilterDataFetcher<TO>;\n itemComponent: FC<SelectorItemProps<TO>>;\n onChange(option: TO, checked: boolean, event: SyntheticEvent<HTMLInputElement>): void;\n valueSelector(item: TO): IdType;\n renderItem(item: TO): ReactNode;\n}\n\ninterface SelectorItemProps<TO> {\n option: TO;\n checked: boolean;\n onChange(option: TO, checked: boolean, event: SyntheticEvent<HTMLInputElement>): void;\n renderer?(item: TO): ReactNode;\n}\n\n@observer\nclass SelectorAsync<TO> extends Component<SelectorProps<TO>> {\n @observable shownOptions: TO[] = [];\n @observable search = '';\n @observable error = false;\n @observable loading = false;\n\n constructor(props: SelectorProps<TO>) {\n super(props);\n makeObservable(this);\n }\n\n componentDidMount() {\n this.searchOptions().catch();\n }\n\n handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.stopPropagation();\n }\n };\n\n handleSearch = (_0: SyntheticEvent<HTMLInputElement>, data: { value: string }) => {\n runInAction(() => (this.search = data.value));\n this.searchOptions().catch();\n };\n\n searchOptions = async () => {\n if (this.props.dataFetcher) {\n runInAction(() => {\n this.loading = true;\n });\n }\n\n try {\n const data = await this.getData();\n\n runInAction(() => {\n this.shownOptions = data;\n this.error = false;\n this.loading = false;\n });\n } catch {\n runInAction(() => {\n this.error = true;\n this.loading = false;\n });\n }\n };\n\n render() {\n const selectedOptions = this.props.selected;\n const selected = new Set(selectedOptions.map(opt => this.props.valueSelector(opt)));\n const ItemComponent = this.props.itemComponent;\n\n return (\n <Fragment>\n {!!this.props.search && (\n <Input\n className=\"m-x-half m-t-half m-b-2\"\n placeholder={this.props.search?.placeholder}\n onChange={this.handleSearch}\n onKeyDown={this.handleKeyDown}\n size=\"xsmall\"\n value={this.search}\n />\n )}\n <div className=\"p-x-half position-relative\" onKeyDown={this.handleKeyDown}>\n {!!selectedOptions.length && (\n <div className=\"border-bottom m-y-half\">\n {selectedOptions.map((option, index) => (\n <ItemComponent\n key={this.getItemKey(option, index)}\n option={option}\n checked\n renderer={this.props.renderItem}\n onChange={this.props.onChange}\n />\n ))}\n </div>\n )}\n {this.error ? (\n <BodyText className=\"c-red-500\">Unable to load options</BodyText>\n ) : this.shownOptions.length ? (\n this.shownOptions\n .filter(opt => !selected.has(this.props.valueSelector(opt)))\n .map((option, index) => (\n <ItemComponent\n key={this.getItemKey(option, index)}\n option={option}\n checked={false}\n renderer={this.props.renderItem}\n onChange={this.props.onChange}\n />\n ))\n ) : this.loading ? (\n <BodyText>&nbsp;</BodyText>\n ) : (\n <BodyText subdued>No options match search criteria</BodyText>\n )}\n\n {this.loading && (\n <div className=\"position-absolute top-0 bottom-0 left-0 right-0 opacity-disabled bg-white d-f justify-content-center\">\n <Spinner size=\"tiny\" />\n </div>\n )}\n </div>\n </Fragment>\n );\n }\n\n private async getData(): Promise<TO[]> {\n if (this.props.dataFetcher) {\n const { data } = await this.props.dataFetcher({\n search: this.search,\n });\n\n return data;\n }\n\n let data = this.props.data ?? [];\n\n if (this.props.search?.filter) {\n data = data.filter(this.props.search.filter(this.search));\n }\n return data;\n }\n\n private getItemKey = (item: TO, index: number) => {\n return `${index}__${this.props.valueSelector(item)}`;\n };\n}\n\nconst SelectorItemSingle: FC<SelectorItemProps<any>> = ({\n option,\n renderer,\n checked,\n onChange,\n}) => (\n <Radio\n label={renderer?.(option) ?? `${option}`}\n checked={checked}\n onChange={(_, event) => onChange(option, true, event)}\n className=\"m-b-1\"\n />\n);\n\nconst SelectorItemMultiple: FC<SelectorItemProps<any>> = ({\n option,\n renderer,\n checked,\n onChange,\n}) => (\n <Checkbox\n label={renderer?.(option) ?? `${option}`}\n checked={checked}\n onChange={(_, checked, event) => onChange(option, checked, event)}\n className=\"m-b-1\"\n />\n);\n\nexport interface SelectFilterOptions<TO> extends CustomColumnMenuFilterSingleOpts {\n /** Can select multiple options in filter */\n multiple?: boolean;\n /** Ability to search options in filter */\n search?: boolean | Partial<SelectFilterSearchOptions>;\n /** Static options to show in filter */\n data?: TO[];\n /** Method to fetch filter options asynchronously */\n dataFetcher?: SelectFilterDataFetcher<TO>;\n /** Search operator passed to table state */\n operator?: ((value: any, options?: TO[]) => boolean) | ((value: any, options?: TO) => boolean);\n /** Select item value (ex id) for complex items */\n valueSelector?(item: TO): IdType;\n /** Select row item value (from table source row field) for complex items */\n rowValueSelector?(item: any): IdType | undefined;\n /** Render option label */\n renderItem?(item: TO): ReactNode;\n}\n\ninterface TableFilterCellPropsTyped<T = any> extends Omit<TableFilterCellProps, 'value'> {\n value?: T;\n}\n\nexport function selectColumnMenuFilter<TO>({\n dataFetcher,\n data,\n search,\n multiple,\n valueSelector = getSimpleValue,\n rowValueSelector = getSimpleValue,\n renderItem,\n operator,\n ...opts\n}: SelectFilterOptions<TO>) {\n const renderer = renderItem ?? (item => valueSelector(item));\n\n const searchOptions = search\n ? {\n filter: objectSearch,\n ...(typeof search === 'boolean' ? {} : search),\n }\n : undefined;\n\n if (multiple) {\n const FilterCell = ({ value, onChange }: TableFilterCellPropsTyped<TO[]>) => {\n const handleChange = (\n option: TO,\n checked: boolean,\n event: SyntheticEvent<HTMLInputElement>\n ) => {\n const val = checked\n ? (value ?? []).concat(option)\n : (value ?? []).filter(opt =>\n valueSelector\n ? valueSelector(opt) !== valueSelector(option)\n : option !== opt\n );\n\n onChange({\n value: val.length ? toJS(val) : undefined,\n operator: val.length\n ? (operator ??\n selectColumnMenuFilterOperators.getContains({\n valueSelector,\n rowValueSelector,\n }))\n : '',\n syntheticEvent: event,\n });\n };\n\n return (\n <SelectorAsync\n selected={value ?? []}\n itemComponent={SelectorItemMultiple}\n onChange={handleChange}\n search={searchOptions}\n renderItem={renderer}\n dataFetcher={dataFetcher}\n data={data}\n valueSelector={valueSelector}\n />\n );\n };\n\n return renderCustomColumnMenuFilter(FilterCell, opts);\n }\n\n const FilterCell = ({ value, onChange }: TableFilterCellPropsTyped<TO>) => {\n const handleChange = (option: TO, _: boolean, event: SyntheticEvent<HTMLInputElement>) => {\n onChange({\n value: toJS(option),\n operator:\n operator ??\n selectColumnMenuFilterOperators.getEquals({ valueSelector, rowValueSelector }),\n syntheticEvent: event,\n });\n };\n\n return (\n <SelectorAsync\n selected={value ? [value] : []}\n onChange={handleChange}\n itemComponent={SelectorItemSingle}\n search={searchOptions}\n renderItem={renderer}\n dataFetcher={dataFetcher}\n data={data}\n valueSelector={valueSelector}\n />\n );\n };\n\n return renderCustomColumnMenuFilter(FilterCell, opts);\n}\n\nexport { selectColumnMenuFilterOperators };\n"],"names":["Component","Fragment","Checkbox","Radio","Input","Spinner","BodyText","renderCustomColumnMenuFilter","makeObservable","observable","runInAction","toJS","observer","getSimpleValue","objectSearch","selectColumnMenuFilterOperators","SelectorAsync","componentDidMount","searchOptions","catch","render","selectedOptions","props","selected","Set","map","opt","valueSelector","ItemComponent","itemComponent","search","className","placeholder","onChange","handleSearch","onKeyDown","handleKeyDown","size","value","div","length","option","index","checked","renderer","renderItem","getItemKey","error","shownOptions","filter","has","loading","subdued","getData","dataFetcher","data","event","key","stopPropagation","_0","item","SelectorItemSingle","label","_","SelectorItemMultiple","selectColumnMenuFilter","multiple","rowValueSelector","operator","opts","undefined","FilterCell","handleChange","val","concat","getContains","syntheticEvent","getEquals"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,SAAS,EAA6BC,QAAQ,QAA2B,QAAQ;AAE1F,SACIC,QAAQ,EAERC,KAAK,EACLC,KAAK,EACLC,OAAO,EACPC,QAAQ,QACL,8BAA8B;AAGrC,SAEIC,4BAA4B,QACzB,yBAAyB;AAChC,SAASC,cAAc,EAAEC,UAAU,EAAEC,WAAW,EAAEC,IAAI,QAAQ,OAAO;AACrE,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,cAAc,QAAQ,iBAAiB;AAChD,SAASC,YAAY,QAAQ,kBAAkB;AAC/C,SAASC,+BAA+B,QAAQ,cAAc;AA2B9D,MACMC,sBAA0BhB;IAW5BiB,oBAAoB;QAChB,IAAI,CAACC,aAAa,GAAGC,KAAK;IAC9B;IAoCAC,SAAS;YAUwB;QAT7B,MAAMC,kBAAkB,IAAI,CAACC,KAAK,CAACC,QAAQ;QAC3C,MAAMA,WAAW,IAAIC,IAAIH,gBAAgBI,GAAG,CAACC,CAAAA,MAAO,IAAI,CAACJ,KAAK,CAACK,aAAa,CAACD;QAC7E,MAAME,gBAAgB,IAAI,CAACN,KAAK,CAACO,aAAa;QAE9C,qBACI,MAAC5B;;gBACI,CAAC,CAAC,IAAI,CAACqB,KAAK,CAACQ,MAAM,kBAChB,KAAC1B;oBACG2B,WAAU;oBACVC,WAAW,GAAE,qBAAA,IAAI,CAACV,KAAK,CAACQ,MAAM,cAAjB,yCAAA,mBAAmBE,WAAW;oBAC3CC,UAAU,IAAI,CAACC,YAAY;oBAC3BC,WAAW,IAAI,CAACC,aAAa;oBAC7BC,MAAK;oBACLC,OAAO,IAAI,CAACR,MAAM;;8BAG1B,MAACS;oBAAIR,WAAU;oBAA6BI,WAAW,IAAI,CAACC,aAAa;;wBACpE,CAAC,CAACf,gBAAgBmB,MAAM,kBACrB,KAACD;4BAAIR,WAAU;sCACVV,gBAAgBI,GAAG,CAAC,CAACgB,QAAQC,sBAC1B,KAACd;oCAEGa,QAAQA;oCACRE,OAAO;oCACPC,UAAU,IAAI,CAACtB,KAAK,CAACuB,UAAU;oCAC/BZ,UAAU,IAAI,CAACX,KAAK,CAACW,QAAQ;mCAJxB,IAAI,CAACa,UAAU,CAACL,QAAQC;;wBAS5C,IAAI,CAACK,KAAK,iBACP,KAACzC;4BAASyB,WAAU;sCAAY;6BAChC,IAAI,CAACiB,YAAY,CAACR,MAAM,GACxB,IAAI,CAACQ,YAAY,CACZC,MAAM,CAACvB,CAAAA,MAAO,CAACH,SAAS2B,GAAG,CAAC,IAAI,CAAC5B,KAAK,CAACK,aAAa,CAACD,OACrDD,GAAG,CAAC,CAACgB,QAAQC,sBACV,KAACd;gCAEGa,QAAQA;gCACRE,SAAS;gCACTC,UAAU,IAAI,CAACtB,KAAK,CAACuB,UAAU;gCAC/BZ,UAAU,IAAI,CAACX,KAAK,CAACW,QAAQ;+BAJxB,IAAI,CAACa,UAAU,CAACL,QAAQC,WAOzC,IAAI,CAACS,OAAO,iBACZ,KAAC7C;sCAAS;2CAEV,KAACA;4BAAS8C,OAAO;sCAAC;;wBAGrB,IAAI,CAACD,OAAO,kBACT,KAACZ;4BAAIR,WAAU;sCACX,cAAA,KAAC1B;gCAAQgC,MAAK;;;;;;;IAMtC;IAEA,MAAcgB,UAAyB;YASxB;YAEP;QAVJ,IAAI,IAAI,CAAC/B,KAAK,CAACgC,WAAW,EAAE;YACxB,MAAM,EAAEC,IAAI,EAAE,GAAG,MAAM,IAAI,CAACjC,KAAK,CAACgC,WAAW,CAAC;gBAC1CxB,QAAQ,IAAI,CAACA,MAAM;YACvB;YAEA,OAAOyB;QACX;QAEA,IAAIA,QAAO,mBAAA,IAAI,CAACjC,KAAK,CAACiC,IAAI,cAAf,8BAAA,mBAAmB,EAAE;QAEhC,KAAI,qBAAA,IAAI,CAACjC,KAAK,CAACQ,MAAM,cAAjB,yCAAA,mBAAmBmB,MAAM,EAAE;YAC3BM,OAAOA,KAAKN,MAAM,CAAC,IAAI,CAAC3B,KAAK,CAACQ,MAAM,CAACmB,MAAM,CAAC,IAAI,CAACnB,MAAM;QAC3D;QACA,OAAOyB;IACX;IAvHA,YAAYjC,KAAwB,CAAE;QAClC,KAAK,CAACA,QANV,uBAAY0B,gBAAqB,EAAE,GACnC,uBAAYlB,UAAS,KACrB,uBAAYiB,SAAQ,QACpB,uBAAYI,WAAU,QAWtBf,uBAAAA,iBAAgB,CAACoB;YACb,IAAIA,MAAMC,GAAG,KAAK,SAAS;gBACvBD,MAAME,eAAe;YACzB;QACJ,IAEAxB,uBAAAA,gBAAe,CAACyB,IAAsCJ;YAClD7C,YAAY,IAAO,IAAI,CAACoB,MAAM,GAAGyB,KAAKjB,KAAK;YAC3C,IAAI,CAACpB,aAAa,GAAGC,KAAK;QAC9B,IAEAD,uBAAAA,iBAAgB;YACZ,IAAI,IAAI,CAACI,KAAK,CAACgC,WAAW,EAAE;gBACxB5C,YAAY;oBACR,IAAI,CAACyC,OAAO,GAAG;gBACnB;YACJ;YAEA,IAAI;gBACA,MAAMI,OAAO,MAAM,IAAI,CAACF,OAAO;gBAE/B3C,YAAY;oBACR,IAAI,CAACsC,YAAY,GAAGO;oBACpB,IAAI,CAACR,KAAK,GAAG;oBACb,IAAI,CAACI,OAAO,GAAG;gBACnB;YACJ,EAAE,eAAM;gBACJzC,YAAY;oBACR,IAAI,CAACqC,KAAK,GAAG;oBACb,IAAI,CAACI,OAAO,GAAG;gBACnB;YACJ;QACJ,IAgFA,uBAAQL,cAAa,CAACc,MAAUlB;YAC5B,OAAO,GAAGA,MAAM,EAAE,EAAE,IAAI,CAACpB,KAAK,CAACK,aAAa,CAACiC,OAAO;QACxD;QAzHIpD,eAAe,IAAI;IACvB;AAyHJ;;;;;;;;;;;;;;;;;;;;;AAEA,MAAMqD,qBAAiD,CAAC,EACpDpB,MAAM,EACNG,QAAQ,EACRD,OAAO,EACPV,QAAQ,EACX;;yBACG,KAAC9B;QACG2D,KAAK,UAAElB,qBAAAA,+BAAAA,SAAWH,8CAAW,GAAGA,QAAQ;QACxCE,SAASA;QACTV,UAAU,CAAC8B,GAAGP,QAAUvB,SAASQ,QAAQ,MAAMe;QAC/CzB,WAAU;;;AAIlB,MAAMiC,uBAAmD,CAAC,EACtDvB,MAAM,EACNG,QAAQ,EACRD,OAAO,EACPV,QAAQ,EACX;;yBACG,KAAC/B;QACG4D,KAAK,UAAElB,qBAAAA,+BAAAA,SAAWH,8CAAW,GAAGA,QAAQ;QACxCE,SAASA;QACTV,UAAU,CAAC8B,GAAGpB,SAASa,QAAUvB,SAASQ,QAAQE,SAASa;QAC3DzB,WAAU;;;AA2BlB,OAAO,SAASkC,uBAA2B,EACvCX,WAAW,EACXC,IAAI,EACJzB,MAAM,EACNoC,QAAQ,EACRvC,gBAAgBd,cAAc,EAC9BsD,mBAAmBtD,cAAc,EACjCgC,UAAU,EACVuB,QAAQ,EACR,GAAGC,MACmB;IACtB,MAAMzB,WAAWC,uBAAAA,wBAAAA,aAAee,CAAAA,OAAQjC,cAAciC;IAEtD,MAAM1C,gBAAgBY,SAChB;QACImB,QAAQnC;QACR,GAAI,OAAOgB,WAAW,YAAY,CAAC,IAAIA,MAAM;IACjD,IACAwC;IAEN,IAAIJ,UAAU;QACV,MAAMK,aAAa,CAAC,EAAEjC,KAAK,EAAEL,QAAQ,EAAmC;YACpE,MAAMuC,eAAe,CACjB/B,QACAE,SACAa;gBAEA,MAAMiB,MAAM9B,UACN,CAACL,kBAAAA,mBAAAA,QAAS,EAAE,EAAEoC,MAAM,CAACjC,UACrB,CAACH,kBAAAA,mBAAAA,QAAS,EAAE,EAAEW,MAAM,CAACvB,CAAAA,MACjBC,gBACMA,cAAcD,SAASC,cAAcc,UACrCA,WAAWf;gBAG3BO,SAAS;oBACLK,OAAOmC,IAAIjC,MAAM,GAAG7B,KAAK8D,OAAOH;oBAChCF,UAAUK,IAAIjC,MAAM,GACb4B,qBAAAA,sBAAAA,WACDrD,gCAAgC4D,WAAW,CAAC;wBACxChD;wBACAwC;oBACJ,KACA;oBACNS,gBAAgBpB;gBACpB;YACJ;YAEA,qBACI,KAACxC;gBACGO,QAAQ,EAAEe,kBAAAA,mBAAAA,QAAS,EAAE;gBACrBT,eAAemC;gBACf/B,UAAUuC;gBACV1C,QAAQZ;gBACR2B,YAAYD;gBACZU,aAAaA;gBACbC,MAAMA;gBACN5B,eAAeA;;QAG3B;QAEA,OAAOpB,6BAA6BgE,YAAYF;IACpD;IAEA,MAAME,aAAa,CAAC,EAAEjC,KAAK,EAAEL,QAAQ,EAAiC;QAClE,MAAMuC,eAAe,CAAC/B,QAAYsB,GAAYP;YAC1CvB,SAAS;gBACLK,OAAO3B,KAAK8B;gBACZ2B,QAAQ,EACJA,qBAAAA,sBAAAA,WACArD,gCAAgC8D,SAAS,CAAC;oBAAElD;oBAAewC;gBAAiB;gBAChFS,gBAAgBpB;YACpB;QACJ;QAEA,qBACI,KAACxC;YACGO,UAAUe,QAAQ;gBAACA;aAAM,GAAG,EAAE;YAC9BL,UAAUuC;YACV3C,eAAegC;YACf/B,QAAQZ;YACR2B,YAAYD;YACZU,aAAaA;YACbC,MAAMA;YACN5B,eAAeA;;IAG3B;IAEA,OAAOpB,6BAA6BgE,YAAYF;AACpD;AAEA,SAAStD,+BAA+B,GAAG"}
1
+ {"version":3,"sources":["../../../src/filters/select-filter/select-filter.tsx"],"sourcesContent":["import type { SyntheticEvent, ReactNode, KeyboardEvent, FC } from 'react';\nimport { Component, Fragment } from 'react';\n\nimport type { TableFilterCellProps } from '@servicetitan/design-system';\nimport { Checkbox, Radio, Input, Spinner, BodyText } from '@servicetitan/design-system';\nimport type { IdType } from '@servicetitan/data-query';\n\nimport type { CustomColumnMenuFilterSingleOpts } from '../column-menu-filters';\nimport { renderCustomColumnMenuFilter } from '../column-menu-filters';\nimport { makeObservable, observable, runInAction, toJS } from 'mobx';\nimport { observer } from 'mobx-react';\nimport { getSimpleValue } from './value-getter';\nimport { objectSearch } from './object-search';\nimport { selectColumnMenuFilterOperators } from './operators';\n\nexport type SelectFilterDataFetcher<TO> = (opts: { search?: string }) => Promise<{ data: TO[] }>;\n\nexport interface SelectFilterSearchOptions<TO = any> {\n placeholder?: string;\n filter(search: string): (item: TO) => boolean | undefined;\n}\n\ninterface SelectorProps<TO> {\n search?: SelectFilterSearchOptions<TO>;\n selected: TO[];\n data?: TO[];\n dataFetcher?: SelectFilterDataFetcher<TO>;\n itemComponent: FC<SelectorItemProps<TO>>;\n onChange(option: TO, checked: boolean, event: SyntheticEvent<HTMLInputElement>): void;\n valueSelector(item: TO): IdType;\n renderItem(item: TO): ReactNode;\n}\n\ninterface SelectorItemProps<TO> {\n option: TO;\n checked: boolean;\n onChange(option: TO, checked: boolean, event: SyntheticEvent<HTMLInputElement>): void;\n renderer?(item: TO): ReactNode;\n}\n\n@observer\nclass SelectorAsync<TO> extends Component<SelectorProps<TO>> {\n @observable shownOptions: TO[] = [];\n @observable search = '';\n @observable error = false;\n @observable loading = false;\n\n constructor(props: SelectorProps<TO>) {\n super(props);\n makeObservable(this);\n }\n\n componentDidMount() {\n this.searchOptions().catch();\n }\n\n handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.stopPropagation();\n }\n };\n\n handleSearch = (_0: SyntheticEvent<HTMLInputElement>, data: { value: string }) => {\n runInAction(() => (this.search = data.value));\n this.searchOptions().catch();\n };\n\n searchOptions = async () => {\n if (this.props.dataFetcher) {\n runInAction(() => {\n this.loading = true;\n });\n }\n\n try {\n const data = await this.getData();\n\n runInAction(() => {\n this.shownOptions = data;\n this.error = false;\n this.loading = false;\n });\n } catch {\n runInAction(() => {\n this.error = true;\n this.loading = false;\n });\n }\n };\n\n render() {\n const selectedOptions = this.props.selected;\n const selected = new Set(selectedOptions.map(opt => this.props.valueSelector(opt)));\n const ItemComponent = this.props.itemComponent;\n\n return (\n <Fragment>\n {!!this.props.search && (\n <Input\n className=\"m-x-half m-t-half m-b-2\"\n placeholder={this.props.search?.placeholder}\n onChange={this.handleSearch}\n onKeyDown={this.handleKeyDown}\n size=\"xsmall\"\n value={this.search}\n />\n )}\n <div className=\"p-x-half position-relative\" onKeyDown={this.handleKeyDown}>\n {!!selectedOptions.length && (\n <div className=\"border-bottom m-y-half\">\n {selectedOptions.map((option, index) => (\n <ItemComponent\n key={this.getItemKey(option, index)}\n option={option}\n checked\n renderer={this.props.renderItem}\n onChange={this.props.onChange}\n />\n ))}\n </div>\n )}\n {this.error ? (\n <BodyText className=\"c-red-500\">Unable to load options</BodyText>\n ) : this.shownOptions.length ? (\n this.shownOptions\n .filter(opt => !selected.has(this.props.valueSelector(opt)))\n .map((option, index) => (\n <ItemComponent\n key={this.getItemKey(option, index)}\n option={option}\n checked={false}\n renderer={this.props.renderItem}\n onChange={this.props.onChange}\n />\n ))\n ) : this.loading ? (\n <BodyText>&nbsp;</BodyText>\n ) : (\n <BodyText subdued>No options match search criteria</BodyText>\n )}\n\n {this.loading && (\n <div className=\"position-absolute top-0 bottom-0 left-0 right-0 opacity-disabled bg-white d-f justify-content-center\">\n <Spinner size=\"tiny\" />\n </div>\n )}\n </div>\n </Fragment>\n );\n }\n\n private async getData(): Promise<TO[]> {\n if (this.props.dataFetcher) {\n const { data } = await this.props.dataFetcher({\n search: this.search,\n });\n\n return data;\n }\n\n let data = this.props.data ?? [];\n\n if (this.props.search?.filter) {\n data = data.filter(this.props.search.filter(this.search));\n }\n return data;\n }\n\n private getItemKey = (item: TO, index: number) => {\n return `${index}__${this.props.valueSelector(item)}`;\n };\n}\n\nconst SelectorItemSingle: FC<SelectorItemProps<any>> = ({\n option,\n renderer,\n checked,\n onChange,\n}) => (\n <Radio\n label={renderer?.(option) ?? `${option}`}\n checked={checked}\n onChange={(_, event) => onChange(option, true, event)}\n className=\"m-b-1\"\n />\n);\n\nconst SelectorItemMultiple: FC<SelectorItemProps<any>> = ({\n option,\n renderer,\n checked,\n onChange,\n}) => (\n <Checkbox\n label={renderer?.(option) ?? `${option}`}\n checked={checked}\n onChange={(_, checked, event) => onChange(option, checked, event)}\n className=\"m-b-1\"\n />\n);\n\nexport interface SelectFilterOptions<TO> extends CustomColumnMenuFilterSingleOpts {\n /** Can select multiple options in filter */\n multiple?: boolean;\n /** Ability to search options in filter */\n search?: boolean | Partial<SelectFilterSearchOptions>;\n /** Static options to show in filter */\n data?: TO[];\n /** Method to fetch filter options asynchronously */\n dataFetcher?: SelectFilterDataFetcher<TO>;\n /** Search operator passed to table state */\n operator?: ((value: any, options?: TO[]) => boolean) | ((value: any, options?: TO) => boolean);\n /** Select item value (ex id) for complex items */\n valueSelector?(item: TO): IdType;\n /** Select row item value (from table source row field) for complex items */\n rowValueSelector?(item: any): IdType | undefined;\n /** Render option label */\n renderItem?(item: TO): ReactNode;\n}\n\ninterface TableFilterCellPropsTyped<T = any> extends Omit<TableFilterCellProps, 'value'> {\n value?: T;\n}\n\nexport function selectColumnMenuFilter<TO>({\n dataFetcher,\n data,\n search,\n multiple,\n valueSelector = getSimpleValue,\n rowValueSelector = getSimpleValue,\n renderItem,\n operator,\n ...opts\n}: SelectFilterOptions<TO>) {\n const renderer = renderItem ?? (item => valueSelector(item));\n\n const searchOptions = search\n ? {\n filter: objectSearch,\n ...(typeof search === 'boolean' ? {} : search),\n }\n : undefined;\n\n if (multiple) {\n const FilterCell = ({ value, onChange }: TableFilterCellPropsTyped<TO[]>) => {\n const handleChange = (\n option: TO,\n checked: boolean,\n event: SyntheticEvent<HTMLInputElement>\n ) => {\n const val = checked\n ? (value ?? []).concat(option)\n : (value ?? []).filter(opt =>\n valueSelector\n ? valueSelector(opt) !== valueSelector(option)\n : option !== opt\n );\n\n onChange({\n value: val.length ? toJS(val) : undefined,\n operator: val.length\n ? (operator ??\n selectColumnMenuFilterOperators.getContains({\n valueSelector,\n rowValueSelector,\n }))\n : '',\n syntheticEvent: event,\n });\n };\n\n return (\n <SelectorAsync\n selected={value ?? []}\n itemComponent={SelectorItemMultiple}\n onChange={handleChange}\n search={searchOptions}\n renderItem={renderer}\n dataFetcher={dataFetcher}\n data={data}\n valueSelector={valueSelector}\n />\n );\n };\n\n return renderCustomColumnMenuFilter(FilterCell, opts);\n }\n\n const FilterCell = ({ value, onChange }: TableFilterCellPropsTyped<TO>) => {\n const handleChange = (option: TO, _: boolean, event: SyntheticEvent<HTMLInputElement>) => {\n onChange({\n value: toJS(option),\n operator:\n operator ??\n selectColumnMenuFilterOperators.getEquals({ valueSelector, rowValueSelector }),\n syntheticEvent: event,\n });\n };\n\n return (\n <SelectorAsync\n selected={value ? [value] : []}\n onChange={handleChange}\n itemComponent={SelectorItemSingle}\n search={searchOptions}\n renderItem={renderer}\n dataFetcher={dataFetcher}\n data={data}\n valueSelector={valueSelector}\n />\n );\n };\n\n return renderCustomColumnMenuFilter(FilterCell, opts);\n}\n\nexport { selectColumnMenuFilterOperators };\n"],"names":["Component","Fragment","Checkbox","Radio","Input","Spinner","BodyText","renderCustomColumnMenuFilter","makeObservable","observable","runInAction","toJS","observer","getSimpleValue","objectSearch","selectColumnMenuFilterOperators","SelectorAsync","componentDidMount","searchOptions","catch","render","selectedOptions","props","selected","Set","map","opt","valueSelector","ItemComponent","itemComponent","search","className","placeholder","onChange","handleSearch","onKeyDown","handleKeyDown","size","value","div","length","option","index","checked","renderer","renderItem","getItemKey","error","shownOptions","filter","has","loading","subdued","getData","dataFetcher","data","event","key","stopPropagation","_0","item","SelectorItemSingle","label","_","SelectorItemMultiple","selectColumnMenuFilter","multiple","rowValueSelector","operator","opts","undefined","FilterCell","handleChange","val","concat","getContains","syntheticEvent","getEquals"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { IdType } from '@servicetitan/data-query';
1
+ import type { IdType } from '@servicetitan/data-query';
2
2
  export declare const getSimpleValue: (item: any) => IdType;
3
3
  //# sourceMappingURL=value-getter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"value-getter.d.ts","sourceRoot":"","sources":["../../../src/filters/select-filter/value-getter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,eAAO,MAAM,cAAc,GAAI,MAAM,GAAG,KAAG,MAU1C,CAAC"}
1
+ {"version":3,"file":"value-getter.d.ts","sourceRoot":"","sources":["../../../src/filters/select-filter/value-getter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD,eAAO,MAAM,cAAc,GAAI,MAAM,GAAG,KAAG,MAU1C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/filters/select-filter/value-getter.ts"],"sourcesContent":["import { IdType } from '@servicetitan/data-query';\n\nexport const getSimpleValue = (item: any): IdType => {\n if (item === null) {\n return item;\n }\n\n if (typeof item === 'object' || typeof item === 'function') {\n return `${item}`;\n }\n\n return item;\n};\n"],"names":["getSimpleValue","item"],"mappings":"AAEA,OAAO,MAAMA,iBAAiB,CAACC;IAC3B,IAAIA,SAAS,MAAM;QACf,OAAOA;IACX;IAEA,IAAI,OAAOA,SAAS,YAAY,OAAOA,SAAS,YAAY;QACxD,OAAO,GAAGA,MAAM;IACpB;IAEA,OAAOA;AACX,EAAE"}
1
+ {"version":3,"sources":["../../../src/filters/select-filter/value-getter.ts"],"sourcesContent":["import type { IdType } from '@servicetitan/data-query';\n\nexport const getSimpleValue = (item: any): IdType => {\n if (item === null) {\n return item;\n }\n\n if (typeof item === 'object' || typeof item === 'function') {\n return `${item}`;\n }\n\n return item;\n};\n"],"names":["getSimpleValue","item"],"mappings":"AAEA,OAAO,MAAMA,iBAAiB,CAACC;IAC3B,IAAIA,SAAS,MAAM;QACf,OAAOA;IACX;IAEA,IAAI,OAAOA,SAAS,YAAY,OAAOA,SAAS,YAAY;QACxD,OAAO,GAAGA,MAAM;IACpB;IAEA,OAAOA;AACX,EAAE"}
@@ -1,6 +1,6 @@
1
- import { ReactNode } from 'react';
2
- import { IdType } from '@servicetitan/data-query';
3
- import { CustomColumnMenuFilterSingleOpts } from '../column-menu-filters';
1
+ import type { ReactNode } from 'react';
2
+ import type { IdType } from '@servicetitan/data-query';
3
+ import type { CustomColumnMenuFilterSingleOpts } from '../column-menu-filters';
4
4
  export interface SingleSelectColumnMenuOptions<TV, TO = TV> extends CustomColumnMenuFilterSingleOpts {
5
5
  options: TO[];
6
6
  valueSelector?: (item: TO) => TV;
@@ -1 +1 @@
1
- {"version":3,"file":"single-select-filter.d.ts","sourceRoot":"","sources":["../../../src/filters/single-select/single-select-filter.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,SAAS,EAAM,MAAM,OAAO,CAAC;AAEjE,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGlD,OAAO,EACH,gCAAgC,EAEnC,MAAM,wBAAwB,CAAC;AA8BhC,MAAM,WAAW,6BAA6B,CAC1C,EAAE,EACF,EAAE,GAAG,EAAE,CACT,SAAQ,gCAAgC;IACtC,OAAO,EAAE,EAAE,EAAE,CAAC;IACd,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,SAAS,GAAG,MAAM,CAAC;IAC9C,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,KAAK,OAAO,CAAC;CAC1D;AAED,wBAAgB,4BAA4B,CAAC,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,EACrE,OAAO,EACP,aAAa,EACb,UAAU,EACV,cAAc,EACd,GAAG,IAAI,EACV,EAAE,6BAA6B,CAAC,EAAE,EAAE,EAAE,CAAC,gHA6BvC"}
1
+ {"version":3,"file":"single-select-filter.d.ts","sourceRoot":"","sources":["../../../src/filters/single-select/single-select-filter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,SAAS,EAAM,MAAM,OAAO,CAAC;AAG3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAIvD,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAC;AA+B/E,MAAM,WAAW,6BAA6B,CAC1C,EAAE,EACF,EAAE,GAAG,EAAE,CACT,SAAQ,gCAAgC;IACtC,OAAO,EAAE,EAAE,EAAE,CAAC;IACd,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,SAAS,GAAG,MAAM,CAAC;IAC9C,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,KAAK,OAAO,CAAC;CAC1D;AAED,wBAAgB,4BAA4B,CAAC,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,EACrE,OAAO,EACP,aAAa,EACb,UAAU,EACV,cAAc,EACd,GAAG,IAAI,EACV,EAAE,6BAA6B,CAAC,EAAE,EAAE,EAAE,CAAC,gHA6BvC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/filters/single-select/single-select-filter.tsx"],"sourcesContent":["import { Component, SyntheticEvent, ReactNode, FC } from 'react';\n\nimport { IdType } from '@servicetitan/data-query';\nimport { TableFilterCellProps, Radio } from '@servicetitan/design-system';\n\nimport {\n CustomColumnMenuFilterSingleOpts,\n renderCustomColumnMenuFilter,\n} from '../column-menu-filters';\n\ninterface SelectorProps<TV, TO> {\n options: TO[];\n value?: TV;\n valueSelector(item: TO): TV;\n onChange(value: TV | undefined, event: SyntheticEvent<HTMLInputElement>): void;\n renderer?(item: TO): ReactNode;\n}\n\nclass SelectorRadio<TV, TO> extends Component<SelectorProps<TV, TO>> {\n render() {\n const { options, value, renderer } = this.props;\n\n return options.map((option, index) => {\n const optionValue = this.props.valueSelector(option);\n return (\n // eslint-disable-next-line react/no-array-index-key\n <span key={index} className=\"k-widget m-b-1-i d-b\">\n <Radio\n label={renderer ? renderer(option) : `${option}`}\n checked={value === optionValue}\n onChange={(_, event) => this.props.onChange(optionValue, event)}\n />\n </span>\n );\n });\n }\n}\n\nexport interface SingleSelectColumnMenuOptions<\n TV,\n TO = TV,\n> extends CustomColumnMenuFilterSingleOpts {\n options: TO[];\n valueSelector?: (item: TO) => TV;\n renderItem?: (item: TO) => ReactNode | string;\n filterOperator?: (listItem: any, value: TV) => boolean;\n}\n\nexport function singleSelectColumnMenuFilter<TV extends IdType, TO = TV>({\n options,\n valueSelector,\n renderItem,\n filterOperator,\n ...opts\n}: SingleSelectColumnMenuOptions<TV, TO>) {\n const FilterCell: FC<TableFilterCellProps> = ({ value, onChange }) => {\n const handleChange = (value: TV | undefined, event: SyntheticEvent<HTMLInputElement>) => {\n const filter =\n value === undefined\n ? { value: '', operator: '' }\n : {\n value,\n operator: filterOperator ?? 'equals',\n };\n\n onChange({\n ...filter,\n syntheticEvent: event,\n });\n };\n\n return (\n <SelectorRadio\n options={options}\n value={value === '' ? undefined : value}\n onChange={handleChange}\n renderer={renderItem}\n valueSelector={valueSelector ?? (option => option)}\n />\n );\n };\n\n return renderCustomColumnMenuFilter(FilterCell, opts);\n}\n"],"names":["Component","Radio","renderCustomColumnMenuFilter","SelectorRadio","render","options","value","renderer","props","map","option","index","optionValue","valueSelector","span","className","label","checked","onChange","_","event","singleSelectColumnMenuFilter","renderItem","filterOperator","opts","FilterCell","handleChange","filter","undefined","operator","syntheticEvent"],"mappings":";AAAA,SAASA,SAAS,QAAuC,QAAQ;AAGjE,SAA+BC,KAAK,QAAQ,8BAA8B;AAE1E,SAEIC,4BAA4B,QACzB,yBAAyB;AAUhC,MAAMC,sBAA8BH;IAChCI,SAAS;QACL,MAAM,EAAEC,OAAO,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAG,IAAI,CAACC,KAAK;QAE/C,OAAOH,QAAQI,GAAG,CAAC,CAACC,QAAQC;YACxB,MAAMC,cAAc,IAAI,CAACJ,KAAK,CAACK,aAAa,CAACH;YAC7C,OACI,oDAAoD;0BACpD,KAACI;gBAAiBC,WAAU;0BACxB,cAAA,KAACd;oBACGe,OAAOT,WAAWA,SAASG,UAAU,GAAGA,QAAQ;oBAChDO,SAASX,UAAUM;oBACnBM,UAAU,CAACC,GAAGC,QAAU,IAAI,CAACZ,KAAK,CAACU,QAAQ,CAACN,aAAaQ;;eAJtDT;QAQnB;IACJ;AACJ;AAYA,OAAO,SAASU,6BAAyD,EACrEhB,OAAO,EACPQ,aAAa,EACbS,UAAU,EACVC,cAAc,EACd,GAAGC,MACiC;IACpC,MAAMC,aAAuC,CAAC,EAAEnB,KAAK,EAAEY,QAAQ,EAAE;QAC7D,MAAMQ,eAAe,CAACpB,OAAuBc;YACzC,MAAMO,SACFrB,UAAUsB,YACJ;gBAAEtB,OAAO;gBAAIuB,UAAU;YAAG,IAC1B;gBACIvB;gBACAuB,QAAQ,EAAEN,2BAAAA,4BAAAA,iBAAkB;YAChC;YAEVL,SAAS;gBACL,GAAGS,MAAM;gBACTG,gBAAgBV;YACpB;QACJ;QAEA,qBACI,KAACjB;YACGE,SAASA;YACTC,OAAOA,UAAU,KAAKsB,YAAYtB;YAClCY,UAAUQ;YACVnB,UAAUe;YACVT,aAAa,EAAEA,0BAAAA,2BAAAA,gBAAkBH,CAAAA,SAAUA;;IAGvD;IAEA,OAAOR,6BAA6BuB,YAAYD;AACpD"}
1
+ {"version":3,"sources":["../../../src/filters/single-select/single-select-filter.tsx"],"sourcesContent":["import type { SyntheticEvent, ReactNode, FC } from 'react';\nimport { Component } from 'react';\n\nimport type { IdType } from '@servicetitan/data-query';\nimport type { TableFilterCellProps } from '@servicetitan/design-system';\nimport { Radio } from '@servicetitan/design-system';\n\nimport type { CustomColumnMenuFilterSingleOpts } from '../column-menu-filters';\nimport { renderCustomColumnMenuFilter } from '../column-menu-filters';\n\ninterface SelectorProps<TV, TO> {\n options: TO[];\n value?: TV;\n valueSelector(item: TO): TV;\n onChange(value: TV | undefined, event: SyntheticEvent<HTMLInputElement>): void;\n renderer?(item: TO): ReactNode;\n}\n\nclass SelectorRadio<TV, TO> extends Component<SelectorProps<TV, TO>> {\n render() {\n const { options, value, renderer } = this.props;\n\n return options.map((option, index) => {\n const optionValue = this.props.valueSelector(option);\n return (\n // eslint-disable-next-line react/no-array-index-key\n <span key={index} className=\"k-widget m-b-1-i d-b\">\n <Radio\n label={renderer ? renderer(option) : `${option}`}\n checked={value === optionValue}\n onChange={(_, event) => this.props.onChange(optionValue, event)}\n />\n </span>\n );\n });\n }\n}\n\nexport interface SingleSelectColumnMenuOptions<\n TV,\n TO = TV,\n> extends CustomColumnMenuFilterSingleOpts {\n options: TO[];\n valueSelector?: (item: TO) => TV;\n renderItem?: (item: TO) => ReactNode | string;\n filterOperator?: (listItem: any, value: TV) => boolean;\n}\n\nexport function singleSelectColumnMenuFilter<TV extends IdType, TO = TV>({\n options,\n valueSelector,\n renderItem,\n filterOperator,\n ...opts\n}: SingleSelectColumnMenuOptions<TV, TO>) {\n const FilterCell: FC<TableFilterCellProps> = ({ value, onChange }) => {\n const handleChange = (value: TV | undefined, event: SyntheticEvent<HTMLInputElement>) => {\n const filter =\n value === undefined\n ? { value: '', operator: '' }\n : {\n value,\n operator: filterOperator ?? 'equals',\n };\n\n onChange({\n ...filter,\n syntheticEvent: event,\n });\n };\n\n return (\n <SelectorRadio\n options={options}\n value={value === '' ? undefined : value}\n onChange={handleChange}\n renderer={renderItem}\n valueSelector={valueSelector ?? (option => option)}\n />\n );\n };\n\n return renderCustomColumnMenuFilter(FilterCell, opts);\n}\n"],"names":["Component","Radio","renderCustomColumnMenuFilter","SelectorRadio","render","options","value","renderer","props","map","option","index","optionValue","valueSelector","span","className","label","checked","onChange","_","event","singleSelectColumnMenuFilter","renderItem","filterOperator","opts","FilterCell","handleChange","filter","undefined","operator","syntheticEvent"],"mappings":";AACA,SAASA,SAAS,QAAQ,QAAQ;AAIlC,SAASC,KAAK,QAAQ,8BAA8B;AAGpD,SAASC,4BAA4B,QAAQ,yBAAyB;AAUtE,MAAMC,sBAA8BH;IAChCI,SAAS;QACL,MAAM,EAAEC,OAAO,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAG,IAAI,CAACC,KAAK;QAE/C,OAAOH,QAAQI,GAAG,CAAC,CAACC,QAAQC;YACxB,MAAMC,cAAc,IAAI,CAACJ,KAAK,CAACK,aAAa,CAACH;YAC7C,OACI,oDAAoD;0BACpD,KAACI;gBAAiBC,WAAU;0BACxB,cAAA,KAACd;oBACGe,OAAOT,WAAWA,SAASG,UAAU,GAAGA,QAAQ;oBAChDO,SAASX,UAAUM;oBACnBM,UAAU,CAACC,GAAGC,QAAU,IAAI,CAACZ,KAAK,CAACU,QAAQ,CAACN,aAAaQ;;eAJtDT;QAQnB;IACJ;AACJ;AAYA,OAAO,SAASU,6BAAyD,EACrEhB,OAAO,EACPQ,aAAa,EACbS,UAAU,EACVC,cAAc,EACd,GAAGC,MACiC;IACpC,MAAMC,aAAuC,CAAC,EAAEnB,KAAK,EAAEY,QAAQ,EAAE;QAC7D,MAAMQ,eAAe,CAACpB,OAAuBc;YACzC,MAAMO,SACFrB,UAAUsB,YACJ;gBAAEtB,OAAO;gBAAIuB,UAAU;YAAG,IAC1B;gBACIvB;gBACAuB,QAAQ,EAAEN,2BAAAA,4BAAAA,iBAAkB;YAChC;YAEVL,SAAS;gBACL,GAAGS,MAAM;gBACTG,gBAAgBV;YACpB;QACJ;QAEA,qBACI,KAACjB;YACGE,SAASA;YACTC,OAAOA,UAAU,KAAKsB,YAAYtB;YAClCY,UAAUQ;YACVnB,UAAUe;YACVT,aAAa,EAAEA,0BAAAA,2BAAAA,gBAAkBH,CAAAA,SAAUA;;IAGvD;IAEA,OAAOR,6BAA6BuB,YAAYD;AACpD"}
@@ -1,6 +1,6 @@
1
- import { ReactElement, ReactNode, FC } from 'react';
2
- import { ListItemProps, MultiSelectTagData } from '@progress/kendo-react-dropdowns';
3
- import { GridColumnMenuFilterCellProps as TableColumnMenuFilterCellProps } from '@progress/kendo-react-grid/dist/npm/columnMenu/GridColumnMenuFilterCell';
1
+ import type { ReactElement, ReactNode, FC } from 'react';
2
+ import type { ListItemProps, MultiSelectTagData } from '@progress/kendo-react-dropdowns';
3
+ import type { GridColumnMenuFilterCellProps as TableColumnMenuFilterCellProps } from '@progress/kendo-react-grid/dist/npm/columnMenu/GridColumnMenuFilterCell';
4
4
  interface ValueWithLowerCase {
5
5
  value: any;
6
6
  text: string;
@@ -1 +1 @@
1
- {"version":3,"file":"filter-cell-ext.d.ts","sourceRoot":"","sources":["../../../src/filters/standard-filter-with-multiselect/filter-cell-ext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,EAAe,MAAM,OAAO,CAAC;AAKjE,OAAO,EAMH,aAAa,EACb,kBAAkB,EACrB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,6BAA6B,IAAI,8BAA8B,EAAE,MAAM,yEAAyE,CAAC;AAY1J,UAAU,kBAAkB;IACxB,KAAK,EAAE,GAAG,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAmB,SAAQ,8BAA8B;IACtE,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAC3C,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,qBAAqB,CAAC,CAAC,EAAE,EAAE,YAAY,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,aAAa,GAAG,SAAS,CAAC;IAC7F,oBAAoB,CAAC,CACjB,OAAO,EAAE,kBAAkB,EAC3B,EAAE,EAAE,YAAY,CAAC,aAAa,CAAC,GAChC,YAAY,CAAC,aAAa,CAAC,CAAC;IAC/B,2BAA2B,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;CAClF;AAGD,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CA6I/C,CAAC"}
1
+ {"version":3,"file":"filter-cell-ext.d.ts","sourceRoot":"","sources":["../../../src/filters/standard-filter-with-multiselect/filter-cell-ext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,EAAe,MAAM,OAAO,CAAC;AAKtE,OAAO,KAAK,EAIR,aAAa,EACb,kBAAkB,EACrB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,KAAK,EAAE,6BAA6B,IAAI,8BAA8B,EAAE,MAAM,yEAAyE,CAAC;AAY/J,UAAU,kBAAkB;IACxB,KAAK,EAAE,GAAG,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAmB,SAAQ,8BAA8B;IACtE,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAC3C,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,qBAAqB,CAAC,CAAC,EAAE,EAAE,YAAY,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,aAAa,GAAG,SAAS,CAAC;IAC7F,oBAAoB,CAAC,CACjB,OAAO,EAAE,kBAAkB,EAC3B,EAAE,EAAE,YAAY,CAAC,aAAa,CAAC,GAChC,YAAY,CAAC,aAAa,CAAC,CAAC;IAC/B,2BAA2B,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;CAClF;AAGD,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CA6I/C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/filters/standard-filter-with-multiselect/filter-cell-ext.tsx"],"sourcesContent":["import { ReactElement, ReactNode, FC, ChangeEvent } from 'react';\nimport { runInAction } from 'mobx';\nimport { observer, useLocalStore } from 'mobx-react';\nimport { multiselectOperators, isMultiselectOperator } from './multiselect-operators';\n\nimport {\n DropDownList,\n DropDownListChangeEvent,\n MultiSelect,\n MultiSelectChangeEvent,\n MultiSelectFilterChangeEvent,\n ListItemProps,\n MultiSelectTagData,\n} from '@progress/kendo-react-dropdowns';\n\nimport { 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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"}
@@ -1,7 +1,7 @@
1
- import { TableColumnMenuProps } from '@servicetitan/design-system';
2
- import { IdType } from '@servicetitan/data-query';
3
- import { TableState } from '../../table-state';
4
- import { FilterCellExtProps } from './filter-cell-ext';
1
+ import type { TableColumnMenuProps } from '@servicetitan/design-system';
2
+ import type { IdType } from '@servicetitan/data-query';
3
+ import type { TableState } from '../../table-state';
4
+ import type { FilterCellExtProps } from './filter-cell-ext';
5
5
  type AcceptableOption = string | number | {
6
6
  value: any;
7
7
  text: string;
@@ -1 +1 @@
1
- {"version":3,"file":"standard-filter-with-multiselect.d.ts","sourceRoot":"","sources":["../../../src/filters/standard-filter-with-multiselect/standard-filter-with-multiselect.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C,OAAO,EAAiB,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGtE,KAAK,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG;IAAE,KAAK,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,UAAU,aAAa,CAAC,CAAC,EAAE,GAAG,SAAS,MAAM,GAAG,KAAK;IAEjD,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEhC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAED,UAAU,gBAAgB;IAEtB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAErC,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAE3C,qBAAqB,CAAC,EAAE,kBAAkB,CAAC,uBAAuB,CAAC,CAAC;IAEpE,oBAAoB,CAAC,EAAE,kBAAkB,CAAC,sBAAsB,CAAC,CAAC;IAElE,2BAA2B,CAAC,EAAE,kBAAkB,CAAC,6BAA6B,CAAC,CAAC;CACnF;AAOD,wBAAgB,6BAA6B,CAAC,CAAC,EAAE,GAAG,SAAS,MAAM,GAAG,KAAK,EACvE,aAAa,GAAE,aAAa,CAAC,CAAC,EAAE,GAAG,CAAM,EACzC,gBAAgB,GAAE,gBAAqB,IA8G/B,OAAO,oBAAoB,6CAGtC"}
1
+ {"version":3,"file":"standard-filter-with-multiselect.d.ts","sourceRoot":"","sources":["../../../src/filters/standard-filter-with-multiselect/standard-filter-with-multiselect.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAI5D,KAAK,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG;IAAE,KAAK,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,UAAU,aAAa,CAAC,CAAC,EAAE,GAAG,SAAS,MAAM,GAAG,KAAK;IAEjD,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEhC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAED,UAAU,gBAAgB;IAEtB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAErC,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAE3C,qBAAqB,CAAC,EAAE,kBAAkB,CAAC,uBAAuB,CAAC,CAAC;IAEpE,oBAAoB,CAAC,EAAE,kBAAkB,CAAC,sBAAsB,CAAC,CAAC;IAElE,2BAA2B,CAAC,EAAE,kBAAkB,CAAC,6BAA6B,CAAC,CAAC;CACnF;AAOD,wBAAgB,6BAA6B,CAAC,CAAC,EAAE,GAAG,SAAS,MAAM,GAAG,KAAK,EACvE,aAAa,GAAE,aAAa,CAAC,CAAC,EAAE,GAAG,CAAM,EACzC,gBAAgB,GAAE,gBAAqB,IA8G/B,OAAO,oBAAoB,6CAGtC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/filters/standard-filter-with-multiselect/standard-filter-with-multiselect.tsx"],"sourcesContent":["import { FC } from 'react';\nimport { observer, useLocalStore } from 'mobx-react';\nimport { fromPromise } from 'mobx-utils';\n\nimport { DropDownList } from '@progress/kendo-react-dropdowns';\n\nimport { TableColumnMenuProps } from '@servicetitan/design-system';\nimport { GridColumnMenuFilterUIProps as TableColumnMenuFilterUIProps } from '@progress/kendo-react-grid/dist/npm/interfaces/GridColumnMenuFilterUIProps';\nimport { IdType } from '@servicetitan/data-query';\nimport { TableState } from '../../table-state';\n\nimport { TableColumnMenuFilterExt } from './table-column-menu-filter-ext';\nimport { FilterCellExt, FilterCellExtProps } 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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"}
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,SAAQ;oBACR,OAAOD,OAAOE,gBAAgB,CAACD,KAAK;gBACxC;gBACA,IAAIE,uBAAsB;wBACHZ;oBAAnB,MAAMa,cAAab,gCAAAA,kBAAkBc,UAAU,cAA5Bd,oDAAAA,8BAA8Ba,UAAU;oBAC3D,OAAOA,cAAc,IAAI,CAACH,KAAK,IAAIjB,YAAYoB,WAAWE,OAAO,CAAC,CAAC;gBACvE;gBACA,IAAIC,wBAA2C;oBAC3C,IACI,CAAC,IAAI,CAACJ,mBAAmB,IACzB,CAAE,CAAA,IAAI,CAACA,mBAAmB,CAACK,KAAK,KAAK,WAAU,GACjD;wBACE,OAAO,EAAE;oBACb;oBACA,OAAO,AAAC,IAAI,CAACL,mBAAmB,CAACM,KAAK,CAACC,IAAI,CACtCC,GAAG,CAACC,CAAAA,IAAKA,CAAC,CAAC,IAAI,CAACX,KAAK,CAAC,EACtBY,MAAM,CACHC,CAAAA,IACI,OAAOA,MAAM,YACZ,OAAOA,MAAM,YACVA,EAAEC,MAAM,GAAG,KACXD,EAAEC,MAAM,IAAIxB,kBAAkBC,kBAAkB;gBAEpE;gBACA,IAAIC,WAAU;oBACV,OAAOuB,MAAMC,IAAI,CACb,IAAIC,IAAI,IAAI,CAACX,oBAAoB,CAACY,MAAM,CAAC5B,kBAAkBE,OAAO,IACpEkB,GAAG,CAACG,CAAAA;wBACF,OAAQ,OAAOA;4BACX,KAAK;gCACD,OAAO;oCACHL,OAAOK;oCACPM,MAAMN;oCACNO,QAAQP,EAAEQ,WAAW;gCACzB;4BACJ,KAAK;gCACD,OAAO;oCACHb,OAAOK;oCACPM,MAAMN,EAAES,QAAQ;oCAChBF,QAAQP,EAAES,QAAQ,GAAGD,WAAW;gCACpC;4BACJ,KAAK;gCACD,OAAO;oCACHb,OAAOK,EAAEL,KAAK;oCACdW,MAAMN,EAAEM,IAAI;oCACZC,QAAQP,EAAEM,IAAI,CAACE,WAAW;gCAC9B;4BACJ;gCACI,MAAM;wBACd;oBACJ;gBACJ;YACJ,CAAA,GACAxB;QAGJ,MAAM,EACFI,gBAAgB,EAChBsB,iBAAiB,EACjBC,gBAAgB,EAChBC,SAAS,EACTC,UAAU,EACVC,aAAa,EAChB,GAAG9B;QAEJ,qBACI,MAAC+B;;8BACG,KAAC1C;oBACI,GAAGe,gBAAgB;oBACpBT,SAASM,MAAMN,OAAO;oBACrB,GAAGC,oBAAoB;;gBAE3B,CAAC+B,kCACE,MAACI;;sCACG,KAAC5C;4BACGyB,MAAMgB;4BACNjB,OAAOkB;4BACPG,UAAUF;4BACVG,WAAU;4BACVC,WAAU;;sCAEd,KAAC7C;4BACI,GAAGqC,iBAAiB;4BACrB/B,SAASM,MAAMN,OAAO;4BACrB,GAAGC,oBAAoB;;;;;;IAMhD;IAEA,OAAO,CAACI,sBACJ,KAACZ;YAA0B,GAAGY,KAAK;YAAEmC,UAAUpC;YAAoBqC,QAAQ;;AAEnF"}
@@ -1,5 +1,5 @@
1
1
  import { TableColumnMenuFilter } from '@servicetitan/design-system';
2
- import { GridColumnMenuFilterProps as TableColumnMenuFilterProps } from '@progress/kendo-react-grid/dist/npm/columnMenu/GridColumnMenuFilter';
2
+ import type { GridColumnMenuFilterProps as TableColumnMenuFilterProps } from '@progress/kendo-react-grid/dist/npm/columnMenu/GridColumnMenuFilter';
3
3
  export declare class TableColumnMenuFilterExt extends TableColumnMenuFilter {
4
4
  constructor(props: TableColumnMenuFilterProps);
5
5
  }
@@ -1 +1 @@
1
- {"version":3,"file":"table-column-menu-filter-ext.d.ts","sourceRoot":"","sources":["../../../src/filters/standard-filter-with-multiselect/table-column-menu-filter-ext.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,yBAAyB,IAAI,0BAA0B,EAAE,MAAM,qEAAqE,CAAC;AAM9I,qBAAa,wBAAyB,SAAQ,qBAAqB;gBACnD,KAAK,EAAE,0BAA0B;CA8BhD"}
1
+ {"version":3,"file":"table-column-menu-filter-ext.d.ts","sourceRoot":"","sources":["../../../src/filters/standard-filter-with-multiselect/table-column-menu-filter-ext.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,yBAAyB,IAAI,0BAA0B,EAAE,MAAM,qEAAqE,CAAC;AAMnJ,qBAAa,wBAAyB,SAAQ,qBAAqB;gBACnD,KAAK,EAAE,0BAA0B;CA8BhD"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/filters/standard-filter-with-multiselect/table-column-menu-filter-ext.tsx"],"sourcesContent":["import { comparer } from 'mobx';\n\nimport { TableColumnMenuFilter } from '@servicetitan/design-system';\nimport { GridColumnMenuFilterProps as TableColumnMenuFilterProps } from '@progress/kendo-react-grid/dist/npm/columnMenu/GridColumnMenuFilter';\nimport { getDefaultOperator } from '@progress/kendo-react-grid/dist/npm/filterCommon';\n\nimport { multiselectOperators } from './multiselect-operators';\n\n// constructor override: if state.filterGroup was filled with default, we override it with new default\nexport class TableColumnMenuFilterExt extends TableColumnMenuFilter {\n constructor(props: TableColumnMenuFilterProps) {\n super(props);\n\n const defaultOperator = getDefaultOperator(\n props.filterOperators,\n props.column.filter ?? 'text'\n );\n // I know the check is a bit hacky, but that's compensated with its low criticality: even if it fails, nothing really bad happens\n if (\n comparer.structural(this.state.filterGroup, {\n logic: 'and',\n filters: [\n { field: props.column.field, operator: defaultOperator },\n { field: props.column.field, operator: defaultOperator },\n ],\n })\n ) {\n const newDefaultOperator = multiselectOperators[0].operator;\n this.state = {\n ...this.state,\n filterGroup: {\n logic: 'and',\n filters: [\n { field: props.column.field, operator: newDefaultOperator },\n { field: props.column.field, operator: newDefaultOperator },\n ],\n },\n };\n }\n }\n}\n"],"names":["comparer","TableColumnMenuFilter","getDefaultOperator","multiselectOperators","TableColumnMenuFilterExt","props","defaultOperator","filterOperators","column","filter","structural","state","filterGroup","logic","filters","field","operator","newDefaultOperator"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,OAAO;AAEhC,SAASC,qBAAqB,QAAQ,8BAA8B;AAEpE,SAASC,kBAAkB,QAAQ,mDAAmD;AAEtF,SAASC,oBAAoB,QAAQ,0BAA0B;AAE/D,sGAAsG;AACtG,OAAO,MAAMC,iCAAiCH;IAC1C,YAAYI,KAAiC,CAAE;YAKvCA;QAJJ,KAAK,CAACA;QAEN,MAAMC,kBAAkBJ,mBACpBG,MAAME,eAAe,GACrBF,uBAAAA,MAAMG,MAAM,CAACC,MAAM,cAAnBJ,kCAAAA,uBAAuB;QAE3B,iIAAiI;QACjI,IACIL,SAASU,UAAU,CAAC,IAAI,CAACC,KAAK,CAACC,WAAW,EAAE;YACxCC,OAAO;YACPC,SAAS;gBACL;oBAAEC,OAAOV,MAAMG,MAAM,CAACO,KAAK;oBAAEC,UAAUV;gBAAgB;gBACvD;oBAAES,OAAOV,MAAMG,MAAM,CAACO,KAAK;oBAAEC,UAAUV;gBAAgB;aAC1D;QACL,IACF;YACE,MAAMW,qBAAqBd,oBAAoB,CAAC,EAAE,CAACa,QAAQ;YAC3D,IAAI,CAACL,KAAK,GAAG;gBACT,GAAG,IAAI,CAACA,KAAK;gBACbC,aAAa;oBACTC,OAAO;oBACPC,SAAS;wBACL;4BAAEC,OAAOV,MAAMG,MAAM,CAACO,KAAK;4BAAEC,UAAUC;wBAAmB;wBAC1D;4BAAEF,OAAOV,MAAMG,MAAM,CAACO,KAAK;4BAAEC,UAAUC;wBAAmB;qBAC7D;gBACL;YACJ;QACJ;IACJ;AACJ"}
1
+ {"version":3,"sources":["../../../src/filters/standard-filter-with-multiselect/table-column-menu-filter-ext.tsx"],"sourcesContent":["import { comparer } from 'mobx';\n\nimport { TableColumnMenuFilter } from '@servicetitan/design-system';\nimport type { GridColumnMenuFilterProps as TableColumnMenuFilterProps } from '@progress/kendo-react-grid/dist/npm/columnMenu/GridColumnMenuFilter';\nimport { getDefaultOperator } from '@progress/kendo-react-grid/dist/npm/filterCommon';\n\nimport { multiselectOperators } from './multiselect-operators';\n\n// constructor override: if state.filterGroup was filled with default, we override it with new default\nexport class TableColumnMenuFilterExt extends TableColumnMenuFilter {\n constructor(props: TableColumnMenuFilterProps) {\n super(props);\n\n const defaultOperator = getDefaultOperator(\n props.filterOperators,\n props.column.filter ?? 'text'\n );\n // I know the check is a bit hacky, but that's compensated with its low criticality: even if it fails, nothing really bad happens\n if (\n comparer.structural(this.state.filterGroup, {\n logic: 'and',\n filters: [\n { field: props.column.field, operator: defaultOperator },\n { field: props.column.field, operator: defaultOperator },\n ],\n })\n ) {\n const newDefaultOperator = multiselectOperators[0].operator;\n this.state = {\n ...this.state,\n filterGroup: {\n logic: 'and',\n filters: [\n { field: props.column.field, operator: newDefaultOperator },\n { field: props.column.field, operator: newDefaultOperator },\n ],\n },\n };\n }\n }\n}\n"],"names":["comparer","TableColumnMenuFilter","getDefaultOperator","multiselectOperators","TableColumnMenuFilterExt","props","defaultOperator","filterOperators","column","filter","structural","state","filterGroup","logic","filters","field","operator","newDefaultOperator"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,OAAO;AAEhC,SAASC,qBAAqB,QAAQ,8BAA8B;AAEpE,SAASC,kBAAkB,QAAQ,mDAAmD;AAEtF,SAASC,oBAAoB,QAAQ,0BAA0B;AAE/D,sGAAsG;AACtG,OAAO,MAAMC,iCAAiCH;IAC1C,YAAYI,KAAiC,CAAE;YAKvCA;QAJJ,KAAK,CAACA;QAEN,MAAMC,kBAAkBJ,mBACpBG,MAAME,eAAe,GACrBF,uBAAAA,MAAMG,MAAM,CAACC,MAAM,cAAnBJ,kCAAAA,uBAAuB;QAE3B,iIAAiI;QACjI,IACIL,SAASU,UAAU,CAAC,IAAI,CAACC,KAAK,CAACC,WAAW,EAAE;YACxCC,OAAO;YACPC,SAAS;gBACL;oBAAEC,OAAOV,MAAMG,MAAM,CAACO,KAAK;oBAAEC,UAAUV;gBAAgB;gBACvD;oBAAES,OAAOV,MAAMG,MAAM,CAACO,KAAK;oBAAEC,UAAUV;gBAAgB;aAC1D;QACL,IACF;YACE,MAAMW,qBAAqBd,oBAAoB,CAAC,EAAE,CAACa,QAAQ;YAC3D,IAAI,CAACL,KAAK,GAAG;gBACT,GAAG,IAAI,CAACA,KAAK;gBACbC,aAAa;oBACTC,OAAO;oBACPC,SAAS;wBACL;4BAAEC,OAAOV,MAAMG,MAAM,CAACO,KAAK;4BAAEC,UAAUC;wBAAmB;wBAC1D;4BAAEF,OAAOV,MAAMG,MAAM,CAACO,KAAK;4BAAEC,UAAUC;wBAAmB;qBAC7D;gBACL;YACJ;QACJ;IACJ;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"time-filter.d.ts","sourceRoot":"","sources":["../../../src/filters/time-filter/time-filter.tsx"],"names":[],"mappings":"AAmEA,eAAO,MAAM,oBAAoB,8GAAqD,CAAC"}
1
+ {"version":3,"file":"time-filter.d.ts","sourceRoot":"","sources":["../../../src/filters/time-filter/time-filter.tsx"],"names":[],"mappings":"AAqEA,eAAO,MAAM,oBAAoB,8GAAqD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/filters/time-filter/time-filter.tsx"],"sourcesContent":["import { Component, Fragment } from 'react';\n\nimport { observer } from 'mobx-react';\nimport { observable, action, makeObservable } from 'mobx';\n\nimport { DropDownList, DropDownListChangeEvent } from '@progress/kendo-react-dropdowns';\nimport { TimePicker, TimePickerChangeEvent } from '@progress/kendo-react-dateinputs';\n\nimport {\n IsUnaryFilter,\n cellOperatorChange,\n} from '@progress/kendo-react-grid/dist/npm/filterCommon';\n\nimport type { TableFilterCellProps } from '@servicetitan/design-system';\n\nimport { renderCustomColumnMenuFilter } from '../column-menu-filters';\n\n@observer\nclass TimeFilterCell extends Component<TableFilterCellProps> {\n @observable operator =\n this.props.operators.find(o => o.operator === this.props.operator) ??\n this.props.operators[0];\n\n constructor(props: TableFilterCellProps) {\n super(props);\n makeObservable(this);\n }\n\n @action\n handleOperatorChange = (event: DropDownListChangeEvent) => {\n this.operator = event.target.value;\n cellOperatorChange(event, this.props.value, this.props.onChange);\n };\n\n handleChange = (event: TimePickerChangeEvent) => {\n const value = event.value;\n\n this.props.onChange({\n value: value ? new Date(2000, 0, 1, value.getHours(), value.getMinutes()) : null,\n operator: this.props.operator ?? '',\n syntheticEvent: event.syntheticEvent,\n });\n };\n\n render() {\n return (\n <Fragment>\n <DropDownList\n value={this.operator}\n onChange={this.handleOperatorChange}\n data={this.props.operators}\n dataItemKey=\"operator\"\n className=\"m-b-1\"\n textField=\"text\"\n />\n {!IsUnaryFilter(this.operator.operator) && (\n <TimePicker\n value={this.props.value}\n onChange={this.handleChange}\n className=\"m-b-1\"\n />\n )}\n </Fragment>\n );\n }\n}\n\nexport const TimeColumnMenuFilter = renderCustomColumnMenuFilter(TimeFilterCell, true);\n"],"names":["Component","Fragment","observer","observable","action","makeObservable","DropDownList","TimePicker","IsUnaryFilter","cellOperatorChange","renderCustomColumnMenuFilter","TimeFilterCell","render","value","operator","onChange","handleOperatorChange","data","props","operators","dataItemKey","className","textField","handleChange","find","o","event","target","Date","getHours","getMinutes","syntheticEvent","TimeColumnMenuFilter"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAE5C,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,UAAU,EAAEC,MAAM,EAAEC,cAAc,QAAQ,OAAO;AAE1D,SAASC,YAAY,QAAiC,kCAAkC;AACxF,SAASC,UAAU,QAA+B,mCAAmC;AAErF,SACIC,aAAa,EACbC,kBAAkB,QACf,mDAAmD;AAI1D,SAASC,4BAA4B,QAAQ,yBAAyB;AAEtE,MACMC,uBAAuBX;IA0BzBY,SAAS;QACL,qBACI,MAACX;;8BACG,KAACK;oBACGO,OAAO,IAAI,CAACC,QAAQ;oBACpBC,UAAU,IAAI,CAACC,oBAAoB;oBACnCC,MAAM,IAAI,CAACC,KAAK,CAACC,SAAS;oBAC1BC,aAAY;oBACZC,WAAU;oBACVC,WAAU;;gBAEb,CAACd,cAAc,IAAI,CAACM,QAAQ,CAACA,QAAQ,mBAClC,KAACP;oBACGM,OAAO,IAAI,CAACK,KAAK,CAACL,KAAK;oBACvBE,UAAU,IAAI,CAACQ,YAAY;oBAC3BF,WAAU;;;;IAK9B;IAzCA,YAAYH,KAA2B,CAAE;YAHrC;QAIA,KAAK,CAACA,QALV,uBAAYJ,aACR,6BAAA,IAAI,CAACI,KAAK,CAACC,SAAS,CAACK,IAAI,CAACC,CAAAA,IAAKA,EAAEX,QAAQ,KAAK,IAAI,CAACI,KAAK,CAACJ,QAAQ,eAAjE,wCAAA,6BACA,IAAI,CAACI,KAAK,CAACC,SAAS,CAAC,EAAE,GAO3B,uBACAH,wBAAuB,CAACU;YACpB,IAAI,CAACZ,QAAQ,GAAGY,MAAMC,MAAM,CAACd,KAAK;YAClCJ,mBAAmBiB,OAAO,IAAI,CAACR,KAAK,CAACL,KAAK,EAAE,IAAI,CAACK,KAAK,CAACH,QAAQ;QACnE,IAEAQ,uBAAAA,gBAAe,CAACG;gBAKE;YAJd,MAAMb,QAAQa,MAAMb,KAAK;YAEzB,IAAI,CAACK,KAAK,CAACH,QAAQ,CAAC;gBAChBF,OAAOA,QAAQ,IAAIe,KAAK,MAAM,GAAG,GAAGf,MAAMgB,QAAQ,IAAIhB,MAAMiB,UAAU,MAAM;gBAC5EhB,QAAQ,GAAE,uBAAA,IAAI,CAACI,KAAK,CAACJ,QAAQ,cAAnB,kCAAA,uBAAuB;gBACjCiB,gBAAgBL,MAAMK,cAAc;YACxC;QACJ;QAjBI1B,eAAe,IAAI;IACvB;AAuCJ;;;;;;;;;;;;;;AAEA,OAAO,MAAM2B,uBAAuBtB,6BAA6BC,gBAAgB,MAAM"}
1
+ {"version":3,"sources":["../../../src/filters/time-filter/time-filter.tsx"],"sourcesContent":["import { Component, Fragment } from 'react';\n\nimport { observer } from 'mobx-react';\nimport { observable, action, makeObservable } from 'mobx';\n\nimport type { DropDownListChangeEvent } from '@progress/kendo-react-dropdowns';\nimport { DropDownList } from '@progress/kendo-react-dropdowns';\nimport type { TimePickerChangeEvent } from '@progress/kendo-react-dateinputs';\nimport { TimePicker } from '@progress/kendo-react-dateinputs';\n\nimport {\n IsUnaryFilter,\n cellOperatorChange,\n} from '@progress/kendo-react-grid/dist/npm/filterCommon';\n\nimport type { TableFilterCellProps } from '@servicetitan/design-system';\n\nimport { renderCustomColumnMenuFilter } from '../column-menu-filters';\n\n@observer\nclass TimeFilterCell extends Component<TableFilterCellProps> {\n @observable operator =\n this.props.operators.find(o => o.operator === this.props.operator) ??\n this.props.operators[0];\n\n constructor(props: TableFilterCellProps) {\n super(props);\n makeObservable(this);\n }\n\n @action\n handleOperatorChange = (event: DropDownListChangeEvent) => {\n this.operator = event.target.value;\n cellOperatorChange(event, this.props.value, this.props.onChange);\n };\n\n handleChange = (event: TimePickerChangeEvent) => {\n const value = event.value;\n\n this.props.onChange({\n value: value ? new Date(2000, 0, 1, value.getHours(), value.getMinutes()) : null,\n operator: this.props.operator ?? '',\n syntheticEvent: event.syntheticEvent,\n });\n };\n\n render() {\n return (\n <Fragment>\n <DropDownList\n value={this.operator}\n onChange={this.handleOperatorChange}\n data={this.props.operators}\n dataItemKey=\"operator\"\n className=\"m-b-1\"\n textField=\"text\"\n />\n {!IsUnaryFilter(this.operator.operator) && (\n <TimePicker\n value={this.props.value}\n onChange={this.handleChange}\n className=\"m-b-1\"\n />\n )}\n </Fragment>\n );\n }\n}\n\nexport const TimeColumnMenuFilter = renderCustomColumnMenuFilter(TimeFilterCell, true);\n"],"names":["Component","Fragment","observer","observable","action","makeObservable","DropDownList","TimePicker","IsUnaryFilter","cellOperatorChange","renderCustomColumnMenuFilter","TimeFilterCell","render","value","operator","onChange","handleOperatorChange","data","props","operators","dataItemKey","className","textField","handleChange","find","o","event","target","Date","getHours","getMinutes","syntheticEvent","TimeColumnMenuFilter"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAE5C,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,UAAU,EAAEC,MAAM,EAAEC,cAAc,QAAQ,OAAO;AAG1D,SAASC,YAAY,QAAQ,kCAAkC;AAE/D,SAASC,UAAU,QAAQ,mCAAmC;AAE9D,SACIC,aAAa,EACbC,kBAAkB,QACf,mDAAmD;AAI1D,SAASC,4BAA4B,QAAQ,yBAAyB;AAEtE,MACMC,uBAAuBX;IA0BzBY,SAAS;QACL,qBACI,MAACX;;8BACG,KAACK;oBACGO,OAAO,IAAI,CAACC,QAAQ;oBACpBC,UAAU,IAAI,CAACC,oBAAoB;oBACnCC,MAAM,IAAI,CAACC,KAAK,CAACC,SAAS;oBAC1BC,aAAY;oBACZC,WAAU;oBACVC,WAAU;;gBAEb,CAACd,cAAc,IAAI,CAACM,QAAQ,CAACA,QAAQ,mBAClC,KAACP;oBACGM,OAAO,IAAI,CAACK,KAAK,CAACL,KAAK;oBACvBE,UAAU,IAAI,CAACQ,YAAY;oBAC3BF,WAAU;;;;IAK9B;IAzCA,YAAYH,KAA2B,CAAE;YAHrC;QAIA,KAAK,CAACA,QALV,uBAAYJ,aACR,6BAAA,IAAI,CAACI,KAAK,CAACC,SAAS,CAACK,IAAI,CAACC,CAAAA,IAAKA,EAAEX,QAAQ,KAAK,IAAI,CAACI,KAAK,CAACJ,QAAQ,eAAjE,wCAAA,6BACA,IAAI,CAACI,KAAK,CAACC,SAAS,CAAC,EAAE,GAO3B,uBACAH,wBAAuB,CAACU;YACpB,IAAI,CAACZ,QAAQ,GAAGY,MAAMC,MAAM,CAACd,KAAK;YAClCJ,mBAAmBiB,OAAO,IAAI,CAACR,KAAK,CAACL,KAAK,EAAE,IAAI,CAACK,KAAK,CAACH,QAAQ;QACnE,IAEAQ,uBAAAA,gBAAe,CAACG;gBAKE;YAJd,MAAMb,QAAQa,MAAMb,KAAK;YAEzB,IAAI,CAACK,KAAK,CAACH,QAAQ,CAAC;gBAChBF,OAAOA,QAAQ,IAAIe,KAAK,MAAM,GAAG,GAAGf,MAAMgB,QAAQ,IAAIhB,MAAMiB,UAAU,MAAM;gBAC5EhB,QAAQ,GAAE,uBAAA,IAAI,CAACI,KAAK,CAACJ,QAAQ,cAAnB,kCAAA,uBAAuB;gBACjCiB,gBAAgBL,MAAMK,cAAc;YACxC;QACJ;QAjBI1B,eAAe,IAAI;IACvB;AAuCJ;;;;;;;;;;;;;;AAEA,OAAO,MAAM2B,uBAAuBtB,6BAA6BC,gBAAgB,MAAM"}
@@ -1,5 +1,5 @@
1
- import { ComponentType, SyntheticEvent, FC } from 'react';
2
- import { TableCellProps, TableHeaderCellProps, CheckboxProps } from '@servicetitan/design-system';
1
+ import type { ComponentType, SyntheticEvent, FC } from 'react';
2
+ import type { TableCellProps, TableHeaderCellProps, CheckboxProps } from '@servicetitan/design-system';
3
3
  export type SelectionControlType = ComponentType<CheckboxProps<never>>;
4
4
  interface SelectColumnCellProps extends TableCellProps {
5
5
  isRowSelectable?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"select-cell.d.ts","sourceRoot":"","sources":["../../src/select-cell/select-cell.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,EAAE,EAAc,MAAM,OAAO,CAAC;AACtE,OAAO,EACH,cAAc,EACd,oBAAoB,EAEpB,aAAa,EAChB,MAAM,6BAA6B,CAAC;AAKrC,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AAEvE,UAAU,qBAAsB,SAAQ,cAAc;IAClD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAClC;AAED,UAAU,qBAAsB,SAAQ,oBAAoB;IACxD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAClC;AAED,UAAU,eAAe;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,CAAA;KAAE,KAAK,IAAI,CAAC;IAC3E,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAClC;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAa1C,CAAC;AAGF,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA4BtD,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAOtD,CAAC"}
1
+ {"version":3,"file":"select-cell.d.ts","sourceRoot":"","sources":["../../src/select-cell/select-cell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,EAAE,EAAc,MAAM,OAAO,CAAC;AAC3E,OAAO,KAAK,EACR,cAAc,EACd,oBAAoB,EACpB,aAAa,EAChB,MAAM,6BAA6B,CAAC;AAMrC,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AAEvE,UAAU,qBAAsB,SAAQ,cAAc;IAClD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAClC;AAED,UAAU,qBAAsB,SAAQ,oBAAoB;IACxD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAClC;AAED,UAAU,eAAe;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,CAAA;KAAE,KAAK,IAAI,CAAC;IAC3E,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAClC;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAa1C,CAAC;AAGF,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA4BtD,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAOtD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/select-cell/select-cell.tsx"],"sourcesContent":["import { ComponentType, SyntheticEvent, FC, MouseEvent } from 'react';\nimport {\n TableCellProps,\n TableHeaderCellProps,\n Checkbox,\n CheckboxProps,\n} from '@servicetitan/design-system';\nimport classNames from 'classnames';\nimport * as Styles from './select-cell.module.css';\nimport { useTdProps } from '../utils/use-td-props';\n\nexport type SelectionControlType = ComponentType<CheckboxProps<never>>;\n\ninterface SelectColumnCellProps extends TableCellProps {\n isRowSelectable?: boolean;\n control?: SelectionControlType;\n}\n\ninterface SelectHeaderCellProps extends TableHeaderCellProps {\n isSomeRowsSelected?: boolean;\n control?: SelectionControlType;\n}\n\ninterface SelectCellProps {\n checked: boolean;\n disabled?: boolean;\n indeterminate?: boolean;\n selectionChange?: (event: { syntheticEvent: SyntheticEvent<any> }) => void;\n control?: SelectionControlType;\n}\n\nexport const SelectCell: FC<SelectCellProps> = ({\n selectionChange,\n control: Control = Checkbox,\n ...props\n}: SelectCellProps) => {\n const onChange = (_0: never, _1: boolean, event: SyntheticEvent<HTMLInputElement>) => {\n if (!selectionChange) {\n return;\n }\n selectionChange({ syntheticEvent: event });\n };\n\n return <Control className={Styles.checkbox} onChange={onChange} {...props} />;\n};\n\nconst stopPropagation = (e: MouseEvent<HTMLTableCellElement>) => e.stopPropagation();\nexport const SelectColumnCell: FC<SelectColumnCellProps> = (props: SelectColumnCellProps) => {\n const tdProps = useTdProps(props);\n\n if (props.rowType === 'groupHeader') {\n return null;\n }\n\n if (props.rowType === 'groupFooter') {\n return <td {...tdProps} />;\n }\n\n return (\n <td\n style={props.style}\n // prevent onRowClick when user misses row selection\n onClick={stopPropagation}\n className={classNames(props.className, 'cursor-default-i')}\n {...tdProps}\n >\n <SelectCell\n checked={props.dataItem.selected}\n disabled={!props.isRowSelectable}\n selectionChange={props.selectionChange}\n indeterminate={props.dataItem.indeterminate}\n control={props.control}\n />\n </td>\n );\n};\n\nexport const SelectHeaderCell: FC<SelectHeaderCellProps> = (props: SelectHeaderCellProps) => (\n <SelectCell\n checked={props.selectionValue}\n indeterminate={props.isSomeRowsSelected}\n selectionChange={props.selectionChange}\n control={props.control}\n />\n);\n"],"names":["Checkbox","classNames","Styles","useTdProps","SelectCell","selectionChange","control","Control","props","onChange","_0","_1","event","syntheticEvent","className","checkbox","stopPropagation","e","SelectColumnCell","tdProps","rowType","td","style","onClick","checked","dataItem","selected","disabled","isRowSelectable","indeterminate","SelectHeaderCell","selectionValue","isSomeRowsSelected"],"mappings":";AACA,SAGIA,QAAQ,QAEL,8BAA8B;AACrC,OAAOC,gBAAgB,aAAa;AACpC,YAAYC,YAAY,2BAA2B;AACnD,SAASC,UAAU,QAAQ,wBAAwB;AAsBnD,OAAO,MAAMC,aAAkC,CAAC,EAC5CC,eAAe,EACfC,SAASC,UAAUP,QAAQ,EAC3B,GAAGQ,OACW;IACd,MAAMC,WAAW,CAACC,IAAWC,IAAaC;QACtC,IAAI,CAACP,iBAAiB;YAClB;QACJ;QACAA,gBAAgB;YAAEQ,gBAAgBD;QAAM;IAC5C;IAEA,qBAAO,KAACL;QAAQO,WAAWZ,OAAOa,QAAQ;QAAEN,UAAUA;QAAW,GAAGD,KAAK;;AAC7E,EAAE;AAEF,MAAMQ,kBAAkB,CAACC,IAAwCA,EAAED,eAAe;AAClF,OAAO,MAAME,mBAA8C,CAACV;IACxD,MAAMW,UAAUhB,WAAWK;IAE3B,IAAIA,MAAMY,OAAO,KAAK,eAAe;QACjC,OAAO;IACX;IAEA,IAAIZ,MAAMY,OAAO,KAAK,eAAe;QACjC,qBAAO,KAACC;YAAI,GAAGF,OAAO;;IAC1B;IAEA,qBACI,KAACE;QACGC,OAAOd,MAAMc,KAAK;QAClB,oDAAoD;QACpDC,SAASP;QACTF,WAAWb,WAAWO,MAAMM,SAAS,EAAE;QACtC,GAAGK,OAAO;kBAEX,cAAA,KAACf;YACGoB,SAAShB,MAAMiB,QAAQ,CAACC,QAAQ;YAChCC,UAAU,CAACnB,MAAMoB,eAAe;YAChCvB,iBAAiBG,MAAMH,eAAe;YACtCwB,eAAerB,MAAMiB,QAAQ,CAACI,aAAa;YAC3CvB,SAASE,MAAMF,OAAO;;;AAItC,EAAE;AAEF,OAAO,MAAMwB,mBAA8C,CAACtB,sBACxD,KAACJ;QACGoB,SAAShB,MAAMuB,cAAc;QAC7BF,eAAerB,MAAMwB,kBAAkB;QACvC3B,iBAAiBG,MAAMH,eAAe;QACtCC,SAASE,MAAMF,OAAO;OAE5B"}
1
+ {"version":3,"sources":["../../src/select-cell/select-cell.tsx"],"sourcesContent":["import type { ComponentType, SyntheticEvent, FC, MouseEvent } from 'react';\nimport type {\n TableCellProps,\n TableHeaderCellProps,\n CheckboxProps,\n} from '@servicetitan/design-system';\nimport { Checkbox } from '@servicetitan/design-system';\nimport classNames from 'classnames';\nimport * as Styles from './select-cell.module.css';\nimport { useTdProps } from '../utils/use-td-props';\n\nexport type SelectionControlType = ComponentType<CheckboxProps<never>>;\n\ninterface SelectColumnCellProps extends TableCellProps {\n isRowSelectable?: boolean;\n control?: SelectionControlType;\n}\n\ninterface SelectHeaderCellProps extends TableHeaderCellProps {\n isSomeRowsSelected?: boolean;\n control?: SelectionControlType;\n}\n\ninterface SelectCellProps {\n checked: boolean;\n disabled?: boolean;\n indeterminate?: boolean;\n selectionChange?: (event: { syntheticEvent: SyntheticEvent<any> }) => void;\n control?: SelectionControlType;\n}\n\nexport const SelectCell: FC<SelectCellProps> = ({\n selectionChange,\n control: Control = Checkbox,\n ...props\n}: SelectCellProps) => {\n const onChange = (_0: never, _1: boolean, event: SyntheticEvent<HTMLInputElement>) => {\n if (!selectionChange) {\n return;\n }\n selectionChange({ syntheticEvent: event });\n };\n\n return <Control className={Styles.checkbox} onChange={onChange} {...props} />;\n};\n\nconst stopPropagation = (e: MouseEvent<HTMLTableCellElement>) => e.stopPropagation();\nexport const SelectColumnCell: FC<SelectColumnCellProps> = (props: SelectColumnCellProps) => {\n const tdProps = useTdProps(props);\n\n if (props.rowType === 'groupHeader') {\n return null;\n }\n\n if (props.rowType === 'groupFooter') {\n return <td {...tdProps} />;\n }\n\n return (\n <td\n style={props.style}\n // prevent onRowClick when user misses row selection\n onClick={stopPropagation}\n className={classNames(props.className, 'cursor-default-i')}\n {...tdProps}\n >\n <SelectCell\n checked={props.dataItem.selected}\n disabled={!props.isRowSelectable}\n selectionChange={props.selectionChange}\n indeterminate={props.dataItem.indeterminate}\n control={props.control}\n />\n </td>\n );\n};\n\nexport const SelectHeaderCell: FC<SelectHeaderCellProps> = (props: SelectHeaderCellProps) => (\n <SelectCell\n checked={props.selectionValue}\n indeterminate={props.isSomeRowsSelected}\n selectionChange={props.selectionChange}\n control={props.control}\n />\n);\n"],"names":["Checkbox","classNames","Styles","useTdProps","SelectCell","selectionChange","control","Control","props","onChange","_0","_1","event","syntheticEvent","className","checkbox","stopPropagation","e","SelectColumnCell","tdProps","rowType","td","style","onClick","checked","dataItem","selected","disabled","isRowSelectable","indeterminate","SelectHeaderCell","selectionValue","isSomeRowsSelected"],"mappings":";AAMA,SAASA,QAAQ,QAAQ,8BAA8B;AACvD,OAAOC,gBAAgB,aAAa;AACpC,YAAYC,YAAY,2BAA2B;AACnD,SAASC,UAAU,QAAQ,wBAAwB;AAsBnD,OAAO,MAAMC,aAAkC,CAAC,EAC5CC,eAAe,EACfC,SAASC,UAAUP,QAAQ,EAC3B,GAAGQ,OACW;IACd,MAAMC,WAAW,CAACC,IAAWC,IAAaC;QACtC,IAAI,CAACP,iBAAiB;YAClB;QACJ;QACAA,gBAAgB;YAAEQ,gBAAgBD;QAAM;IAC5C;IAEA,qBAAO,KAACL;QAAQO,WAAWZ,OAAOa,QAAQ;QAAEN,UAAUA;QAAW,GAAGD,KAAK;;AAC7E,EAAE;AAEF,MAAMQ,kBAAkB,CAACC,IAAwCA,EAAED,eAAe;AAClF,OAAO,MAAME,mBAA8C,CAACV;IACxD,MAAMW,UAAUhB,WAAWK;IAE3B,IAAIA,MAAMY,OAAO,KAAK,eAAe;QACjC,OAAO;IACX;IAEA,IAAIZ,MAAMY,OAAO,KAAK,eAAe;QACjC,qBAAO,KAACC;YAAI,GAAGF,OAAO;;IAC1B;IAEA,qBACI,KAACE;QACGC,OAAOd,MAAMc,KAAK;QAClB,oDAAoD;QACpDC,SAASP;QACTF,WAAWb,WAAWO,MAAMM,SAAS,EAAE;QACtC,GAAGK,OAAO;kBAEX,cAAA,KAACf;YACGoB,SAAShB,MAAMiB,QAAQ,CAACC,QAAQ;YAChCC,UAAU,CAACnB,MAAMoB,eAAe;YAChCvB,iBAAiBG,MAAMH,eAAe;YACtCwB,eAAerB,MAAMiB,QAAQ,CAACI,aAAa;YAC3CvB,SAASE,MAAMF,OAAO;;;AAItC,EAAE;AAEF,OAAO,MAAMwB,mBAA8C,CAACtB,sBACxD,KAACJ;QACGoB,SAAShB,MAAMuB,cAAc;QAC7BF,eAAerB,MAAMwB,kBAAkB;QACvC3B,iBAAiBG,MAAMH,eAAe;QACtCC,SAASE,MAAMF,OAAO;OAE5B"}
@@ -1,9 +1,10 @@
1
- import { ReactElement } from 'react';
2
- import { AggregateDescriptor, CompositeFilterDescriptor, GroupDescriptor, SortDescriptor, DataResult, GroupResult, DataSource, IdType } from '@servicetitan/data-query';
3
- import { ExcelExport, ExcelExportData, ExcelExportColumnProps } from '@progress/kendo-react-excel-export';
4
- import { TableExpandChangeEvent, TableFilterChangeEvent, TableGroupChangeEvent, TablePageChangeEvent, TableSortChangeEvent } from '@servicetitan/design-system';
1
+ import type { ReactElement } from 'react';
2
+ import type { AggregateDescriptor, CompositeFilterDescriptor, GroupDescriptor, SortDescriptor, DataResult, GroupResult, DataSource, IdType } from '@servicetitan/data-query';
3
+ import type { ExcelExportData, ExcelExportColumnProps } from '@progress/kendo-react-excel-export';
4
+ import { ExcelExport } from '@progress/kendo-react-excel-export';
5
+ import type { TableExpandChangeEvent, TableFilterChangeEvent, TableGroupChangeEvent, TablePageChangeEvent, TableSortChangeEvent } from '@servicetitan/design-system';
5
6
  import { GridPDFExport as TablePDFExport } from '@progress/kendo-react-pdf';
6
- import { WorkbookOptions } from '@progress/kendo-ooxml';
7
+ import type { WorkbookOptions } from '@progress/kendo-ooxml';
7
8
  import { FormState, FieldState } from 'formstate';
8
9
  export type Selectable<T> = {
9
10
  readonly selected: boolean | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"table-state.d.ts","sourceRoot":"","sources":["../src/table-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table-state.d.ts","sourceRoot":"","sources":["../src/table-state.ts"],"names":[],"mappings":"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"}