@webitel/ui-datalist 1.0.54 → 1.0.56
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/package.json +1 -1
- package/src/modules/card/stores/createCardStore.ts +1 -1
- package/src/modules/filter-presets/api/PresetQuery.ts +10 -0
- package/src/modules/filter-presets/components/apply-preset/apply-preset-action.vue +17 -3
- package/src/modules/filter-presets/stores/createFilterPresetsStore.ts +39 -5
- package/src/modules/filters/modules/filterConfig/components/case-assignee/case-assignee-filter-value-field.vue +1 -1
- package/src/modules/filters/modules/filterConfig/components/contact-group/contact-group-filter-value-field.vue +1 -1
- package/src/modules/table/createTableStore.store.ts +1 -1
- package/types/modules/filter-presets/api/PresetQuery.d.ts +3 -0
- package/types/modules/filter-presets/stores/createFilterPresetsStore.d.ts +138 -43
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webitel/ui-datalist",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.56",
|
|
4
4
|
"description": "Toolkit for building data lists in webitel ui system",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"make-all": "npm version patch --git-tag-version false && ( npm run lint:fix || true) && (npm run build:types || true) && npm run utils:publish",
|
|
@@ -10,7 +10,7 @@ import { CardItemId, CardParentId } from '../types/CardStore.types';
|
|
|
10
10
|
|
|
11
11
|
const defaultRegleValidationOptions: RegleSchemaBehaviourOptions &
|
|
12
12
|
RegleBehaviourOptions = {
|
|
13
|
-
autoDirty:
|
|
13
|
+
autoDirty: true, // compute errors only on $validate() fn (btn click)
|
|
14
14
|
syncState: {
|
|
15
15
|
onValidate: true, // make zod defaults fill state
|
|
16
16
|
},
|
|
@@ -60,6 +60,15 @@ const getPresetList = async (params, config: GetPresetListRequestConfig) => {
|
|
|
60
60
|
}
|
|
61
61
|
};
|
|
62
62
|
|
|
63
|
+
const getPreset = async ({ id }) => {
|
|
64
|
+
try {
|
|
65
|
+
const response = await service.readPresetQuery(id);
|
|
66
|
+
return applyTransform(response.data, [snakeToCamel()]);
|
|
67
|
+
} catch (err) {
|
|
68
|
+
throw applyTransform(err, [notify]);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
63
72
|
const addPreset = async ({
|
|
64
73
|
preset,
|
|
65
74
|
namespace,
|
|
@@ -111,6 +120,7 @@ const deletePreset = async ({ id }) => {
|
|
|
111
120
|
|
|
112
121
|
const PresetQueryAPI = {
|
|
113
122
|
getList: getPresetList,
|
|
123
|
+
get: getPreset,
|
|
114
124
|
add: addPreset,
|
|
115
125
|
update: updatePreset,
|
|
116
126
|
delete: deletePreset,
|
|
@@ -79,7 +79,7 @@ import {
|
|
|
79
79
|
import { IconAction } from '@webitel/ui-sdk/enums';
|
|
80
80
|
import { useTableEmpty } from '@webitel/ui-sdk/modules/TableComponentModule/composables/useTableEmpty';
|
|
81
81
|
import { type Store, storeToRefs } from 'pinia';
|
|
82
|
-
import {
|
|
82
|
+
import {computed, inject, onMounted, ref, watch} from 'vue';
|
|
83
83
|
import { useI18n } from 'vue-i18n';
|
|
84
84
|
import { EnginePresetQuery } from 'webitel-sdk';
|
|
85
85
|
|
|
@@ -107,10 +107,10 @@ const { t } = useI18n();
|
|
|
107
107
|
const showPresetsList = ref(false);
|
|
108
108
|
|
|
109
109
|
const presetsStore = props.usePresetsStore();
|
|
110
|
-
const { dataList, error, isLoading, filtersManager } =
|
|
110
|
+
const { dataList, error, isLoading, filtersManager, presetId } =
|
|
111
111
|
storeToRefs(presetsStore);
|
|
112
112
|
|
|
113
|
-
const { loadDataList, initialize, updateSize, deleteEls } = presetsStore;
|
|
113
|
+
const { loadDataList, initialize, updateSize, deleteEls, setupPresetPersistence } = presetsStore;
|
|
114
114
|
|
|
115
115
|
updateSize(1000);
|
|
116
116
|
filtersManager.value.addFilter({
|
|
@@ -166,6 +166,7 @@ const applySelectedPreset = () => {
|
|
|
166
166
|
const filtersSnapshot =
|
|
167
167
|
selectedPreset.value.preset['filtersManager.toString'];
|
|
168
168
|
emit('apply', filtersSnapshot);
|
|
169
|
+
presetId.value = selectedPreset.value.id
|
|
169
170
|
|
|
170
171
|
selectedPreset.value = null;
|
|
171
172
|
showPresetsList.value = false;
|
|
@@ -201,6 +202,19 @@ const deletePreset = async (preset: EnginePresetQuery) => {
|
|
|
201
202
|
}),
|
|
202
203
|
});
|
|
203
204
|
};
|
|
205
|
+
|
|
206
|
+
const restorePresetById = async (id: number | null) => {
|
|
207
|
+
if (!id) return;
|
|
208
|
+
const presetData = await PresetQueryAPI.get({ id });
|
|
209
|
+
const filters = presetData?.preset?.['filtersManager.toString'];
|
|
210
|
+
|
|
211
|
+
if (filters) emit('apply', filters);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
onMounted(async () => {
|
|
215
|
+
await setupPresetPersistence();
|
|
216
|
+
await restorePresetById(presetId.value)
|
|
217
|
+
})
|
|
204
218
|
</script>
|
|
205
219
|
|
|
206
220
|
<style lang="scss" scoped>
|
|
@@ -1,17 +1,51 @@
|
|
|
1
|
+
import { ref } from 'vue';
|
|
1
2
|
import { EnginePresetQuery } from 'webitel-sdk';
|
|
2
3
|
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
4
|
+
import { PersistedStorageType } from '../../persist/PersistedStorage.types';
|
|
5
|
+
import { usePersistedStorage } from '../../persist/usePersistedStorage';
|
|
6
|
+
import { tableStoreBody } from '../../table/createTableStore.store';
|
|
7
|
+
import PresetQueryAPI from '../api/PresetQuery';
|
|
8
|
+
import { headers } from './headers/headers';
|
|
6
9
|
|
|
7
|
-
export const
|
|
10
|
+
export const filterPresetsStoreBody = (namespace = 'presets') => {
|
|
8
11
|
const presetsNamespace = namespace.endsWith('presets')
|
|
9
12
|
? namespace
|
|
10
13
|
: `${namespace}/presets`;
|
|
11
14
|
|
|
12
|
-
|
|
15
|
+
const presetId = ref(null);
|
|
16
|
+
|
|
17
|
+
const setupPresetPersistence = async () => {
|
|
18
|
+
const { restore: restorePreset } = usePersistedStorage({
|
|
19
|
+
name: 'preset',
|
|
20
|
+
value: presetId,
|
|
21
|
+
storages: [PersistedStorageType.LocalStorage],
|
|
22
|
+
storagePath: presetsNamespace,
|
|
23
|
+
onStore: (save, { name }) => {
|
|
24
|
+
const value = presetId.value;
|
|
25
|
+
return save({ name, value });
|
|
26
|
+
},
|
|
27
|
+
onRestore: async (restore, name) => {
|
|
28
|
+
const value = await restore(name);
|
|
29
|
+
presetId.value = Number(value);
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
await restorePreset();
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const tableStore = tableStoreBody<EnginePresetQuery>(presetsNamespace, {
|
|
13
36
|
apiModule: PresetQueryAPI,
|
|
14
37
|
headers,
|
|
15
38
|
disablePersistence: true,
|
|
16
39
|
});
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
...tableStore,
|
|
43
|
+
|
|
44
|
+
presetId,
|
|
45
|
+
setupPresetPersistence,
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export const createFilterPresetsStore = (namespace: string) => {
|
|
50
|
+
return () => filterPresetsStoreBody(namespace);
|
|
17
51
|
};
|
|
@@ -22,7 +22,7 @@ export const tableStoreBody = <Entity extends { id: string; etag?: string }>(
|
|
|
22
22
|
headers: rowHeaders,
|
|
23
23
|
disablePersistence,
|
|
24
24
|
storeType,
|
|
25
|
-
isAppendDataList
|
|
25
|
+
isAppendDataList,
|
|
26
26
|
} = config;
|
|
27
27
|
const usePaginationStore = createTablePaginationStore(namespace, config);
|
|
28
28
|
const useHeadersStore = createTableHeadersStore(namespace, config, {
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const filterPresetsStoreBody: (namespace?: string) => {
|
|
2
|
+
presetId: import("vue").Ref<any, any>;
|
|
3
|
+
setupPresetPersistence: () => Promise<void>;
|
|
2
4
|
dataList: import("vue").Ref<EnginePresetQuery[], EnginePresetQuery[]>;
|
|
3
5
|
selected: import("vue").Ref<EnginePresetQuery[], EnginePresetQuery[]>;
|
|
4
6
|
error: import("vue").Ref<any, any>;
|
|
@@ -12,64 +14,64 @@ export declare const createFilterPresetsStore: (namespace?: string) => import(".
|
|
|
12
14
|
sort: import("vue").ComputedRef<string>;
|
|
13
15
|
filtersManager: import("vue").Ref<{
|
|
14
16
|
filters: Map<string, {
|
|
15
|
-
name: import("../../filters
|
|
16
|
-
value: import("../../filters
|
|
17
|
-
label?: import("../../filters
|
|
18
|
-
set: (data: import("../../filters/classes/Filter
|
|
19
|
-
}> & Omit<Map<string, import("../../filters
|
|
20
|
-
hasFilter: (name: import("../../filters
|
|
21
|
-
getFilter: (name: import("../../filters
|
|
22
|
-
addFilter: (params: import("../../filters
|
|
17
|
+
name: import("../../filters").FilterName;
|
|
18
|
+
value: import("../../filters").FilterValue;
|
|
19
|
+
label?: import("../../filters").FilterLabel;
|
|
20
|
+
set: (data: import("../../filters/classes/Filter").FilterData) => import("../../filters").IFilter;
|
|
21
|
+
}> & Omit<Map<string, import("../../filters").IFilter>, keyof Map<any, any>>;
|
|
22
|
+
hasFilter: (name: import("../../filters").FilterName) => boolean;
|
|
23
|
+
getFilter: (name: import("../../filters").FilterName) => import("../../filters").IFilter;
|
|
24
|
+
addFilter: (params: import("../../filters").FilterInitParams, payload?: object, config?: import("../../filters").FilterInstanceConfig) => import("../../filters").IFilter;
|
|
23
25
|
updateFilter: ({ name, }: {
|
|
24
|
-
name: import("../../filters
|
|
25
|
-
value?: import("../../filters
|
|
26
|
-
label?: import("../../filters
|
|
27
|
-
}) => import("../../filters
|
|
28
|
-
deleteFilter: (name: import("../../filters
|
|
26
|
+
name: import("../../filters").FilterName;
|
|
27
|
+
value?: import("../../filters").FilterValue;
|
|
28
|
+
label?: import("../../filters").FilterLabel;
|
|
29
|
+
}) => import("../../filters").IFilter;
|
|
30
|
+
deleteFilter: (name: import("../../filters").FilterName) => import("../../filters").IFilter;
|
|
29
31
|
toString: () => string;
|
|
30
32
|
fromString: (snapshotStr: string) => void;
|
|
31
33
|
reset: ({ include, exclude, }?: {
|
|
32
|
-
include?: import("../../filters
|
|
33
|
-
exclude?: import("../../filters
|
|
34
|
+
include?: import("../../filters").FilterName[];
|
|
35
|
+
exclude?: import("../../filters").FilterName[];
|
|
34
36
|
}) => void;
|
|
35
|
-
getAllKeys: () => import("../../filters
|
|
37
|
+
getAllKeys: () => import("../../filters").FilterName[];
|
|
36
38
|
getAllValues: () => {
|
|
37
|
-
[name: import("../../filters
|
|
39
|
+
[name: import("../../filters").FilterName]: import("../../filters").FilterValue;
|
|
38
40
|
};
|
|
39
41
|
getFiltersList: ({ include, exclude, }?: {
|
|
40
|
-
include?: import("../../filters
|
|
41
|
-
exclude?: import("../../filters
|
|
42
|
-
}) => import("../../filters
|
|
42
|
+
include?: import("../../filters").FilterName[];
|
|
43
|
+
exclude?: import("../../filters").FilterName[];
|
|
44
|
+
}) => import("../../filters").IFilter[];
|
|
43
45
|
}, {
|
|
44
46
|
filters: Map<string, {
|
|
45
|
-
name: import("../../filters
|
|
46
|
-
value: import("../../filters
|
|
47
|
-
label?: import("../../filters
|
|
48
|
-
set: (data: import("../../filters/classes/Filter
|
|
49
|
-
}> & Omit<Map<string, import("../../filters
|
|
50
|
-
hasFilter: (name: import("../../filters
|
|
51
|
-
getFilter: (name: import("../../filters
|
|
52
|
-
addFilter: (params: import("../../filters
|
|
47
|
+
name: import("../../filters").FilterName;
|
|
48
|
+
value: import("../../filters").FilterValue;
|
|
49
|
+
label?: import("../../filters").FilterLabel;
|
|
50
|
+
set: (data: import("../../filters/classes/Filter").FilterData) => import("../../filters").IFilter;
|
|
51
|
+
}> & Omit<Map<string, import("../../filters").IFilter>, keyof Map<any, any>>;
|
|
52
|
+
hasFilter: (name: import("../../filters").FilterName) => boolean;
|
|
53
|
+
getFilter: (name: import("../../filters").FilterName) => import("../../filters").IFilter;
|
|
54
|
+
addFilter: (params: import("../../filters").FilterInitParams, payload?: object, config?: import("../../filters").FilterInstanceConfig) => import("../../filters").IFilter;
|
|
53
55
|
updateFilter: ({ name, }: {
|
|
54
|
-
name: import("../../filters
|
|
55
|
-
value?: import("../../filters
|
|
56
|
-
label?: import("../../filters
|
|
57
|
-
}) => import("../../filters
|
|
58
|
-
deleteFilter: (name: import("../../filters
|
|
56
|
+
name: import("../../filters").FilterName;
|
|
57
|
+
value?: import("../../filters").FilterValue;
|
|
58
|
+
label?: import("../../filters").FilterLabel;
|
|
59
|
+
}) => import("../../filters").IFilter;
|
|
60
|
+
deleteFilter: (name: import("../../filters").FilterName) => import("../../filters").IFilter;
|
|
59
61
|
toString: () => string;
|
|
60
62
|
fromString: (snapshotStr: string) => void;
|
|
61
63
|
reset: ({ include, exclude, }?: {
|
|
62
|
-
include?: import("../../filters
|
|
63
|
-
exclude?: import("../../filters
|
|
64
|
+
include?: import("../../filters").FilterName[];
|
|
65
|
+
exclude?: import("../../filters").FilterName[];
|
|
64
66
|
}) => void;
|
|
65
|
-
getAllKeys: () => import("../../filters
|
|
67
|
+
getAllKeys: () => import("../../filters").FilterName[];
|
|
66
68
|
getAllValues: () => {
|
|
67
|
-
[name: import("../../filters
|
|
69
|
+
[name: import("../../filters").FilterName]: import("../../filters").FilterValue;
|
|
68
70
|
};
|
|
69
71
|
getFiltersList: ({ include, exclude, }?: {
|
|
70
|
-
include?: import("../../filters
|
|
71
|
-
exclude?: import("../../filters
|
|
72
|
-
}) => import("../../filters
|
|
72
|
+
include?: import("../../filters").FilterName[];
|
|
73
|
+
exclude?: import("../../filters").FilterName[];
|
|
74
|
+
}) => import("../../filters").IFilter[];
|
|
73
75
|
}>;
|
|
74
76
|
isFiltersRestoring: import("vue").Ref<boolean, boolean>;
|
|
75
77
|
initialize: ({ parentId: storeParentId, }?: {
|
|
@@ -78,7 +80,7 @@ export declare const createFilterPresetsStore: (namespace?: string) => import(".
|
|
|
78
80
|
loadDataList: () => Promise<void>;
|
|
79
81
|
appendToDataList: () => Promise<void>;
|
|
80
82
|
updateSelected: (value: EnginePresetQuery[]) => void;
|
|
81
|
-
patchItemProperty: ({ index, path, value, }: import("../../types/tableStore.types
|
|
83
|
+
patchItemProperty: ({ index, path, value, }: import("../../types/tableStore.types").PatchItemPropertyParams) => Promise<void>;
|
|
82
84
|
deleteEls: (_els: EnginePresetQuery[]) => Promise<void>;
|
|
83
85
|
updatePage: (newPage: number) => void;
|
|
84
86
|
updateSize: (newSize: number) => void;
|
|
@@ -88,4 +90,97 @@ export declare const createFilterPresetsStore: (namespace?: string) => import(".
|
|
|
88
90
|
addFilter: any;
|
|
89
91
|
updateFilter: any;
|
|
90
92
|
deleteFilter: any;
|
|
91
|
-
}
|
|
93
|
+
};
|
|
94
|
+
export declare const createFilterPresetsStore: (namespace: string) => () => {
|
|
95
|
+
presetId: import("vue").Ref<any, any>;
|
|
96
|
+
setupPresetPersistence: () => Promise<void>;
|
|
97
|
+
dataList: import("vue").Ref<EnginePresetQuery[], EnginePresetQuery[]>;
|
|
98
|
+
selected: import("vue").Ref<EnginePresetQuery[], EnginePresetQuery[]>;
|
|
99
|
+
error: import("vue").Ref<any, any>;
|
|
100
|
+
isLoading: import("vue").Ref<boolean, boolean>;
|
|
101
|
+
page: import("vue").Ref<number, number>;
|
|
102
|
+
size: import("vue").Ref<number, number>;
|
|
103
|
+
next: import("vue").Ref<boolean, boolean>;
|
|
104
|
+
headers: import("vue").Ref<any, any>;
|
|
105
|
+
shownHeaders: import("vue").ComputedRef<any>;
|
|
106
|
+
fields: import("vue").ComputedRef<any>;
|
|
107
|
+
sort: import("vue").ComputedRef<string>;
|
|
108
|
+
filtersManager: import("vue").Ref<{
|
|
109
|
+
filters: Map<string, {
|
|
110
|
+
name: import("../../filters").FilterName;
|
|
111
|
+
value: import("../../filters").FilterValue;
|
|
112
|
+
label?: import("../../filters").FilterLabel;
|
|
113
|
+
set: (data: import("../../filters/classes/Filter").FilterData) => import("../../filters").IFilter;
|
|
114
|
+
}> & Omit<Map<string, import("../../filters").IFilter>, keyof Map<any, any>>;
|
|
115
|
+
hasFilter: (name: import("../../filters").FilterName) => boolean;
|
|
116
|
+
getFilter: (name: import("../../filters").FilterName) => import("../../filters").IFilter;
|
|
117
|
+
addFilter: (params: import("../../filters").FilterInitParams, payload?: object, config?: import("../../filters").FilterInstanceConfig) => import("../../filters").IFilter;
|
|
118
|
+
updateFilter: ({ name, }: {
|
|
119
|
+
name: import("../../filters").FilterName;
|
|
120
|
+
value?: import("../../filters").FilterValue;
|
|
121
|
+
label?: import("../../filters").FilterLabel;
|
|
122
|
+
}) => import("../../filters").IFilter;
|
|
123
|
+
deleteFilter: (name: import("../../filters").FilterName) => import("../../filters").IFilter;
|
|
124
|
+
toString: () => string;
|
|
125
|
+
fromString: (snapshotStr: string) => void;
|
|
126
|
+
reset: ({ include, exclude, }?: {
|
|
127
|
+
include?: import("../../filters").FilterName[];
|
|
128
|
+
exclude?: import("../../filters").FilterName[];
|
|
129
|
+
}) => void;
|
|
130
|
+
getAllKeys: () => import("../../filters").FilterName[];
|
|
131
|
+
getAllValues: () => {
|
|
132
|
+
[name: import("../../filters").FilterName]: import("../../filters").FilterValue;
|
|
133
|
+
};
|
|
134
|
+
getFiltersList: ({ include, exclude, }?: {
|
|
135
|
+
include?: import("../../filters").FilterName[];
|
|
136
|
+
exclude?: import("../../filters").FilterName[];
|
|
137
|
+
}) => import("../../filters").IFilter[];
|
|
138
|
+
}, {
|
|
139
|
+
filters: Map<string, {
|
|
140
|
+
name: import("../../filters").FilterName;
|
|
141
|
+
value: import("../../filters").FilterValue;
|
|
142
|
+
label?: import("../../filters").FilterLabel;
|
|
143
|
+
set: (data: import("../../filters/classes/Filter").FilterData) => import("../../filters").IFilter;
|
|
144
|
+
}> & Omit<Map<string, import("../../filters").IFilter>, keyof Map<any, any>>;
|
|
145
|
+
hasFilter: (name: import("../../filters").FilterName) => boolean;
|
|
146
|
+
getFilter: (name: import("../../filters").FilterName) => import("../../filters").IFilter;
|
|
147
|
+
addFilter: (params: import("../../filters").FilterInitParams, payload?: object, config?: import("../../filters").FilterInstanceConfig) => import("../../filters").IFilter;
|
|
148
|
+
updateFilter: ({ name, }: {
|
|
149
|
+
name: import("../../filters").FilterName;
|
|
150
|
+
value?: import("../../filters").FilterValue;
|
|
151
|
+
label?: import("../../filters").FilterLabel;
|
|
152
|
+
}) => import("../../filters").IFilter;
|
|
153
|
+
deleteFilter: (name: import("../../filters").FilterName) => import("../../filters").IFilter;
|
|
154
|
+
toString: () => string;
|
|
155
|
+
fromString: (snapshotStr: string) => void;
|
|
156
|
+
reset: ({ include, exclude, }?: {
|
|
157
|
+
include?: import("../../filters").FilterName[];
|
|
158
|
+
exclude?: import("../../filters").FilterName[];
|
|
159
|
+
}) => void;
|
|
160
|
+
getAllKeys: () => import("../../filters").FilterName[];
|
|
161
|
+
getAllValues: () => {
|
|
162
|
+
[name: import("../../filters").FilterName]: import("../../filters").FilterValue;
|
|
163
|
+
};
|
|
164
|
+
getFiltersList: ({ include, exclude, }?: {
|
|
165
|
+
include?: import("../../filters").FilterName[];
|
|
166
|
+
exclude?: import("../../filters").FilterName[];
|
|
167
|
+
}) => import("../../filters").IFilter[];
|
|
168
|
+
}>;
|
|
169
|
+
isFiltersRestoring: import("vue").Ref<boolean, boolean>;
|
|
170
|
+
initialize: ({ parentId: storeParentId, }?: {
|
|
171
|
+
parentId?: string | number;
|
|
172
|
+
}) => Promise<void>;
|
|
173
|
+
loadDataList: () => Promise<void>;
|
|
174
|
+
appendToDataList: () => Promise<void>;
|
|
175
|
+
updateSelected: (value: EnginePresetQuery[]) => void;
|
|
176
|
+
patchItemProperty: ({ index, path, value, }: import("../../types/tableStore.types").PatchItemPropertyParams) => Promise<void>;
|
|
177
|
+
deleteEls: (_els: EnginePresetQuery[]) => Promise<void>;
|
|
178
|
+
updatePage: (newPage: number) => void;
|
|
179
|
+
updateSize: (newSize: number) => void;
|
|
180
|
+
updateSort: (column: any) => void;
|
|
181
|
+
updateShownHeaders: (value: any) => void;
|
|
182
|
+
hasFilter: any;
|
|
183
|
+
addFilter: any;
|
|
184
|
+
updateFilter: any;
|
|
185
|
+
deleteFilter: any;
|
|
186
|
+
};
|