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