@webitel/ui-datalist 1.1.5 → 1.1.7

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 (220) hide show
  1. package/package.json +3 -10
  2. package/src/modules/_shared/createDatalistStore.ts +44 -44
  3. package/src/modules/card/composables/useCardAnyFieldEditedWatcher.ts +15 -15
  4. package/src/modules/card/composables/useCardComponent.ts +69 -67
  5. package/src/modules/card/composables/useCardIsNew.ts +5 -5
  6. package/src/modules/card/composables/useCardRouting.ts +22 -24
  7. package/src/modules/card/composables/useCardSaveAction.ts +15 -15
  8. package/src/modules/card/composables/useCardValidation.ts +22 -24
  9. package/src/modules/card/composables/useItemCardSaveText.ts +14 -14
  10. package/src/modules/card/stores/createCardStore.ts +174 -173
  11. package/src/modules/filter-presets/api/PresetQuery.ts +115 -92
  12. package/src/modules/filter-presets/components/_shared/input-fields/preset-description-field.vue +1 -1
  13. package/src/modules/filter-presets/components/_shared/preset-filters-preview.vue +8 -10
  14. package/src/modules/filter-presets/components/apply-preset/apply-preset-action.vue +119 -97
  15. package/src/modules/filter-presets/components/apply-preset/preset-preview.vue +66 -60
  16. package/src/modules/filter-presets/components/save-preset/overwrite-preset-popup.vue +8 -6
  17. package/src/modules/filter-presets/components/save-preset/save-preset-action.vue +93 -87
  18. package/src/modules/filter-presets/components/save-preset/save-preset-popup.vue +43 -38
  19. package/src/modules/filter-presets/stores/createFilterPresetsStore.ts +50 -45
  20. package/src/modules/filter-presets/stores/headers/headers.ts +20 -20
  21. package/src/modules/filters/classes/Filter.ts +42 -42
  22. package/src/modules/filters/classes/FiltersManager.ts +287 -246
  23. package/src/modules/filters/classes/__tests__/FiltersManager.spec.ts +64 -0
  24. package/src/modules/filters/components/config/dynamic-view/dynamic-filter-config-form-value-input.vue +6 -4
  25. package/src/modules/filters/components/config/dynamic-view/dynamic-filter-config-form.vue +57 -51
  26. package/src/modules/filters/components/config/dynamic-view/dynamic-filter-config-view.vue +14 -3
  27. package/src/modules/filters/components/config/static-view/static-filter-field.vue +16 -18
  28. package/src/modules/filters/components/dynamic-filter-add-action.vue +46 -14
  29. package/src/modules/filters/components/dynamic-filter-panel-wrapper.vue +6 -6
  30. package/src/modules/filters/components/preview/dynamic-filter-preview.vue +50 -48
  31. package/src/modules/filters/components/search-bar/dynamic-filter-search.vue +92 -80
  32. package/src/modules/filters/components/search-bar/types/DynamicFilterSearch.d.ts +1 -1
  33. package/src/modules/filters/components/table-filters-panel.vue +96 -82
  34. package/src/modules/filters/components/types/Filter.types.ts +14 -10
  35. package/src/modules/filters/composables/useFilterConfigsToolkit.ts +143 -136
  36. package/src/modules/filters/createTableFiltersStore.ts +109 -93
  37. package/src/modules/filters/index.ts +24 -23
  38. package/src/modules/filters/modules/filterConfig/classes/FilterConfig.ts +55 -55
  39. package/src/modules/filters/modules/filterConfig/classes/createFilterConfig.ts +19 -19
  40. package/src/modules/filters/modules/filterConfig/components/_custom/filterConfig.ts +84 -67
  41. package/src/modules/filters/modules/filterConfig/components/_custom/index.ts +3 -3
  42. package/src/modules/filters/modules/filterConfig/components/_custom/type-extension-filter-value-field.vue +24 -16
  43. package/src/modules/filters/modules/filterConfig/components/_custom/type-extension-filter-value-preview.vue +7 -7
  44. package/src/modules/filters/modules/filterConfig/components/_shared/date-time-filter/date-time-filter-value-field.vue +12 -9
  45. package/src/modules/filters/modules/filterConfig/components/_shared/date-time-filter/date-time-filter-value-preview.vue +3 -3
  46. package/src/modules/filters/modules/filterConfig/components/_shared/date-time-filter/date-time-options/date-time-options-filter-value-field.vue +38 -31
  47. package/src/modules/filters/modules/filterConfig/components/_shared/date-time-filter/date-time-options/date-time-options-filter-value-preview.vue +14 -9
  48. package/src/modules/filters/modules/filterConfig/components/_shared/has-options/has-option-filter-value-field.vue +10 -8
  49. package/src/modules/filters/modules/filterConfig/components/_shared/has-options/has-option-filter-value-preview.vue +1 -1
  50. package/src/modules/filters/modules/filterConfig/components/_shared/lookup-filter-preview/lookup-filter-value-preview.vue +4 -4
  51. package/src/modules/filters/modules/filterConfig/components/agent/agent-filter-value-field.vue +22 -14
  52. package/src/modules/filters/modules/filterConfig/components/agent/agent-filter-value-preview.vue +1 -1
  53. package/src/modules/filters/modules/filterConfig/components/agent-status/agent-status-filter-value-field.vue +33 -20
  54. package/src/modules/filters/modules/filterConfig/components/agent-status/agent-status-filter-value-preview.vue +7 -8
  55. package/src/modules/filters/modules/filterConfig/components/amd-result/amd-result-filter-value-field.vue +21 -13
  56. package/src/modules/filters/modules/filterConfig/components/amd-result/amd-result-filter-value-preview.vue +1 -1
  57. package/src/modules/filters/modules/filterConfig/components/auditor/auditor-filter-value-field.vue +33 -19
  58. package/src/modules/filters/modules/filterConfig/components/auditor/auditor-filter-value-preview.vue +1 -1
  59. package/src/modules/filters/modules/filterConfig/components/auditor/index.ts +10 -9
  60. package/src/modules/filters/modules/filterConfig/components/call-direction/call-direction-filter-value-field.vue +21 -13
  61. package/src/modules/filters/modules/filterConfig/components/call-direction/call-direction-filter-value-preview.vue +1 -1
  62. package/src/modules/filters/modules/filterConfig/components/case-actual-reaction-time/case-actual-reaction-time-filter-value-field.vue +2 -2
  63. package/src/modules/filters/modules/filterConfig/components/case-actual-reaction-time/case-actual-reaction-time-filter-value-preview.vue +2 -2
  64. package/src/modules/filters/modules/filterConfig/components/case-actual-resolution-time/case-actual-resolution-time-filter-value-field.vue +2 -2
  65. package/src/modules/filters/modules/filterConfig/components/case-actual-resolution-time/case-actual-resolution-time-filter-value-preview.vue +2 -2
  66. package/src/modules/filters/modules/filterConfig/components/case-assignee/case-assignee-filter-value-field.vue +36 -25
  67. package/src/modules/filters/modules/filterConfig/components/case-assignee/case-assignee-filter-value-preview.vue +15 -13
  68. package/src/modules/filters/modules/filterConfig/components/case-assignee/filterConfig.ts +24 -18
  69. package/src/modules/filters/modules/filterConfig/components/case-assignee/index.ts +3 -3
  70. package/src/modules/filters/modules/filterConfig/components/case-author/case-author-filter-value-field.vue +22 -14
  71. package/src/modules/filters/modules/filterConfig/components/case-author/case-author-filter-value-preview.vue +4 -4
  72. package/src/modules/filters/modules/filterConfig/components/case-close-reason-groups/case-close-reason-groups-filter-value-field.vue +42 -34
  73. package/src/modules/filters/modules/filterConfig/components/case-close-reason-groups/case-close-reason-groups-filter-value-preview.vue +1 -1
  74. package/src/modules/filters/modules/filterConfig/components/case-close-reason-groups/config.js +1 -1
  75. package/src/modules/filters/modules/filterConfig/components/case-impacted/case-impacted-filter-value-field.vue +22 -14
  76. package/src/modules/filters/modules/filterConfig/components/case-impacted/case-impacted-filter-value-preview.vue +1 -1
  77. package/src/modules/filters/modules/filterConfig/components/case-priority/case-priority-filter-value-field.vue +22 -14
  78. package/src/modules/filters/modules/filterConfig/components/case-priority/case-priority-filter-value-preview.vue +1 -1
  79. package/src/modules/filters/modules/filterConfig/components/case-reaction-time/case-reaction-time-filter-value-field.vue +2 -2
  80. package/src/modules/filters/modules/filterConfig/components/case-reaction-time/case-reaction-time-filter-value-preview.vue +2 -2
  81. package/src/modules/filters/modules/filterConfig/components/case-reporter/case-reporter-filter-value-field.vue +22 -14
  82. package/src/modules/filters/modules/filterConfig/components/case-reporter/case-reporter-filter-value-preview.vue +1 -1
  83. package/src/modules/filters/modules/filterConfig/components/case-resolution-time/case-resolution-time-filter-value-field.vue +2 -2
  84. package/src/modules/filters/modules/filterConfig/components/case-resolution-time/case-resolution-time-filter-value-preview.vue +2 -2
  85. package/src/modules/filters/modules/filterConfig/components/case-service/case-service-filter-value-preview.vue +4 -4
  86. package/src/modules/filters/modules/filterConfig/components/case-sla/case-sla-filter-value-field.vue +22 -14
  87. package/src/modules/filters/modules/filterConfig/components/case-sla/case-sla-filter-value-preview.vue +1 -1
  88. package/src/modules/filters/modules/filterConfig/components/case-sla-condition/case-sla-condition-filter-value-field.vue +40 -32
  89. package/src/modules/filters/modules/filterConfig/components/case-sla-condition/case-sla-condition-filter-value-preview.vue +1 -1
  90. package/src/modules/filters/modules/filterConfig/components/case-source/case-source-filter-value-field.vue +22 -14
  91. package/src/modules/filters/modules/filterConfig/components/case-source/case-source-filter-value-preview.vue +1 -1
  92. package/src/modules/filters/modules/filterConfig/components/case-status/case-status-filter-value-field.vue +42 -34
  93. package/src/modules/filters/modules/filterConfig/components/case-status/case-status-filter-value-preview.vue +1 -1
  94. package/src/modules/filters/modules/filterConfig/components/case-status/config.js +1 -1
  95. package/src/modules/filters/modules/filterConfig/components/contact/contact-filter-value-field.vue +22 -14
  96. package/src/modules/filters/modules/filterConfig/components/contact/contact-filter-value-preview.vue +1 -1
  97. package/src/modules/filters/modules/filterConfig/components/contact-group/contact-group-filter-value-field.vue +57 -46
  98. package/src/modules/filters/modules/filterConfig/components/contact-group/contact-group-filter-value-preview.vue +15 -13
  99. package/src/modules/filters/modules/filterConfig/components/contact-group/index.ts +39 -27
  100. package/src/modules/filters/modules/filterConfig/components/contact-label/contact-label-filter-value-field.vue +33 -22
  101. package/src/modules/filters/modules/filterConfig/components/contact-label/contact-label-filter-value-preview.vue +4 -5
  102. package/src/modules/filters/modules/filterConfig/components/contact-label/index.ts +20 -15
  103. package/src/modules/filters/modules/filterConfig/components/contact-owner/contact-owner-filter-value-field.vue +24 -16
  104. package/src/modules/filters/modules/filterConfig/components/contact-owner/contact-owner-filter-value-preview.vue +4 -4
  105. package/src/modules/filters/modules/filterConfig/components/contact-owner/index.ts +10 -9
  106. package/src/modules/filters/modules/filterConfig/components/created-at-from/created-at-from-filter-value-field.vue +1 -1
  107. package/src/modules/filters/modules/filterConfig/components/created-at-from/created-at-from-filter-value-preview.vue +3 -3
  108. package/src/modules/filters/modules/filterConfig/components/created-at-to/created-at-to-filter-value-field.vue +1 -1
  109. package/src/modules/filters/modules/filterConfig/components/created-at-to/created-at-to-filter-value-preview.vue +3 -3
  110. package/src/modules/filters/modules/filterConfig/components/gateway/gateway-filter-value-field.vue +27 -15
  111. package/src/modules/filters/modules/filterConfig/components/gateway/gateway-filter-value-preview.vue +4 -4
  112. package/src/modules/filters/modules/filterConfig/components/grantee/grantee-filter-value-field.vue +22 -14
  113. package/src/modules/filters/modules/filterConfig/components/grantee/grantee-filter-value-preview.vue +4 -4
  114. package/src/modules/filters/modules/filterConfig/components/hangup-cause/hangup-cause-filter-value-field.vue +21 -13
  115. package/src/modules/filters/modules/filterConfig/components/hangup-cause/hangup-cause-filter-value-preview.vue +1 -1
  116. package/src/modules/filters/modules/filterConfig/components/has-attachment/has-attachment-filter-value-field.vue +21 -13
  117. package/src/modules/filters/modules/filterConfig/components/has-attachment/has-attachment-filter-value-preview.vue +1 -1
  118. package/src/modules/filters/modules/filterConfig/components/has-file/has-file-filter-value-field.vue +11 -7
  119. package/src/modules/filters/modules/filterConfig/components/has-file/has-file-filter-value-preview.vue +1 -1
  120. package/src/modules/filters/modules/filterConfig/components/has-rating/has-rating-filter-value-field.vue +11 -7
  121. package/src/modules/filters/modules/filterConfig/components/has-rating/has-rating-filter-value-preview.vue +1 -1
  122. package/src/modules/filters/modules/filterConfig/components/has-transcription/has-transcription-filter-value-field.vue +11 -7
  123. package/src/modules/filters/modules/filterConfig/components/has-transcription/has-transcription-filter-value-preview.vue +1 -1
  124. package/src/modules/filters/modules/filterConfig/components/has-user/has-user-filter-value-field.vue +19 -14
  125. package/src/modules/filters/modules/filterConfig/components/has-user/has-user-filter-value-preview.vue +1 -1
  126. package/src/modules/filters/modules/filterConfig/components/index.ts +261 -259
  127. package/src/modules/filters/modules/filterConfig/components/queue/index.ts +10 -9
  128. package/src/modules/filters/modules/filterConfig/components/queue/queue-filter-value-field.vue +33 -19
  129. package/src/modules/filters/modules/filterConfig/components/queue/queue-filter-value-preview.vue +1 -1
  130. package/src/modules/filters/modules/filterConfig/components/queue-period/queue-period-filter-value-field.vue +33 -20
  131. package/src/modules/filters/modules/filterConfig/components/queue-period/queue-period-filter-value-preview.vue +7 -8
  132. package/src/modules/filters/modules/filterConfig/components/queue-type/queue-type-filter-value-field.vue +33 -20
  133. package/src/modules/filters/modules/filterConfig/components/queue-type/queue-type-filter-value-preview.vue +7 -7
  134. package/src/modules/filters/modules/filterConfig/components/rated-by/rated-by-filter-value-field.vue +22 -14
  135. package/src/modules/filters/modules/filterConfig/components/rated-by/rated-by-filter-value-preview.vue +4 -4
  136. package/src/modules/filters/modules/filterConfig/components/rating/rating-from-to-filter-value-preview.vue +1 -1
  137. package/src/modules/filters/modules/filterConfig/components/region/index.ts +10 -9
  138. package/src/modules/filters/modules/filterConfig/components/region/region-filter-value-field.vue +33 -19
  139. package/src/modules/filters/modules/filterConfig/components/region/region-filter-value-preview.vue +1 -1
  140. package/src/modules/filters/modules/filterConfig/components/score/score-from-to-filter-value-preview.vue +1 -1
  141. package/src/modules/filters/modules/filterConfig/components/skill/index.ts +10 -9
  142. package/src/modules/filters/modules/filterConfig/components/skill/skill-filter-value-field.vue +33 -19
  143. package/src/modules/filters/modules/filterConfig/components/skill/skill-filter-value-preview.vue +1 -1
  144. package/src/modules/filters/modules/filterConfig/components/supervisor/index.ts +10 -9
  145. package/src/modules/filters/modules/filterConfig/components/supervisor/supervisor-filter-value-field.vue +33 -19
  146. package/src/modules/filters/modules/filterConfig/components/supervisor/supervisor-filter-value-preview.vue +1 -1
  147. package/src/modules/filters/modules/filterConfig/components/tag/tag-filter-value-field.vue +21 -13
  148. package/src/modules/filters/modules/filterConfig/components/tag/tag-filter-value-preview.vue +10 -10
  149. package/src/modules/filters/modules/filterConfig/components/talk-duration/TalkDurationFilter.d.ts +2 -2
  150. package/src/modules/filters/modules/filterConfig/components/talk-duration/talk-duration-filter-value-field.vue +3 -1
  151. package/src/modules/filters/modules/filterConfig/components/talk-duration/talk-duration-filter-value-preview.vue +1 -1
  152. package/src/modules/filters/modules/filterConfig/components/team/index.ts +10 -10
  153. package/src/modules/filters/modules/filterConfig/components/team/team-filter-value-field.vue +33 -19
  154. package/src/modules/filters/modules/filterConfig/components/team/team-filter-value-preview.vue +1 -1
  155. package/src/modules/filters/modules/filterConfig/components/total-duration/TotalDurationFilter.d.ts +2 -2
  156. package/src/modules/filters/modules/filterConfig/components/total-duration/total-duration-filter-value-field.vue +3 -1
  157. package/src/modules/filters/modules/filterConfig/components/total-duration/total-duration-filter-value-preview.vue +1 -1
  158. package/src/modules/filters/modules/filterConfig/components/user/user-filter-value-field.vue +22 -14
  159. package/src/modules/filters/modules/filterConfig/components/user/user-filter-value-preview.vue +4 -4
  160. package/src/modules/filters/modules/filterConfig/components/utilization-progress/utilization-progress-filter-value-field.vue +33 -20
  161. package/src/modules/filters/modules/filterConfig/components/utilization-progress/utilization-progress-filter-value-preview.vue +1 -2
  162. package/src/modules/filters/modules/filterConfig/components/variable/variable-filter-value-preview.vue +1 -1
  163. package/src/modules/filters/modules/filterConfig/composables/booleanFilterToolkit.ts +31 -23
  164. package/src/modules/filters/modules/filterConfig/composables/useAgentStatusOptions.ts +16 -15
  165. package/src/modules/filters/modules/filterConfig/composables/useFromToSecToPreviewTime.ts +26 -26
  166. package/src/modules/filters/modules/filterConfig/composables/useQueuePeriodOptions.ts +66 -36
  167. package/src/modules/filters/modules/filterConfig/composables/useQueueTypeOptions.ts +12 -13
  168. package/src/modules/filters/modules/filterConfig/enums/FilterOption.ts +51 -51
  169. package/src/modules/filters/modules/filterConfig/enums/options/AMDResultOptions.ts +29 -29
  170. package/src/modules/filters/modules/filterConfig/enums/options/BooleanFilterOptions.ts +8 -8
  171. package/src/modules/filters/modules/filterConfig/enums/options/CallDirectionFilterOptions.ts +20 -11
  172. package/src/modules/filters/modules/filterConfig/enums/options/CallHistoryTagFilterOptions.ts +5 -5
  173. package/src/modules/filters/modules/filterConfig/enums/options/HangupCauseFilterOptions.ts +257 -257
  174. package/src/modules/filters/modules/filterConfig/enums/options/UtilizationProgressOptions.ts +16 -16
  175. package/src/modules/filters/modules/filterConfig/types/DynamicFilterPreviewComponent.ts +3 -3
  176. package/src/modules/filters/scripts/utils.ts +13 -13
  177. package/src/modules/headers/createTableHeadersStore.ts +278 -251
  178. package/src/modules/pagination/createTablePaginationStore.ts +55 -52
  179. package/src/modules/persist/PersistedStorage.types.ts +33 -31
  180. package/src/modules/persist/useLocalStoragePersistedStorage.ts +24 -24
  181. package/src/modules/persist/usePersistedStorage.ts +117 -105
  182. package/src/modules/persist/useRoutePersistedStorage.ts +33 -31
  183. package/src/modules/scripts/utils.ts +13 -13
  184. package/src/modules/table/createTableStore.store.ts +352 -316
  185. package/src/modules/types/StoreProvider.ts +3 -3
  186. package/src/modules/types/createDatalistStore.types.ts +12 -9
  187. package/src/modules/types/tableStore.types.ts +44 -44
  188. package/types/modules/card/composables/useCardRouting.d.ts +1 -1
  189. package/types/modules/card/composables/useCardSaveAction.d.ts +1 -1
  190. package/types/modules/filter-presets/components/_shared/preset-filters-preview.vue.d.ts +1 -1
  191. package/types/modules/filter-presets/components/apply-preset/apply-preset-action.vue.d.ts +1 -1
  192. package/types/modules/filter-presets/components/apply-preset/preset-preview.vue.d.ts +1 -1
  193. package/types/modules/filter-presets/components/save-preset/save-preset-action.vue.d.ts +1 -1
  194. package/types/modules/filter-presets/components/save-preset/save-preset-popup.vue.d.ts +1 -1
  195. package/types/modules/filter-presets/stores/createFilterPresetsStore.d.ts +16 -4
  196. package/types/modules/filters/classes/FiltersManager.d.ts +4 -1
  197. package/types/modules/filters/components/config/dynamic-view/dynamic-filter-config-form-value-input.vue.d.ts +1 -1
  198. package/types/modules/filters/components/config/dynamic-view/dynamic-filter-config-form.vue.d.ts +2 -2
  199. package/types/modules/filters/components/config/dynamic-view/dynamic-filter-config-view.vue.d.ts +7 -5
  200. package/types/modules/filters/components/dynamic-filter-add-action.vue.d.ts +4 -4
  201. package/types/modules/filters/components/table-filters-panel.vue.d.ts +4 -4
  202. package/types/modules/filters/components/types/Filter.types.d.ts +9 -3
  203. package/types/modules/filters/createTableFiltersStore.d.ts +8 -2
  204. package/types/modules/filters/modules/filterConfig/components/_custom/filterConfig.d.ts +2 -2
  205. package/types/modules/filters/modules/filterConfig/components/case-assignee/case-assignee-filter-value-field.vue.d.ts +1 -1
  206. package/types/modules/filters/modules/filterConfig/components/case-assignee/case-assignee-filter-value-preview.vue.d.ts +1 -1
  207. package/types/modules/filters/modules/filterConfig/components/contact-group/contact-group-filter-value-preview.vue.d.ts +1 -1
  208. package/types/modules/filters/modules/filterConfig/components/contact-owner/contact-owner-filter-value-field.vue.d.ts +1 -1
  209. package/types/modules/filters/modules/filterConfig/components/has-file/has-file-filter-value-field.vue.d.ts +1 -1
  210. package/types/modules/filters/modules/filterConfig/components/has-rating/has-rating-filter-value-field.vue.d.ts +1 -1
  211. package/types/modules/filters/modules/filterConfig/components/has-transcription/has-transcription-filter-value-field.vue.d.ts +1 -1
  212. package/types/modules/filters/modules/filterConfig/components/has-user/has-user-filter-value-field.vue.d.ts +2 -2
  213. package/types/modules/filters/modules/filterConfig/components/index.d.ts +14 -14
  214. package/types/modules/filters/modules/filterConfig/composables/booleanFilterToolkit.d.ts +1 -1
  215. package/types/modules/filters/modules/filterConfig/enums/options/AMDResultOptions.d.ts +1 -1
  216. package/types/modules/filters/modules/filterConfig/enums/options/CallDirectionFilterOptions.d.ts +4 -1
  217. package/types/modules/filters/modules/filterConfig/enums/options/CallHistoryTagFilterOptions.d.ts +1 -1
  218. package/types/modules/filters/modules/filterConfig/enums/options/HangupCauseFilterOptions.d.ts +1 -1
  219. package/types/modules/filters/scripts/utils.d.ts +1 -1
  220. package/types/modules/table/createTableStore.store.d.ts +16 -4
@@ -9,263 +9,290 @@ import { usePersistedStorage } from '../persist/usePersistedStorage';
9
9
  import { useTableStoreConfig } from '../types/tableStore.types';
10
10
 
11
11
  interface TableHeadersStoreBodyParams {
12
- rawHeaders: WtTableHeader[];
13
- id: string;
12
+ rawHeaders: WtTableHeader[];
13
+ id: string;
14
14
  }
15
15
 
16
16
  export const tableHeadersStoreBody = ({
17
- rawHeaders,
18
- id,
17
+ rawHeaders,
18
+ id,
19
19
  }: TableHeadersStoreBodyParams) => {
20
- const headers = ref<WtTableHeader[]>(rawHeaders);
21
- const isReorderingColumn = ref(false);
22
-
23
- const shownHeaders = computed(() => {
24
- return headers.value.filter((header) => header.show);
25
- });
26
-
27
- const fields = computed(() => {
28
- return shownHeaders.value.map((header) => header.field);
29
- });
30
-
31
- const sort = computed(() => {
32
- const encodeSortQuery = ({ column, order }) =>
33
- `${sortToQueryAdapter(order)}${column.field}`;
34
-
35
- const sortedCol = headers.value.find((header) => header.sort);
36
-
37
- return sortedCol
38
- ? encodeSortQuery({ column: sortedCol, order: sortedCol.sort })
39
- : null;
40
- });
41
-
42
- const columnWidths = computed(() => {
43
- return headers.value.reduce((acc, header) => {
44
- if (header.width) {
45
- acc[header.field] = header.width;
46
- }
47
- return acc;
48
- }, {});
49
- });
50
-
51
- const $reset = () => {
52
- headers.value = rawHeaders;
53
- };
54
-
55
- const updateShownHeaders = (value) => {
56
- headers.value = value;
57
- };
58
-
59
- const setHeaderOrder = (orderedFields: string[]) => {
60
- const arrayFieldOrder = new Map<string, number[]>();
61
- headers.value.forEach((header, idx) => {
62
- if (!arrayFieldOrder.has(header.field)) {
63
- arrayFieldOrder.set(header.field, []);
64
- }
65
- arrayFieldOrder.get(header.field)!.push(idx);
66
- });
67
-
68
- const newOrder = [];
69
- for (const field of orderedFields) {
70
- const indices = arrayFieldOrder.get(field);
71
- if (indices && indices.length) {
72
- newOrder.push(indices.shift()!);
73
- }
74
- }
75
-
76
- const newOrderFiltered = newOrder
77
- .map((idx) => headers.value[idx])
78
- .filter((header) => header);
79
-
80
- /**
81
- * @author @Oleksandr Palonnyi
82
- *
83
- * [WTEL-8038](https://webitel.atlassian.net/browse/WTEL-8038)
84
- *
85
- * Additionally, we append the `show: true` property to each item
86
- * to ensure that all newly processed elements are visible by default.
87
- * */
88
- return newOrderFiltered.map((item) => {
89
- return {
90
- ...item,
91
- show: true,
92
- };
93
- });
94
- };
95
-
96
- const updateFields = (fields: string[]) => {
97
- const newHeaders = headers.value.map((header: WtTableHeader) => ({
98
- ...header,
99
- show: fields.includes(header.field),
100
- }));
101
-
102
- const customFields = fields.filter(
103
- (field) => !headers.value.some((header) => header.field === field),
104
- );
105
- const customFieldHeaders = customFields.map((field) => ({
106
- show: true,
107
- field,
108
- shouldBeInitialized: true,
109
- }));
110
-
111
- const mergedHeaders = [...newHeaders, ...customFieldHeaders];
112
- const orderedFields = fields.filter((field) =>
113
- mergedHeaders.some((header) => header.field === field),
114
- );
115
- const reordered = setHeaderOrder(orderedFields);
116
-
117
- const uniqueMerged = mergedHeaders.filter(
118
- (merged) => !reordered.some((r) => r.field === merged.field),
119
- );
120
-
121
- updateShownHeaders([...reordered, ...uniqueMerged]);
122
- };
123
-
124
- const updateSort = (column) => {
125
- const getNextSortOrder = (sort) => {
126
- switch (sort) {
127
- case SortSymbols.NONE:
128
- return SortSymbols.ASC;
129
- case SortSymbols.ASC:
130
- return SortSymbols.DESC;
131
- case SortSymbols.DESC:
132
- return SortSymbols.NONE;
133
- default:
134
- return SortSymbols.ASC;
135
- }
136
- };
137
-
138
- const changeHeadersSort = ({ headers, sortedHeader, order }) => {
139
- return headers.map((header) => {
140
- if (header.sort === undefined) return header;
141
-
142
- // reset all headers by default
143
- let newSort = null;
144
-
145
- if (header.field === sortedHeader.field) {
146
- newSort = order;
147
- }
148
-
149
- return {
150
- ...header,
151
- sort: newSort,
152
- };
153
- });
154
- };
155
-
156
- const order = getNextSortOrder(column.sort);
157
-
158
- headers.value = changeHeadersSort({
159
- headers: headers.value,
160
- sortedHeader: column,
161
- order,
162
- });
163
- };
164
-
165
- const setupPersistence = async () => {
166
- const { restore: restoreFields } = usePersistedStorage({
167
- name: 'fields',
168
- value: fields,
169
- storages: [PersistedStorageType.LocalStorage, PersistedStorageType.Route],
170
- storagePath: id,
171
- onStore: (save, { name }) => {
172
- const value = fields.value.join(',');
173
- return save({ name, value });
174
- },
175
- onRestore: async (restore, name) => {
176
- const value = (await restore(name)) as string;
177
- if (value) {
178
- return updateFields(value.split(','));
179
- }
180
- },
181
- });
182
-
183
- const { restore: restoreSort } = usePersistedStorage({
184
- name: 'sort',
185
- value: sort,
186
- });
187
-
188
- const { restore: restoreColumnWidths } = usePersistedStorage({
189
- name: 'columnWidths',
190
- value: columnWidths,
191
- storages: [PersistedStorageType.LocalStorage],
192
- storagePath: id,
193
- onStore: (save, { name }) => {
194
- const value = JSON.stringify(columnWidths.value);
195
- return save({ name, value });
196
- },
197
- onRestore: async (restore, name) => {
198
- const value = (await restore(name)) as string;
199
- if (value) {
200
- const parsedWidths = JSON.parse(value);
201
- headers.value = headers.value.map((header) => ({
202
- ...header,
203
- width: parsedWidths[header.field] || header.width,
204
- }));
205
- }
206
- },
207
- });
208
-
209
- return Promise.allSettled([
210
- restoreFields(),
211
- restoreSort(),
212
- restoreColumnWidths(),
213
- ]);
214
- };
215
-
216
- const getHeaderByField = (field: string) => {
217
- return headers.value.find((header) => header.field === field);
218
- };
219
-
220
- const columnResize = ({ columnName, columnWidth }) => {
221
- const column = getHeaderByField(columnName);
222
-
223
- if (column) {
224
- column.width = columnWidth;
225
- }
226
- };
227
-
228
- const columnReorder = (orderedFields: string[]) => {
229
- isReorderingColumn.value = true;
230
-
231
- const reordered = setHeaderOrder(orderedFields);
232
- const uniqueHeaders = headers.value.filter(
233
- (merged) => !reordered.some((r) => r.field === merged.field),
234
- );
235
- updateShownHeaders([...reordered, ...uniqueHeaders]);
236
-
237
- nextTick(() => {
238
- isReorderingColumn.value = false;
239
- });
240
- };
241
-
242
- return {
243
- headers,
244
- shownHeaders,
245
- fields,
246
- sort,
247
- columnWidths,
248
- isReorderingColumn,
249
-
250
- updateShownHeaders,
251
- updateSort,
252
- columnResize,
253
- columnReorder,
254
-
255
- setupPersistence,
256
- $reset,
257
- };
20
+ const headers = ref<WtTableHeader[]>(rawHeaders);
21
+ const isReorderingColumn = ref(false);
22
+
23
+ const shownHeaders = computed(() => {
24
+ return headers.value.filter((header) => header.show);
25
+ });
26
+
27
+ const fields = computed(() => {
28
+ return shownHeaders.value.map((header) => header.field);
29
+ });
30
+
31
+ const sort = computed(() => {
32
+ const encodeSortQuery = ({ column, order }) =>
33
+ `${sortToQueryAdapter(order)}${column.field}`;
34
+
35
+ const sortedCol = headers.value.find((header) => header.sort);
36
+
37
+ return sortedCol
38
+ ? encodeSortQuery({
39
+ column: sortedCol,
40
+ order: sortedCol.sort,
41
+ })
42
+ : null;
43
+ });
44
+
45
+ const columnWidths = computed(() => {
46
+ return headers.value.reduce((acc, header) => {
47
+ if (header.width) {
48
+ acc[header.field] = header.width;
49
+ }
50
+ return acc;
51
+ }, {});
52
+ });
53
+
54
+ const $reset = () => {
55
+ headers.value = rawHeaders;
56
+ };
57
+
58
+ const updateShownHeaders = (value) => {
59
+ headers.value = value;
60
+ };
61
+
62
+ const setHeaderOrder = (orderedFields: string[]) => {
63
+ const arrayFieldOrder = new Map<string, number[]>();
64
+ headers.value.forEach((header, idx) => {
65
+ if (!arrayFieldOrder.has(header.field)) {
66
+ arrayFieldOrder.set(header.field, []);
67
+ }
68
+ arrayFieldOrder.get(header.field)!.push(idx);
69
+ });
70
+
71
+ const newOrder = [];
72
+ for (const field of orderedFields) {
73
+ const indices = arrayFieldOrder.get(field);
74
+ if (indices && indices.length) {
75
+ newOrder.push(indices.shift()!);
76
+ }
77
+ }
78
+
79
+ const newOrderFiltered = newOrder
80
+ .map((idx) => headers.value[idx])
81
+ .filter((header) => header);
82
+
83
+ /**
84
+ * @author @Oleksandr Palonnyi
85
+ *
86
+ * [WTEL-8038](https://webitel.atlassian.net/browse/WTEL-8038)
87
+ *
88
+ * Additionally, we append the `show: true` property to each item
89
+ * to ensure that all newly processed elements are visible by default.
90
+ * */
91
+ return newOrderFiltered.map((item) => {
92
+ return {
93
+ ...item,
94
+ show: true,
95
+ };
96
+ });
97
+ };
98
+
99
+ const updateFields = (fields: string[]) => {
100
+ const newHeaders = headers.value.map((header: WtTableHeader) => ({
101
+ ...header,
102
+ show: fields.includes(header.field),
103
+ }));
104
+
105
+ const customFields = fields.filter(
106
+ (field) => !headers.value.some((header) => header.field === field),
107
+ );
108
+ const customFieldHeaders = customFields.map((field) => ({
109
+ show: true,
110
+ field,
111
+ shouldBeInitialized: true,
112
+ }));
113
+
114
+ const mergedHeaders = [
115
+ ...newHeaders,
116
+ ...customFieldHeaders,
117
+ ];
118
+ const orderedFields = fields.filter((field) =>
119
+ mergedHeaders.some((header) => header.field === field),
120
+ );
121
+ const reordered = setHeaderOrder(orderedFields);
122
+
123
+ const uniqueMerged = mergedHeaders.filter(
124
+ (merged) => !reordered.some((r) => r.field === merged.field),
125
+ );
126
+
127
+ updateShownHeaders([
128
+ ...reordered,
129
+ ...uniqueMerged,
130
+ ]);
131
+ };
132
+
133
+ const updateSort = (column) => {
134
+ const getNextSortOrder = (sort) => {
135
+ switch (sort) {
136
+ case SortSymbols.NONE:
137
+ return SortSymbols.ASC;
138
+ case SortSymbols.ASC:
139
+ return SortSymbols.DESC;
140
+ case SortSymbols.DESC:
141
+ return SortSymbols.NONE;
142
+ default:
143
+ return SortSymbols.ASC;
144
+ }
145
+ };
146
+
147
+ const changeHeadersSort = ({ headers, sortedHeader, order }) => {
148
+ return headers.map((header) => {
149
+ if (header.sort === undefined) return header;
150
+
151
+ // reset all headers by default
152
+ let newSort = null;
153
+
154
+ if (header.field === sortedHeader.field) {
155
+ newSort = order;
156
+ }
157
+
158
+ return {
159
+ ...header,
160
+ sort: newSort,
161
+ };
162
+ });
163
+ };
164
+
165
+ const order = getNextSortOrder(column.sort);
166
+
167
+ headers.value = changeHeadersSort({
168
+ headers: headers.value,
169
+ sortedHeader: column,
170
+ order,
171
+ });
172
+ };
173
+
174
+ const setupPersistence = async () => {
175
+ const { restore: restoreFields } = usePersistedStorage({
176
+ name: 'fields',
177
+ value: fields,
178
+ storages: [
179
+ PersistedStorageType.LocalStorage,
180
+ PersistedStorageType.Route,
181
+ ],
182
+ storagePath: id,
183
+ onStore: (save, { name }) => {
184
+ const value = fields.value.join(',');
185
+ return save({
186
+ name,
187
+ value,
188
+ });
189
+ },
190
+ onRestore: async (restore, name) => {
191
+ const value = (await restore(name)) as string;
192
+ if (value) {
193
+ return updateFields(value.split(','));
194
+ }
195
+ },
196
+ });
197
+
198
+ const { restore: restoreSort } = usePersistedStorage({
199
+ name: 'sort',
200
+ value: sort,
201
+ });
202
+
203
+ const { restore: restoreColumnWidths } = usePersistedStorage({
204
+ name: 'columnWidths',
205
+ value: columnWidths,
206
+ storages: [
207
+ PersistedStorageType.LocalStorage,
208
+ ],
209
+ storagePath: id,
210
+ onStore: (save, { name }) => {
211
+ const value = JSON.stringify(columnWidths.value);
212
+ return save({
213
+ name,
214
+ value,
215
+ });
216
+ },
217
+ onRestore: async (restore, name) => {
218
+ const value = (await restore(name)) as string;
219
+ if (value) {
220
+ const parsedWidths = JSON.parse(value);
221
+ headers.value = headers.value.map((header) => ({
222
+ ...header,
223
+ width: parsedWidths[header.field] || header.width,
224
+ }));
225
+ }
226
+ },
227
+ });
228
+
229
+ return Promise.allSettled([
230
+ restoreFields(),
231
+ restoreSort(),
232
+ restoreColumnWidths(),
233
+ ]);
234
+ };
235
+
236
+ const getHeaderByField = (field: string) => {
237
+ return headers.value.find((header) => header.field === field);
238
+ };
239
+
240
+ const columnResize = ({ columnName, columnWidth }) => {
241
+ const column = getHeaderByField(columnName);
242
+
243
+ if (column) {
244
+ column.width = columnWidth;
245
+ }
246
+ };
247
+
248
+ const columnReorder = (orderedFields: string[]) => {
249
+ isReorderingColumn.value = true;
250
+
251
+ const reordered = setHeaderOrder(orderedFields);
252
+ const uniqueHeaders = headers.value.filter(
253
+ (merged) => !reordered.some((r) => r.field === merged.field),
254
+ );
255
+ updateShownHeaders([
256
+ ...reordered,
257
+ ...uniqueHeaders,
258
+ ]);
259
+
260
+ nextTick(() => {
261
+ isReorderingColumn.value = false;
262
+ });
263
+ };
264
+
265
+ return {
266
+ headers,
267
+ shownHeaders,
268
+ fields,
269
+ sort,
270
+ columnWidths,
271
+ isReorderingColumn,
272
+
273
+ updateShownHeaders,
274
+ updateSort,
275
+ columnResize,
276
+ columnReorder,
277
+
278
+ setupPersistence,
279
+ $reset,
280
+ };
258
281
  };
259
282
 
260
283
  export const createTableHeadersStore = <Entity>(
261
- namespace: string,
262
- config: useTableStoreConfig<Entity>,
263
- { headers: rawHeaders },
284
+ namespace: string,
285
+ config: useTableStoreConfig<Entity>,
286
+ { headers: rawHeaders },
264
287
  ) => {
265
- const id = `${namespace}/headers`;
266
- return createDatalistStore({
267
- storeBody: () => tableHeadersStoreBody({ rawHeaders, id }),
268
- namespace: id,
269
- config,
270
- });
288
+ const id = `${namespace}/headers`;
289
+ return createDatalistStore({
290
+ storeBody: () =>
291
+ tableHeadersStoreBody({
292
+ rawHeaders,
293
+ id,
294
+ }),
295
+ namespace: id,
296
+ config,
297
+ });
271
298
  };
@@ -5,69 +5,72 @@ import { usePersistedStorage } from '../persist/usePersistedStorage';
5
5
  import { useTableStoreConfig } from '../types/tableStore.types';
6
6
 
7
7
  export const tablePaginationStoreBody = () => {
8
- const page = ref(1);
9
- const size = ref(10);
10
- const next = ref(false);
8
+ const page = ref(1);
9
+ const size = ref(10);
10
+ const next = ref(false);
11
11
 
12
- const updatePage = (newPage: number) => {
13
- page.value = newPage;
14
- };
12
+ const updatePage = (newPage: number) => {
13
+ page.value = newPage;
14
+ };
15
15
 
16
- const updateSize = (newSize: number) => {
17
- size.value = newSize;
18
- };
16
+ const updateSize = (newSize: number) => {
17
+ size.value = newSize;
18
+ };
19
19
 
20
- const $reset = () => {
21
- page.value = 1;
22
- size.value = 10;
23
- next.value = false;
24
- };
20
+ const $reset = () => {
21
+ page.value = 1;
22
+ size.value = 10;
23
+ next.value = false;
24
+ };
25
25
 
26
- const setupPersistence = () => {
27
- const { restore: restorePage } = usePersistedStorage({
28
- name: 'page',
29
- value: page,
30
- onRestore: async (restore, name) => {
31
- const value = await restore(name);
32
- const numValue = +value;
33
- if (numValue) page.value = numValue;
34
- },
35
- });
26
+ const setupPersistence = () => {
27
+ const { restore: restorePage } = usePersistedStorage({
28
+ name: 'page',
29
+ value: page,
30
+ onRestore: async (restore, name) => {
31
+ const value = await restore(name);
32
+ const numValue = +value;
33
+ if (numValue) page.value = numValue;
34
+ },
35
+ });
36
36
 
37
- const { restore: restoreSize } = usePersistedStorage({
38
- name: 'size',
39
- value: size,
40
- onRestore: async (restore, name) => {
41
- const value = await restore(name);
42
- const numValue = +value;
43
- if (numValue) size.value = numValue;
44
- },
45
- });
37
+ const { restore: restoreSize } = usePersistedStorage({
38
+ name: 'size',
39
+ value: size,
40
+ onRestore: async (restore, name) => {
41
+ const value = await restore(name);
42
+ const numValue = +value;
43
+ if (numValue) size.value = numValue;
44
+ },
45
+ });
46
46
 
47
- return Promise.allSettled([restorePage(), restoreSize()]);
48
- };
47
+ return Promise.allSettled([
48
+ restorePage(),
49
+ restoreSize(),
50
+ ]);
51
+ };
49
52
 
50
- return {
51
- page,
52
- size,
53
- next,
53
+ return {
54
+ page,
55
+ size,
56
+ next,
54
57
 
55
- updatePage,
56
- updateSize,
58
+ updatePage,
59
+ updateSize,
57
60
 
58
- setupPersistence,
59
- $reset,
60
- };
61
+ setupPersistence,
62
+ $reset,
63
+ };
61
64
  };
62
65
 
63
66
  export const createTablePaginationStore = <Entity>(
64
- namespace: string,
65
- config: useTableStoreConfig<Entity>,
67
+ namespace: string,
68
+ config: useTableStoreConfig<Entity>,
66
69
  ) => {
67
- const id = `${namespace}/pagination`;
68
- return createDatalistStore({
69
- storeBody: tablePaginationStoreBody,
70
- namespace: id,
71
- config,
72
- });
70
+ const id = `${namespace}/pagination`;
71
+ return createDatalistStore({
72
+ storeBody: tablePaginationStoreBody,
73
+ namespace: id,
74
+ config,
75
+ });
73
76
  };