@webitel/ui-sdk 24.10.2 → 24.10.4
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/ui-sdk.css +1 -1
- package/dist/ui-sdk.js +111 -114
- package/dist/ui-sdk.umd.cjs +8 -8
- package/package.json +6 -4
- package/src/api/axios/generateInstance.js +1 -4
- package/src/api/clients/agents/agents.js +31 -78
- package/src/api/clients/buckets/buckets.js +17 -57
- package/src/api/clients/calendars/calendars.js +18 -71
- package/src/api/clients/chatGateways/chatGateways.js +23 -61
- package/src/api/clients/chatGateways/defaults/webChatGateway.js +6 -8
- package/src/api/clients/chatGateways/enums/WebchatAlternativeChannel.enum.js +3 -3
- package/src/api/clients/communications/communications.js +20 -62
- package/src/api/clients/configurations/configurations.js +18 -3
- package/src/api/clients/flows/flow.js +17 -60
- package/src/api/clients/gateways/gateways.js +20 -59
- package/src/api/clients/index.js +1 -1
- package/src/api/clients/lists/blacklists.js +18 -60
- package/src/api/clients/media/media.js +13 -43
- package/src/api/clients/queues/defaults/processing.js +10 -6
- package/src/api/clients/queues/queues.js +21 -69
- package/src/api/clients/roles/roles.js +15 -33
- package/src/api/clients/users/__tests__/users.spec.js +43 -26
- package/src/api/clients/users/users.js +21 -56
- package/src/api/crm/contactChatMessagesHistory.js +8 -23
- package/src/api/crm/index.js +1 -3
- package/src/api/defaults/getDefaultGetParams/getDefaultGetParams.js +1 -4
- package/src/api/defaults/getDefaultInstance/getDefaultInstance.js +10 -11
- package/src/api/defaults/getDefaultOpenAPIConfig/getDefaultOpenAPIConfig.js +6 -5
- package/src/api/defaults/index.js +2 -4
- package/src/api/history/index.js +1 -3
- package/src/api/history/transcript/callTranscript.js +10 -30
- package/src/api/interceptors/request/updateToken.interceptor.js +1 -2
- package/src/api/transformers/merge/merge.transformer.js +4 -1
- package/src/api/transformers/mergeEach/mergeEach.transformer.js +4 -4
- package/src/api/transformers/notify/notify.transformer.js +9 -6
- package/src/api/transformers/starToSearch/starToSearch.transformer.js +8 -6
- package/src/components/index.js +3 -6
- package/src/components/on-demand/wt-cc-agent-status-timers/__tests__/wt-cc-agent-status-timers.spec.js +2 -4
- package/src/components/transitions/wt-expand-transition.vue +2 -3
- package/src/components/wt-app-header/__tests__/WtAppNavigator.spec.js +1 -2
- package/src/components/wt-app-header/__tests__/WtHeaderActions.spec.js +1 -2
- package/src/components/wt-app-header/wt-app-navigator.vue +15 -9
- package/src/components/wt-avatar/wt-avatar.vue +8 -3
- package/src/components/wt-button/wt-button.vue +0 -1
- package/src/components/wt-button-select/__tests__/WtButtonSelect.spec.js +4 -5
- package/src/components/wt-button-select/wt-button-select.vue +0 -1
- package/src/components/wt-context-menu/wt-context-menu.vue +32 -35
- package/src/components/wt-dummy/wt-dummy.vue +2 -5
- package/src/components/wt-expansion-panel/wt-expansion-panel.vue +10 -7
- package/src/components/wt-filters-panel-wrapper/__tests__/WtFiltersPanelWrapper.spec.js +4 -8
- package/src/components/wt-icon/wt-icon.vue +0 -1
- package/src/components/wt-indicator/__tests__/WtIndicator.spec.js +3 -2
- package/src/components/wt-indicator/wt-indicator.vue +10 -1
- package/src/components/wt-input/wt-input.vue +7 -10
- package/src/components/wt-item-link/wt-item-link.vue +7 -4
- package/src/components/wt-navigation-bar/__tests__/WtNavigationBar.spec.js +7 -15
- package/src/components/wt-navigation-bar/wt-navigation-bar.vue +7 -7
- package/src/components/wt-notification/wt-notification.vue +1 -2
- package/src/components/wt-notifications-bar/__tests__/WtNotificationsBar.spec.js +6 -3
- package/src/components/wt-notifications-bar/wt-notifications-bar.vue +4 -1
- package/src/components/wt-page-wrapper/__tests__/WtPageWrapper.spec.js +1 -2
- package/src/components/wt-pagination/wt-pagination.vue +1 -3
- package/src/components/wt-player/scripts/__tests__/createPlyrURL.spec.js +4 -8
- package/src/components/wt-player/wt-player.vue +13 -4
- package/src/components/wt-popup/wt-popup.vue +2 -1
- package/src/components/wt-search-bar/wt-search-bar.vue +1 -1
- package/src/components/wt-select/mixins/multiselectMixin.js +2 -5
- package/src/components/wt-select/wt-select.vue +12 -11
- package/src/components/wt-slider/wt-slider.vue +4 -2
- package/src/components/wt-status-select/wt-status-select.vue +10 -6
- package/src/components/wt-stepper/wt-stepper.vue +6 -4
- package/src/components/wt-switcher/wt-switcher.vue +1 -3
- package/src/components/wt-table/__tests__/WtTable.spec.js +2 -5
- package/src/components/wt-table/wt-table.vue +18 -16
- package/src/components/wt-table-column-select/wt-table-column-select.vue +9 -8
- package/src/components/wt-tabs/wt-tabs.vue +1 -3
- package/src/components/wt-tags-input/mixin/taggableMixin.js +7 -7
- package/src/components/wt-textarea/__tests__/WtTextarea.spec.js +2 -4
- package/src/components/wt-textarea/wt-textarea.vue +3 -2
- package/src/components/wt-timepicker/wt-timepicker.vue +1 -3
- package/src/components/wt-tooltip/_internals/useTooltipTriggerSubscriptions.js +1 -3
- package/src/components/wt-tooltip/_internals/wt-tooltip-floating.vue +8 -12
- package/src/components/wt-tooltip/wt-tooltip.vue +13 -13
- package/src/composables/useCachedInterval/__tests__/useCachedInterval.spec.js +6 -4
- package/src/composables/useCachedInterval/useCachedInterval.js +3 -8
- package/src/composables/useRepresentableAgentPauseCause/__tests__/useRepresentableAgentPauseCause.spec.js +11 -33
- package/src/composables/useRepresentableAgentPauseCause/useRepresentableAgentPauseCause.js +11 -9
- package/src/enums/WebitelApplications/AdminSections.enum.js +28 -28
- package/src/enums/WebitelApplications/CrmSections.enum.js +1 -1
- package/src/locale/en/en.js +12 -15
- package/src/locale/es/es.js +4 -8
- package/src/locale/kz/kz.js +5 -7
- package/src/locale/ru/ru.js +7 -11
- package/src/locale/ua/ua.js +13 -17
- package/src/mixins/dataFilterMixins/__tests__/enumFilterMixin.spec.js +1 -2
- package/src/mixins/dataFilterMixins/__tests__/sortFilterMixin.spec.js +4 -2
- package/src/mixins/dataFilterMixins/__tests__/urlControllerMixin.spec.js +4 -1
- package/src/mixins/dataFilterMixins/_urlControllerMixin/_urlControllerMixin.js +1 -1
- package/src/mixins/dataFilterMixins/apiFilterMixin.js +1 -2
- package/src/mixins/dataFilterMixins/baseFilterMixin/baseFilterMixin.js +1 -2
- package/src/mixins/dataFilterMixins/enumFilterMixin.js +5 -6
- package/src/mixins/dataFilterMixins/paginationFilterMixin.js +1 -2
- package/src/mixins/dataFilterMixins/sortFilterMixin.js +1 -4
- package/src/mixins/validationMixin/__tests__/validationMixin.spec.js +1 -2
- package/src/mixins/validationMixin/useValidation.js +25 -19
- package/src/mixins/validationMixin/validationMixin.js +22 -10
- package/src/modules/AgentStatusSelect/api/pause-cause.js +3 -11
- package/src/modules/AgentStatusSelect/components/__tests__/wt-cc-agent-status-select.spec.js +16 -18
- package/src/modules/AgentStatusSelect/components/__tests__/wt-cc-pause-cause-popup.spec.js +1 -2
- package/src/modules/AgentStatusSelect/components/_internals/wt-cc-pause-cause-popup.vue +12 -12
- package/src/modules/AgentStatusSelect/components/_internals/wt-cc-status-select-error-popup.vue +0 -1
- package/src/modules/AgentStatusSelect/components/wt-cc-agent-status-select.vue +20 -7
- package/src/modules/Appearance/components/__tests__/wt-dark-mode-switcher.spec.js +2 -4
- package/src/modules/Appearance/components/wt-dark-mode-switcher.vue +0 -1
- package/src/modules/AuditForm/components/__tests__/audit-form-question-read-wrapper.spec.js +1 -2
- package/src/modules/AuditForm/components/__tests__/audit-form-question-write-wrapper.spec.js +15 -25
- package/src/modules/AuditForm/components/__tests__/audit-form.spec.js +11 -20
- package/src/modules/AuditForm/components/audit-form-question-read-wrapper.vue +1 -4
- package/src/modules/AuditForm/components/audit-form-question-write-wrapper.vue +4 -7
- package/src/modules/AuditForm/components/audit-form-question.vue +18 -17
- package/src/modules/AuditForm/components/audit-form.vue +12 -14
- package/src/modules/AuditForm/components/questions/options/__tests__/audit-form-question-options-write-row.spec.js +1 -2
- package/src/modules/AuditForm/components/questions/options/__tests__/audit-form-question-options.spec.js +1 -3
- package/src/modules/AuditForm/components/questions/options/audit-form-question-options-write-row.vue +11 -15
- package/src/modules/AuditForm/components/questions/options/audit-form-question-options.vue +1 -4
- package/src/modules/AuditForm/components/questions/score/audit-form-question-score.vue +16 -20
- package/src/modules/AuditForm/schemas/AuditFormQuestionOptionsSchema.js +1 -3
- package/src/modules/CSVExport/CSVExport.js +3 -7
- package/src/modules/CSVExport/XLSExport.js +6 -7
- package/src/modules/CSVExport/__tests__/CSVExport.spec.js +1 -2
- package/src/modules/CSVExport/mixins/exportCSVMixin.js +2 -5
- package/src/modules/CSVExport/mixins/exportXLSMixin.js +2 -4
- package/src/modules/CardStoreModule/store/CardStoreModule.js +2 -6
- package/src/modules/DeleteConfirmationPopup/__tests__/delete-confirmation-popup.spec.js +13 -10
- package/src/modules/DeleteConfirmationPopup/components/delete-confirmation-popup.vue +5 -14
- package/src/modules/FilesExport/FilesExport.js +4 -3
- package/src/modules/FilesExport/__tests__/FilesExport.spec.js +12 -12
- package/src/modules/FilesExport/mixins/exportFilesMixin.js +6 -7
- package/src/modules/FilesExport/scripts/generateMediaURL.js +1 -2
- package/src/modules/Filters/classes/BaseFilterSchema.js +21 -23
- package/src/modules/Filters/components/filter-pagination.vue +7 -3
- package/src/modules/Filters/components/filter-search.vue +21 -12
- package/src/modules/Filters/components/filter-table-fields.vue +1 -3
- package/src/modules/Filters/scripts/getters/index.js +1 -5
- package/src/modules/Filters/scripts/getters/queryGetter.js +8 -3
- package/src/modules/Filters/scripts/getters/valueGetter.js +1 -2
- package/src/modules/Filters/scripts/restores/index.js +1 -4
- package/src/modules/Filters/scripts/setters/index.js +1 -5
- package/src/modules/Filters/scripts/setters/querySetter.js +24 -22
- package/src/modules/Filters/scripts/utils/changeRouteQuery.js +16 -15
- package/src/modules/Filters/store/FiltersStoreModule.js +51 -45
- package/src/modules/Filters/store/__tests__/FiltersStoreModule.spec.js +51 -45
- package/src/modules/Notifications/store/NotificationsStoreModule.js +41 -38
- package/src/modules/Notifications/store/__tests__/NotificationsStoreModule.actions.spec.js +6 -6
- package/src/modules/QueryFilters/api/defaults.js +2 -3
- package/src/modules/QueryFilters/classes/ApiFilterSchema.js +1 -4
- package/src/modules/QueryFilters/classes/EnumFilterSchema.js +1 -4
- package/src/modules/QueryFilters/components/__tests__/filter-datetime.spec.js +1 -2
- package/src/modules/QueryFilters/components/__tests__/filter-from-to.spec.js +2 -4
- package/src/modules/QueryFilters/components/__tests__/filter-search.spec.js +2 -4
- package/src/modules/QueryFilters/components/filter-table-fields.vue +1 -5
- package/src/modules/QueryFilters/mixins/__tests__/apiFilterMixin.spec.js +4 -3
- package/src/modules/QueryFilters/mixins/__tests__/enumFilterMixin.spec.js +2 -4
- package/src/modules/QueryFilters/mixins/__tests__/sortFilterMixin.spec.js +4 -2
- package/src/modules/QueryFilters/mixins/__tests__/urlControllerMixin.spec.js +4 -1
- package/src/modules/QueryFilters/mixins/_urlControllerMixin/_urlControllerMixin.js +1 -1
- package/src/modules/QueryFilters/mixins/apiFilterMixin.js +1 -1
- package/src/modules/QueryFilters/mixins/baseFilterMixin/baseFilterMixin.js +4 -2
- package/src/modules/QueryFilters/mixins/enumFilterMixin.js +9 -11
- package/src/modules/QueryFilters/mixins/paginationFilterMixin.js +2 -4
- package/src/modules/QueryFilters/mixins/sortFilterMixin.js +2 -5
- package/src/modules/QueryFilters/store/QueryFiltersStoreModule.js +13 -17
- package/src/modules/QueryFilters/store/__tests__/QueryFiltersStoreModule.spec.js +15 -16
- package/src/modules/TableStoreModule/store/TableStoreModule.js +14 -33
- package/src/modules/TableStoreModule/store/__tests__/TableStoreModule.spec.js +69 -83
- package/src/modules/Userinfo/api/userinfo.js +6 -19
- package/src/modules/Userinfo/classes/ApplicationsAccess.js +5 -12
- package/src/modules/Userinfo/store/UserinfoStoreModule.js +38 -41
- package/src/plugins/breakpoint/breakpoint.plugin.js +11 -16
- package/src/scripts/__tests__/caseConverters.spec.js +1 -4
- package/src/scripts/__tests__/debounce.spec.js +3 -1
- package/src/scripts/__tests__/prettifyFileSize.spec.js +2 -2
- package/src/scripts/__tests__/preventHiddenPageCallsDecorator.spec.js +7 -4
- package/src/scripts/__tests__/updateObject.spec.js +3 -5
- package/src/scripts/caseConverters.js +22 -38
- package/src/scripts/debounce.js +1 -5
- package/src/scripts/editProxy.js +8 -7
- package/src/scripts/prettifyFileSize.js +1 -1
- package/src/scripts/preventHiddenPageCallsDecorator.js +3 -6
- package/src/store/BaseStoreModules/ApiStoreModule.js +7 -33
- package/src/store/BaseStoreModules/BaseStoreModule.js +14 -23
- package/src/store/BaseStoreModules/__tests__/BaseStoreModule.spec.js +7 -28
- package/src/store/helpers/getNamespacedState.js +2 -4
- package/src/store/new/modules/apiStoreModule/apiStoreModule.js +7 -27
- package/src/store/new/modules/cardStoreModule/cardStoreModule.js +0 -1
- package/src/store/new/modules/tableStoreModule/__tests__/tableStoreModule.spec.js +64 -77
- package/src/store/new/modules/tableStoreModule/tableStoreModule.js +12 -29
- package/src/tests/mocks/axiosMock.js +25 -19
- package/src/validators/decimalValidator.js +5 -4
- package/src/validators/websocketValidator/__tests__/websocketValidator.spec.js +1 -2
- package/src/validators/websocketValidator/websocketValidator.js +1 -1
|
@@ -1,14 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
localStorageGetter,
|
|
3
|
-
queryGetter,
|
|
4
|
-
valueGetter,
|
|
5
|
-
} from '../scripts/getters/index.js';
|
|
1
|
+
import { localStorageGetter, queryGetter, valueGetter } from '../scripts/getters/index.js';
|
|
6
2
|
import { localStorageRestore, queryRestore } from '../scripts/restores/index.js';
|
|
7
|
-
import {
|
|
8
|
-
localStorageSetter,
|
|
9
|
-
querySetter,
|
|
10
|
-
valueSetter,
|
|
11
|
-
} from '../scripts/setters/index.js';
|
|
3
|
+
import { localStorageSetter, querySetter, valueSetter } from '../scripts/setters/index.js';
|
|
12
4
|
|
|
13
5
|
const convertGetterArray = (context) => (getters) => {
|
|
14
6
|
const availableGetters = ['value', 'query', 'localStorage'];
|
|
@@ -80,21 +72,27 @@ const convertRestoreArray = (context) => (restores) => {
|
|
|
80
72
|
|
|
81
73
|
export default class BaseFilterSchema {
|
|
82
74
|
constructor({
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
75
|
+
name,
|
|
76
|
+
value = '',
|
|
77
|
+
defaultValue = '',
|
|
78
|
+
get = ['value', 'query'],
|
|
79
|
+
set = ['value', 'query'],
|
|
80
|
+
restore = ['query'],
|
|
81
|
+
multiple = false,
|
|
82
|
+
...rest
|
|
83
|
+
} = {}) {
|
|
91
84
|
if (!name) throw new Error('Filter name is required');
|
|
92
85
|
|
|
93
|
-
Object.assign(
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
86
|
+
Object.assign(
|
|
87
|
+
this,
|
|
88
|
+
{
|
|
89
|
+
name,
|
|
90
|
+
value,
|
|
91
|
+
defaultValue,
|
|
92
|
+
multiple,
|
|
93
|
+
},
|
|
94
|
+
rest,
|
|
95
|
+
);
|
|
98
96
|
|
|
99
97
|
this.setupGetters(get);
|
|
100
98
|
this.setupSetters(set);
|
|
@@ -49,9 +49,13 @@ function setSize(value) {
|
|
|
49
49
|
return setFilter({ value, name: sizeFilterName });
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
watch(
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
watch(
|
|
53
|
+
size,
|
|
54
|
+
() => {
|
|
55
|
+
localSize.value = size.value;
|
|
56
|
+
},
|
|
57
|
+
{ immediate: true },
|
|
58
|
+
);
|
|
55
59
|
</script>
|
|
56
60
|
|
|
57
61
|
<style lang="scss" scoped>
|
|
@@ -49,21 +49,27 @@ function setValue(payload) {
|
|
|
49
49
|
|
|
50
50
|
const filterName = ref(props.multisearch ? props.searchModeOpts[0].value : props.name);
|
|
51
51
|
|
|
52
|
-
const currentSearchMode = computed(
|
|
53
|
-
|
|
52
|
+
const currentSearchMode = computed(() =>
|
|
53
|
+
props.searchModeOpts.find(({ value }) => value === filterName.value),
|
|
54
54
|
);
|
|
55
55
|
|
|
56
56
|
const filterValue = computed(() => getValue(filterName.value));
|
|
57
57
|
|
|
58
58
|
const localValue = ref(filterValue.value);
|
|
59
59
|
|
|
60
|
-
const v$ =
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
60
|
+
const v$ =
|
|
61
|
+
props.multisearch &&
|
|
62
|
+
useVuelidate(
|
|
63
|
+
computed(() => {
|
|
64
|
+
return {
|
|
65
|
+
localValue: {
|
|
66
|
+
...(currentSearchMode.value.v || {}),
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}),
|
|
70
|
+
{ localValue },
|
|
71
|
+
{ $autoDirty: true },
|
|
72
|
+
);
|
|
67
73
|
|
|
68
74
|
v$.value.$touch();
|
|
69
75
|
|
|
@@ -86,9 +92,12 @@ subscribe({
|
|
|
86
92
|
callback: restoreSearchMode,
|
|
87
93
|
});
|
|
88
94
|
|
|
89
|
-
watch(
|
|
90
|
-
|
|
91
|
-
|
|
95
|
+
watch(
|
|
96
|
+
() => filterValue.value,
|
|
97
|
+
() => {
|
|
98
|
+
localValue.value = filterValue.value;
|
|
99
|
+
},
|
|
100
|
+
);
|
|
92
101
|
</script>
|
|
93
102
|
|
|
94
103
|
<style lang="scss" scoped>
|
|
@@ -2,8 +2,4 @@ import localStorageGetter from './localStorageGetter.js';
|
|
|
2
2
|
import queryGetter from './queryGetter.js';
|
|
3
3
|
import valueGetter from './valueGetter.js';
|
|
4
4
|
|
|
5
|
-
export {
|
|
6
|
-
localStorageGetter,
|
|
7
|
-
queryGetter,
|
|
8
|
-
valueGetter,
|
|
9
|
-
};
|
|
5
|
+
export { localStorageGetter, queryGetter, valueGetter };
|
|
@@ -2,10 +2,15 @@
|
|
|
2
2
|
const queryGetter = (context) => (router) => () => {
|
|
3
3
|
if (!router) throw new Error('Router is required for queryGetter!');
|
|
4
4
|
|
|
5
|
-
const query = router.currentRoute.value?.query || router.currentRoute.query ||
|
|
6
|
-
{};
|
|
5
|
+
const query = router.currentRoute.value?.query || router.currentRoute.query || {};
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
const value = query[context.name];
|
|
8
|
+
|
|
9
|
+
if (value && context?.multiple && !Array.isArray(value)) {
|
|
10
|
+
return [value];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return value;
|
|
9
14
|
};
|
|
10
15
|
|
|
11
16
|
export default queryGetter;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// context === filter "this"
|
|
2
2
|
const valueGetter = (context) => () => {
|
|
3
|
-
const { value, storedProp
|
|
4
|
-
if (multiple) return value.map((item) => item[storedProp]); // if arr, map
|
|
3
|
+
const { value, storedProp } = context;
|
|
5
4
|
if (storedProp) return value[storedProp]; // if object and has specific prop, return this prop
|
|
6
5
|
return value; // else return val
|
|
7
6
|
};
|
|
@@ -2,8 +2,4 @@ import localStorageSetter from './localStorageSetter.js';
|
|
|
2
2
|
import querySetter from './querySetter.js';
|
|
3
3
|
import valueSetter from './valueSetter.js';
|
|
4
4
|
|
|
5
|
-
export {
|
|
6
|
-
localStorageSetter,
|
|
7
|
-
querySetter,
|
|
8
|
-
valueSetter,
|
|
9
|
-
};
|
|
5
|
+
export { localStorageSetter, querySetter, valueSetter };
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import changeRouteQuery from '../utils/changeRouteQuery.js';
|
|
2
2
|
|
|
3
|
-
const isObject = (value) => typeof value === 'object' &&
|
|
4
|
-
!Array.isArray(value) && value !== null;
|
|
3
|
+
const isObject = (value) => typeof value === 'object' && !Array.isArray(value) && value !== null;
|
|
5
4
|
|
|
6
5
|
const handlePrimitive = ({ value }) => value;
|
|
7
6
|
|
|
@@ -17,25 +16,28 @@ const handleArray = ({ value, storedProp }) => {
|
|
|
17
16
|
}
|
|
18
17
|
};
|
|
19
18
|
|
|
20
|
-
const querySetter =
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
value =
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
};
|
|
19
|
+
const querySetter =
|
|
20
|
+
(context) =>
|
|
21
|
+
(router) =>
|
|
22
|
+
async (rawValue = context.value) => {
|
|
23
|
+
const { name: filterQuery, storedProp } = context;
|
|
24
|
+
|
|
25
|
+
let value = '';
|
|
26
|
+
|
|
27
|
+
if (Array.isArray(rawValue)) {
|
|
28
|
+
value = handleArray({ value: rawValue, storedProp });
|
|
29
|
+
} else if (isObject(rawValue)) {
|
|
30
|
+
value = handleObject({ value: rawValue, storedProp });
|
|
31
|
+
} else {
|
|
32
|
+
value = handlePrimitive({ value: rawValue });
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
await changeRouteQuery(router)({
|
|
36
|
+
filterQuery,
|
|
37
|
+
value,
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
return context;
|
|
41
|
+
};
|
|
40
42
|
|
|
41
43
|
export default querySetter;
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
import deepEqual from 'deep-equal';
|
|
2
2
|
|
|
3
|
-
const changeRouteQuery =
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
router.currentRoute?.
|
|
3
|
+
const changeRouteQuery =
|
|
4
|
+
(router) =>
|
|
5
|
+
({ filterQuery, value }) => {
|
|
6
|
+
const name = router.currentRoute?.value?.name || router.currentRoute?.name;
|
|
7
|
+
const query = router.currentRoute?.value?.query || router.currentRoute?.query || {};
|
|
7
8
|
|
|
8
|
-
|
|
9
|
+
if (deepEqual(query[filterQuery], value)) return;
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
const newQuery = {
|
|
12
|
+
...query,
|
|
13
|
+
[filterQuery]: value,
|
|
14
|
+
};
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
console.info('newQuery', newQuery);
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
};
|
|
18
|
+
return router.replace({
|
|
19
|
+
name,
|
|
20
|
+
query: newQuery,
|
|
21
|
+
});
|
|
22
|
+
};
|
|
22
23
|
|
|
23
24
|
export default changeRouteQuery;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import mitt from 'mitt';
|
|
2
2
|
import isEmpty from '../../../scripts/isEmpty.js';
|
|
3
|
-
import BaseStoreModule
|
|
4
|
-
from '../../../store/BaseStoreModules/BaseStoreModule.js';
|
|
3
|
+
import BaseStoreModule from '../../../store/BaseStoreModules/BaseStoreModule.js';
|
|
5
4
|
import BaseFilterSchema from '../classes/BaseFilterSchema.js';
|
|
6
5
|
import FilterEvent from '../enums/FilterEvent.enum.js';
|
|
7
6
|
|
|
@@ -15,17 +14,19 @@ export default class FiltersStoreModule extends BaseStoreModule {
|
|
|
15
14
|
ROUTER: (state, g, rootState) => {
|
|
16
15
|
if (!state._requireRouter) return null;
|
|
17
16
|
if (rootState.router === undefined) {
|
|
18
|
-
throw new Error(
|
|
19
|
-
'
|
|
17
|
+
throw new Error(
|
|
18
|
+
'"rootState.router" is needed for filters to work properly.' +
|
|
19
|
+
' Please, provide to root state, or setup it in filters module as getter "ROUTER"',
|
|
20
|
+
);
|
|
20
21
|
}
|
|
21
22
|
return rootState.router;
|
|
22
23
|
},
|
|
23
24
|
|
|
24
25
|
_STATE_FILTER_NAMES: (state) => {
|
|
25
|
-
return Object.values(state)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
return Object.values(state).reduce(
|
|
27
|
+
(names, prop) => (prop.value || prop.name ? [...names, prop.name] : names),
|
|
28
|
+
[],
|
|
29
|
+
);
|
|
29
30
|
},
|
|
30
31
|
|
|
31
32
|
// get value of specific filter
|
|
@@ -45,23 +46,27 @@ export default class FiltersStoreModule extends BaseStoreModule {
|
|
|
45
46
|
|
|
46
47
|
// get all filters values
|
|
47
48
|
GET_FILTERS: (state, getters) => () => {
|
|
48
|
-
return getters._STATE_FILTER_NAMES
|
|
49
|
-
.reduce((values, filterName) => {
|
|
49
|
+
return getters._STATE_FILTER_NAMES.reduce((values, filterName) => {
|
|
50
50
|
const filterValue = getters.GET_FILTER(filterName);
|
|
51
|
-
return isEmpty(filterValue)
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
return isEmpty(filterValue)
|
|
52
|
+
? values
|
|
53
|
+
: {
|
|
54
|
+
...values,
|
|
55
|
+
[filterName]: filterValue,
|
|
56
|
+
};
|
|
55
57
|
}, {});
|
|
56
58
|
},
|
|
57
59
|
};
|
|
58
60
|
|
|
59
61
|
actions = {
|
|
60
|
-
SET_FILTER: async (
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
SET_FILTER: async (
|
|
63
|
+
context,
|
|
64
|
+
{
|
|
65
|
+
name,
|
|
66
|
+
value,
|
|
67
|
+
silent = false, // if true, don't call ON_FILTER_SET event
|
|
68
|
+
},
|
|
69
|
+
) => {
|
|
65
70
|
const filter = context.state[name];
|
|
66
71
|
|
|
67
72
|
await filter.set(value, {
|
|
@@ -74,13 +79,14 @@ export default class FiltersStoreModule extends BaseStoreModule {
|
|
|
74
79
|
value: context.getters.GET_FILTER(name),
|
|
75
80
|
});
|
|
76
81
|
|
|
77
|
-
if (!silent)
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
if (!silent)
|
|
83
|
+
await context.dispatch('EMIT', {
|
|
84
|
+
event: FilterEvent.FILTER_SET,
|
|
85
|
+
payload: {
|
|
86
|
+
name,
|
|
87
|
+
value: context.getters.GET_FILTER(name),
|
|
88
|
+
},
|
|
89
|
+
});
|
|
84
90
|
},
|
|
85
91
|
|
|
86
92
|
RESTORE_FILTER: async (context, { name }) => {
|
|
@@ -90,18 +96,20 @@ export default class FiltersStoreModule extends BaseStoreModule {
|
|
|
90
96
|
});
|
|
91
97
|
|
|
92
98
|
if (value) {
|
|
93
|
-
await context.dispatch('SET_FILTER',
|
|
99
|
+
await context.dispatch('SET_FILTER', {
|
|
94
100
|
name,
|
|
95
101
|
value,
|
|
96
102
|
silent: true,
|
|
97
|
-
})
|
|
103
|
+
});
|
|
98
104
|
}
|
|
99
105
|
},
|
|
100
106
|
|
|
101
107
|
RESTORE_FILTERS: async (context) => {
|
|
102
|
-
await Promise.allSettled(
|
|
103
|
-
|
|
104
|
-
|
|
108
|
+
await Promise.allSettled(
|
|
109
|
+
context.getters._STATE_FILTER_NAMES.map((name) => {
|
|
110
|
+
return context.dispatch('RESTORE_FILTER', { name });
|
|
111
|
+
}),
|
|
112
|
+
);
|
|
105
113
|
|
|
106
114
|
return context.dispatch('EMIT', {
|
|
107
115
|
event: FilterEvent.RESTORED,
|
|
@@ -109,16 +117,17 @@ export default class FiltersStoreModule extends BaseStoreModule {
|
|
|
109
117
|
});
|
|
110
118
|
},
|
|
111
119
|
|
|
112
|
-
RESET_FILTERS: (context) =>
|
|
113
|
-
|
|
114
|
-
|
|
120
|
+
RESET_FILTERS: (context) =>
|
|
121
|
+
Promise.allSettled(
|
|
122
|
+
context.getters._FILTER_NAMES.map((name) => {
|
|
123
|
+
const filter = context.state[name];
|
|
115
124
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
125
|
+
return context.dispatch('SET_FILTER', {
|
|
126
|
+
filter,
|
|
127
|
+
value: filter.defaultValue,
|
|
128
|
+
});
|
|
129
|
+
}),
|
|
130
|
+
),
|
|
122
131
|
|
|
123
132
|
SUBSCRIBE: (context, { event, callback }) => {
|
|
124
133
|
const subscribe = () => context.state._emitter.on(event, callback);
|
|
@@ -135,10 +144,7 @@ export default class FiltersStoreModule extends BaseStoreModule {
|
|
|
135
144
|
const wildcardListeners = context.state._emitter.all.get('*');
|
|
136
145
|
const eventListeners = context.state._emitter.all.get(event);
|
|
137
146
|
|
|
138
|
-
const listeners = [
|
|
139
|
-
...(wildcardListeners || []),
|
|
140
|
-
...(eventListeners || []),
|
|
141
|
-
];
|
|
147
|
+
const listeners = [...(wildcardListeners || []), ...(eventListeners || [])];
|
|
142
148
|
|
|
143
149
|
if (!listeners) {
|
|
144
150
|
console.info(`No listeners for ${event} event`);
|
|
@@ -175,4 +181,4 @@ export default class FiltersStoreModule extends BaseStoreModule {
|
|
|
175
181
|
|
|
176
182
|
return this;
|
|
177
183
|
}
|
|
178
|
-
}
|
|
184
|
+
}
|
|
@@ -7,16 +7,18 @@ import FiltersStoreModule from '../FiltersStoreModule.js';
|
|
|
7
7
|
|
|
8
8
|
describe('FiltersStoreModule', () => {
|
|
9
9
|
it('get/sets primitive type filter', async () => {
|
|
10
|
-
const filters = new FiltersStoreModule()
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
10
|
+
const filters = new FiltersStoreModule()
|
|
11
|
+
.addFilter([
|
|
12
|
+
{
|
|
13
|
+
name: 'vi',
|
|
14
|
+
value: 1,
|
|
15
|
+
defaultValue: 1,
|
|
16
|
+
get: ['value'],
|
|
17
|
+
set: ['value'],
|
|
18
|
+
restore: [],
|
|
19
|
+
},
|
|
20
|
+
])
|
|
21
|
+
.getModule();
|
|
20
22
|
|
|
21
23
|
const store = createStore({
|
|
22
24
|
state: {
|
|
@@ -41,15 +43,15 @@ describe('FiltersStoreModule', () => {
|
|
|
41
43
|
const localStorageKey = 'vivivi';
|
|
42
44
|
|
|
43
45
|
const filters = new FiltersStoreModule()
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
46
|
+
.addFilter({
|
|
47
|
+
name: 'vi',
|
|
48
|
+
value: 1,
|
|
49
|
+
localStorageKey,
|
|
50
|
+
get: ['value'],
|
|
51
|
+
set: ['value', 'localStorage'],
|
|
52
|
+
restore: ['localStorage'],
|
|
53
|
+
})
|
|
54
|
+
.getModule();
|
|
53
55
|
|
|
54
56
|
const store = createStore({
|
|
55
57
|
state: {
|
|
@@ -87,23 +89,27 @@ describe('FiltersStoreModule', () => {
|
|
|
87
89
|
await router.push({ name: 'home' });
|
|
88
90
|
|
|
89
91
|
const filters = new FiltersStoreModule()
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
92
|
+
.addFilter({
|
|
93
|
+
name: 'vi',
|
|
94
|
+
value: 1,
|
|
95
|
+
requireRouter: true,
|
|
96
|
+
get: (context) => () => {
|
|
97
|
+
return valueGetter(context)();
|
|
98
|
+
},
|
|
99
|
+
set:
|
|
100
|
+
(context) =>
|
|
101
|
+
async (v, { router }) => {
|
|
102
|
+
valueSetter(context)(v);
|
|
103
|
+
await querySetter(context)(router)(v);
|
|
104
|
+
return context;
|
|
105
|
+
},
|
|
106
|
+
restore:
|
|
107
|
+
(context) =>
|
|
108
|
+
({ router }) => {
|
|
109
|
+
return queryRestore(context)(router)();
|
|
110
|
+
},
|
|
111
|
+
})
|
|
112
|
+
.getModule();
|
|
107
113
|
|
|
108
114
|
const store = createStore({
|
|
109
115
|
state: {
|
|
@@ -139,15 +145,15 @@ describe('FiltersStoreModule', () => {
|
|
|
139
145
|
await router.push({ name: 'home' });
|
|
140
146
|
|
|
141
147
|
const filters = new FiltersStoreModule()
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
148
|
+
.addFilter({
|
|
149
|
+
name: 'vi',
|
|
150
|
+
value: 1,
|
|
151
|
+
get: ['value'],
|
|
152
|
+
set: ['value', 'query'],
|
|
153
|
+
restore: ['query'],
|
|
154
|
+
router,
|
|
155
|
+
})
|
|
156
|
+
.getModule();
|
|
151
157
|
|
|
152
158
|
const store = createStore({
|
|
153
159
|
state: {
|