@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.
- package/dist/demo/column-hiding/index.js +1 -0
- package/dist/demo/column-hiding/index.js.map +1 -1
- package/dist/demo/column-hiding/product.js +7 -6
- package/dist/demo/column-hiding/product.js.map +1 -1
- package/dist/demo/column-hiding/products.js +12 -11
- package/dist/demo/column-hiding/products.js.map +1 -1
- package/dist/demo/column-hiding/table.js +126 -32
- package/dist/demo/column-hiding/table.js.map +1 -1
- package/dist/demo/column-hiding/table.store.js +30 -27
- package/dist/demo/column-hiding/table.store.js.map +1 -1
- package/dist/demo/filters/async-select-filter.js +59 -12
- package/dist/demo/filters/async-select-filter.js.map +1 -1
- package/dist/demo/filters/categories.js +20 -16
- package/dist/demo/filters/categories.js.map +1 -1
- package/dist/demo/filters/multiselect-filter.js +37 -5
- package/dist/demo/filters/multiselect-filter.js.map +1 -1
- package/dist/demo/filters/range-filter.js +104 -10
- package/dist/demo/filters/range-filter.js.map +1 -1
- package/dist/demo/filters/select-filter.js +139 -41
- package/dist/demo/filters/select-filter.js.map +1 -1
- package/dist/demo/filters/single-select-filter.js +109 -18
- package/dist/demo/filters/single-select-filter.js.map +1 -1
- package/dist/demo/filters/table.store.js +77 -86
- package/dist/demo/filters/table.store.js.map +1 -1
- package/dist/demo/footer-page-size/index.js +1 -0
- package/dist/demo/footer-page-size/index.js.map +1 -1
- package/dist/demo/footer-page-size/table.js +82 -6
- package/dist/demo/footer-page-size/table.js.map +1 -1
- package/dist/demo/index.js +1 -0
- package/dist/demo/index.js.map +1 -1
- package/dist/demo/master-detail/detail-table.js +41 -9
- package/dist/demo/master-detail/detail-table.js.map +1 -1
- package/dist/demo/master-detail/detail-table.store.js +60 -56
- package/dist/demo/master-detail/detail-table.store.js.map +1 -1
- package/dist/demo/master-detail/index.js +1 -0
- package/dist/demo/master-detail/index.js.map +1 -1
- package/dist/demo/master-detail/master-table.store.js +65 -61
- package/dist/demo/master-detail/master-table.store.js.map +1 -1
- package/dist/demo/master-detail/product-detail.js +2 -1
- package/dist/demo/master-detail/product-detail.js.map +1 -1
- package/dist/demo/master-detail/product-details.js +10 -9
- package/dist/demo/master-detail/product-details.js.map +1 -1
- package/dist/demo/master-detail/product.js +7 -6
- package/dist/demo/master-detail/product.js.map +1 -1
- package/dist/demo/master-detail/products.js +12 -11
- package/dist/demo/master-detail/products.js.map +1 -1
- package/dist/demo/master-detail/table-master-detail.js +39 -8
- package/dist/demo/master-detail/table-master-detail.js.map +1 -1
- package/dist/demo/overview/actions-cell.js +47 -10
- package/dist/demo/overview/actions-cell.js.map +1 -1
- package/dist/demo/overview/index.js +1 -0
- package/dist/demo/overview/index.js.map +1 -1
- package/dist/demo/overview/product.js +7 -6
- package/dist/demo/overview/product.js.map +1 -1
- package/dist/demo/overview/products.js +15 -14
- package/dist/demo/overview/products.js.map +1 -1
- package/dist/demo/overview/table.js +176 -21
- package/dist/demo/overview/table.js.map +1 -1
- package/dist/demo/overview/table.store.js +45 -51
- package/dist/demo/overview/table.store.js.map +1 -1
- package/dist/demo/row-details/index.js +1 -0
- package/dist/demo/row-details/index.js.map +1 -1
- package/dist/demo/row-details/row-details-table.js +52 -5
- package/dist/demo/row-details/row-details-table.js.map +1 -1
- package/dist/demo/row-details/row-details-table.store.js +27 -19
- package/dist/demo/row-details/row-details-table.store.js.map +1 -1
- package/dist/demo/state-caching/beverages.js +11 -10
- package/dist/demo/state-caching/beverages.js.map +1 -1
- package/dist/demo/state-caching/index.js +1 -0
- package/dist/demo/state-caching/index.js.map +1 -1
- package/dist/demo/state-caching/product.js +2 -1
- package/dist/demo/state-caching/product.js.map +1 -1
- package/dist/demo/state-caching/products.js +12 -11
- package/dist/demo/state-caching/products.js.map +1 -1
- package/dist/demo/state-caching/state-caching-table.js +44 -3
- package/dist/demo/state-caching/state-caching-table.js.map +1 -1
- package/dist/demo/state-caching/state-caching-table.store.js +42 -54
- package/dist/demo/state-caching/state-caching-table.store.js.map +1 -1
- package/dist/details/expand-column.js +31 -7
- package/dist/details/expand-column.js.map +1 -1
- package/dist/details/index.js +1 -0
- package/dist/details/index.js.map +1 -1
- package/dist/editable-cell/boolean-editable-cell.js +15 -4
- package/dist/editable-cell/boolean-editable-cell.js.map +1 -1
- package/dist/editable-cell/get-action-cell.js +14 -7
- package/dist/editable-cell/get-action-cell.js.map +1 -1
- package/dist/editable-cell/get-editable-cell.js +16 -8
- package/dist/editable-cell/get-editable-cell.js.map +1 -1
- package/dist/editable-cell/get-select-editable-cell.js +19 -5
- package/dist/editable-cell/get-select-editable-cell.js.map +1 -1
- package/dist/editable-cell/index.js +1 -0
- package/dist/editable-cell/index.js.map +1 -1
- package/dist/editable-cell/text-editable-cell.js +23 -5
- package/dist/editable-cell/text-editable-cell.js.map +1 -1
- package/dist/export/export.js +38 -1
- package/dist/export/export.js.map +1 -1
- package/dist/export/export.module.css.d.ts +3 -0
- package/dist/export/index.js +1 -0
- package/dist/export/index.js.map +1 -1
- package/dist/filters/async-select/async-select-filter.js +167 -132
- package/dist/filters/async-select/async-select-filter.js.map +1 -1
- package/dist/filters/column-menu-filters.js +39 -8
- package/dist/filters/column-menu-filters.js.map +1 -1
- package/dist/filters/datetime-filter/datetime-filter.js +73 -50
- package/dist/filters/datetime-filter/datetime-filter.js.map +1 -1
- package/dist/filters/field-values-filter.js +80 -72
- package/dist/filters/field-values-filter.js.map +1 -1
- package/dist/filters/index.js +1 -0
- package/dist/filters/index.js.map +1 -1
- package/dist/filters/multiselect-filter/multiselect-filter.js +77 -73
- package/dist/filters/multiselect-filter/multiselect-filter.js.map +1 -1
- package/dist/filters/numeric-filter-extended/numeric-extended-operators.js +10 -3
- package/dist/filters/numeric-filter-extended/numeric-extended-operators.js.map +1 -1
- package/dist/filters/numeric-filter-extended/numeric-filter-extended.js +39 -16
- package/dist/filters/numeric-filter-extended/numeric-filter-extended.js.map +1 -1
- package/dist/filters/range-filter/range-filter.js +76 -72
- package/dist/filters/range-filter/range-filter.js.map +1 -1
- package/dist/filters/select-filter/object-search.js +4 -3
- package/dist/filters/select-filter/object-search.js.map +1 -1
- package/dist/filters/select-filter/operators.js +6 -5
- package/dist/filters/select-filter/operators.js.map +1 -1
- package/dist/filters/select-filter/select-filter.js +180 -145
- package/dist/filters/select-filter/select-filter.js.map +1 -1
- package/dist/filters/select-filter/value-getter.js +2 -1
- package/dist/filters/select-filter/value-getter.js.map +1 -1
- package/dist/filters/single-select/single-select-filter.js +29 -15
- package/dist/filters/single-select/single-select-filter.js.map +1 -1
- package/dist/filters/standard-filter-with-multiselect/filter-cell-ext.js +114 -67
- package/dist/filters/standard-filter-with-multiselect/filter-cell-ext.js.map +1 -1
- package/dist/filters/standard-filter-with-multiselect/filter-cell-ext.module.css.d.ts +7 -0
- package/dist/filters/standard-filter-with-multiselect/multiselect-operators.js +10 -3
- package/dist/filters/standard-filter-with-multiselect/multiselect-operators.js.map +1 -1
- package/dist/filters/standard-filter-with-multiselect/standard-filter-with-multiselect.js +77 -55
- package/dist/filters/standard-filter-with-multiselect/standard-filter-with-multiselect.js.map +1 -1
- package/dist/filters/standard-filter-with-multiselect/table-column-menu-filter-ext.js +23 -10
- package/dist/filters/standard-filter-with-multiselect/table-column-menu-filter-ext.js.map +1 -1
- package/dist/filters/time-filter/time-filter.js +63 -49
- package/dist/filters/time-filter/time-filter.js.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/select-cell/index.js +1 -0
- package/dist/select-cell/index.js.map +1 -1
- package/dist/select-cell/select-cell.js +36 -11
- package/dist/select-cell/select-cell.js.map +1 -1
- package/dist/select-cell/select-cell.module.css.d.ts +3 -0
- package/dist/table-state.js +479 -660
- package/dist/table-state.js.map +1 -1
- package/dist/table.js +235 -250
- package/dist/table.js.map +1 -1
- package/dist/table.module.css.d.ts +5 -0
- package/dist/use-observing-table-state/demo/components/use-observing-table-state-demo.js +97 -5
- package/dist/use-observing-table-state/demo/components/use-observing-table-state-demo.js.map +1 -1
- package/dist/use-observing-table-state/demo/stores/use-observing-table-state-demo.store.js +71 -97
- package/dist/use-observing-table-state/demo/stores/use-observing-table-state-demo.store.js.map +1 -1
- package/dist/use-observing-table-state/index.js +1 -0
- package/dist/use-observing-table-state/index.js.map +1 -1
- package/dist/use-observing-table-state/use-observing-table-state.js +26 -20
- package/dist/use-observing-table-state/use-observing-table-state.js.map +1 -1
- package/dist/utils/filters.js +14 -9
- package/dist/utils/filters.js.map +1 -1
- package/dist/utils/use-td-props.js +3 -2
- package/dist/utils/use-td-props.js.map +1 -1
- package/package.json +13 -13
- package/dist/filters/async-select/async-select-filter.stories.js +0 -7
- package/dist/filters/async-select/async-select-filter.stories.js.map +0 -1
- package/dist/filters/multiselect-filter/multiselect-filter.stories.js +0 -7
- package/dist/filters/multiselect-filter/multiselect-filter.stories.js.map +0 -1
- package/dist/filters/range-filter/range-filter.stories.js +0 -9
- package/dist/filters/range-filter/range-filter.stories.js.map +0 -1
- package/dist/filters/select-filter/__tests__/object-search.test.js +0 -28
- package/dist/filters/select-filter/__tests__/object-search.test.js.map +0 -1
- package/dist/filters/select-filter/select-filter.stories.js +0 -8
- package/dist/filters/select-filter/select-filter.stories.js.map +0 -1
- package/dist/filters/single-select/single-select-filter.stories.js +0 -8
- package/dist/filters/single-select/single-select-filter.stories.js.map +0 -1
- package/dist/table.stories.js +0 -12
- package/dist/table.stories.js.map +0 -1
- package/dist/use-observing-table-state/use-observing-table-state.stories.js +0 -11
- package/dist/use-observing-table-state/use-observing-table-state.stories.js.map +0 -1
- package/dist/utils/__tests__/filters.test.js +0 -24
- package/dist/utils/__tests__/filters.test.js.map +0 -1
@@ -1,200 +1,235 @@
|
|
1
|
-
|
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
|
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
|
-
|
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
|
13
|
-
import { renderCustomColumnMenuFilter
|
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
|
-
|
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
|
37
|
+
var _this_props_search;
|
106
38
|
const selectedOptions = this.props.selected;
|
107
|
-
const selected = new Set(selectedOptions.map(opt
|
39
|
+
const selected = new Set(selectedOptions.map((opt)=>this.props.valueSelector(opt)));
|
108
40
|
const ItemComponent = this.props.itemComponent;
|
109
|
-
return
|
110
|
-
|
111
|
-
|
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
|
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
|
-
|
122
|
-
|
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
|
-
|
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
|
-
|
139
|
+
_ts_metadata("design:type", Array)
|
131
140
|
], SelectorAsync.prototype, "shownOptions", void 0);
|
132
|
-
|
133
|
-
observable
|
134
|
-
__metadata("design:type", Object)
|
141
|
+
_ts_decorate([
|
142
|
+
observable
|
135
143
|
], SelectorAsync.prototype, "search", void 0);
|
136
|
-
|
137
|
-
observable
|
138
|
-
__metadata("design:type", Object)
|
144
|
+
_ts_decorate([
|
145
|
+
observable
|
139
146
|
], SelectorAsync.prototype, "error", void 0);
|
140
|
-
|
141
|
-
observable
|
142
|
-
__metadata("design:type", Object)
|
147
|
+
_ts_decorate([
|
148
|
+
observable
|
143
149
|
], SelectorAsync.prototype, "loading", void 0);
|
144
|
-
SelectorAsync =
|
150
|
+
SelectorAsync = _ts_decorate([
|
145
151
|
observer,
|
146
|
-
|
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
|
150
|
-
return
|
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
|
154
|
-
return
|
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
|
158
|
-
const searchOptions = search
|
159
|
-
|
160
|
-
|
161
|
-
|
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
|
-
|
176
|
-
|
177
|
-
|
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
|
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({
|
192
|
-
|
211
|
+
operator: operator !== null && operator !== void 0 ? operator : selectColumnMenuFilterOperators.getEquals({
|
212
|
+
valueSelector,
|
213
|
+
rowValueSelector
|
214
|
+
}),
|
215
|
+
syntheticEvent: event
|
193
216
|
});
|
194
217
|
};
|
195
|
-
return
|
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":";;;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAA6B,QAAQ,EAAqB,MAAM,OAAO,CAAC;AAE1F,OAAO,EACH,QAAQ,EAER,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,GACX,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAEH,4BAA4B,GAC/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AA2B9D,IACM,aAAa,GADnB,MACM,aAAkB,SAAQ,SAA4B;IAMxD,YAAY,KAAwB;QAChC,KAAK,CAAC,KAAK,CAAC,CAAC;QANL;;;;mBAAqB,EAAE;WAAC;QACxB;;;;mBAAS,EAAE;WAAC;QACZ;;;;mBAAQ,KAAK;WAAC;QACd;;;;mBAAU,KAAK;WAAC;QAW5B;;;;mBAAgB,CAAC,KAAsC,EAAE,EAAE;gBACvD,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;oBACxB,KAAK,CAAC,eAAe,EAAE,CAAC;gBAC5B,CAAC;YACL,CAAC;WAAC;QAEF;;;;mBAAe,CAAC,EAAoC,EAAE,IAAuB,EAAE,EAAE;gBAC7E,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9C,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,CAAC;YACjC,CAAC;WAAC;QAEF;;;;mBAAgB,KAAK,IAAI,EAAE;gBACvB,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;oBACzB,WAAW,CAAC,GAAG,EAAE;wBACb,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBACxB,CAAC,CAAC,CAAC;gBACP,CAAC;gBAED,IAAI,CAAC;oBACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;oBAElC,WAAW,CAAC,GAAG,EAAE;wBACb,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;wBACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;wBACnB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;oBACzB,CAAC,CAAC,CAAC;gBACP,CAAC;gBAAC,WAAM,CAAC;oBACL,WAAW,CAAC,GAAG,EAAE;wBACb,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;wBAClB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;oBACzB,CAAC,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;WAAC;QAgFM;;;;mBAAa,CAAC,IAAQ,EAAE,KAAa,EAAE,EAAE;gBAC7C,OAAO,GAAG,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,CAAC;WAAC;QAzHE,cAAc,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,iBAAiB;QACb,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;IAoCD,MAAM;;QACF,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QAE/C,OAAO,CACH,MAAC,QAAQ,eACJ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CACpB,KAAC,KAAK,IACF,SAAS,EAAC,yBAAyB,EACnC,WAAW,EAAE,MAAA,IAAI,CAAC,KAAK,CAAC,MAAM,0CAAE,WAAW,EAC3C,QAAQ,EAAE,IAAI,CAAC,YAAY,EAC3B,SAAS,EAAE,IAAI,CAAC,aAAa,EAC7B,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,IAAI,CAAC,MAAM,GACpB,CACL,EACD,eAAK,SAAS,EAAC,4BAA4B,EAAC,SAAS,EAAE,IAAI,CAAC,aAAa,aACpE,CAAC,CAAC,eAAe,CAAC,MAAM,IAAI,CACzB,cAAK,SAAS,EAAC,wBAAwB,YAClC,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CACpC,KAAC,aAAa,IAEV,MAAM,EAAE,MAAM,EACd,OAAO,QACP,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAC/B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,IAJxB,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAKrC,CACL,CAAC,GACA,CACT,EACA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CACV,KAAC,QAAQ,IAAC,SAAS,EAAC,WAAW,uCAAkC,CACpE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAC3B,IAAI,CAAC,YAAY;6BACZ,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;6BAC3D,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CACpB,KAAC,aAAa,IAEV,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,KAAK,EACd,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAC/B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,IAJxB,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAKrC,CACL,CAAC,CACT,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CACf,KAAC,QAAQ,yBAAkB,CAC9B,CAAC,CAAC,CAAC,CACA,KAAC,QAAQ,IAAC,OAAO,uDAA4C,CAChE,EAEA,IAAI,CAAC,OAAO,IAAI,CACb,cAAK,SAAS,EAAC,sGAAsG,YACjH,KAAC,OAAO,IAAC,IAAI,EAAC,MAAM,GAAG,GACrB,CACT,IACC,IACC,CACd,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,OAAO;;QACjB,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACzB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;gBAC1C,MAAM,EAAE,IAAI,CAAC,MAAM;aACtB,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,IAAI,GAAG,MAAA,IAAI,CAAC,KAAK,CAAC,IAAI,mCAAI,EAAE,CAAC;QAEjC,IAAI,MAAA,IAAI,CAAC,KAAK,CAAC,MAAM,0CAAE,MAAM,EAAE,CAAC;YAC5B,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CAKJ,CAAA;AAjIe;IAAX,UAAU;;mDAAyB;AACxB;IAAX,UAAU;;6CAAa;AACZ;IAAX,UAAU;;4CAAe;AACd;IAAX,UAAU;;8CAAiB;AAJ1B,aAAa;IADlB,QAAQ;;GACH,aAAa,CAkIlB;AAED,MAAM,kBAAkB,GAA+B,CAAC,EACpD,MAAM,EACN,QAAQ,EACR,OAAO,EACP,QAAQ,GACX,EAAE,EAAE;;IAAC,OAAA,CACF,KAAC,KAAK,IACF,KAAK,EAAE,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,MAAM,CAAC,mCAAI,GAAG,MAAM,EAAE,EACxC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,EACrD,SAAS,EAAC,OAAO,GACnB,CACL,CAAA;CAAA,CAAC;AAEF,MAAM,oBAAoB,GAA+B,CAAC,EACtD,MAAM,EACN,QAAQ,EACR,OAAO,EACP,QAAQ,GACX,EAAE,EAAE;;IAAC,OAAA,CACF,KAAC,QAAQ,IACL,KAAK,EAAE,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,MAAM,CAAC,mCAAI,GAAG,MAAM,EAAE,EACxC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EACjE,SAAS,EAAC,OAAO,GACnB,CACL,CAAA;CAAA,CAAC;AAyBF,MAAM,UAAU,sBAAsB,CAAK,EACvC,WAAW,EACX,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,aAAa,GAAG,cAAc,EAC9B,gBAAgB,GAAG,cAAc,EACjC,UAAU,EACV,QAAQ,EACR,GAAG,IAAI,EACe;IACtB,MAAM,QAAQ,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAE7D,MAAM,aAAa,GAAG,MAAM;QACxB,CAAC,CAAC;YACI,MAAM,EAAE,YAAY;YACpB,GAAG,CAAC,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;SACjD;QACH,CAAC,CAAC,SAAS,CAAC;IAEhB,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,UAAU,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAmC,EAAE,EAAE;YACxE,MAAM,YAAY,GAAG,CACjB,MAAU,EACV,OAAgB,EAChB,KAAuC,EACzC,EAAE;gBACA,MAAM,GAAG,GAAG,OAAO;oBACf,CAAC,CAAC,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;oBAC9B,CAAC,CAAC,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACvB,aAAa;wBACT,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,aAAa,CAAC,MAAM,CAAC;wBAC9C,CAAC,CAAC,MAAM,KAAK,GAAG,CACvB,CAAC;gBAER,QAAQ,CAAC;oBACL,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;oBACzC,QAAQ,EAAE,GAAG,CAAC,MAAM;wBAChB,CAAC,CAAC,CAAC,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GACT,+BAA+B,CAAC,WAAW,CAAC;4BACxC,aAAa;4BACb,gBAAgB;yBACnB,CAAC,CAAC;wBACL,CAAC,CAAC,EAAE;oBACR,cAAc,EAAE,KAAK;iBACxB,CAAC,CAAC;YACP,CAAC,CAAC;YAEF,OAAO,CACH,KAAC,aAAa,IACV,QAAQ,EAAE,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,EACrB,aAAa,EAAE,oBAAoB,EACnC,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,QAAQ,EACpB,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,aAAa,GAC9B,CACL,CAAC;QACN,CAAC,CAAC;QAEF,OAAO,4BAA4B,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAiC,EAAE,EAAE;QACtE,MAAM,YAAY,GAAG,CAAC,MAAU,EAAE,CAAU,EAAE,KAAuC,EAAE,EAAE;YACrF,QAAQ,CAAC;gBACL,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;gBACnB,QAAQ,EACJ,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GACR,+BAA+B,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;gBAClF,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;QACP,CAAC,CAAC;QAEF,OAAO,CACH,KAAC,aAAa,IACV,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAC9B,QAAQ,EAAE,YAAY,EACtB,aAAa,EAAE,kBAAkB,EACjC,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,QAAQ,EACpB,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,aAAa,GAC9B,CACL,CAAC;IACN,CAAC,CAAC;IAEF,OAAO,4BAA4B,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAC1D,CAAC;AAED,OAAO,EAAE,+BAA+B,EAAE,CAAC"}
|
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> </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 +1 @@
|
|
1
|
-
{"version":3,"
|
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
|
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
|
-
|
12
|
-
|
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
|
-
|
21
|
-
:
|
22
|
-
|
23
|
-
|
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
|
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,"
|
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"}
|