@servicetitan/form-state 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.
- package/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.js +61 -57
- package/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.js.map +1 -1
- package/dist/async-lazy-dropdown-state/index.js +1 -0
- package/dist/async-lazy-dropdown-state/index.js.map +1 -1
- package/dist/async-lazy-dropdown-state/use-async-lazy-dropdown-state.js +23 -13
- package/dist/async-lazy-dropdown-state/use-async-lazy-dropdown-state.js.map +1 -1
- package/dist/date-range.js +2 -1
- package/dist/date-range.js.map +1 -1
- package/dist/demo/dropdown-state.js +284 -60
- package/dist/demo/dropdown-state.js.map +1 -1
- package/dist/demo/index.js +1 -0
- package/dist/demo/index.js.map +1 -1
- package/dist/dropdown-state.js +168 -222
- package/dist/dropdown-state.js.map +1 -1
- package/dist/form-helpers.js +73 -116
- package/dist/form-helpers.js.map +1 -1
- package/dist/form-validators.js +25 -39
- package/dist/form-validators.js.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/persistent-form-state/domain-storage.js +22 -16
- package/dist/persistent-form-state/domain-storage.js.map +1 -1
- package/dist/persistent-form-state/in-memory-storage.js +14 -5
- package/dist/persistent-form-state/in-memory-storage.js.map +1 -1
- package/dist/persistent-form-state/index.js +1 -0
- package/dist/persistent-form-state/index.js.map +1 -1
- package/dist/persistent-form-state/persistent-form-state.js +40 -71
- package/dist/persistent-form-state/persistent-form-state.js.map +1 -1
- package/package.json +5 -5
- package/dist/__tests__/form-helpers.test.js +0 -263
- package/dist/__tests__/form-helpers.test.js.map +0 -1
- package/dist/__tests__/form-validators.test.js +0 -48
- package/dist/__tests__/form-validators.test.js.map +0 -1
- package/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.stories.js +0 -46
- package/dist/async-lazy-dropdown-state/async-lazy-dropdown-state.stories.js.map +0 -1
- package/dist/persistent-form-state/__tests__/domain-storage.test.js +0 -60
- package/dist/persistent-form-state/__tests__/domain-storage.test.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown-state.js","sourceRoot":"","sources":["../../src/demo/dropdown-state.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/demo/dropdown-state.tsx"],"sourcesContent":["import { useRef, Fragment, FC } from 'react';\n\nimport { InMemoryDataSource, AsyncDataSource, FilterDescriptor } from '@servicetitan/data-query';\n\nimport {\n AnvilSelect,\n AnvilSelectOptionsProps,\n Text,\n ButtonGroup,\n Button,\n} from '@servicetitan/design-system';\n\nimport { FieldState } from 'formstate';\nimport { observer } from 'mobx-react';\n\nimport { DropdownState, DropdownOption } from '..';\n\nfunction useDropdownField<T>(initial: T) {\n return useRef(new FieldState(initial)).current;\n}\n\nfunction useDropdownState<T extends DropdownOption<any>>(state: DropdownState<T>) {\n return useRef(state).current;\n}\n\ninterface Planet extends DropdownOption<number> {\n diameter: number;\n moons: number;\n}\n\nconst options: Planet[] = [\n { value: 1, text: 'Alderaan', diameter: 12500, moons: 0 },\n { value: 2, text: 'Bespin', diameter: 118000, moons: 2 },\n { value: 3, text: 'Coruscant', diameter: 12240, moons: 4 },\n { value: 4, text: 'Dagobah', diameter: 14410, moons: 0 },\n { value: 5, text: 'Hoth', diameter: 7200, moons: 3 },\n { value: 6, text: 'Kashyyyk', diameter: 12765, moons: 3 },\n { value: 7, text: 'Naboo', diameter: 12120, moons: 3 },\n { value: 8, text: 'Tatooine', diameter: 10465, moons: 3 },\n { value: 9, text: 'Yavin', diameter: 200000, moons: 26 },\n];\n\ninterface Character extends DropdownOption<number> {\n group: string;\n}\n\nconst optionsWithGroups: Character[] = [\n { value: 1, text: 'Hem Dazon', group: 'Arcona' },\n { value: 2, text: 'El-Les', group: 'Arcona' },\n { value: 3, text: 'Jheeg', group: 'Arcona' },\n { value: 4, text: 'Paploo', group: 'Ewok' },\n { value: 5, text: 'Gallo', group: 'Gungan' },\n { value: 6, text: 'Lyonie', group: 'Gungan' },\n { value: 7, text: 'Tobler Ceel', group: 'Gungan' },\n { value: 8, text: 'Ganne', group: 'Gungan' },\n { value: 9, text: 'Augara Jowil', group: 'Gungan' },\n { value: 10, text: 'Reegesk', group: 'Ranat' },\n { value: 11, text: 'Rik-tak', group: 'Ranat' },\n { value: 12, text: 'Bahb', group: 'Zeltron' },\n { value: 13, text: 'Chantique', group: 'Zeltron' },\n { value: 14, text: 'Luxa', group: 'Zeltron' },\n { value: 15, text: 'Rahuhl', group: 'Zeltron' },\n];\n\nconst InMemoryDropdownStateExample: FC = observer(() => {\n const field = useDropdownField<AnvilSelectOptionsProps[]>([]);\n const state = useDropdownState(\n new DropdownState<Planet | Character>({\n dataSource: new InMemoryDataSource(options),\n })\n );\n\n const handleChange = (data: AnvilSelectOptionsProps | AnvilSelectOptionsProps[]) => {\n field.onChange(Array.isArray(data) ? data : [data]);\n };\n\n const withReset = (handler: () => void) => {\n return async () => {\n handleChange([]);\n state.setSearch('');\n state.setDataSource(null);\n state.setSearchByGroup(false);\n state.setSort([{ field: 'text' }]);\n state.setFilter(null);\n state.setGroup([{ field: 'group' }]);\n\n await Promise.resolve();\n\n handler();\n };\n };\n\n const withoutGroups = withReset(() => {\n state.setDataSource(new InMemoryDataSource(options));\n });\n\n const withGroups = withReset(() => {\n state.setDataSource(new InMemoryDataSource(optionsWithGroups));\n });\n\n const withGroupsAndSearch = withReset(() => {\n state.setDataSource(new InMemoryDataSource(optionsWithGroups));\n state.setSearchByGroup(true);\n });\n\n const customSort = withReset(() => {\n state.setDataSource(new InMemoryDataSource(options));\n state.setSort([{ field: 'diameter', dir: 'desc' }]);\n });\n\n const customFilter = withReset(() => {\n state.setDataSource(new InMemoryDataSource(options));\n state.setFilter({\n logic: 'and',\n filters: [{ field: 'diameter', value: 12250, operator: 'gte' }],\n });\n });\n\n const customGroup = withReset(() => {\n state.setDataSource(new InMemoryDataSource(options));\n state.setGroup([{ field: 'moons', dir: 'desc' }]);\n });\n\n return (\n <Fragment>\n <AnvilSelect\n value={field.value}\n onChange={handleChange}\n options={state.options}\n search={{ value: state.search, onChange: state.onSearchChange }}\n multiple\n />\n\n <Text size={4} className=\"m-t-4 m-b-half\">\n Without groups\n </Text>\n <Button onClick={withoutGroups}>Apply</Button>\n\n <Text size={4} className=\"m-t-4 m-b-half\">\n With groups\n </Text>\n <ButtonGroup>\n <Button onClick={withGroups}>Search in options</Button>\n <Button onClick={withGroupsAndSearch}>Search in options & groups</Button>\n </ButtonGroup>\n\n <Text size={4} className=\"m-t-4 m-b-half\">\n Custom sort\n </Text>\n <Button onClick={customSort}>Apply</Button>\n\n <Text size={4} className=\"m-t-4 m-b-half\">\n Custom filter\n </Text>\n <Button onClick={customFilter}>Apply</Button>\n\n <Text size={4} className=\"m-t-4 m-b-half\">\n Custom group\n </Text>\n <Button onClick={customGroup}>Apply</Button>\n </Fragment>\n );\n});\n\nconst AsyncDropdownStateExample: FC = observer(() => {\n const field = useDropdownField<AnvilSelectOptionsProps[]>([]);\n const state = useDropdownState(\n new DropdownState<Planet>({\n dataSource: new AsyncDataSource(\n {\n async get({ filter }) {\n const search = (filter?.filters?.[0] as FilterDescriptor | undefined)\n ?.value as string | undefined;\n\n const result = search\n ? options.filter(({ text }) =>\n text.toLowerCase().includes(search.toLowerCase())\n )\n : options;\n\n await new Promise(resolver => setTimeout(resolver, 1000));\n\n return {\n data: result,\n total: result.length,\n };\n },\n },\n undefined,\n true\n ),\n lazy: true,\n })\n );\n\n const handleChange = (data: AnvilSelectOptionsProps | AnvilSelectOptionsProps[]) => {\n field.onChange(Array.isArray(data) ? data : [data]);\n };\n\n const handleOpenChange = (open: boolean) => {\n if (open) {\n state.fetch();\n }\n };\n\n return (\n <AnvilSelect\n value={field.value}\n onChange={handleChange}\n options={state.options}\n search={{ value: state.search, onChange: state.onSearchChange }}\n onOpenChange={handleOpenChange}\n loading={state.loading}\n multiple\n />\n );\n});\n\nexport const DropdownStateExample: FC = () => {\n return (\n <Fragment>\n <Text size={5} className=\"m-b-half\">\n InMemoryDataSource\n </Text>\n <InMemoryDropdownStateExample />\n\n <Text size={5} className=\"m-t-5 m-b-half\">\n AsyncDataSource\n </Text>\n <AsyncDropdownStateExample />\n </Fragment>\n );\n};\n"],"names":["useRef","Fragment","InMemoryDataSource","AsyncDataSource","AnvilSelect","Text","ButtonGroup","Button","FieldState","observer","DropdownState","useDropdownField","initial","current","useDropdownState","state","options","value","text","diameter","moons","optionsWithGroups","group","InMemoryDropdownStateExample","field","dataSource","handleChange","data","onChange","Array","isArray","withReset","handler","setSearch","setDataSource","setSearchByGroup","setSort","setFilter","setGroup","Promise","resolve","withoutGroups","withGroups","withGroupsAndSearch","customSort","dir","customFilter","logic","filters","operator","customGroup","search","onSearchChange","multiple","size","className","onClick","AsyncDropdownStateExample","get","filter","result","toLowerCase","includes","resolver","setTimeout","total","length","undefined","lazy","handleOpenChange","open","fetch","onOpenChange","loading","DropdownStateExample"],"mappings":"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"}
|
package/dist/demo/index.js
CHANGED
package/dist/demo/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/demo/index.ts"],"sourcesContent":["export * from './dropdown-state';\n"],"names":[],"mappings":"AAAA,cAAc,mBAAmB"}
|
package/dist/dropdown-state.js
CHANGED
|
@@ -1,12 +1,25 @@
|
|
|
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 { observable, computed, action, runInAction, makeObservable } from 'mobx';
|
|
11
24
|
import debounce from 'debounce';
|
|
12
25
|
function isGroupItem(item, groupedBy) {
|
|
@@ -18,288 +31,221 @@ export class DropdownState {
|
|
|
18
31
|
const result = new Map();
|
|
19
32
|
const flat = [];
|
|
20
33
|
const groupField = this.group[0].field;
|
|
21
|
-
this.traverse(this.data, item
|
|
22
|
-
var _a, _b;
|
|
34
|
+
this.traverse(this.data, (item)=>{
|
|
23
35
|
const group = item[groupField];
|
|
24
36
|
if (group) {
|
|
25
37
|
if (result.has(group)) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
else {
|
|
38
|
+
var _result_get_options, _result_get;
|
|
39
|
+
(_result_get = result.get(group)) === null || _result_get === void 0 ? void 0 : (_result_get_options = _result_get.options) === null || _result_get_options === void 0 ? void 0 : _result_get_options.push(item);
|
|
40
|
+
} else {
|
|
29
41
|
result.set(group, {
|
|
30
42
|
value: group,
|
|
31
43
|
text: String(group),
|
|
32
|
-
options: [
|
|
44
|
+
options: [
|
|
45
|
+
item
|
|
46
|
+
]
|
|
33
47
|
});
|
|
34
48
|
}
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
49
|
+
} else {
|
|
37
50
|
flat.push(item);
|
|
38
51
|
}
|
|
39
52
|
}, groupField);
|
|
40
|
-
return [
|
|
53
|
+
return [
|
|
54
|
+
...flat,
|
|
55
|
+
...Array.from(result.values())
|
|
56
|
+
];
|
|
41
57
|
}
|
|
42
58
|
get state() {
|
|
43
|
-
var
|
|
59
|
+
var _this_searchFilter;
|
|
44
60
|
return {
|
|
45
61
|
sort: this.sort,
|
|
46
|
-
filter: this.searchFilter || this.filter
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
62
|
+
filter: this.searchFilter || this.filter ? this.searchFilter && this.filter ? {
|
|
63
|
+
logic: 'and',
|
|
64
|
+
filters: [
|
|
65
|
+
this.searchFilter,
|
|
66
|
+
this.filter
|
|
67
|
+
]
|
|
68
|
+
} : (_this_searchFilter = this.searchFilter) !== null && _this_searchFilter !== void 0 ? _this_searchFilter : this.filter : undefined,
|
|
69
|
+
group: this.group
|
|
52
70
|
};
|
|
53
71
|
}
|
|
54
72
|
get searchFilter() {
|
|
55
73
|
if (!this.search) {
|
|
56
74
|
return undefined;
|
|
57
75
|
}
|
|
58
|
-
const filter = {
|
|
76
|
+
const filter = {
|
|
77
|
+
operator: 'contains',
|
|
78
|
+
value: this.search,
|
|
79
|
+
ignoreCase: true
|
|
80
|
+
};
|
|
59
81
|
return {
|
|
60
82
|
logic: 'or',
|
|
61
83
|
filters: [
|
|
62
|
-
{
|
|
63
|
-
|
|
64
|
-
|
|
84
|
+
{
|
|
85
|
+
...filter,
|
|
86
|
+
field: 'text'
|
|
87
|
+
},
|
|
88
|
+
...this.searchByGroup ? [
|
|
89
|
+
{
|
|
90
|
+
...filter,
|
|
91
|
+
field: 'group'
|
|
92
|
+
}
|
|
93
|
+
] : []
|
|
94
|
+
]
|
|
65
95
|
};
|
|
66
96
|
}
|
|
67
|
-
constructor({ dataSource, searchByGroup, state, lazy
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
enumerable: true,
|
|
77
|
-
configurable: true,
|
|
78
|
-
writable: true,
|
|
79
|
-
value: ''
|
|
80
|
-
});
|
|
81
|
-
Object.defineProperty(this, "dataSource", {
|
|
82
|
-
enumerable: true,
|
|
83
|
-
configurable: true,
|
|
84
|
-
writable: true,
|
|
85
|
-
value: void 0
|
|
86
|
-
});
|
|
87
|
-
Object.defineProperty(this, "searchByGroup", {
|
|
88
|
-
enumerable: true,
|
|
89
|
-
configurable: true,
|
|
90
|
-
writable: true,
|
|
91
|
-
value: void 0
|
|
92
|
-
});
|
|
93
|
-
Object.defineProperty(this, "sort", {
|
|
94
|
-
enumerable: true,
|
|
95
|
-
configurable: true,
|
|
96
|
-
writable: true,
|
|
97
|
-
value: void 0
|
|
98
|
-
});
|
|
99
|
-
Object.defineProperty(this, "filter", {
|
|
100
|
-
enumerable: true,
|
|
101
|
-
configurable: true,
|
|
102
|
-
writable: true,
|
|
103
|
-
value: void 0
|
|
104
|
-
});
|
|
105
|
-
Object.defineProperty(this, "group", {
|
|
106
|
-
enumerable: true,
|
|
107
|
-
configurable: true,
|
|
108
|
-
writable: true,
|
|
109
|
-
value: void 0
|
|
110
|
-
});
|
|
111
|
-
Object.defineProperty(this, "data", {
|
|
112
|
-
enumerable: true,
|
|
113
|
-
configurable: true,
|
|
114
|
-
writable: true,
|
|
115
|
-
value: []
|
|
116
|
-
});
|
|
97
|
+
constructor({ dataSource, searchByGroup, state, lazy } = {}){
|
|
98
|
+
_define_property(this, "loading", false);
|
|
99
|
+
_define_property(this, "search", '');
|
|
100
|
+
_define_property(this, "dataSource", void 0);
|
|
101
|
+
_define_property(this, "searchByGroup", void 0);
|
|
102
|
+
_define_property(this, "sort", void 0);
|
|
103
|
+
_define_property(this, "filter", void 0);
|
|
104
|
+
_define_property(this, "group", void 0);
|
|
105
|
+
_define_property(this, "data", []);
|
|
117
106
|
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
const fetch = debounce(() => this.fetch(), 100);
|
|
124
|
-
return (_0, data) => {
|
|
125
|
-
runInAction(() => {
|
|
126
|
-
this.search = data.value;
|
|
127
|
-
});
|
|
128
|
-
fetch();
|
|
129
|
-
};
|
|
130
|
-
})()
|
|
131
|
-
});
|
|
132
|
-
Object.defineProperty(this, "setSearch", {
|
|
133
|
-
enumerable: true,
|
|
134
|
-
configurable: true,
|
|
135
|
-
writable: true,
|
|
136
|
-
value: async (search) => {
|
|
137
|
-
this.search = search;
|
|
138
|
-
await this.fetch();
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
Object.defineProperty(this, "setDataSource", {
|
|
142
|
-
enumerable: true,
|
|
143
|
-
configurable: true,
|
|
144
|
-
writable: true,
|
|
145
|
-
value: async (dataSource) => {
|
|
146
|
-
this.dataSource = dataSource;
|
|
147
|
-
await this.fetch();
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
|
-
Object.defineProperty(this, "setSearchByGroup", {
|
|
151
|
-
enumerable: true,
|
|
152
|
-
configurable: true,
|
|
153
|
-
writable: true,
|
|
154
|
-
value: async (searchByGroup) => {
|
|
155
|
-
this.searchByGroup = searchByGroup;
|
|
156
|
-
await this.fetch();
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
|
-
Object.defineProperty(this, "setSort", {
|
|
160
|
-
enumerable: true,
|
|
161
|
-
configurable: true,
|
|
162
|
-
writable: true,
|
|
163
|
-
value: async (sort) => {
|
|
164
|
-
this.sort = sort;
|
|
165
|
-
await this.fetch();
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
Object.defineProperty(this, "setFilter", {
|
|
169
|
-
enumerable: true,
|
|
170
|
-
configurable: true,
|
|
171
|
-
writable: true,
|
|
172
|
-
value: async (filter) => {
|
|
173
|
-
this.filter = filter;
|
|
174
|
-
await this.fetch();
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
Object.defineProperty(this, "setGroup", {
|
|
178
|
-
enumerable: true,
|
|
179
|
-
configurable: true,
|
|
180
|
-
writable: true,
|
|
181
|
-
value: async (group) => {
|
|
182
|
-
this.group = group;
|
|
183
|
-
await this.fetch();
|
|
184
|
-
}
|
|
185
|
-
});
|
|
186
|
-
Object.defineProperty(this, "fetch", {
|
|
187
|
-
enumerable: true,
|
|
188
|
-
configurable: true,
|
|
189
|
-
writable: true,
|
|
190
|
-
value: async () => {
|
|
191
|
-
var _a;
|
|
192
|
-
this.loading = true;
|
|
193
|
-
const response = await ((_a = this.dataSource) === null || _a === void 0 ? void 0 : _a.getData(this.state));
|
|
194
|
-
runInAction(() => {
|
|
195
|
-
var _a;
|
|
196
|
-
this.data = (_a = response === null || response === void 0 ? void 0 : response.data) !== null && _a !== void 0 ? _a : [];
|
|
197
|
-
this.loading = false;
|
|
107
|
+
_define_property(this, "onSearchChange", (()=>{
|
|
108
|
+
const fetch = debounce(()=>this.fetch(), 100);
|
|
109
|
+
return (_0, data)=>{
|
|
110
|
+
runInAction(()=>{
|
|
111
|
+
this.search = data.value;
|
|
198
112
|
});
|
|
113
|
+
fetch();
|
|
114
|
+
};
|
|
115
|
+
})());
|
|
116
|
+
_define_property(this, "setSearch", async (search)=>{
|
|
117
|
+
this.search = search;
|
|
118
|
+
await this.fetch();
|
|
119
|
+
});
|
|
120
|
+
_define_property(this, "setDataSource", async (dataSource)=>{
|
|
121
|
+
this.dataSource = dataSource;
|
|
122
|
+
await this.fetch();
|
|
123
|
+
});
|
|
124
|
+
_define_property(this, "setSearchByGroup", async (searchByGroup)=>{
|
|
125
|
+
this.searchByGroup = searchByGroup;
|
|
126
|
+
await this.fetch();
|
|
127
|
+
});
|
|
128
|
+
_define_property(this, "setSort", async (sort)=>{
|
|
129
|
+
this.sort = sort;
|
|
130
|
+
await this.fetch();
|
|
131
|
+
});
|
|
132
|
+
_define_property(this, "setFilter", async (filter)=>{
|
|
133
|
+
this.filter = filter;
|
|
134
|
+
await this.fetch();
|
|
135
|
+
});
|
|
136
|
+
_define_property(this, "setGroup", async (group)=>{
|
|
137
|
+
this.group = group;
|
|
138
|
+
await this.fetch();
|
|
139
|
+
});
|
|
140
|
+
_define_property(this, "fetch", async ()=>{
|
|
141
|
+
var _this_dataSource;
|
|
142
|
+
this.loading = true;
|
|
143
|
+
const response = await ((_this_dataSource = this.dataSource) === null || _this_dataSource === void 0 ? void 0 : _this_dataSource.getData(this.state));
|
|
144
|
+
runInAction(()=>{
|
|
145
|
+
var _response_data;
|
|
146
|
+
this.data = (_response_data = response === null || response === void 0 ? void 0 : response.data) !== null && _response_data !== void 0 ? _response_data : [];
|
|
147
|
+
this.loading = false;
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
_define_property(this, "traverse", (items, itemCallback, groupedBy)=>{
|
|
151
|
+
if (!items) {
|
|
152
|
+
return;
|
|
199
153
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
value: (items, itemCallback, groupedBy) => {
|
|
206
|
-
if (!items) {
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
for (const item of items) {
|
|
210
|
-
if (isGroupItem(item, groupedBy)) {
|
|
211
|
-
this.traverse(item.items, itemCallback, groupedBy);
|
|
212
|
-
}
|
|
213
|
-
else {
|
|
214
|
-
itemCallback(item);
|
|
215
|
-
}
|
|
154
|
+
for (const item of items){
|
|
155
|
+
if (isGroupItem(item, groupedBy)) {
|
|
156
|
+
this.traverse(item.items, itemCallback, groupedBy);
|
|
157
|
+
} else {
|
|
158
|
+
itemCallback(item);
|
|
216
159
|
}
|
|
217
160
|
}
|
|
218
161
|
});
|
|
219
162
|
makeObservable(this);
|
|
220
163
|
this.dataSource = dataSource !== null && dataSource !== void 0 ? dataSource : null;
|
|
221
164
|
this.searchByGroup = searchByGroup !== null && searchByGroup !== void 0 ? searchByGroup : false;
|
|
222
|
-
|
|
223
|
-
this.
|
|
224
|
-
|
|
165
|
+
var _state_sort;
|
|
166
|
+
this.sort = (_state_sort = state === null || state === void 0 ? void 0 : state.sort) !== null && _state_sort !== void 0 ? _state_sort : [
|
|
167
|
+
{
|
|
168
|
+
field: 'text'
|
|
169
|
+
}
|
|
170
|
+
];
|
|
171
|
+
var _state_filter;
|
|
172
|
+
this.filter = (_state_filter = state === null || state === void 0 ? void 0 : state.filter) !== null && _state_filter !== void 0 ? _state_filter : null;
|
|
173
|
+
var _state_group;
|
|
174
|
+
this.group = (_state_group = state === null || state === void 0 ? void 0 : state.group) !== null && _state_group !== void 0 ? _state_group : [
|
|
175
|
+
{
|
|
176
|
+
field: 'group'
|
|
177
|
+
}
|
|
178
|
+
];
|
|
225
179
|
if (!lazy) {
|
|
226
180
|
this.fetch();
|
|
227
181
|
}
|
|
228
182
|
}
|
|
229
183
|
}
|
|
230
|
-
|
|
231
|
-
observable
|
|
232
|
-
__metadata("design:type", Object)
|
|
184
|
+
_ts_decorate([
|
|
185
|
+
observable
|
|
233
186
|
], DropdownState.prototype, "loading", void 0);
|
|
234
|
-
|
|
235
|
-
observable
|
|
236
|
-
__metadata("design:type", Object)
|
|
187
|
+
_ts_decorate([
|
|
188
|
+
observable
|
|
237
189
|
], DropdownState.prototype, "search", void 0);
|
|
238
|
-
|
|
190
|
+
_ts_decorate([
|
|
239
191
|
computed,
|
|
240
|
-
|
|
241
|
-
|
|
192
|
+
_ts_metadata("design:type", void 0),
|
|
193
|
+
_ts_metadata("design:paramtypes", [])
|
|
242
194
|
], DropdownState.prototype, "options", null);
|
|
243
|
-
|
|
195
|
+
_ts_decorate([
|
|
244
196
|
computed,
|
|
245
|
-
|
|
246
|
-
|
|
197
|
+
_ts_metadata("design:type", void 0),
|
|
198
|
+
_ts_metadata("design:paramtypes", [])
|
|
247
199
|
], DropdownState.prototype, "state", null);
|
|
248
|
-
|
|
200
|
+
_ts_decorate([
|
|
249
201
|
computed,
|
|
250
|
-
|
|
251
|
-
|
|
202
|
+
_ts_metadata("design:type", void 0),
|
|
203
|
+
_ts_metadata("design:paramtypes", [])
|
|
252
204
|
], DropdownState.prototype, "searchFilter", null);
|
|
253
|
-
|
|
205
|
+
_ts_decorate([
|
|
254
206
|
observable,
|
|
255
|
-
|
|
207
|
+
_ts_metadata("design:type", Object)
|
|
256
208
|
], DropdownState.prototype, "dataSource", void 0);
|
|
257
|
-
|
|
209
|
+
_ts_decorate([
|
|
258
210
|
observable,
|
|
259
|
-
|
|
211
|
+
_ts_metadata("design:type", Boolean)
|
|
260
212
|
], DropdownState.prototype, "searchByGroup", void 0);
|
|
261
|
-
|
|
213
|
+
_ts_decorate([
|
|
262
214
|
observable,
|
|
263
|
-
|
|
215
|
+
_ts_metadata("design:type", Array)
|
|
264
216
|
], DropdownState.prototype, "sort", void 0);
|
|
265
|
-
|
|
217
|
+
_ts_decorate([
|
|
266
218
|
observable,
|
|
267
|
-
|
|
219
|
+
_ts_metadata("design:type", Object)
|
|
268
220
|
], DropdownState.prototype, "filter", void 0);
|
|
269
|
-
|
|
221
|
+
_ts_decorate([
|
|
270
222
|
observable,
|
|
271
|
-
|
|
223
|
+
_ts_metadata("design:type", Array)
|
|
272
224
|
], DropdownState.prototype, "group", void 0);
|
|
273
|
-
|
|
225
|
+
_ts_decorate([
|
|
274
226
|
observable,
|
|
275
|
-
|
|
227
|
+
_ts_metadata("design:type", Array)
|
|
276
228
|
], DropdownState.prototype, "data", void 0);
|
|
277
|
-
|
|
278
|
-
action
|
|
279
|
-
__metadata("design:type", Object)
|
|
229
|
+
_ts_decorate([
|
|
230
|
+
action
|
|
280
231
|
], DropdownState.prototype, "setSearch", void 0);
|
|
281
|
-
|
|
282
|
-
action
|
|
283
|
-
__metadata("design:type", Object)
|
|
232
|
+
_ts_decorate([
|
|
233
|
+
action
|
|
284
234
|
], DropdownState.prototype, "setDataSource", void 0);
|
|
285
|
-
|
|
286
|
-
action
|
|
287
|
-
__metadata("design:type", Object)
|
|
235
|
+
_ts_decorate([
|
|
236
|
+
action
|
|
288
237
|
], DropdownState.prototype, "setSearchByGroup", void 0);
|
|
289
|
-
|
|
290
|
-
action
|
|
291
|
-
__metadata("design:type", Object)
|
|
238
|
+
_ts_decorate([
|
|
239
|
+
action
|
|
292
240
|
], DropdownState.prototype, "setSort", void 0);
|
|
293
|
-
|
|
294
|
-
action
|
|
295
|
-
__metadata("design:type", Object)
|
|
241
|
+
_ts_decorate([
|
|
242
|
+
action
|
|
296
243
|
], DropdownState.prototype, "setFilter", void 0);
|
|
297
|
-
|
|
298
|
-
action
|
|
299
|
-
__metadata("design:type", Object)
|
|
244
|
+
_ts_decorate([
|
|
245
|
+
action
|
|
300
246
|
], DropdownState.prototype, "setGroup", void 0);
|
|
301
|
-
|
|
302
|
-
action
|
|
303
|
-
__metadata("design:type", Object)
|
|
247
|
+
_ts_decorate([
|
|
248
|
+
action
|
|
304
249
|
], DropdownState.prototype, "fetch", void 0);
|
|
250
|
+
|
|
305
251
|
//# sourceMappingURL=dropdown-state.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/dropdown-state.ts"],"sourcesContent":["import { ChangeEvent } from 'react';\nimport {\n State,\n SortDescriptor,\n CompositeFilterDescriptor,\n GroupDescriptor,\n GroupResult,\n DataSource,\n} from '@servicetitan/data-query';\n\nimport { InputOnChangeData, AnvilSelectOptionsProps } from '@servicetitan/design-system';\n\nimport { observable, computed, action, runInAction, makeObservable } from 'mobx';\n\nimport debounce from 'debounce';\n\nfunction isGroupItem<T>(item: T | GroupResult<T>, groupedBy: string): item is GroupResult<T> {\n const { items, field } = item as GroupResult<T>;\n return !!items && field === groupedBy;\n}\n\nexport interface DropdownOption<T> {\n value: T;\n text: string;\n}\n\ninterface DropdownStateConstructorParams<T> {\n dataSource?: DataSource<T>;\n searchByGroup?: boolean;\n state?: {\n sort?: SortDescriptor[];\n filter?: CompositeFilterDescriptor;\n group?: [GroupDescriptor];\n };\n lazy?: boolean;\n}\n\nexport class DropdownState<T extends DropdownOption<any>> {\n @observable loading = false;\n @observable search = '';\n\n @computed get options() {\n const result = new Map<T[keyof T], AnvilSelectOptionsProps>();\n const flat: AnvilSelectOptionsProps[] = [];\n\n const groupField = this.group[0].field;\n\n this.traverse(\n this.data,\n item => {\n const group = item[groupField as keyof T];\n\n if (group) {\n if (result.has(group)) {\n result.get(group)?.options?.push(item);\n } else {\n result.set(group, {\n value: group,\n text: String(group),\n options: [item],\n });\n }\n } else {\n flat.push(item);\n }\n },\n groupField\n );\n\n return [...flat, ...Array.from(result.values())];\n }\n\n @computed get state() {\n return {\n sort: this.sort,\n filter:\n this.searchFilter || this.filter\n ? this.searchFilter && this.filter\n ? { logic: 'and', filters: [this.searchFilter, this.filter] }\n : (this.searchFilter ?? this.filter)\n : undefined,\n group: this.group,\n } as State;\n }\n\n @computed private get searchFilter() {\n if (!this.search) {\n return undefined;\n }\n\n const filter = { operator: 'contains', value: this.search, ignoreCase: true };\n\n return {\n logic: 'or',\n filters: [\n { ...filter, field: 'text' },\n ...(this.searchByGroup ? [{ ...filter, field: 'group' }] : []),\n ],\n } as CompositeFilterDescriptor;\n }\n\n @observable private dataSource: DataSource<T> | null;\n @observable private searchByGroup: boolean;\n @observable private sort: SortDescriptor[];\n @observable private filter: CompositeFilterDescriptor | null;\n @observable private group: [GroupDescriptor];\n\n @observable private data: T[] | GroupResult<T>[] = [];\n\n constructor({\n dataSource,\n searchByGroup,\n state,\n lazy,\n }: DropdownStateConstructorParams<T> = {}) {\n makeObservable(this);\n\n this.dataSource = dataSource ?? null;\n this.searchByGroup = searchByGroup ?? false;\n this.sort = state?.sort ?? [{ field: 'text' }];\n this.filter = state?.filter ?? null;\n this.group = state?.group ?? [{ field: 'group' }];\n\n if (!lazy) {\n this.fetch();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/member-ordering\n onSearchChange = (() => {\n const fetch = debounce(() => this.fetch(), 100);\n return (_0: ChangeEvent<HTMLInputElement>, data: InputOnChangeData) => {\n runInAction(() => {\n this.search = data.value;\n });\n fetch();\n };\n })();\n\n @action\n setSearch = async (search: string) => {\n this.search = search;\n await this.fetch();\n };\n\n @action\n setDataSource = async (dataSource: DataSource<T> | null) => {\n this.dataSource = dataSource;\n await this.fetch();\n };\n\n @action\n setSearchByGroup = async (searchByGroup: boolean) => {\n this.searchByGroup = searchByGroup;\n await this.fetch();\n };\n\n @action\n setSort = async (sort: SortDescriptor[]) => {\n this.sort = sort;\n await this.fetch();\n };\n\n @action\n setFilter = async (filter: CompositeFilterDescriptor | null) => {\n this.filter = filter;\n await this.fetch();\n };\n\n @action\n setGroup = async (group: [GroupDescriptor]) => {\n this.group = group;\n await this.fetch();\n };\n\n @action\n fetch = async () => {\n this.loading = true;\n\n const response = await this.dataSource?.getData(this.state);\n\n runInAction(() => {\n this.data = response?.data ?? [];\n this.loading = false;\n });\n };\n\n private traverse = (\n items: T[] | GroupResult<T>[],\n itemCallback: (item: T) => void,\n groupedBy: string\n ) => {\n if (!items) {\n return;\n }\n\n for (const item of items) {\n if (isGroupItem(item, groupedBy)) {\n this.traverse(item.items, itemCallback, groupedBy);\n } else {\n itemCallback(item);\n }\n }\n };\n}\n"],"names":["observable","computed","action","runInAction","makeObservable","debounce","isGroupItem","item","groupedBy","items","field","DropdownState","options","result","Map","flat","groupField","group","traverse","data","has","get","push","set","value","text","String","Array","from","values","state","sort","filter","searchFilter","logic","filters","undefined","search","operator","ignoreCase","searchByGroup","constructor","dataSource","lazy","loading","onSearchChange","fetch","_0","setSearch","setDataSource","setSearchByGroup","setSort","setFilter","setGroup","response","getData","itemCallback"],"mappings":"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"}
|