@servicetitan/table 31.2.0 → 31.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 (181) hide show
  1. package/dist/demo/column-hiding/index.js +1 -0
  2. package/dist/demo/column-hiding/index.js.map +1 -1
  3. package/dist/demo/column-hiding/product.js +7 -6
  4. package/dist/demo/column-hiding/product.js.map +1 -1
  5. package/dist/demo/column-hiding/products.js +12 -11
  6. package/dist/demo/column-hiding/products.js.map +1 -1
  7. package/dist/demo/column-hiding/table.js +126 -32
  8. package/dist/demo/column-hiding/table.js.map +1 -1
  9. package/dist/demo/column-hiding/table.store.js +30 -27
  10. package/dist/demo/column-hiding/table.store.js.map +1 -1
  11. package/dist/demo/filters/async-select-filter.js +59 -12
  12. package/dist/demo/filters/async-select-filter.js.map +1 -1
  13. package/dist/demo/filters/categories.js +20 -16
  14. package/dist/demo/filters/categories.js.map +1 -1
  15. package/dist/demo/filters/multiselect-filter.js +37 -5
  16. package/dist/demo/filters/multiselect-filter.js.map +1 -1
  17. package/dist/demo/filters/range-filter.js +104 -10
  18. package/dist/demo/filters/range-filter.js.map +1 -1
  19. package/dist/demo/filters/select-filter.js +139 -41
  20. package/dist/demo/filters/select-filter.js.map +1 -1
  21. package/dist/demo/filters/single-select-filter.js +109 -18
  22. package/dist/demo/filters/single-select-filter.js.map +1 -1
  23. package/dist/demo/filters/table.store.js +77 -86
  24. package/dist/demo/filters/table.store.js.map +1 -1
  25. package/dist/demo/footer-page-size/index.js +1 -0
  26. package/dist/demo/footer-page-size/index.js.map +1 -1
  27. package/dist/demo/footer-page-size/table.js +82 -6
  28. package/dist/demo/footer-page-size/table.js.map +1 -1
  29. package/dist/demo/index.js +1 -0
  30. package/dist/demo/index.js.map +1 -1
  31. package/dist/demo/master-detail/detail-table.js +41 -9
  32. package/dist/demo/master-detail/detail-table.js.map +1 -1
  33. package/dist/demo/master-detail/detail-table.store.js +60 -56
  34. package/dist/demo/master-detail/detail-table.store.js.map +1 -1
  35. package/dist/demo/master-detail/index.js +1 -0
  36. package/dist/demo/master-detail/index.js.map +1 -1
  37. package/dist/demo/master-detail/master-table.store.js +65 -61
  38. package/dist/demo/master-detail/master-table.store.js.map +1 -1
  39. package/dist/demo/master-detail/product-detail.js +2 -1
  40. package/dist/demo/master-detail/product-detail.js.map +1 -1
  41. package/dist/demo/master-detail/product-details.js +10 -9
  42. package/dist/demo/master-detail/product-details.js.map +1 -1
  43. package/dist/demo/master-detail/product.js +7 -6
  44. package/dist/demo/master-detail/product.js.map +1 -1
  45. package/dist/demo/master-detail/products.js +12 -11
  46. package/dist/demo/master-detail/products.js.map +1 -1
  47. package/dist/demo/master-detail/table-master-detail.js +39 -8
  48. package/dist/demo/master-detail/table-master-detail.js.map +1 -1
  49. package/dist/demo/overview/actions-cell.js +47 -10
  50. package/dist/demo/overview/actions-cell.js.map +1 -1
  51. package/dist/demo/overview/index.js +1 -0
  52. package/dist/demo/overview/index.js.map +1 -1
  53. package/dist/demo/overview/product.js +7 -6
  54. package/dist/demo/overview/product.js.map +1 -1
  55. package/dist/demo/overview/products.js +15 -14
  56. package/dist/demo/overview/products.js.map +1 -1
  57. package/dist/demo/overview/table.js +176 -21
  58. package/dist/demo/overview/table.js.map +1 -1
  59. package/dist/demo/overview/table.store.js +45 -51
  60. package/dist/demo/overview/table.store.js.map +1 -1
  61. package/dist/demo/row-details/index.js +1 -0
  62. package/dist/demo/row-details/index.js.map +1 -1
  63. package/dist/demo/row-details/row-details-table.js +52 -5
  64. package/dist/demo/row-details/row-details-table.js.map +1 -1
  65. package/dist/demo/row-details/row-details-table.store.js +27 -19
  66. package/dist/demo/row-details/row-details-table.store.js.map +1 -1
  67. package/dist/demo/state-caching/beverages.js +11 -10
  68. package/dist/demo/state-caching/beverages.js.map +1 -1
  69. package/dist/demo/state-caching/index.js +1 -0
  70. package/dist/demo/state-caching/index.js.map +1 -1
  71. package/dist/demo/state-caching/product.js +2 -1
  72. package/dist/demo/state-caching/product.js.map +1 -1
  73. package/dist/demo/state-caching/products.js +12 -11
  74. package/dist/demo/state-caching/products.js.map +1 -1
  75. package/dist/demo/state-caching/state-caching-table.js +44 -3
  76. package/dist/demo/state-caching/state-caching-table.js.map +1 -1
  77. package/dist/demo/state-caching/state-caching-table.store.js +42 -54
  78. package/dist/demo/state-caching/state-caching-table.store.js.map +1 -1
  79. package/dist/details/expand-column.js +31 -7
  80. package/dist/details/expand-column.js.map +1 -1
  81. package/dist/details/index.js +1 -0
  82. package/dist/details/index.js.map +1 -1
  83. package/dist/editable-cell/boolean-editable-cell.js +15 -4
  84. package/dist/editable-cell/boolean-editable-cell.js.map +1 -1
  85. package/dist/editable-cell/get-action-cell.js +14 -7
  86. package/dist/editable-cell/get-action-cell.js.map +1 -1
  87. package/dist/editable-cell/get-editable-cell.js +16 -8
  88. package/dist/editable-cell/get-editable-cell.js.map +1 -1
  89. package/dist/editable-cell/get-select-editable-cell.js +19 -5
  90. package/dist/editable-cell/get-select-editable-cell.js.map +1 -1
  91. package/dist/editable-cell/index.js +1 -0
  92. package/dist/editable-cell/index.js.map +1 -1
  93. package/dist/editable-cell/text-editable-cell.js +23 -5
  94. package/dist/editable-cell/text-editable-cell.js.map +1 -1
  95. package/dist/export/export.js +38 -1
  96. package/dist/export/export.js.map +1 -1
  97. package/dist/export/export.module.css.d.ts +3 -0
  98. package/dist/export/index.js +1 -0
  99. package/dist/export/index.js.map +1 -1
  100. package/dist/filters/async-select/async-select-filter.js +167 -132
  101. package/dist/filters/async-select/async-select-filter.js.map +1 -1
  102. package/dist/filters/column-menu-filters.js +39 -8
  103. package/dist/filters/column-menu-filters.js.map +1 -1
  104. package/dist/filters/datetime-filter/datetime-filter.js +73 -50
  105. package/dist/filters/datetime-filter/datetime-filter.js.map +1 -1
  106. package/dist/filters/field-values-filter.js +80 -72
  107. package/dist/filters/field-values-filter.js.map +1 -1
  108. package/dist/filters/index.js +1 -0
  109. package/dist/filters/index.js.map +1 -1
  110. package/dist/filters/multiselect-filter/multiselect-filter.js +77 -73
  111. package/dist/filters/multiselect-filter/multiselect-filter.js.map +1 -1
  112. package/dist/filters/numeric-filter-extended/numeric-extended-operators.js +10 -3
  113. package/dist/filters/numeric-filter-extended/numeric-extended-operators.js.map +1 -1
  114. package/dist/filters/numeric-filter-extended/numeric-filter-extended.js +39 -16
  115. package/dist/filters/numeric-filter-extended/numeric-filter-extended.js.map +1 -1
  116. package/dist/filters/range-filter/range-filter.js +76 -72
  117. package/dist/filters/range-filter/range-filter.js.map +1 -1
  118. package/dist/filters/select-filter/object-search.js +4 -3
  119. package/dist/filters/select-filter/object-search.js.map +1 -1
  120. package/dist/filters/select-filter/operators.js +6 -5
  121. package/dist/filters/select-filter/operators.js.map +1 -1
  122. package/dist/filters/select-filter/select-filter.js +180 -145
  123. package/dist/filters/select-filter/select-filter.js.map +1 -1
  124. package/dist/filters/select-filter/value-getter.js +2 -1
  125. package/dist/filters/select-filter/value-getter.js.map +1 -1
  126. package/dist/filters/single-select/single-select-filter.js +29 -15
  127. package/dist/filters/single-select/single-select-filter.js.map +1 -1
  128. package/dist/filters/standard-filter-with-multiselect/filter-cell-ext.js +114 -67
  129. package/dist/filters/standard-filter-with-multiselect/filter-cell-ext.js.map +1 -1
  130. package/dist/filters/standard-filter-with-multiselect/filter-cell-ext.module.css.d.ts +7 -0
  131. package/dist/filters/standard-filter-with-multiselect/multiselect-operators.js +10 -3
  132. package/dist/filters/standard-filter-with-multiselect/multiselect-operators.js.map +1 -1
  133. package/dist/filters/standard-filter-with-multiselect/standard-filter-with-multiselect.js +77 -55
  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.js +23 -10
  136. package/dist/filters/standard-filter-with-multiselect/table-column-menu-filter-ext.js.map +1 -1
  137. package/dist/filters/time-filter/time-filter.js +63 -49
  138. package/dist/filters/time-filter/time-filter.js.map +1 -1
  139. package/dist/index.js +4 -2
  140. package/dist/index.js.map +1 -1
  141. package/dist/select-cell/index.js +1 -0
  142. package/dist/select-cell/index.js.map +1 -1
  143. package/dist/select-cell/select-cell.js +36 -11
  144. package/dist/select-cell/select-cell.js.map +1 -1
  145. package/dist/select-cell/select-cell.module.css.d.ts +3 -0
  146. package/dist/table-state.js +479 -660
  147. package/dist/table-state.js.map +1 -1
  148. package/dist/table.js +235 -250
  149. package/dist/table.js.map +1 -1
  150. package/dist/table.module.css.d.ts +5 -0
  151. package/dist/use-observing-table-state/demo/components/use-observing-table-state-demo.js +97 -5
  152. package/dist/use-observing-table-state/demo/components/use-observing-table-state-demo.js.map +1 -1
  153. package/dist/use-observing-table-state/demo/stores/use-observing-table-state-demo.store.js +71 -97
  154. package/dist/use-observing-table-state/demo/stores/use-observing-table-state-demo.store.js.map +1 -1
  155. package/dist/use-observing-table-state/index.js +1 -0
  156. package/dist/use-observing-table-state/index.js.map +1 -1
  157. package/dist/use-observing-table-state/use-observing-table-state.js +26 -20
  158. package/dist/use-observing-table-state/use-observing-table-state.js.map +1 -1
  159. package/dist/utils/filters.js +14 -9
  160. package/dist/utils/filters.js.map +1 -1
  161. package/dist/utils/use-td-props.js +3 -2
  162. package/dist/utils/use-td-props.js.map +1 -1
  163. package/package.json +13 -13
  164. package/dist/filters/async-select/async-select-filter.stories.js +0 -7
  165. package/dist/filters/async-select/async-select-filter.stories.js.map +0 -1
  166. package/dist/filters/multiselect-filter/multiselect-filter.stories.js +0 -7
  167. package/dist/filters/multiselect-filter/multiselect-filter.stories.js.map +0 -1
  168. package/dist/filters/range-filter/range-filter.stories.js +0 -9
  169. package/dist/filters/range-filter/range-filter.stories.js.map +0 -1
  170. package/dist/filters/select-filter/__tests__/object-search.test.js +0 -28
  171. package/dist/filters/select-filter/__tests__/object-search.test.js.map +0 -1
  172. package/dist/filters/select-filter/select-filter.stories.js +0 -8
  173. package/dist/filters/select-filter/select-filter.stories.js.map +0 -1
  174. package/dist/filters/single-select/single-select-filter.stories.js +0 -8
  175. package/dist/filters/single-select/single-select-filter.stories.js.map +0 -1
  176. package/dist/table.stories.js +0 -12
  177. package/dist/table.stories.js.map +0 -1
  178. package/dist/use-observing-table-state/use-observing-table-state.stories.js +0 -11
  179. package/dist/use-observing-table-state/use-observing-table-state.stories.js.map +0 -1
  180. package/dist/utils/__tests__/filters.test.js +0 -24
  181. package/dist/utils/__tests__/filters.test.js.map +0 -1
@@ -2,85 +2,132 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { runInAction } from 'mobx';
3
3
  import { observer, useLocalStore } from 'mobx-react';
4
4
  import { multiselectOperators, isMultiselectOperator } from './multiselect-operators';
5
- import { DropDownList, MultiSelect, } from '@progress/kendo-react-dropdowns';
6
- import { IsUnaryFilter, cellOperatorChange, } from '@progress/kendo-react-grid/dist/npm/filterCommon';
5
+ import { DropDownList, MultiSelect } from '@progress/kendo-react-dropdowns';
6
+ import { IsUnaryFilter, cellOperatorChange } from '@progress/kendo-react-grid/dist/npm/filterCommon';
7
7
  import { Icon, Tooltip } from '@servicetitan/design-system';
8
8
  import * as Styles from './filter-cell-ext.module.css';
9
9
  import classNames from 'classnames';
10
10
  // like standard filter cell (rendered for string type), but with support of multiselect operators
11
- export const FilterCellExt = observer(props => {
12
- const store = useLocalStore(oprops => ({
13
- get operators() {
14
- return multiselectOperators.concat(oprops.onlyMultiselectAndEmptyOperators
15
- ? oprops.operators.filter(o => o.operator === 'isempty' || o.operator === 'isnotempty')
16
- : oprops.operators);
17
- },
18
- get operatorValue() {
19
- return this.operators.find(item => item.operator === oprops.operator);
20
- },
21
- searchQuery: '',
22
- filterChange(event) {
23
- runInAction(() => (this.searchQuery = event.filter.value));
24
- },
25
- get filteredValuesSet() {
26
- const queryLC = this.searchQuery.toLowerCase();
27
- return oprops.options.filter(v => v.textLC.includes(queryLC));
28
- },
29
- get onlyFirstValues() {
30
- return oprops.maxFoundValues &&
31
- oprops.maxFoundValues < this.filteredValuesSet.length
32
- ? oprops.maxFoundValues
33
- : false;
34
- },
35
- get filteredVisibleValues() {
36
- return this.onlyFirstValues
37
- ? this.filteredValuesSet.slice(0, this.onlyFirstValues)
38
- : this.filteredValuesSet;
39
- },
40
- get valueTextMap() {
41
- return new Map(oprops.options.map(o => [o.value, o.text]));
42
- },
43
- get multiselectValue() {
44
- return Array.isArray(oprops.value)
45
- ? oprops.value.map(v => {
46
- var _a;
47
- return ({
11
+ export const FilterCellExt = observer((props)=>{
12
+ const store = useLocalStore((oprops)=>({
13
+ get operators () {
14
+ return multiselectOperators.concat(oprops.onlyMultiselectAndEmptyOperators ? oprops.operators.filter((o)=>o.operator === 'isempty' || o.operator === 'isnotempty') : oprops.operators);
15
+ },
16
+ get operatorValue () {
17
+ return this.operators.find((item)=>item.operator === oprops.operator);
18
+ },
19
+ searchQuery: '',
20
+ filterChange (event) {
21
+ runInAction(()=>this.searchQuery = event.filter.value);
22
+ },
23
+ get filteredValuesSet () {
24
+ const queryLC = this.searchQuery.toLowerCase();
25
+ return oprops.options.filter((v)=>v.textLC.includes(queryLC));
26
+ },
27
+ get onlyFirstValues () {
28
+ return oprops.maxFoundValues && oprops.maxFoundValues < this.filteredValuesSet.length ? oprops.maxFoundValues : false;
29
+ },
30
+ get filteredVisibleValues () {
31
+ return this.onlyFirstValues ? this.filteredValuesSet.slice(0, this.onlyFirstValues) : this.filteredValuesSet;
32
+ },
33
+ get valueTextMap () {
34
+ return new Map(oprops.options.map((o)=>[
35
+ o.value,
36
+ o.text
37
+ ]));
38
+ },
39
+ get multiselectValue () {
40
+ return Array.isArray(oprops.value) ? oprops.value.map((v)=>{
41
+ var _this_valueTextMap_get;
42
+ return {
48
43
  value: v,
49
- text: (_a = this.valueTextMap.get(v)) !== null && _a !== void 0 ? _a : v.toString(),
50
- });
51
- })
52
- : [];
53
- },
54
- }), props);
55
- const { operator = '', onChange, allowCustomValues, multiselectItemRender, multiselectTagRender, multiselectListNoDataRender, } = props;
56
- const handleInputChange = (e) => onChange({
57
- operator,
58
- value: e.target.value,
59
- syntheticEvent: e,
60
- });
61
- const handleMultiselectChange = (e) => {
62
- const newValue = e.value.map((v) => { var _a; return (_a = v.value) !== null && _a !== void 0 ? _a : (props.handleCustomValuesAsNumber ? +v.text : v.text); });
44
+ text: (_this_valueTextMap_get = this.valueTextMap.get(v)) !== null && _this_valueTextMap_get !== void 0 ? _this_valueTextMap_get : v.toString()
45
+ };
46
+ }) : [];
47
+ }
48
+ }), props);
49
+ const { operator = '', onChange, allowCustomValues, multiselectItemRender, multiselectTagRender, multiselectListNoDataRender } = props;
50
+ const handleInputChange = (e)=>onChange({
51
+ operator,
52
+ value: e.target.value,
53
+ syntheticEvent: e
54
+ });
55
+ const handleMultiselectChange = (e)=>{
56
+ const newValue = e.value.map((v)=>{
57
+ var _v_value;
58
+ return (_v_value = v.value) !== null && _v_value !== void 0 ? _v_value : props.handleCustomValuesAsNumber ? +v.text : v.text;
59
+ });
63
60
  onChange({
64
61
  operator,
65
- value: newValue.length ? newValue : '', // for Kendo to handle empty array as an empty value TODO: check if there is another way
66
- syntheticEvent: e.syntheticEvent,
62
+ value: newValue.length ? newValue : '',
63
+ syntheticEvent: e.syntheticEvent
67
64
  });
68
65
  };
69
66
  // conversions for better compatibility when switching plain/array operators
70
- const handleOperatorChange = (event) => {
71
- const newValue = isMultiselectOperator(operator) === isMultiselectOperator(event.target.value.operator)
72
- ? props.value
73
- : '';
67
+ const handleOperatorChange = (event)=>{
68
+ const newValue = isMultiselectOperator(operator) === isMultiselectOperator(event.target.value.operator) ? props.value : '';
74
69
  cellOperatorChange(event, newValue, onChange);
75
70
  };
76
- const allowCustomAdd = (allowCustomValues &&
77
- store.searchQuery &&
78
- (!props.handleCustomValuesAsNumber || !isNaN(+store.searchQuery))) ||
79
- false;
80
- return (_jsxs("div", { children: [_jsx(DropDownList, { value: store.operatorValue, onChange: handleOperatorChange, data: store.operators, className: "m-b-1", textField: "text" }), (typeof operator !== 'string' || !IsUnaryFilter(operator)) &&
81
- (isMultiselectOperator(operator) ? (_jsx(MultiSelect, { value: store.multiselectValue, onChange: handleMultiselectChange, filterable: true, onFilterChange: store.filterChange, allowCustom: allowCustomAdd, data: store.filteredVisibleValues, textField: "text", dataItemKey: "value", className: classNames('m-b-1', Styles.multiSelect), header: allowCustomAdd && _jsx("div", { className: Styles.customItemAddMarker }), footer: allowCustomAdd ? (_jsxs("div", { className: Styles.returnToUse, children: [_jsx(Icon, { name: "keyboard_return" }), "to create filter"] })) : (store.onlyFirstValues && (_jsxs("div", { className: Styles.returnToUse, children: ["First ", store.onlyFirstValues, " values are shown. ", _jsx("br", {}), "Type to search for other values."] }))), itemRender: multiselectItemRender, tagRender: multiselectTagRender !== null && multiselectTagRender !== void 0 ? multiselectTagRender : defaultMultiselectTagRender, listNoDataRender: multiselectListNoDataRender })) : (_jsx("input", { className: "k-input k-input-md k-rounded-md k-input-solid m-b-1", value: props.value, onChange: handleInputChange })))] }));
71
+ const allowCustomAdd = allowCustomValues && store.searchQuery && (!props.handleCustomValuesAsNumber || !isNaN(+store.searchQuery)) || false;
72
+ return /*#__PURE__*/ _jsxs("div", {
73
+ children: [
74
+ /*#__PURE__*/ _jsx(DropDownList, {
75
+ value: store.operatorValue,
76
+ onChange: handleOperatorChange,
77
+ data: store.operators,
78
+ className: "m-b-1",
79
+ textField: "text"
80
+ }),
81
+ (typeof operator !== 'string' || !IsUnaryFilter(operator)) && (isMultiselectOperator(operator) ? /*#__PURE__*/ _jsx(MultiSelect, {
82
+ value: store.multiselectValue,
83
+ onChange: handleMultiselectChange,
84
+ filterable: true,
85
+ onFilterChange: store.filterChange,
86
+ allowCustom: allowCustomAdd,
87
+ data: store.filteredVisibleValues,
88
+ textField: "text",
89
+ dataItemKey: "value",
90
+ className: classNames('m-b-1', Styles.multiSelect),
91
+ header: allowCustomAdd && /*#__PURE__*/ _jsx("div", {
92
+ className: Styles.customItemAddMarker
93
+ }),
94
+ footer: allowCustomAdd ? /*#__PURE__*/ _jsxs("div", {
95
+ className: Styles.returnToUse,
96
+ children: [
97
+ /*#__PURE__*/ _jsx(Icon, {
98
+ name: "keyboard_return"
99
+ }),
100
+ "to create filter"
101
+ ]
102
+ }) : store.onlyFirstValues && /*#__PURE__*/ _jsxs("div", {
103
+ className: Styles.returnToUse,
104
+ children: [
105
+ "First ",
106
+ store.onlyFirstValues,
107
+ " values are shown. ",
108
+ /*#__PURE__*/ _jsx("br", {}),
109
+ "Type to search for other values."
110
+ ]
111
+ }),
112
+ itemRender: multiselectItemRender,
113
+ tagRender: multiselectTagRender !== null && multiselectTagRender !== void 0 ? multiselectTagRender : defaultMultiselectTagRender,
114
+ listNoDataRender: multiselectListNoDataRender
115
+ }) : /*#__PURE__*/ _jsx("input", {
116
+ className: "k-input k-input-md k-rounded-md k-input-solid m-b-1",
117
+ value: props.value,
118
+ onChange: handleInputChange
119
+ }))
120
+ ]
121
+ });
82
122
  });
83
- const defaultMultiselectTagRender = (tagData, li) => {
84
- return (_jsx(Tooltip, { portal: true, text: tagData.text, className: Styles.multiSelectTagTooltipWrapper, popperClassName: Styles.multiSelectTagTooltip, children: li }));
123
+ const defaultMultiselectTagRender = (tagData, li)=>{
124
+ return /*#__PURE__*/ _jsx(Tooltip, {
125
+ portal: true,
126
+ text: tagData.text,
127
+ className: Styles.multiSelectTagTooltipWrapper,
128
+ popperClassName: Styles.multiSelectTagTooltip,
129
+ children: li
130
+ });
85
131
  };
132
+
86
133
  //# sourceMappingURL=filter-cell-ext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter-cell-ext.js","sourceRoot":"","sources":["../../../src/filters/standard-filter-with-multiselect/filter-cell-ext.tsx"],"names":[],"mappings":"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"}
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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"}
@@ -0,0 +1,7 @@
1
+ export const __esModule: true;
2
+ export const customItemAddMarker: string;
3
+ export const multiSelect: string;
4
+ export const multiSelectTagTooltip: string;
5
+ export const multiSelectTagTooltipWrapper: string;
6
+ export const returnToUse: string;
7
+
@@ -1,6 +1,13 @@
1
1
  export const multiselectOperators = [
2
- { text: 'Is one of', operator: 'in' },
3
- { text: 'Is not one of', operator: 'notin' },
2
+ {
3
+ text: 'Is one of',
4
+ operator: 'in'
5
+ },
6
+ {
7
+ text: 'Is not one of',
8
+ operator: 'notin'
9
+ }
4
10
  ];
5
- export const isMultiselectOperator = (operator) => multiselectOperators.some(o => o.operator === operator);
11
+ export const isMultiselectOperator = (operator)=>multiselectOperators.some((o)=>o.operator === operator);
12
+
6
13
  //# sourceMappingURL=multiselect-operators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"multiselect-operators.js","sourceRoot":"","sources":["../../../src/filters/standard-filter-with-multiselect/multiselect-operators.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAChC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE;IACrC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE;CAC/C,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,QAA2B,EAAE,EAAE,CACjE,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC"}
1
+ {"version":3,"sources":["../../../src/filters/standard-filter-with-multiselect/multiselect-operators.ts"],"sourcesContent":["export const multiselectOperators = [\n { text: 'Is one of', operator: 'in' },\n { text: 'Is not one of', operator: 'notin' },\n];\n\nexport const isMultiselectOperator = (operator: string | Function) =>\n multiselectOperators.some(o => o.operator === operator);\n"],"names":["multiselectOperators","text","operator","isMultiselectOperator","some","o"],"mappings":"AAAA,OAAO,MAAMA,uBAAuB;IAChC;QAAEC,MAAM;QAAaC,UAAU;IAAK;IACpC;QAAED,MAAM;QAAiBC,UAAU;IAAQ;CAC9C,CAAC;AAEF,OAAO,MAAMC,wBAAwB,CAACD,WAClCF,qBAAqBI,IAAI,CAACC,CAAAA,IAAKA,EAAEH,QAAQ,KAAKA,UAAU"}
@@ -7,71 +7,93 @@ import { FilterCellExt } from './filter-cell-ext';
7
7
  /*
8
8
  * StandardFilterWithMultiselect is like standard Kendo filter, but with additional operators 'Is one of' / 'Is not one of'.
9
9
  * Intended to be used with string fields (though it's possible to adopt for number fields as well, if someone will have a need).
10
- */
11
- export function standardFilterWithMultiselect(optionsConfig = {}, filterCellConfig = {}) {
10
+ */ export function standardFilterWithMultiselect(optionsConfig = {}, filterCellConfig = {}) {
12
11
  const optionsConfigFull = {
13
12
  maxExtractedLength: 64,
14
13
  options: [],
15
- ...optionsConfig,
14
+ ...optionsConfig
16
15
  };
17
16
  const filterCellConfigFull = {
18
17
  allowCustomValues: true,
19
18
  maxFoundValues: 1000,
20
- ...filterCellConfig,
19
+ ...filterCellConfig
21
20
  };
22
21
  // Filter UI with data fetcher
23
- const FilterUIWithValues = observer(props => {
24
- const store = useLocalStore(oprops => ({
25
- get field() {
26
- return oprops.firstFilterProps.field;
27
- },
28
- get itemsFromDataSource() {
29
- var _a;
30
- const dataSource = (_a = optionsConfigFull.tableState) === null || _a === void 0 ? void 0 : _a.dataSource;
31
- return dataSource && this.field && fromPromise(dataSource.getData({}));
32
- },
33
- get valuesfromTableState() {
34
- if (!this.itemsFromDataSource ||
35
- !(this.itemsFromDataSource.state === 'fulfilled')) {
36
- return [];
37
- }
38
- return this.itemsFromDataSource.value.data
39
- .map(i => i[this.field])
40
- .filter(v => typeof v === 'number' ||
41
- (typeof v === 'string' &&
42
- v.length > 0 &&
43
- v.length <= optionsConfigFull.maxExtractedLength));
44
- },
45
- get options() {
46
- return Array.from(new Set(this.valuesfromTableState.concat(optionsConfigFull.options))).map(v => {
47
- switch (typeof v) {
48
- case 'string':
49
- return {
50
- value: v,
51
- text: v,
52
- textLC: v.toLowerCase(),
53
- };
54
- case 'number':
55
- return {
56
- value: v,
57
- text: v.toString(),
58
- textLC: v.toString().toLowerCase(),
59
- };
60
- case 'object':
61
- return {
62
- value: v.value,
63
- text: v.text,
64
- textLC: v.text.toLowerCase(),
65
- };
66
- default:
67
- throw 'Incompatible option type.';
22
+ const FilterUIWithValues = observer((props)=>{
23
+ const store = useLocalStore((oprops)=>({
24
+ get field () {
25
+ return oprops.firstFilterProps.field;
26
+ },
27
+ get itemsFromDataSource () {
28
+ var _optionsConfigFull_tableState;
29
+ const dataSource = (_optionsConfigFull_tableState = optionsConfigFull.tableState) === null || _optionsConfigFull_tableState === void 0 ? void 0 : _optionsConfigFull_tableState.dataSource;
30
+ return dataSource && this.field && fromPromise(dataSource.getData({}));
31
+ },
32
+ get valuesfromTableState () {
33
+ if (!this.itemsFromDataSource || !(this.itemsFromDataSource.state === 'fulfilled')) {
34
+ return [];
68
35
  }
69
- });
70
- },
71
- }), props);
72
- const { firstFilterProps, secondFilterProps, hideSecondFilter, logicData, logicValue, onLogicChange, } = props;
73
- return (_jsxs("div", { children: [_jsx(FilterCellExt, { ...firstFilterProps, options: store.options, ...filterCellConfigFull }), !hideSecondFilter && (_jsxs("div", { children: [_jsx(DropDownList, { data: logicData, value: logicValue, onChange: onLogicChange, className: "k-filter-and m-b-1-i", textField: "text" }), _jsx(FilterCellExt, { ...secondFilterProps, options: store.options, ...filterCellConfigFull })] }))] }));
36
+ return this.itemsFromDataSource.value.data.map((i)=>i[this.field]).filter((v)=>typeof v === 'number' || typeof v === 'string' && v.length > 0 && v.length <= optionsConfigFull.maxExtractedLength);
37
+ },
38
+ get options () {
39
+ return Array.from(new Set(this.valuesfromTableState.concat(optionsConfigFull.options))).map((v)=>{
40
+ switch(typeof v){
41
+ case 'string':
42
+ return {
43
+ value: v,
44
+ text: v,
45
+ textLC: v.toLowerCase()
46
+ };
47
+ case 'number':
48
+ return {
49
+ value: v,
50
+ text: v.toString(),
51
+ textLC: v.toString().toLowerCase()
52
+ };
53
+ case 'object':
54
+ return {
55
+ value: v.value,
56
+ text: v.text,
57
+ textLC: v.text.toLowerCase()
58
+ };
59
+ default:
60
+ throw 'Incompatible option type.';
61
+ }
62
+ });
63
+ }
64
+ }), props);
65
+ const { firstFilterProps, secondFilterProps, hideSecondFilter, logicData, logicValue, onLogicChange } = props;
66
+ return /*#__PURE__*/ _jsxs("div", {
67
+ children: [
68
+ /*#__PURE__*/ _jsx(FilterCellExt, {
69
+ ...firstFilterProps,
70
+ options: store.options,
71
+ ...filterCellConfigFull
72
+ }),
73
+ !hideSecondFilter && /*#__PURE__*/ _jsxs("div", {
74
+ children: [
75
+ /*#__PURE__*/ _jsx(DropDownList, {
76
+ data: logicData,
77
+ value: logicValue,
78
+ onChange: onLogicChange,
79
+ className: "k-filter-and m-b-1-i",
80
+ textField: "text"
81
+ }),
82
+ /*#__PURE__*/ _jsx(FilterCellExt, {
83
+ ...secondFilterProps,
84
+ options: store.options,
85
+ ...filterCellConfigFull
86
+ })
87
+ ]
88
+ })
89
+ ]
90
+ });
74
91
  });
75
- return (props) => (_jsx(TableColumnMenuFilterExt, { ...props, filterUI: FilterUIWithValues, expanded: true }));
92
+ return (props)=>/*#__PURE__*/ _jsx(TableColumnMenuFilterExt, {
93
+ ...props,
94
+ filterUI: FilterUIWithValues,
95
+ expanded: true
96
+ });
76
97
  }
98
+
77
99
  //# sourceMappingURL=standard-filter-with-multiselect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standard-filter-with-multiselect.js","sourceRoot":"","sources":["../../../src/filters/standard-filter-with-multiselect/standard-filter-with-multiselect.tsx"],"names":[],"mappings":"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"}
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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"}
@@ -4,17 +4,23 @@ import { getDefaultOperator } from '@progress/kendo-react-grid/dist/npm/filterCo
4
4
  import { multiselectOperators } from './multiselect-operators';
5
5
  // constructor override: if state.filterGroup was filled with default, we override it with new default
6
6
  export class TableColumnMenuFilterExt extends TableColumnMenuFilter {
7
- constructor(props) {
8
- var _a;
7
+ constructor(props){
9
8
  super(props);
10
- const defaultOperator = getDefaultOperator(props.filterOperators, (_a = props.column.filter) !== null && _a !== void 0 ? _a : 'text');
9
+ var _props_column_filter;
10
+ const defaultOperator = getDefaultOperator(props.filterOperators, (_props_column_filter = props.column.filter) !== null && _props_column_filter !== void 0 ? _props_column_filter : 'text');
11
11
  // I know the check is a bit hacky, but that's compensated with its low criticality: even if it fails, nothing really bad happens
12
12
  if (comparer.structural(this.state.filterGroup, {
13
13
  logic: 'and',
14
14
  filters: [
15
- { field: props.column.field, operator: defaultOperator },
16
- { field: props.column.field, operator: defaultOperator },
17
- ],
15
+ {
16
+ field: props.column.field,
17
+ operator: defaultOperator
18
+ },
19
+ {
20
+ field: props.column.field,
21
+ operator: defaultOperator
22
+ }
23
+ ]
18
24
  })) {
19
25
  const newDefaultOperator = multiselectOperators[0].operator;
20
26
  this.state = {
@@ -22,12 +28,19 @@ export class TableColumnMenuFilterExt extends TableColumnMenuFilter {
22
28
  filterGroup: {
23
29
  logic: 'and',
24
30
  filters: [
25
- { field: props.column.field, operator: newDefaultOperator },
26
- { field: props.column.field, operator: newDefaultOperator },
27
- ],
28
- },
31
+ {
32
+ field: props.column.field,
33
+ operator: newDefaultOperator
34
+ },
35
+ {
36
+ field: props.column.field,
37
+ operator: newDefaultOperator
38
+ }
39
+ ]
40
+ }
29
41
  };
30
42
  }
31
43
  }
32
44
  }
45
+
33
46
  //# sourceMappingURL=table-column-menu-filter-ext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-column-menu-filter-ext.js","sourceRoot":"","sources":["../../../src/filters/standard-filter-with-multiselect/table-column-menu-filter-ext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kDAAkD,CAAC;AAEtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,sGAAsG;AACtG,MAAM,OAAO,wBAAyB,SAAQ,qBAAqB;IAC/D,YAAY,KAAiC;;QACzC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEb,MAAM,eAAe,GAAG,kBAAkB,CACtC,KAAK,CAAC,eAAe,EACrB,MAAA,KAAK,CAAC,MAAM,CAAC,MAAM,mCAAI,MAAM,CAChC,CAAC;QACF,iIAAiI;QACjI,IACI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACxC,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE;gBACL,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE;gBACxD,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE;aAC3D;SACJ,CAAC,EACJ,CAAC;YACC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC5D,IAAI,CAAC,KAAK,GAAG;gBACT,GAAG,IAAI,CAAC,KAAK;gBACb,WAAW,EAAE;oBACT,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE;wBACL,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE;wBAC3D,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE;qBAC9D;iBACJ;aACJ,CAAC;QACN,CAAC;IACL,CAAC;CACJ"}
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","constructor","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;IAC1CI,YAAYC,KAAiC,CAAE;QAC3C,KAAK,CAACA;YAIFA;QAFJ,MAAMC,kBAAkBL,mBACpBI,MAAME,eAAe,EACrBF,CAAAA,uBAAAA,MAAMG,MAAM,CAACC,MAAM,cAAnBJ,kCAAAA,uBAAuB;QAE3B,iIAAiI;QACjI,IACIN,SAASW,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,qBAAqBf,oBAAoB,CAAC,EAAE,CAACc,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"}