@servicetitan/table 31.2.0 → 32.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -1,200 +1,235 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
14
+ function _ts_decorate(decorators, target, key, desc) {
2
15
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
16
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
17
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
18
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
19
+ }
20
+ function _ts_metadata(k, v) {
8
21
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
22
+ }
10
23
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
24
  import { Component, Fragment } from 'react';
12
- import { Checkbox, Radio, Input, Spinner, BodyText, } from '@servicetitan/design-system';
13
- import { renderCustomColumnMenuFilter, } from '../column-menu-filters';
25
+ import { Checkbox, Radio, Input, Spinner, BodyText } from '@servicetitan/design-system';
26
+ import { renderCustomColumnMenuFilter } from '../column-menu-filters';
14
27
  import { makeObservable, observable, runInAction, toJS } from 'mobx';
15
28
  import { observer } from 'mobx-react';
16
29
  import { getSimpleValue } from './value-getter';
17
30
  import { objectSearch } from './object-search';
18
31
  import { selectColumnMenuFilterOperators } from './operators';
19
- let SelectorAsync = class SelectorAsync extends Component {
20
- constructor(props) {
21
- super(props);
22
- Object.defineProperty(this, "shownOptions", {
23
- enumerable: true,
24
- configurable: true,
25
- writable: true,
26
- value: []
27
- });
28
- Object.defineProperty(this, "search", {
29
- enumerable: true,
30
- configurable: true,
31
- writable: true,
32
- value: ''
33
- });
34
- Object.defineProperty(this, "error", {
35
- enumerable: true,
36
- configurable: true,
37
- writable: true,
38
- value: false
39
- });
40
- Object.defineProperty(this, "loading", {
41
- enumerable: true,
42
- configurable: true,
43
- writable: true,
44
- value: false
45
- });
46
- Object.defineProperty(this, "handleKeyDown", {
47
- enumerable: true,
48
- configurable: true,
49
- writable: true,
50
- value: (event) => {
51
- if (event.key === 'Enter') {
52
- event.stopPropagation();
53
- }
54
- }
55
- });
56
- Object.defineProperty(this, "handleSearch", {
57
- enumerable: true,
58
- configurable: true,
59
- writable: true,
60
- value: (_0, data) => {
61
- runInAction(() => (this.search = data.value));
62
- this.searchOptions().catch();
63
- }
64
- });
65
- Object.defineProperty(this, "searchOptions", {
66
- enumerable: true,
67
- configurable: true,
68
- writable: true,
69
- value: async () => {
70
- if (this.props.dataFetcher) {
71
- runInAction(() => {
72
- this.loading = true;
73
- });
74
- }
75
- try {
76
- const data = await this.getData();
77
- runInAction(() => {
78
- this.shownOptions = data;
79
- this.error = false;
80
- this.loading = false;
81
- });
82
- }
83
- catch (_a) {
84
- runInAction(() => {
85
- this.error = true;
86
- this.loading = false;
87
- });
88
- }
89
- }
90
- });
91
- Object.defineProperty(this, "getItemKey", {
92
- enumerable: true,
93
- configurable: true,
94
- writable: true,
95
- value: (item, index) => {
96
- return `${index}__${this.props.valueSelector(item)}`;
97
- }
98
- });
99
- makeObservable(this);
100
- }
32
+ class SelectorAsync extends Component {
101
33
  componentDidMount() {
102
34
  this.searchOptions().catch();
103
35
  }
104
36
  render() {
105
- var _a;
37
+ var _this_props_search;
106
38
  const selectedOptions = this.props.selected;
107
- const selected = new Set(selectedOptions.map(opt => this.props.valueSelector(opt)));
39
+ const selected = new Set(selectedOptions.map((opt)=>this.props.valueSelector(opt)));
108
40
  const ItemComponent = this.props.itemComponent;
109
- return (_jsxs(Fragment, { children: [!!this.props.search && (_jsx(Input, { className: "m-x-half m-t-half m-b-2", placeholder: (_a = this.props.search) === null || _a === void 0 ? void 0 : _a.placeholder, onChange: this.handleSearch, onKeyDown: this.handleKeyDown, size: "xsmall", value: this.search })), _jsxs("div", { className: "p-x-half position-relative", onKeyDown: this.handleKeyDown, children: [!!selectedOptions.length && (_jsx("div", { className: "border-bottom m-y-half", children: selectedOptions.map((option, index) => (_jsx(ItemComponent, { option: option, checked: true, renderer: this.props.renderItem, onChange: this.props.onChange }, this.getItemKey(option, index)))) })), this.error ? (_jsx(BodyText, { className: "c-red-500", children: "Unable to load options" })) : this.shownOptions.length ? (this.shownOptions
110
- .filter(opt => !selected.has(this.props.valueSelector(opt)))
111
- .map((option, index) => (_jsx(ItemComponent, { option: option, checked: false, renderer: this.props.renderItem, onChange: this.props.onChange }, this.getItemKey(option, index))))) : this.loading ? (_jsx(BodyText, { children: "\u00A0" })) : (_jsx(BodyText, { subdued: true, children: "No options match search criteria" })), this.loading && (_jsx("div", { className: "position-absolute top-0 bottom-0 left-0 right-0 opacity-disabled bg-white d-f justify-content-center", children: _jsx(Spinner, { size: "tiny" }) }))] })] }));
41
+ return /*#__PURE__*/ _jsxs(Fragment, {
42
+ children: [
43
+ !!this.props.search && /*#__PURE__*/ _jsx(Input, {
44
+ className: "m-x-half m-t-half m-b-2",
45
+ placeholder: (_this_props_search = this.props.search) === null || _this_props_search === void 0 ? void 0 : _this_props_search.placeholder,
46
+ onChange: this.handleSearch,
47
+ onKeyDown: this.handleKeyDown,
48
+ size: "xsmall",
49
+ value: this.search
50
+ }),
51
+ /*#__PURE__*/ _jsxs("div", {
52
+ className: "p-x-half position-relative",
53
+ onKeyDown: this.handleKeyDown,
54
+ children: [
55
+ !!selectedOptions.length && /*#__PURE__*/ _jsx("div", {
56
+ className: "border-bottom m-y-half",
57
+ children: selectedOptions.map((option, index)=>/*#__PURE__*/ _jsx(ItemComponent, {
58
+ option: option,
59
+ checked: true,
60
+ renderer: this.props.renderItem,
61
+ onChange: this.props.onChange
62
+ }, this.getItemKey(option, index)))
63
+ }),
64
+ this.error ? /*#__PURE__*/ _jsx(BodyText, {
65
+ className: "c-red-500",
66
+ children: "Unable to load options"
67
+ }) : this.shownOptions.length ? this.shownOptions.filter((opt)=>!selected.has(this.props.valueSelector(opt))).map((option, index)=>/*#__PURE__*/ _jsx(ItemComponent, {
68
+ option: option,
69
+ checked: false,
70
+ renderer: this.props.renderItem,
71
+ onChange: this.props.onChange
72
+ }, this.getItemKey(option, index))) : this.loading ? /*#__PURE__*/ _jsx(BodyText, {
73
+ children: " "
74
+ }) : /*#__PURE__*/ _jsx(BodyText, {
75
+ subdued: true,
76
+ children: "No options match search criteria"
77
+ }),
78
+ this.loading && /*#__PURE__*/ _jsx("div", {
79
+ className: "position-absolute top-0 bottom-0 left-0 right-0 opacity-disabled bg-white d-f justify-content-center",
80
+ children: /*#__PURE__*/ _jsx(Spinner, {
81
+ size: "tiny"
82
+ })
83
+ })
84
+ ]
85
+ })
86
+ ]
87
+ });
112
88
  }
113
89
  async getData() {
114
- var _a, _b;
90
+ var _this_props_search;
115
91
  if (this.props.dataFetcher) {
116
92
  const { data } = await this.props.dataFetcher({
117
- search: this.search,
93
+ search: this.search
118
94
  });
119
95
  return data;
120
96
  }
121
- let data = (_a = this.props.data) !== null && _a !== void 0 ? _a : [];
122
- if ((_b = this.props.search) === null || _b === void 0 ? void 0 : _b.filter) {
97
+ var _this_props_data;
98
+ let data = (_this_props_data = this.props.data) !== null && _this_props_data !== void 0 ? _this_props_data : [];
99
+ if ((_this_props_search = this.props.search) === null || _this_props_search === void 0 ? void 0 : _this_props_search.filter) {
123
100
  data = data.filter(this.props.search.filter(this.search));
124
101
  }
125
102
  return data;
126
103
  }
127
- };
128
- __decorate([
104
+ constructor(props){
105
+ super(props), _define_property(this, "shownOptions", []), _define_property(this, "search", ''), _define_property(this, "error", false), _define_property(this, "loading", false), _define_property(this, "handleKeyDown", (event)=>{
106
+ if (event.key === 'Enter') {
107
+ event.stopPropagation();
108
+ }
109
+ }), _define_property(this, "handleSearch", (_0, data)=>{
110
+ runInAction(()=>this.search = data.value);
111
+ this.searchOptions().catch();
112
+ }), _define_property(this, "searchOptions", async ()=>{
113
+ if (this.props.dataFetcher) {
114
+ runInAction(()=>{
115
+ this.loading = true;
116
+ });
117
+ }
118
+ try {
119
+ const data = await this.getData();
120
+ runInAction(()=>{
121
+ this.shownOptions = data;
122
+ this.error = false;
123
+ this.loading = false;
124
+ });
125
+ } catch (e) {
126
+ runInAction(()=>{
127
+ this.error = true;
128
+ this.loading = false;
129
+ });
130
+ }
131
+ }), _define_property(this, "getItemKey", (item, index)=>{
132
+ return `${index}__${this.props.valueSelector(item)}`;
133
+ });
134
+ makeObservable(this);
135
+ }
136
+ }
137
+ _ts_decorate([
129
138
  observable,
130
- __metadata("design:type", Array)
139
+ _ts_metadata("design:type", Array)
131
140
  ], SelectorAsync.prototype, "shownOptions", void 0);
132
- __decorate([
133
- observable,
134
- __metadata("design:type", Object)
141
+ _ts_decorate([
142
+ observable
135
143
  ], SelectorAsync.prototype, "search", void 0);
136
- __decorate([
137
- observable,
138
- __metadata("design:type", Object)
144
+ _ts_decorate([
145
+ observable
139
146
  ], SelectorAsync.prototype, "error", void 0);
140
- __decorate([
141
- observable,
142
- __metadata("design:type", Object)
147
+ _ts_decorate([
148
+ observable
143
149
  ], SelectorAsync.prototype, "loading", void 0);
144
- SelectorAsync = __decorate([
150
+ SelectorAsync = _ts_decorate([
145
151
  observer,
146
- __metadata("design:paramtypes", [Object])
152
+ _ts_metadata("design:type", Function),
153
+ _ts_metadata("design:paramtypes", [
154
+ typeof SelectorProps === "undefined" ? Object : SelectorProps
155
+ ])
147
156
  ], SelectorAsync);
148
- const SelectorItemSingle = ({ option, renderer, checked, onChange, }) => {
149
- var _a;
150
- return (_jsx(Radio, { label: (_a = renderer === null || renderer === void 0 ? void 0 : renderer(option)) !== null && _a !== void 0 ? _a : `${option}`, checked: checked, onChange: (_, event) => onChange(option, true, event), className: "m-b-1" }));
157
+ const SelectorItemSingle = ({ option, renderer, checked, onChange })=>{
158
+ var _renderer;
159
+ return /*#__PURE__*/ _jsx(Radio, {
160
+ label: (_renderer = renderer === null || renderer === void 0 ? void 0 : renderer(option)) !== null && _renderer !== void 0 ? _renderer : `${option}`,
161
+ checked: checked,
162
+ onChange: (_, event)=>onChange(option, true, event),
163
+ className: "m-b-1"
164
+ });
151
165
  };
152
- const SelectorItemMultiple = ({ option, renderer, checked, onChange, }) => {
153
- var _a;
154
- return (_jsx(Checkbox, { label: (_a = renderer === null || renderer === void 0 ? void 0 : renderer(option)) !== null && _a !== void 0 ? _a : `${option}`, checked: checked, onChange: (_, checked, event) => onChange(option, checked, event), className: "m-b-1" }));
166
+ const SelectorItemMultiple = ({ option, renderer, checked, onChange })=>{
167
+ var _renderer;
168
+ return /*#__PURE__*/ _jsx(Checkbox, {
169
+ label: (_renderer = renderer === null || renderer === void 0 ? void 0 : renderer(option)) !== null && _renderer !== void 0 ? _renderer : `${option}`,
170
+ checked: checked,
171
+ onChange: (_, checked, event)=>onChange(option, checked, event),
172
+ className: "m-b-1"
173
+ });
155
174
  };
156
175
  export function selectColumnMenuFilter({ dataFetcher, data, search, multiple, valueSelector = getSimpleValue, rowValueSelector = getSimpleValue, renderItem, operator, ...opts }) {
157
- const renderer = renderItem !== null && renderItem !== void 0 ? renderItem : (item => valueSelector(item));
158
- const searchOptions = search
159
- ? {
160
- filter: objectSearch,
161
- ...(typeof search === 'boolean' ? {} : search),
162
- }
163
- : undefined;
176
+ const renderer = renderItem !== null && renderItem !== void 0 ? renderItem : (item)=>valueSelector(item);
177
+ const searchOptions = search ? {
178
+ filter: objectSearch,
179
+ ...typeof search === 'boolean' ? {} : search
180
+ } : undefined;
164
181
  if (multiple) {
165
- const FilterCell = ({ value, onChange }) => {
166
- const handleChange = (option, checked, event) => {
167
- const val = checked
168
- ? (value !== null && value !== void 0 ? value : []).concat(option)
169
- : (value !== null && value !== void 0 ? value : []).filter(opt => valueSelector
170
- ? valueSelector(opt) !== valueSelector(option)
171
- : option !== opt);
182
+ const FilterCell = ({ value, onChange })=>{
183
+ const handleChange = (option, checked, event)=>{
184
+ const val = checked ? (value !== null && value !== void 0 ? value : []).concat(option) : (value !== null && value !== void 0 ? value : []).filter((opt)=>valueSelector ? valueSelector(opt) !== valueSelector(option) : option !== opt);
172
185
  onChange({
173
186
  value: val.length ? toJS(val) : undefined,
174
- operator: val.length
175
- ? (operator !== null && operator !== void 0 ? operator : selectColumnMenuFilterOperators.getContains({
176
- valueSelector,
177
- rowValueSelector,
178
- }))
179
- : '',
180
- syntheticEvent: event,
187
+ operator: val.length ? operator !== null && operator !== void 0 ? operator : selectColumnMenuFilterOperators.getContains({
188
+ valueSelector,
189
+ rowValueSelector
190
+ }) : '',
191
+ syntheticEvent: event
181
192
  });
182
193
  };
183
- return (_jsx(SelectorAsync, { selected: value !== null && value !== void 0 ? value : [], itemComponent: SelectorItemMultiple, onChange: handleChange, search: searchOptions, renderItem: renderer, dataFetcher: dataFetcher, data: data, valueSelector: valueSelector }));
194
+ return /*#__PURE__*/ _jsx(SelectorAsync, {
195
+ selected: value !== null && value !== void 0 ? value : [],
196
+ itemComponent: SelectorItemMultiple,
197
+ onChange: handleChange,
198
+ search: searchOptions,
199
+ renderItem: renderer,
200
+ dataFetcher: dataFetcher,
201
+ data: data,
202
+ valueSelector: valueSelector
203
+ });
184
204
  };
185
205
  return renderCustomColumnMenuFilter(FilterCell, opts);
186
206
  }
187
- const FilterCell = ({ value, onChange }) => {
188
- const handleChange = (option, _, event) => {
207
+ const FilterCell = ({ value, onChange })=>{
208
+ const handleChange = (option, _, event)=>{
189
209
  onChange({
190
210
  value: toJS(option),
191
- operator: operator !== null && operator !== void 0 ? operator : selectColumnMenuFilterOperators.getEquals({ valueSelector, rowValueSelector }),
192
- syntheticEvent: event,
211
+ operator: operator !== null && operator !== void 0 ? operator : selectColumnMenuFilterOperators.getEquals({
212
+ valueSelector,
213
+ rowValueSelector
214
+ }),
215
+ syntheticEvent: event
193
216
  });
194
217
  };
195
- return (_jsx(SelectorAsync, { selected: value ? [value] : [], onChange: handleChange, itemComponent: SelectorItemSingle, search: searchOptions, renderItem: renderer, dataFetcher: dataFetcher, data: data, valueSelector: valueSelector }));
218
+ return /*#__PURE__*/ _jsx(SelectorAsync, {
219
+ selected: value ? [
220
+ value
221
+ ] : [],
222
+ onChange: handleChange,
223
+ itemComponent: SelectorItemSingle,
224
+ search: searchOptions,
225
+ renderItem: renderer,
226
+ dataFetcher: dataFetcher,
227
+ data: data,
228
+ valueSelector: valueSelector
229
+ });
196
230
  };
197
231
  return renderCustomColumnMenuFilter(FilterCell, opts);
198
232
  }
199
233
  export { selectColumnMenuFilterOperators };
234
+
200
235
  //# sourceMappingURL=select-filter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"select-filter.js","sourceRoot":"","sources":["../../../src/filters/select-filter/select-filter.tsx"],"names":[],"mappings":"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"}
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","constructor","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,4 +1,4 @@
1
- export const getSimpleValue = (item) => {
1
+ export const getSimpleValue = (item)=>{
2
2
  if (item === null) {
3
3
  return item;
4
4
  }
@@ -7,4 +7,5 @@ export const getSimpleValue = (item) => {
7
7
  }
8
8
  return item;
9
9
  };
10
+
10
11
  //# sourceMappingURL=value-getter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"value-getter.js","sourceRoot":"","sources":["../../../src/filters/select-filter/value-getter.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAS,EAAU,EAAE;IAChD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QACzD,OAAO,GAAG,IAAI,EAAE,CAAC;IACrB,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC"}
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,34 +1,48 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Component } from 'react';
3
3
  import { Radio } from '@servicetitan/design-system';
4
- import { renderCustomColumnMenuFilter, } from '../column-menu-filters';
4
+ import { renderCustomColumnMenuFilter } from '../column-menu-filters';
5
5
  class SelectorRadio extends Component {
6
6
  render() {
7
7
  const { options, value, renderer } = this.props;
8
- return options.map((option, index) => {
8
+ return options.map((option, index)=>{
9
9
  const optionValue = this.props.valueSelector(option);
10
- return (
11
- // eslint-disable-next-line react/no-array-index-key
12
- _jsx("span", { className: "k-widget m-b-1-i d-b", children: _jsx(Radio, { label: renderer ? renderer(option) : `${option}`, checked: value === optionValue, onChange: (_, event) => this.props.onChange(optionValue, event) }) }, index));
10
+ return(// eslint-disable-next-line react/no-array-index-key
11
+ /*#__PURE__*/ _jsx("span", {
12
+ className: "k-widget m-b-1-i d-b",
13
+ children: /*#__PURE__*/ _jsx(Radio, {
14
+ label: renderer ? renderer(option) : `${option}`,
15
+ checked: value === optionValue,
16
+ onChange: (_, event)=>this.props.onChange(optionValue, event)
17
+ })
18
+ }, index));
13
19
  });
14
20
  }
15
21
  }
16
22
  export function singleSelectColumnMenuFilter({ options, valueSelector, renderItem, filterOperator, ...opts }) {
17
- const FilterCell = ({ value, onChange }) => {
18
- const handleChange = (value, event) => {
19
- const filter = value === undefined
20
- ? { value: '', operator: '' }
21
- : {
22
- value,
23
- operator: filterOperator !== null && filterOperator !== void 0 ? filterOperator : 'equals',
24
- };
23
+ const FilterCell = ({ value, onChange })=>{
24
+ const handleChange = (value, event)=>{
25
+ const filter = value === undefined ? {
26
+ value: '',
27
+ operator: ''
28
+ } : {
29
+ value,
30
+ operator: filterOperator !== null && filterOperator !== void 0 ? filterOperator : 'equals'
31
+ };
25
32
  onChange({
26
33
  ...filter,
27
- syntheticEvent: event,
34
+ syntheticEvent: event
28
35
  });
29
36
  };
30
- return (_jsx(SelectorRadio, { options: options, value: value === '' ? undefined : value, onChange: handleChange, renderer: renderItem, valueSelector: valueSelector !== null && valueSelector !== void 0 ? valueSelector : (option => option) }));
37
+ return /*#__PURE__*/ _jsx(SelectorRadio, {
38
+ options: options,
39
+ value: value === '' ? undefined : value,
40
+ onChange: handleChange,
41
+ renderer: renderItem,
42
+ valueSelector: valueSelector !== null && valueSelector !== void 0 ? valueSelector : (option)=>option
43
+ });
31
44
  };
32
45
  return renderCustomColumnMenuFilter(FilterCell, opts);
33
46
  }
47
+
34
48
  //# sourceMappingURL=single-select-filter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"single-select-filter.js","sourceRoot":"","sources":["../../../src/filters/single-select/single-select-filter.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAiC,MAAM,OAAO,CAAC;AAGjE,OAAO,EAAwB,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAE1E,OAAO,EAEH,4BAA4B,GAC/B,MAAM,wBAAwB,CAAC;AAUhC,MAAM,aAAsB,SAAQ,SAAgC;IAChE,MAAM;QACF,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAEhD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACrD,OAAO;YACH,oDAAoD;YACpD,eAAkB,SAAS,EAAC,sBAAsB,YAC9C,KAAC,KAAK,IACF,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,EAChD,OAAO,EAAE,KAAK,KAAK,WAAW,EAC9B,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,GACjE,IALK,KAAK,CAMT,CACV,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAUD,MAAM,UAAU,4BAA4B,CAA6B,EACrE,OAAO,EACP,aAAa,EACb,UAAU,EACV,cAAc,EACd,GAAG,IAAI,EAC6B;IACpC,MAAM,UAAU,GAA6B,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QACjE,MAAM,YAAY,GAAG,CAAC,KAAqB,EAAE,KAAuC,EAAE,EAAE;YACpF,MAAM,MAAM,GACR,KAAK,KAAK,SAAS;gBACf,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;gBAC7B,CAAC,CAAC;oBACI,KAAK;oBACL,QAAQ,EAAE,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,QAAQ;iBACvC,CAAC;YAEZ,QAAQ,CAAC;gBACL,GAAG,MAAM;gBACT,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;QACP,CAAC,CAAC;QAEF,OAAO,CACH,KAAC,aAAa,IACV,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EACvC,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,UAAU,EACpB,aAAa,EAAE,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GACpD,CACL,CAAC;IACN,CAAC,CAAC;IAEF,OAAO,4BAA4B,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAC1D,CAAC"}
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<TV, 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;AAUA,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,UAAUN,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,eAAeA,0BAAAA,2BAAAA,gBAAkBH,CAAAA,SAAUA;;IAGvD;IAEA,OAAOR,6BAA6BuB,YAAYD;AACpD"}