@webitel/ui-sdk 25.4.55 → 25.4.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.
Files changed (161) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/ui-sdk.css +1 -1
  3. package/dist/ui-sdk.js +93 -99
  4. package/dist/ui-sdk.umd.cjs +1 -1
  5. package/package.json +1 -1
  6. package/src/components/wt-context-menu/types/WtContextMenu.d.ts +4 -0
  7. package/src/components/wt-search-bar/types/WtSearchBar.d.ts +17 -0
  8. package/src/components/wt-search-bar/wt-search-bar.vue +23 -10
  9. package/src/modules/Filters/v2/filter-presets/api/PresetQuery.api.ts +0 -123
  10. package/src/modules/Filters/v2/filter-presets/components/_shared/input-fields/preset-description-field.vue +0 -33
  11. package/src/modules/Filters/v2/filter-presets/components/_shared/input-fields/preset-name-field.vue +0 -29
  12. package/src/modules/Filters/v2/filter-presets/components/_shared/preset-filters-preview.vue +0 -45
  13. package/src/modules/Filters/v2/filter-presets/components/apply-preset/apply-preset-action.vue +0 -234
  14. package/src/modules/Filters/v2/filter-presets/components/apply-preset/preset-preview.vue +0 -210
  15. package/src/modules/Filters/v2/filter-presets/components/save-preset/overwrite-preset-popup.vue +0 -64
  16. package/src/modules/Filters/v2/filter-presets/components/save-preset/save-preset-action.vue +0 -139
  17. package/src/modules/Filters/v2/filter-presets/components/save-preset/save-preset-popup.vue +0 -136
  18. package/src/modules/Filters/v2/filter-presets/index.ts +0 -5
  19. package/src/modules/Filters/v2/filter-presets/stores/createFilterPresetsStore.ts +0 -17
  20. package/src/modules/Filters/v2/filter-presets/stores/headers/headers.ts +0 -24
  21. package/src/modules/Filters/v2/filters/classes/Filter.ts +0 -30
  22. package/src/modules/Filters/v2/filters/classes/FilterStorage.ts +0 -34
  23. package/src/modules/Filters/v2/filters/classes/FilterStorageOptions.d.ts +0 -6
  24. package/src/modules/Filters/v2/filters/classes/FiltersManager.ts +0 -189
  25. package/src/modules/Filters/v2/filters/components/config/dynamic-filter-config-form-label.vue +0 -50
  26. package/src/modules/Filters/v2/filters/components/config/dynamic-filter-config-form.vue +0 -140
  27. package/src/modules/Filters/v2/filters/components/config/dynamic-filter-config-view.vue +0 -40
  28. package/src/modules/Filters/v2/filters/components/dynamic-filter-add-action.vue +0 -54
  29. package/src/modules/Filters/v2/filters/components/dynamic-filter-panel-wrapper.vue +0 -57
  30. package/src/modules/Filters/v2/filters/components/dynamic-filter-search.vue +0 -80
  31. package/src/modules/Filters/v2/filters/components/filter-options/_shared/composables/booleanFilterToolkit.ts +0 -39
  32. package/src/modules/Filters/v2/filters/components/filter-options/_shared/composables/useFromToSecToPreviewTime.ts +0 -41
  33. package/src/modules/Filters/v2/filters/components/filter-options/_shared/date-time-filter/date-time-filter-value-field.vue +0 -56
  34. package/src/modules/Filters/v2/filters/components/filter-options/_shared/durations/duration-filter-value-field.vue +0 -84
  35. package/src/modules/Filters/v2/filters/components/filter-options/_shared/has-options/has-option-filter-value-field.vue +0 -38
  36. package/src/modules/Filters/v2/filters/components/filter-options/_shared/types/BooleanFilter.ts +0 -1
  37. package/src/modules/Filters/v2/filters/components/filter-options/actual-reaction-time/actual-reaction-time-filter-value-field.vue +0 -18
  38. package/src/modules/Filters/v2/filters/components/filter-options/actual-reaction-time/actual-reaction-time-filter-value-preview.vue +0 -44
  39. package/src/modules/Filters/v2/filters/components/filter-options/actual-resolution-time/actual-resolution-time-filter-value-field.vue +0 -18
  40. package/src/modules/Filters/v2/filters/components/filter-options/actual-resolution-time/actual-resolution-time-filter-value-preview.vue +0 -44
  41. package/src/modules/Filters/v2/filters/components/filter-options/agent/agent-filter-value-field.vue +0 -58
  42. package/src/modules/Filters/v2/filters/components/filter-options/agent/agent-filter-value-preview.vue +0 -31
  43. package/src/modules/Filters/v2/filters/components/filter-options/agent/config.js +0 -4
  44. package/src/modules/Filters/v2/filters/components/filter-options/amd-result/amd-result-filter-value-field.vue +0 -52
  45. package/src/modules/Filters/v2/filters/components/filter-options/amd-result/amd-result-filter-value-preview.vue +0 -18
  46. package/src/modules/Filters/v2/filters/components/filter-options/assignee/assignee-filter-value-field.vue +0 -74
  47. package/src/modules/Filters/v2/filters/components/filter-options/assignee/assignee-filter-value-preview.vue +0 -36
  48. package/src/modules/Filters/v2/filters/components/filter-options/assignee/config.js +0 -4
  49. package/src/modules/Filters/v2/filters/components/filter-options/author/author-filter-value-field.vue +0 -56
  50. package/src/modules/Filters/v2/filters/components/filter-options/author/author-filter-value-preview.vue +0 -31
  51. package/src/modules/Filters/v2/filters/components/filter-options/author/config.js +0 -4
  52. package/src/modules/Filters/v2/filters/components/filter-options/cause/cause-filter-value-field.vue +0 -52
  53. package/src/modules/Filters/v2/filters/components/filter-options/cause/cause-filter-value-preview.vue +0 -18
  54. package/src/modules/Filters/v2/filters/components/filter-options/close-reason-groups-case/close-reason-groups-case-filter-value-field.vue +0 -102
  55. package/src/modules/Filters/v2/filters/components/filter-options/close-reason-groups-case/close-reason-groups-case-filter-value-preview.vue +0 -34
  56. package/src/modules/Filters/v2/filters/components/filter-options/close-reason-groups-case/config.js +0 -7
  57. package/src/modules/Filters/v2/filters/components/filter-options/contact/config.js +0 -4
  58. package/src/modules/Filters/v2/filters/components/filter-options/contact/contact-filter-value-field.vue +0 -56
  59. package/src/modules/Filters/v2/filters/components/filter-options/contact/contact-filter-value-preview.vue +0 -31
  60. package/src/modules/Filters/v2/filters/components/filter-options/contact-group/config.js +0 -4
  61. package/src/modules/Filters/v2/filters/components/filter-options/contact-group/contact-group-filter-value-field.vue +0 -74
  62. package/src/modules/Filters/v2/filters/components/filter-options/contact-group/contact-group-filter-value-preview.vue +0 -38
  63. package/src/modules/Filters/v2/filters/components/filter-options/created-at-from/created-at-from-filter-value-field.vue +0 -24
  64. package/src/modules/Filters/v2/filters/components/filter-options/created-at-from/created-at-from-filter-value-preview.vue +0 -15
  65. package/src/modules/Filters/v2/filters/components/filter-options/created-at-to/created-at-to-filter-value-field.vue +0 -24
  66. package/src/modules/Filters/v2/filters/components/filter-options/created-at-to/created-at-to-filter-value-preview.vue +0 -15
  67. package/src/modules/Filters/v2/filters/components/filter-options/direction/direction-filter-value-field.vue +0 -51
  68. package/src/modules/Filters/v2/filters/components/filter-options/direction/direction-filter-value-preview.vue +0 -17
  69. package/src/modules/Filters/v2/filters/components/filter-options/gateway/config.js +0 -4
  70. package/src/modules/Filters/v2/filters/components/filter-options/gateway/gateway-filter-value-field.vue +0 -56
  71. package/src/modules/Filters/v2/filters/components/filter-options/gateway/gateway-filter-value-preview.vue +0 -31
  72. package/src/modules/Filters/v2/filters/components/filter-options/grantee/config.js +0 -4
  73. package/src/modules/Filters/v2/filters/components/filter-options/grantee/grantee-filter-value-field.vue +0 -56
  74. package/src/modules/Filters/v2/filters/components/filter-options/grantee/grantee-filter-value-preview.vue +0 -31
  75. package/src/modules/Filters/v2/filters/components/filter-options/has-attachment/has-attachment-filter-value-field.vue +0 -43
  76. package/src/modules/Filters/v2/filters/components/filter-options/has-attachment/has-attachment-filter-value-preview.vue +0 -24
  77. package/src/modules/Filters/v2/filters/components/filter-options/has-file/has-file-filter-value-field.vue +0 -33
  78. package/src/modules/Filters/v2/filters/components/filter-options/has-file/has-file-filter-value-preview.vue +0 -15
  79. package/src/modules/Filters/v2/filters/components/filter-options/has-rating/has-rating-filter-value-field.vue +0 -33
  80. package/src/modules/Filters/v2/filters/components/filter-options/has-rating/has-rating-filter-value-preview.vue +0 -15
  81. package/src/modules/Filters/v2/filters/components/filter-options/has-transcription/has-transcription-filter-value-field.vue +0 -33
  82. package/src/modules/Filters/v2/filters/components/filter-options/has-transcription/has-transcription-filter-value-preview.vue +0 -15
  83. package/src/modules/Filters/v2/filters/components/filter-options/impacted/config.js +0 -4
  84. package/src/modules/Filters/v2/filters/components/filter-options/impacted/impacted-filter-value-field.vue +0 -56
  85. package/src/modules/Filters/v2/filters/components/filter-options/impacted/impacted-filter-value-preview.vue +0 -31
  86. package/src/modules/Filters/v2/filters/components/filter-options/index.ts +0 -250
  87. package/src/modules/Filters/v2/filters/components/filter-options/priority-case/config.js +0 -4
  88. package/src/modules/Filters/v2/filters/components/filter-options/priority-case/priority-case-filter-value-field.vue +0 -57
  89. package/src/modules/Filters/v2/filters/components/filter-options/priority-case/priority-case-filter-value-preview.vue +0 -31
  90. package/src/modules/Filters/v2/filters/components/filter-options/queue/config.js +0 -4
  91. package/src/modules/Filters/v2/filters/components/filter-options/queue/queue-filter-value-field.vue +0 -56
  92. package/src/modules/Filters/v2/filters/components/filter-options/queue/queue-filter-value-preview.vue +0 -31
  93. package/src/modules/Filters/v2/filters/components/filter-options/rated-by/config.js +0 -4
  94. package/src/modules/Filters/v2/filters/components/filter-options/rated-by/rated-by-filter-value-field.vue +0 -56
  95. package/src/modules/Filters/v2/filters/components/filter-options/rated-by/rated-by-filter-value-preview.vue +0 -31
  96. package/src/modules/Filters/v2/filters/components/filter-options/rating/rating-from-to-filter-value-field.vue +0 -101
  97. package/src/modules/Filters/v2/filters/components/filter-options/rating/rating-from-to-filter-value-preview.vue +0 -39
  98. package/src/modules/Filters/v2/filters/components/filter-options/reaction-time/reaction-time-filter-value-field.vue +0 -18
  99. package/src/modules/Filters/v2/filters/components/filter-options/reaction-time/reaction-time-filter-value-preview.vue +0 -44
  100. package/src/modules/Filters/v2/filters/components/filter-options/reporter/config.js +0 -4
  101. package/src/modules/Filters/v2/filters/components/filter-options/reporter/reporter-filter-value-field.vue +0 -56
  102. package/src/modules/Filters/v2/filters/components/filter-options/reporter/reporter-filter-value-preview.vue +0 -31
  103. package/src/modules/Filters/v2/filters/components/filter-options/resolution-time/resolution-time-filter-value-field.vue +0 -18
  104. package/src/modules/Filters/v2/filters/components/filter-options/resolution-time/resolution-time-filter-value-preview.vue +0 -44
  105. package/src/modules/Filters/v2/filters/components/filter-options/score/score-from-to-filter-value-field.vue +0 -100
  106. package/src/modules/Filters/v2/filters/components/filter-options/score/score-from-to-filter-value-preview.vue +0 -39
  107. package/src/modules/Filters/v2/filters/components/filter-options/service-case/config.js +0 -6
  108. package/src/modules/Filters/v2/filters/components/filter-options/service-case/service-case-filter-value-field.vue +0 -82
  109. package/src/modules/Filters/v2/filters/components/filter-options/service-case/service-case-filter-value-preview.vue +0 -34
  110. package/src/modules/Filters/v2/filters/components/filter-options/sla/config.js +0 -4
  111. package/src/modules/Filters/v2/filters/components/filter-options/sla/sla-filter-value-field.vue +0 -57
  112. package/src/modules/Filters/v2/filters/components/filter-options/sla/sla-filter-value-preview.vue +0 -31
  113. package/src/modules/Filters/v2/filters/components/filter-options/sla-condition/config.js +0 -6
  114. package/src/modules/Filters/v2/filters/components/filter-options/sla-condition/sla-condition-filter-value-field.vue +0 -98
  115. package/src/modules/Filters/v2/filters/components/filter-options/sla-condition/sla-condition-filter-value-preview.vue +0 -37
  116. package/src/modules/Filters/v2/filters/components/filter-options/source-case/config.js +0 -4
  117. package/src/modules/Filters/v2/filters/components/filter-options/source-case/source-case-filter-value-field.vue +0 -57
  118. package/src/modules/Filters/v2/filters/components/filter-options/source-case/source-case-filter-value-preview.vue +0 -31
  119. package/src/modules/Filters/v2/filters/components/filter-options/status-case/config.js +0 -7
  120. package/src/modules/Filters/v2/filters/components/filter-options/status-case/status-case-filter-value-field.vue +0 -102
  121. package/src/modules/Filters/v2/filters/components/filter-options/status-case/status-case-filter-value-preview.vue +0 -37
  122. package/src/modules/Filters/v2/filters/components/filter-options/tag/tag-filter-value-field.vue +0 -52
  123. package/src/modules/Filters/v2/filters/components/filter-options/tag/tag-filter-value-preview.vue +0 -38
  124. package/src/modules/Filters/v2/filters/components/filter-options/talk-duration/TalkDurationFilter.d.ts +0 -4
  125. package/src/modules/Filters/v2/filters/components/filter-options/talk-duration/talk-duration-filter-value-field.vue +0 -19
  126. package/src/modules/Filters/v2/filters/components/filter-options/talk-duration/talk-duration-filter-value-preview.vue +0 -44
  127. package/src/modules/Filters/v2/filters/components/filter-options/team/config.js +0 -4
  128. package/src/modules/Filters/v2/filters/components/filter-options/team/team-filter-value-field.vue +0 -56
  129. package/src/modules/Filters/v2/filters/components/filter-options/team/team-filter-value-preview.vue +0 -31
  130. package/src/modules/Filters/v2/filters/components/filter-options/total-duration/TotalDurationFilter.d.ts +0 -4
  131. package/src/modules/Filters/v2/filters/components/filter-options/total-duration/total-duration-filter-value-field.vue +0 -19
  132. package/src/modules/Filters/v2/filters/components/filter-options/total-duration/total-duration-filter-value-preview.vue +0 -44
  133. package/src/modules/Filters/v2/filters/components/filter-options/user/config.js +0 -4
  134. package/src/modules/Filters/v2/filters/components/filter-options/user/user-filter-value-field.vue +0 -56
  135. package/src/modules/Filters/v2/filters/components/filter-options/user/user-filter-value-preview.vue +0 -31
  136. package/src/modules/Filters/v2/filters/components/filter-options/variable/variable-filter-value-field.vue +0 -50
  137. package/src/modules/Filters/v2/filters/components/filter-options/variable/variable-filter-value-preview.vue +0 -39
  138. package/src/modules/Filters/v2/filters/components/preview/dynamic-filter-preview-info.vue +0 -35
  139. package/src/modules/Filters/v2/filters/components/preview/dynamic-filter-preview.vue +0 -76
  140. package/src/modules/Filters/v2/filters/components/table-filters-panel.vue +0 -87
  141. package/src/modules/Filters/v2/filters/createTableFiltersStore.ts +0 -81
  142. package/src/modules/Filters/v2/filters/enums/FilterOption.ts +0 -43
  143. package/src/modules/Filters/v2/filters/enums/amd-result-options.ts +0 -38
  144. package/src/modules/Filters/v2/filters/enums/boolean-options.ts +0 -16
  145. package/src/modules/Filters/v2/filters/enums/direction-options.ts +0 -20
  146. package/src/modules/Filters/v2/filters/enums/hangup-cause-options.ts +0 -265
  147. package/src/modules/Filters/v2/filters/enums/tag-options.ts +0 -8
  148. package/src/modules/Filters/v2/filters/index.ts +0 -29
  149. package/src/modules/Filters/v2/filters/scripts/utils.ts +0 -31
  150. package/src/modules/Filters/v2/filters/types/Filter.d.ts +0 -46
  151. package/src/modules/Filters/v2/filters/types/FilterSearch.d.ts +0 -10
  152. package/src/modules/Filters/v2/filters/types/FiltersManager.d.ts +0 -76
  153. package/src/modules/Filters/v2/headers/createTableHeadersStore.ts +0 -140
  154. package/src/modules/Filters/v2/index.ts +0 -0
  155. package/src/modules/Filters/v2/pagination/createTablePaginationStore.ts +0 -64
  156. package/src/modules/Filters/v2/persist/PersistedStorage.types.ts +0 -51
  157. package/src/modules/Filters/v2/persist/useLocalStoragePersistedStorage.ts +0 -37
  158. package/src/modules/Filters/v2/persist/usePersistedStorage.ts +0 -151
  159. package/src/modules/Filters/v2/persist/useRoutePersistedStorage.ts +0 -41
  160. package/src/modules/Filters/v2/table/createTableStore.store.ts +0 -206
  161. package/src/modules/Filters/v2/types/tableStore.types.ts +0 -61
@@ -1,46 +0,0 @@
1
- export type FilterName = string;
2
- export type FilterLabel = string;
3
- export type FilterValue =
4
- | object
5
- | []
6
- | string
7
- | number
8
- | boolean
9
- | undefined
10
- | null;
11
-
12
- /**
13
- * represents user-input data, that should be (re)stored
14
- */
15
- export interface FilterData {
16
- value: FilterValue;
17
- label?: FilterLabel;
18
- }
19
-
20
- export interface FilterInitParams extends FilterData {
21
- name: FilterName;
22
- }
23
-
24
- export interface FilterEnumOption {
25
- locale: string;
26
- value: FilterValue;
27
- }
28
-
29
- export interface FilterConfig {
30
- /**
31
- * Perform simple type conversion on store/restore,
32
- * without need to provide custom store/restore functions
33
- */
34
- storableType?: string;
35
- /**
36
- * list of persistence storages that should be used for this filter
37
- */
38
- storage?: string[];
39
- }
40
-
41
- export interface IFilter {
42
- name: FilterName;
43
- value: FilterValue;
44
- label?: FilterLabel;
45
- set: (data: FilterData) => IFilter;
46
- }
@@ -1,10 +0,0 @@
1
- import { Validation } from '@vuelidate/core';
2
-
3
- import { FilterLabel, FilterValue } from './Filter';
4
-
5
- export interface FilterSearch {
6
- value: FilterValue;
7
- text: FilterLabel;
8
- hint?: string | undefined;
9
- v?: Validation | undefined;
10
- }
@@ -1,76 +0,0 @@
1
- import type {
2
- FilterConfig,
3
- FilterInitParams,
4
- FilterLabel,
5
- FilterName,
6
- FilterValue,
7
- IFilter,
8
- } from './Filter.types.ts';
9
-
10
- export interface IFiltersManager {
11
- filters: Map<FilterName, IFilter>;
12
-
13
- hasFilter: (name: FilterName) => boolean;
14
- getFilter: (name: FilterName) => IFilter;
15
- addFilter: (
16
- params: FilterInitParams,
17
- payload?: object,
18
- config?: FilterConfig,
19
- ) => IFilter;
20
- updateFilter: ({
21
- name,
22
- }: {
23
- name: FilterName;
24
- value?: FilterValue;
25
- label?: FilterLabel;
26
- }) => IFilter;
27
- deleteFilter: (name: FilterName) => IFilter;
28
-
29
- /**
30
- * Converts filters data to String, that can be stored
31
- */
32
- toString: () => string;
33
-
34
- /**
35
- * Restores filters from string
36
- */
37
- fromString: (snapshotStr: string) => void;
38
-
39
- /**
40
- * deletes filters
41
- * If include/exclude are not provided, all filters will be deleted
42
- */
43
- reset: ({
44
- include,
45
- exclude,
46
- }?: {
47
- include?: FilterName[];
48
- exclude?: FilterName[];
49
- }) => void;
50
-
51
- /**
52
- * @returns Array<FilterName>
53
- */
54
- getAllKeys: () => FilterName[];
55
-
56
- /**
57
- * @returns { FilterName: FilterValue }
58
- */
59
-
60
- getAllValues: () => { [name: FilterName]: FilterValue };
61
- /**
62
- * @returns Array<IFilter>
63
- * @param include
64
- * @param exclude
65
- */
66
-
67
- getFiltersList: ({
68
- include,
69
- exclude,
70
- }?: {
71
- include?: FilterName[];
72
- exclude?: FilterName[];
73
- }) => IFilter[];
74
- }
75
-
76
- export type FiltersManagerConfig = FilterConfig;
@@ -1,140 +0,0 @@
1
- import { defineStore } from 'pinia';
2
- import { computed, ref } from 'vue';
3
-
4
- import { WtTableHeader } from '../../../../components/wt-table/types/WtTable';
5
- import { sortToQueryAdapter } from '../../../../scripts';
6
- import { SortSymbols } from '../../../../scripts/sortQueryAdapters';
7
- import { PersistedStorageType } from '../persist/PersistedStorage.types';
8
- import { usePersistedStorage } from '../persist/usePersistedStorage.ts';
9
-
10
- export const createTableHeadersStore = (
11
- namespace: string,
12
- { headers: rawHeaders },
13
- ) => {
14
- const id = `${namespace}/headers`;
15
-
16
- return defineStore(id, () => {
17
- const headers = ref(rawHeaders);
18
-
19
- const shownHeaders = computed(() => {
20
- return headers.value.filter((header) => header.show);
21
- });
22
-
23
- const fields = computed(() => {
24
- return shownHeaders.value.map((header) => header.field);
25
- });
26
-
27
- const sort = computed(() => {
28
- const encodeSortQuery = ({ column, order }) =>
29
- `${sortToQueryAdapter(order)}${column.field}`;
30
-
31
- const sortedCol = headers.value.find((header) => header.sort);
32
-
33
- return sortedCol
34
- ? encodeSortQuery({ column: sortedCol, order: sortedCol.sort })
35
- : null;
36
- });
37
-
38
- const $reset = () => {
39
- headers.value = rawHeaders;
40
- };
41
-
42
- const updateShownHeaders = (value) => {
43
- headers.value = value;
44
- };
45
-
46
- const updateFields = (fields: string[]) => {
47
- const newHeaders = headers.value.map((header: WtTableHeader) => {
48
- return {
49
- ...header,
50
- show: fields.includes(header.field),
51
- };
52
- });
53
- updateShownHeaders(newHeaders);
54
- };
55
-
56
- const updateSort = (column) => {
57
- const getNextSortOrder = (sort) => {
58
- switch (sort) {
59
- case SortSymbols.NONE:
60
- return SortSymbols.ASC;
61
- case SortSymbols.ASC:
62
- return SortSymbols.DESC;
63
- case SortSymbols.DESC:
64
- return SortSymbols.NONE;
65
- default:
66
- return SortSymbols.ASC;
67
- }
68
- };
69
-
70
- const changeHeadersSort = ({ headers, sortedHeader, order }) => {
71
- return headers.map((header) => {
72
- if (header.sort === undefined) return header;
73
-
74
- // reset all headers by default
75
- let newSort = null;
76
-
77
- if (header.field === sortedHeader.field) {
78
- newSort = order;
79
- }
80
-
81
- return {
82
- ...header,
83
- sort: newSort,
84
- };
85
- });
86
- };
87
-
88
- const order = getNextSortOrder(column.sort);
89
-
90
- const newHeaders = changeHeadersSort({
91
- headers: headers.value,
92
- sortedHeader: column,
93
- order,
94
- });
95
-
96
- headers.value = newHeaders;
97
- };
98
- const setupPersistence = async () => {
99
- const { restore: restoreFields } = usePersistedStorage({
100
- name: 'fields',
101
- value: fields,
102
- storages: [
103
- PersistedStorageType.LocalStorage,
104
- PersistedStorageType.Route,
105
- ],
106
- storagePath: id,
107
- onStore: (save, { name }) => {
108
- const value = fields.value.join(',');
109
- return save({ name, value });
110
- },
111
- onRestore: async (restore, name) => {
112
- const value = (await restore(name)) as string;
113
- if (value) {
114
- return updateFields(value.split(','));
115
- }
116
- },
117
- });
118
-
119
- const { restore: restoreSort } = usePersistedStorage({
120
- name: 'sort',
121
- value: sort,
122
- });
123
-
124
- return Promise.allSettled([restoreFields(), restoreSort()]);
125
- };
126
-
127
- return {
128
- headers,
129
- shownHeaders,
130
- fields,
131
- sort,
132
-
133
- updateShownHeaders,
134
- updateSort,
135
-
136
- setupPersistence,
137
- $reset,
138
- };
139
- });
140
- };
File without changes
@@ -1,64 +0,0 @@
1
- import { defineStore } from 'pinia';
2
- import { ref } from 'vue';
3
-
4
- import { usePersistedStorage } from '../persist/usePersistedStorage.ts';
5
-
6
- export const createTablePaginationStore = (namespace: string) => {
7
- const id = `${namespace}/pagination`;
8
-
9
- return defineStore(id, () => {
10
- const page = ref(1);
11
- const size = ref(10);
12
- const next = ref(false);
13
-
14
- const updatePage = (newPage: number) => {
15
- page.value = newPage;
16
- };
17
-
18
- const updateSize = (newSize: number) => {
19
- size.value = newSize;
20
- };
21
-
22
- const $reset = () => {
23
- page.value = 1;
24
- size.value = 10;
25
- next.value = false;
26
- };
27
-
28
- const setupPersistence = () => {
29
- const { restore: restorePage } = usePersistedStorage({
30
- name: 'page',
31
- value: page,
32
- onRestore: async (restore, name) => {
33
- const value = await restore(name);
34
- const numValue = +value;
35
- if (numValue) page.value = numValue;
36
- },
37
- });
38
-
39
- const { restore: restoreSize } = usePersistedStorage({
40
- name: 'size',
41
- value: size,
42
- onRestore: async (restore, name) => {
43
- const value = await restore(name);
44
- const numValue = +value;
45
- if (numValue) size.value = numValue;
46
- },
47
- });
48
-
49
- return Promise.allSettled([restorePage(), restoreSize()]);
50
- };
51
-
52
- return {
53
- page,
54
- size,
55
- next,
56
-
57
- updatePage,
58
- updateSize,
59
-
60
- setupPersistence,
61
- $reset,
62
- };
63
- });
64
- };
@@ -1,51 +0,0 @@
1
- import { Ref, WatchOptions } from 'vue';
2
-
3
- export enum PersistedStorageType {
4
- LocalStorage = 'localStorage',
5
- Route = 'route',
6
- }
7
-
8
- // in route query, or in localStorage
9
- export type PersistStorableValue = string;
10
-
11
- export type PersistableValue =
12
- | PersistStorableValue
13
- | { toString: () => PersistStorableValue };
14
-
15
- export interface StorageLike {
16
- getItem(key: string): Promise<PersistableValue | null>;
17
-
18
- setItem(key: string, value: PersistableValue): Promise<void>;
19
-
20
- removeItem(key: string): Promise<void>;
21
- }
22
-
23
- export interface PersistedPropertyConfig {
24
- name: string;
25
- value: Ref<PersistableValue>;
26
- storages?: PersistedStorageType | PersistedStorageType[];
27
- storagePath?: string;
28
- startWatchManually?: boolean;
29
- watchConfig?: WatchOptions;
30
- onStore?: (
31
- save: ({
32
- name,
33
- value,
34
- }: {
35
- name: string;
36
- value: PersistableValue;
37
- }) => Promise<void>,
38
- { value, name },
39
- ) => Promise<void>;
40
- onRestore?: (
41
- restore: (name: string) => Promise<PersistableValue>,
42
- name: string,
43
- ) => Promise<void>;
44
- }
45
-
46
- export interface PersistedStorageController {
47
- watch: () => void;
48
- unwatch: () => void;
49
- restore: () => Promise<void>;
50
- reset: () => Promise<void>;
51
- }
@@ -1,37 +0,0 @@
1
- import { StorageLike } from './PersistedStorage.types.ts';
2
-
3
- const separator = ';';
4
-
5
- const makePath = (storagePath: string, key: string) => `${storagePath}/${key}`;
6
-
7
- export const useLocalStoragePersistedStorage = ({
8
- storagePath = '',
9
- }: {
10
- storagePath: string;
11
- }): StorageLike => {
12
- const getItem = async (key: string) => {
13
- const value = localStorage.getItem(makePath(storagePath, key));
14
- try {
15
- return value.split(separator).join();
16
- } catch {
17
- return value;
18
- }
19
- };
20
-
21
- const setItem = async (key: string, inputValue: string | string[]) => {
22
- const value = Array.isArray(inputValue)
23
- ? inputValue.join(separator)
24
- : inputValue;
25
- localStorage.setItem(makePath(storagePath, key), value);
26
- };
27
-
28
- const removeItem = async (key: string) => {
29
- localStorage.removeItem(makePath(storagePath, key));
30
- };
31
-
32
- return {
33
- getItem,
34
- setItem,
35
- removeItem,
36
- };
37
- };
@@ -1,151 +0,0 @@
1
- import { watch } from 'vue';
2
-
3
- import {
4
- PersistableValue,
5
- PersistedPropertyConfig,
6
- PersistedStorageController,
7
- PersistedStorageType,
8
- } from './PersistedStorage.types.ts';
9
- import { useLocalStoragePersistedStorage } from './useLocalStoragePersistedStorage.ts';
10
- import { useRoutePersistedStorage } from './useRoutePersistedStorage.ts';
11
-
12
- export const usePersistedStorage = ({
13
- name,
14
- value,
15
- storages: configStorages = [PersistedStorageType.Route],
16
- storagePath,
17
- startWatchManually = false,
18
- onStore,
19
- onRestore,
20
- }: PersistedPropertyConfig): PersistedStorageController => {
21
- let unwatch = null;
22
-
23
- const setItemFns = [];
24
- const getItemFns: Array<(name: string) => Promise<PersistableValue>> = [];
25
- const removeItemFns = [];
26
-
27
- const composedValueGetter = async (
28
- name: string,
29
- ): Promise<PersistableValue[]> => {
30
- const settledResults = await Promise.allSettled(
31
- getItemFns.map((getter) => getter(name)),
32
- );
33
-
34
- return settledResults.reduce((acc, result) => {
35
- if (result.status === 'fulfilled') {
36
- return [...acc, result.value];
37
- }
38
- return acc;
39
- }, []);
40
- };
41
-
42
- const storages = Array.isArray(configStorages)
43
- ? configStorages
44
- : [configStorages];
45
-
46
- /*
47
- order matters, as the first storage in the list has the highest priority
48
- */
49
- if (storages.includes(PersistedStorageType.Route)) {
50
- const { setItem, getItem, removeItem } = useRoutePersistedStorage();
51
- setItemFns.push(setItem);
52
- getItemFns.push(getItem);
53
- removeItemFns.push(removeItem);
54
- }
55
-
56
- if (storages.includes(PersistedStorageType.LocalStorage)) {
57
- const { setItem, getItem, removeItem } = useLocalStoragePersistedStorage({
58
- storagePath,
59
- });
60
- setItemFns.push(setItem);
61
- getItemFns.push(getItem);
62
- removeItemFns.push(removeItem);
63
- }
64
-
65
- const startWatch = () => {
66
- unwatch = watch(
67
- value,
68
- async () => {
69
- /*
70
- if onStore callback is provided,
71
- call custom logic for storing value
72
- */
73
- if (onStore) {
74
- /*
75
- wrap all setItemFns in one callback
76
- so that onStore is called only once on each value change
77
- */
78
- const save = async ({ name, value: storedValue }) => {
79
- setItemFns.forEach((setter) => {
80
- setter(name, storedValue);
81
- });
82
- };
83
- await onStore(save, { name, value });
84
- } else {
85
- /*
86
- else, perform default storing logic
87
- */
88
- const storedValue = value.value;
89
- setItemFns.forEach((setter) => {
90
- setter(name, storedValue);
91
- });
92
- }
93
- },
94
- { deep: true },
95
- );
96
- };
97
-
98
- const restore = async () => {
99
- /*
100
- if onRestore callback is provided,
101
- call custom logic for restoring value
102
- */
103
- if (onRestore) {
104
- /*
105
- wrap all getItemFns in one callback
106
- so that onRestore is called only once on each value change
107
- */
108
- const restore = async (name: string) => {
109
- const restoredValues = await composedValueGetter(name);
110
- /*
111
- not sure if value to restore should be picked automatically
112
- before running onRestore
113
- */
114
- return restoredValues.find((value) => {
115
- return value != null;
116
- });
117
- };
118
- await onRestore(restore, name);
119
- } else {
120
- /*
121
- else, perform default restoring logic
122
- */
123
- const restoredValues = await composedValueGetter(name);
124
- const restoredValue = restoredValues.find((value) => value !== null);
125
-
126
- if (restoredValue !== undefined) {
127
- value.value = restoredValue;
128
- }
129
- }
130
- /*
131
- start watching after restoring value to prevent restored value
132
- from storing again
133
- */
134
- if (!startWatchManually) {
135
- startWatch();
136
- }
137
- };
138
-
139
- const reset = async () => {
140
- await Promise.all(removeItemFns.map((removeItem) => removeItem(name)));
141
- };
142
-
143
- const endWatch = () => unwatch && unwatch();
144
-
145
- return {
146
- watch: startWatch,
147
- unwatch: endWatch,
148
- restore,
149
- reset,
150
- };
151
- };
@@ -1,41 +0,0 @@
1
- import { useRoute, useRouter } from 'vue-router';
2
-
3
- import { StorageLike } from './PersistedStorage.types.ts';
4
-
5
- export const useRoutePersistedStorage = (): StorageLike => {
6
- const router = useRouter();
7
- const route = useRoute();
8
-
9
- const getItem = async (key: string) => {
10
- return route.query[key];
11
- };
12
-
13
- const setItem = async (key: string, value: string | string[]) => {
14
- await router.replace({
15
- name: route.name,
16
- params: route.params,
17
- hash: route.hash,
18
- query: {
19
- ...route.query,
20
- [key]: value,
21
- },
22
- });
23
- };
24
-
25
- const removeItem = async (key: string) => {
26
- const query = { ...route.query };
27
- delete query[key];
28
- await router.replace({
29
- name: route.name,
30
- params: route.params,
31
- hash: route.hash,
32
- query,
33
- });
34
- };
35
-
36
- return {
37
- getItem,
38
- setItem,
39
- removeItem,
40
- };
41
- };