@webitel/ui-datalist 1.0.11 → 1.0.13

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 (167) hide show
  1. package/package.json +7 -5
  2. package/src/index.ts +1 -1
  3. package/src/{filter-presets → modules/filter-presets}/components/_shared/preset-filters-preview.vue +16 -7
  4. package/src/{filter-presets → modules/filter-presets}/components/apply-preset/apply-preset-action.vue +9 -11
  5. package/src/{filter-presets → modules/filter-presets}/components/apply-preset/preset-preview.vue +13 -7
  6. package/src/{filter-presets → modules/filter-presets}/components/save-preset/save-preset-action.vue +8 -6
  7. package/src/{filter-presets → modules/filter-presets}/components/save-preset/save-preset-popup.vue +6 -1
  8. package/src/{filter-presets → modules/filter-presets}/stores/createFilterPresetsStore.ts +1 -1
  9. package/src/{filters/types/Filter.d.ts → modules/filters/classes/Filter.ts} +20 -3
  10. package/src/{filters → modules/filters}/classes/FiltersManager.ts +72 -5
  11. package/src/modules/filters/components/config/dynamic-filter-config-form-value-input.vue +27 -0
  12. package/src/{filters → modules/filters}/components/config/dynamic-filter-config-form.vue +46 -23
  13. package/src/{filters → modules/filters}/components/dynamic-filter-add-action.vue +4 -6
  14. package/src/{filters → modules/filters}/components/preview/dynamic-filter-preview.vue +29 -27
  15. package/src/{filters → modules/filters}/components/search-bar/dynamic-filter-search.vue +2 -2
  16. package/src/{filters → modules/filters}/components/search-bar/types/DynamicFilterSearch.d.ts +2 -2
  17. package/src/{filters → modules/filters}/components/table-filters-panel.vue +37 -44
  18. package/src/modules/filters/composables/useFilterConfigsToolkit.ts +136 -0
  19. package/src/{filters → modules/filters}/createTableFiltersStore.ts +4 -2
  20. package/src/{filters → modules/filters}/index.ts +12 -13
  21. package/src/modules/filters/modules/filterConfig/classes/FilterConfig.ts +75 -0
  22. package/src/modules/filters/modules/filterConfig/classes/createFilterConfig.ts +35 -0
  23. package/src/modules/filters/modules/filterConfig/components/_custom/Readme.md +9 -0
  24. package/src/modules/filters/modules/filterConfig/components/_custom/index.ts +69 -0
  25. package/src/modules/filters/modules/filterConfig/components/_custom/type-extension-filter-value-field.vue +61 -0
  26. package/src/modules/filters/modules/filterConfig/components/_custom/type-extension-filter-value-preview.vue +18 -0
  27. package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/_shared/has-options/has-option-filter-value-field.vue +1 -1
  28. package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/amd-result/amd-result-filter-value-field.vue +1 -1
  29. package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/call-direction/call-direction-filter-value-field.vue +2 -2
  30. package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-assignee/case-assignee-filter-value-field.vue +7 -2
  31. package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-assignee/case-assignee-filter-value-preview.vue +1 -1
  32. package/src/modules/filters/modules/filterConfig/components/case-assignee/index.ts +30 -0
  33. package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/contact-group/contact-group-filter-value-preview.vue +1 -1
  34. package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/hangup-cause/hangup-cause-filter-value-field.vue +1 -1
  35. package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/has-attachment/has-attachment-filter-value-preview.vue +1 -1
  36. package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/has-file/has-file-filter-value-field.vue +3 -2
  37. package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/has-file/has-file-filter-value-preview.vue +1 -1
  38. package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/has-rating/has-rating-filter-value-field.vue +3 -2
  39. package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/has-rating/has-rating-filter-value-preview.vue +1 -1
  40. package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/has-transcription/has-transcription-filter-value-field.vue +3 -2
  41. package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/has-transcription/has-transcription-filter-value-preview.vue +1 -1
  42. package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/index.ts +10 -14
  43. package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/tag/tag-filter-value-field.vue +2 -2
  44. package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/tag/tag-filter-value-preview.vue +2 -2
  45. package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/talk-duration/talk-duration-filter-value-preview.vue +1 -1
  46. package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/total-duration/total-duration-filter-value-preview.vue +1 -1
  47. package/src/{filters/components/filter-options/_shared → modules/filters/modules/filterConfig}/composables/booleanFilterToolkit.ts +2 -1
  48. package/src/{filters → modules/filters/modules/filterConfig}/enums/FilterOption.ts +10 -10
  49. package/src/{filters/enums/amd-result-options.ts → modules/filters/modules/filterConfig/enums/options/AMDResultOptions.ts} +1 -1
  50. package/src/{filters/enums/boolean-options.ts → modules/filters/modules/filterConfig/enums/options/BooleanFilterOptions.ts} +2 -1
  51. package/src/{filters/enums/direction-options.ts → modules/filters/modules/filterConfig/enums/options/CallDirectionFilterOptions.ts} +1 -1
  52. package/src/modules/filters/modules/filterConfig/enums/options/CallHistoryTagFilterOptions.ts +8 -0
  53. package/src/{filters/enums/hangup-cause-options.ts → modules/filters/modules/filterConfig/enums/options/HangupCauseFilterOptions.ts} +1 -1
  54. package/src/{filters → modules/filters}/scripts/utils.ts +1 -1
  55. package/src/filters/classes/Filter.ts +0 -30
  56. package/src/filters/classes/FilterStorage.ts +0 -34
  57. package/src/filters/classes/FilterStorageOptions.d.ts +0 -6
  58. package/src/filters/components/filter-options/_shared/types/BooleanFilter.ts +0 -1
  59. package/src/filters/components/filter-options/contact/config.js +0 -3
  60. package/src/filters/enums/tag-options.ts +0 -8
  61. package/src/filters/types/FiltersManager.d.ts +0 -76
  62. /package/src/{filter-presets/api/PresetQuery.api.ts → modules/filter-presets/api/PresetQuery.ts} +0 -0
  63. /package/src/{filter-presets → modules/filter-presets}/components/_shared/input-fields/preset-description-field.vue +0 -0
  64. /package/src/{filter-presets → modules/filter-presets}/components/_shared/input-fields/preset-name-field.vue +0 -0
  65. /package/src/{filter-presets → modules/filter-presets}/components/save-preset/overwrite-preset-popup.vue +0 -0
  66. /package/src/{filter-presets → modules/filter-presets}/index.ts +0 -0
  67. /package/src/{filter-presets → modules/filter-presets}/stores/headers/headers.ts +0 -0
  68. /package/src/{filters → modules/filters}/components/config/dynamic-filter-config-form-label.vue +0 -0
  69. /package/src/{filters → modules/filters}/components/config/dynamic-filter-config-view.vue +0 -0
  70. /package/src/{filters → modules/filters}/components/dynamic-filter-panel-wrapper.vue +0 -0
  71. /package/src/{filters → modules/filters}/components/preview/dynamic-filter-preview-info.vue +0 -0
  72. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/_shared/date-time-filter/date-time-filter-value-field.vue +0 -0
  73. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/_shared/durations/duration-filter-value-field.vue +0 -0
  74. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/_shared/lookup-filter-preview/lookup-filter-value-preview.vue +0 -0
  75. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/agent/agent-filter-value-field.vue +0 -0
  76. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/agent/agent-filter-value-preview.vue +0 -0
  77. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/agent/config.js +0 -0
  78. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/amd-result/amd-result-filter-value-preview.vue +0 -0
  79. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/call-direction/call-direction-filter-value-preview.vue +0 -0
  80. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-actual-reaction-time/case-actual-reaction-time-filter-value-field.vue +0 -0
  81. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-actual-reaction-time/case-actual-reaction-time-filter-value-preview.vue +0 -0
  82. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-actual-resolution-time/case-actual-resolution-time-filter-value-field.vue +0 -0
  83. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-actual-resolution-time/case-actual-resolution-time-filter-value-preview.vue +0 -0
  84. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-author/case-author-filter-value-field.vue +0 -0
  85. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-author/case-author-filter-value-preview.vue +0 -0
  86. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-author/config.js +0 -0
  87. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-close-reason-groups/case-close-reason-groups-filter-value-field.vue +0 -0
  88. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-close-reason-groups/case-close-reason-groups-filter-value-preview.vue +0 -0
  89. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-close-reason-groups/config.js +0 -0
  90. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-impacted/case-impacted-filter-value-field.vue +0 -0
  91. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-impacted/case-impacted-filter-value-preview.vue +0 -0
  92. /package/src/{filters/components/filter-options/case-assignee → modules/filters/modules/filterConfig/components/case-impacted}/config.js +0 -0
  93. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-priority/case-priority-filter-value-field.vue +0 -0
  94. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-priority/case-priority-filter-value-preview.vue +0 -0
  95. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-priority/config.js +0 -0
  96. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-reaction-time/case-reaction-time-filter-value-field.vue +0 -0
  97. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-reaction-time/case-reaction-time-filter-value-preview.vue +0 -0
  98. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-reporter/case-reporter-filter-value-field.vue +0 -0
  99. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-reporter/case-reporter-filter-value-preview.vue +0 -0
  100. /package/src/{filters/components/filter-options/case-impacted → modules/filters/modules/filterConfig/components/case-reporter}/config.js +0 -0
  101. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-resolution-time/case-resolution-time-filter-value-field.vue +0 -0
  102. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-resolution-time/case-resolution-time-filter-value-preview.vue +0 -0
  103. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-service/case-service-filter-value-field.vue +0 -0
  104. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-service/case-service-filter-value-preview.vue +0 -0
  105. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-service/config.js +0 -0
  106. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-sla/case-sla-filter-value-field.vue +0 -0
  107. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-sla/case-sla-filter-value-preview.vue +0 -0
  108. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-sla/config.js +0 -0
  109. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-sla-condition/case-sla-condition-filter-value-field.vue +0 -0
  110. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-sla-condition/case-sla-condition-filter-value-preview.vue +0 -0
  111. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-sla-condition/config.js +0 -0
  112. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-source/case-source-filter-value-field.vue +0 -0
  113. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-source/case-source-filter-value-preview.vue +0 -0
  114. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-source/config.js +0 -0
  115. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-status/case-status-filter-value-field.vue +0 -0
  116. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-status/case-status-filter-value-preview.vue +0 -0
  117. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/case-status/config.js +0 -0
  118. /package/src/{filters/components/filter-options/case-reporter → modules/filters/modules/filterConfig/components/contact}/config.js +0 -0
  119. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/contact/contact-filter-value-field.vue +0 -0
  120. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/contact/contact-filter-value-preview.vue +0 -0
  121. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/contact-group/config.js +0 -0
  122. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/contact-group/contact-group-filter-value-field.vue +0 -0
  123. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/created-at/created-at-filter-value-field.vue +0 -0
  124. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/created-at/created-at-filter-value-preview.vue +0 -0
  125. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/created-at-from/created-at-from-filter-value-field.vue +0 -0
  126. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/created-at-from/created-at-from-filter-value-preview.vue +0 -0
  127. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/created-at-to/created-at-to-filter-value-field.vue +0 -0
  128. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/created-at-to/created-at-to-filter-value-preview.vue +0 -0
  129. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/gateway/config.js +0 -0
  130. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/gateway/gateway-filter-value-field.vue +0 -0
  131. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/gateway/gateway-filter-value-preview.vue +0 -0
  132. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/grantee/config.js +0 -0
  133. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/grantee/grantee-filter-value-field.vue +0 -0
  134. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/grantee/grantee-filter-value-preview.vue +0 -0
  135. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/hangup-cause/hangup-cause-filter-value-preview.vue +0 -0
  136. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/has-attachment/has-attachment-filter-value-field.vue +0 -0
  137. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/queue/config.js +0 -0
  138. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/queue/queue-filter-value-field.vue +0 -0
  139. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/queue/queue-filter-value-preview.vue +0 -0
  140. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/rated-by/config.js +0 -0
  141. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/rated-by/rated-by-filter-value-field.vue +0 -0
  142. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/rated-by/rated-by-filter-value-preview.vue +0 -0
  143. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/rating/rating-from-to-filter-value-field.vue +0 -0
  144. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/rating/rating-from-to-filter-value-preview.vue +0 -0
  145. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/score/score-from-to-filter-value-field.vue +0 -0
  146. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/score/score-from-to-filter-value-preview.vue +0 -0
  147. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/talk-duration/TalkDurationFilter.d.ts +0 -0
  148. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/talk-duration/talk-duration-filter-value-field.vue +0 -0
  149. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/team/config.js +0 -0
  150. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/team/team-filter-value-field.vue +0 -0
  151. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/team/team-filter-value-preview.vue +0 -0
  152. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/total-duration/TotalDurationFilter.d.ts +0 -0
  153. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/total-duration/total-duration-filter-value-field.vue +0 -0
  154. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/user/config.js +0 -0
  155. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/user/user-filter-value-field.vue +0 -0
  156. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/user/user-filter-value-preview.vue +0 -0
  157. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/variable/variable-filter-value-field.vue +0 -0
  158. /package/src/{filters/components/filter-options → modules/filters/modules/filterConfig/components}/variable/variable-filter-value-preview.vue +0 -0
  159. /package/src/{filters/components/filter-options/_shared → modules/filters/modules/filterConfig}/composables/useFromToSecToPreviewTime.ts +0 -0
  160. /package/src/{headers → modules/headers}/createTableHeadersStore.ts +0 -0
  161. /package/src/{pagination → modules/pagination}/createTablePaginationStore.ts +0 -0
  162. /package/src/{persist → modules/persist}/PersistedStorage.types.ts +0 -0
  163. /package/src/{persist → modules/persist}/useLocalStoragePersistedStorage.ts +0 -0
  164. /package/src/{persist → modules/persist}/usePersistedStorage.ts +0 -0
  165. /package/src/{persist → modules/persist}/useRoutePersistedStorage.ts +0 -0
  166. /package/src/{table → modules/table}/createTableStore.store.ts +0 -0
  167. /package/src/{types → modules/types}/tableStore.types.ts +0 -0
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@webitel/ui-datalist",
3
- "version": "1.0.11",
3
+ "version": "1.0.13",
4
4
  "description": "Toolkit for building data lists in webitel ui system",
5
5
  "scripts": {
6
+ "build:types": "vue-tsc -p ./tsconfig.build.json",
6
7
  "lint:fix": "eslint --fix ./src && prettier --write --check ./src",
7
8
  "lint:fix-staged": "npx lint-staged",
8
9
  "lint:package": "publint",
@@ -12,14 +13,14 @@
12
13
  },
13
14
  "type": "module",
14
15
  "main": "./src/index.ts",
15
- "types": "./src/index.d.ts",
16
+ "types": "./dist/types/index.d.ts",
16
17
  "workspaces": [
17
18
  "../../"
18
19
  ],
19
20
  "exports": {
20
21
  ".": "./src/index.ts",
21
- "./filters": "./src/filters/index.ts",
22
- "./presets": "./src/filter-presets/index.ts"
22
+ "./filters": "./src/modules/filters/index.ts",
23
+ "./presets": "./src/modules/filter-presets/index.ts"
23
24
  },
24
25
  "files": [
25
26
  "src/*",
@@ -35,7 +36,8 @@
35
36
  "dependencies": {
36
37
  "@vuelidate/core": "^2.0.3",
37
38
  "@vuelidate/validators": "^2.0.4",
38
- "@webitel/ui-sdk": "^25.4.59"
39
+ "@webitel/ui-sdk": "^25.4.66",
40
+ "@webitel/styleguide": "^24.12.26"
39
41
  },
40
42
  "devDependencies": {
41
43
  "vue-tsc": "^2.2.8",
package/src/index.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { createTableStore } from './table/createTableStore.store';
1
+ import { createTableStore } from './modules/table/createTableStore.store';
2
2
 
3
3
  export { createTableStore };
@@ -6,9 +6,10 @@
6
6
  <dynamic-filter-panel-wrapper size="sm">
7
7
  <template #filters>
8
8
  <dynamic-filter-preview
9
- v-for="filter of props.filters"
9
+ v-for="({ filter, filterConfig }) of appliedFilterToFilterConfigMappings"
10
10
  :key="filter.name"
11
11
  :filter="filter"
12
+ :filter-config="filterConfig"
12
13
  readonly
13
14
  />
14
15
  </template>
@@ -20,17 +21,25 @@
20
21
  import { WtLabel } from '@webitel/ui-sdk/components';
21
22
  import { useI18n } from 'vue-i18n';
22
23
 
23
- import type { IFilter } from '../../../filters';
24
+ import type {IFiltersManager} from '../../../filters';
24
25
  import DynamicFilterPanelWrapper from '../../../filters/components/dynamic-filter-panel-wrapper.vue';
25
26
  import DynamicFilterPreview from '../../../filters/components/preview/dynamic-filter-preview.vue';
27
+ import { useFilterConfigsToolkit } from "../../../filters/composables/useFilterConfigsToolkit";
28
+ import {TFilterConfig} from "../../../filters/modules/filterConfig/classes/FilterConfig";
26
29
 
27
- type Props = {
28
- filters: IFilter[];
29
- };
30
-
31
- const props = defineProps<Props>();
30
+ const props = defineProps<{
31
+ filtersManager: IFiltersManager;
32
+ filterConfigs: TFilterConfig[];
33
+ }>();
32
34
 
33
35
  const { t } = useI18n();
36
+
37
+ const {
38
+ appliedFilterToFilterConfigMappings,
39
+ } = useFilterConfigsToolkit({
40
+ filterOptions: props.filterConfigs,
41
+ filtersManager: props.filtersManager,
42
+ });
34
43
  </script>
35
44
 
36
45
  <style scoped></style>
@@ -32,9 +32,10 @@
32
32
  <preset-preview
33
33
  v-for="preset of dataList"
34
34
  :key="preset.id"
35
- collapsed
35
+ :filter-configs="props.filterConfigs"
36
36
  :is-selected="preset === selectedPreset"
37
37
  :preset="preset"
38
+ collapsed
38
39
  @preset:select="selectedPreset = preset"
39
40
  @preset:update="updatePreset"
40
41
  @preset:delete="() => deletePreset(preset)"
@@ -82,7 +83,8 @@ import { computed, inject, ref, watch } from 'vue';
82
83
  import { useI18n } from 'vue-i18n';
83
84
  import { EnginePresetQuery } from 'webitel-sdk';
84
85
 
85
- import PresetQueryAPI from '../../api/PresetQuery.api.ts';
86
+ import {TFilterConfig} from "../../../filters/modules/filterConfig/classes/FilterConfig";
87
+ import PresetQueryAPI from '../../api/PresetQuery.ts';
86
88
  import PresetPreview from './preset-preview.vue';
87
89
 
88
90
  const props = defineProps<{
@@ -91,11 +93,7 @@ const props = defineProps<{
91
93
  */
92
94
  namespace: string;
93
95
  usePresetsStore: Store;
94
- /**
95
- * @description
96
- * Is needed for preset to exclude filter values, not related to filters panel
97
- */
98
- filterOptions: FilterOption[];
96
+ filterConfigs: TFilterConfig[];
99
97
  }>();
100
98
 
101
99
  const emit = defineEmits<{
@@ -178,7 +176,7 @@ const updatePreset = async ({ preset, onSuccess, onFailure }) => {
178
176
  await PresetQueryAPI.update({
179
177
  item: { ...preset },
180
178
  id: preset.id,
181
- namespace: preset.namespace,
179
+ namespace: preset.preset?.namespace,
182
180
  });
183
181
  eventBus.$emit('notification', {
184
182
  type: 'success',
@@ -217,8 +215,8 @@ const deletePreset = async (preset: EnginePresetQuery) => {
217
215
  .apply-preset-main-content {
218
216
  display: flex;
219
217
  flex-direction: column;
220
- gap: var(--spacing-xs);
221
218
  height: 100%;
219
+ gap: var(--spacing-xs);
222
220
 
223
221
  .wt-empty {
224
222
  flex-grow: 1;
@@ -230,10 +228,10 @@ const deletePreset = async (preset: EnginePresetQuery) => {
230
228
  @extend %wt-scrollbar;
231
229
 
232
230
  display: flex;
231
+ overflow-y: auto;
233
232
  flex-direction: column;
234
- gap: var(--spacing-xs);
235
233
  max-height: 400px;
236
- overflow-y: auto;
234
+ gap: var(--spacing-xs);
237
235
  scrollbar-gutter: stable;
238
236
  }
239
237
  </style>
@@ -61,7 +61,10 @@
61
61
  @update:model-value="nameAlreadyExistsError = false"
62
62
  />
63
63
 
64
- <preset-filters-preview :filters="presetFilters" />
64
+ <preset-filters-preview
65
+ :filters-manager="filtersManager"
66
+ :filter-configs="props.filterConfigs"
67
+ />
65
68
 
66
69
  <preset-description-field
67
70
  v-model:model-value="editDraft.description"
@@ -86,6 +89,7 @@ import { computed, ref } from 'vue';
86
89
  import { EnginePresetQuery } from 'webitel-sdk';
87
90
 
88
91
  import { createFiltersManager } from '../../../filters';
92
+ import {TFilterConfig} from "../../../filters/modules/filterConfig/classes/FilterConfig";
89
93
  import PresetDescriptionField from '../_shared/input-fields/preset-description-field.vue';
90
94
  import PresetNameField from '../_shared/input-fields/preset-name-field.vue';
91
95
  import PresetFiltersPreview from '../_shared/preset-filters-preview.vue';
@@ -94,6 +98,7 @@ type Props = {
94
98
  preset: EnginePresetQuery;
95
99
  isSelected: boolean;
96
100
  collapsed: boolean;
101
+ filterConfigs: TFilterConfig[];
97
102
  };
98
103
 
99
104
  const props = defineProps<Props>();
@@ -110,14 +115,15 @@ const emit = defineEmits<{
110
115
  'preset:delete': [EnginePresetQuery];
111
116
  }>();
112
117
 
113
- const presetFilters = computed(() => {
114
- const snapshot = props.preset?.preset?.['filtersManager.toString'];
115
- if (!snapshot) return [];
116
-
118
+ const filtersManager = computed(() => {
117
119
  const filtersManager = createFiltersManager();
118
- filtersManager.fromString(snapshot);
119
120
 
120
- return filtersManager.getFiltersList();
121
+ const snapshot = props.preset?.preset?.['filtersManager.toString'];
122
+ if (snapshot) {
123
+ filtersManager.fromString(snapshot);
124
+ }
125
+
126
+ return filtersManager;
121
127
  });
122
128
 
123
129
  const editMode = ref(false);
@@ -15,6 +15,7 @@
15
15
  "
16
16
  :shown="true /* coz visibility is controlled by v-if*/"
17
17
  :filters-manager="localFiltersManager"
18
+ :filter-configs="props.filterConfigs"
18
19
  :namespace="namespace"
19
20
  @submit="handlePresetSubmit"
20
21
  @close="showSaveForm = false"
@@ -37,15 +38,15 @@ import { useI18n } from 'vue-i18n';
37
38
  import { EnginePresetQuery } from 'webitel-sdk';
38
39
 
39
40
  import {
40
- createFiltersManager,
41
- FilterOption,
41
+ createFiltersManager, FilterName,
42
42
  IFiltersManager,
43
43
  } from '../../../filters';
44
+ import {TFilterConfig} from "../../../filters/modules/filterConfig/classes/FilterConfig";
44
45
  import {
45
46
  addPreset,
46
47
  getPresetList,
47
48
  updatePreset,
48
- } from '../../api/PresetQuery.api.ts';
49
+ } from '../../api/PresetQuery';
49
50
  import OverwritePresetPopup from './overwrite-preset-popup.vue';
50
51
  import SavePresetPopup, { SubmitConfig } from './save-preset-popup.vue';
51
52
 
@@ -62,9 +63,10 @@ const props = defineProps<{
62
63
  filtersManager: IFiltersManager;
63
64
  /**
64
65
  * @description
65
- * Is needed for preset to exclude filter values, not related to filters panel
66
+ * include in preset only filter values related to filters panel
66
67
  */
67
- filterOptions: FilterOption[];
68
+ filtersIncluded: FilterName[];
69
+ filterConfigs: TFilterConfig[];
68
70
  }>();
69
71
 
70
72
  const eventBus = inject('$eventBus');
@@ -76,7 +78,7 @@ watch(
76
78
  () => {
77
79
  localFiltersManager.reset();
78
80
  localFiltersManager.fromString(
79
- props.filtersManager.toString({ include: props.filterOptions }),
81
+ props.filtersManager.toString({ include: props.filtersIncluded }),
80
82
  );
81
83
  },
82
84
  { immediate: true },
@@ -24,7 +24,10 @@
24
24
  />
25
25
  </form>
26
26
 
27
- <preset-filters-preview :filters="appliedFilters" />
27
+ <preset-filters-preview
28
+ :filters-manager="props.filtersManager"
29
+ :filter-configs="props.filterConfigs"
30
+ />
28
31
  </template>
29
32
 
30
33
  <template #actions>
@@ -54,6 +57,7 @@ import { useI18n } from 'vue-i18n';
54
57
  import { EnginePresetQuery } from 'webitel-sdk';
55
58
 
56
59
  import type { IFiltersManager } from '../../../filters';
60
+ import {TFilterConfig} from "../../../filters/modules/filterConfig/classes/FilterConfig";
57
61
  import PresetDescriptionField from '../_shared/input-fields/preset-description-field.vue';
58
62
  import PresetNameField from '../_shared/input-fields/preset-name-field.vue';
59
63
  import PresetFiltersPreview from '../_shared/preset-filters-preview.vue';
@@ -70,6 +74,7 @@ const props = defineProps<{
70
74
  * is needed here for `.toString()`
71
75
  */
72
76
  filtersManager: IFiltersManager;
77
+ filterConfigs: TFilterConfig[];
73
78
  }>();
74
79
 
75
80
  const emit = defineEmits<{
@@ -1,7 +1,7 @@
1
1
  import { EnginePresetQuery } from 'webitel-sdk';
2
2
 
3
3
  import { createTableStore } from '../../table/createTableStore.store.ts';
4
- import PresetQueryAPI from '../api/PresetQuery.api.ts';
4
+ import PresetQueryAPI from '../api/PresetQuery.ts';
5
5
  import { headers } from './headers/headers.ts';
6
6
 
7
7
  export const createFilterPresetsStore = (namespace = 'presets') => {
@@ -45,7 +45,24 @@ export interface IFilter {
45
45
  set: (data: FilterData) => IFilter;
46
46
  }
47
47
 
48
- export interface FilterNameSelectRepresentation {
49
- name: string;
50
- value: FilterName;
48
+ export class Filter implements IFilter {
49
+ readonly name: FilterName;
50
+ label: FilterLabel;
51
+ value: FilterValue;
52
+
53
+ constructor(
54
+ { name, value, label }: FilterInitParams,
55
+ public payload: object | undefined,
56
+ public config: FilterConfig,
57
+ ) {
58
+ this.name = name;
59
+ this.value = value;
60
+ this.label = label;
61
+ }
62
+
63
+ set({ value, label }: { value?: FilterValue; label?: FilterLabel }): IFilter {
64
+ this.value = value;
65
+ this.label = label;
66
+ return this;
67
+ }
51
68
  }
@@ -5,8 +5,9 @@ import {
5
5
  filterNameFromSnapshotKey,
6
6
  filterValuePropFromSnapshotKey,
7
7
  filterValueToSnapshotKey,
8
- } from '../scripts/utils.ts';
9
- import type {
8
+ } from '../scripts/utils';
9
+ import {
10
+ Filter,
10
11
  FilterConfig,
11
12
  FilterData,
12
13
  FilterInitParams,
@@ -14,9 +15,75 @@ import type {
14
15
  FilterName,
15
16
  FilterValue,
16
17
  IFilter,
17
- } from '../types/Filter';
18
- import { FiltersManagerConfig, IFiltersManager } from '../types/FiltersManager';
19
- import { Filter } from './Filter.ts';
18
+ } from './Filter';
19
+
20
+ export interface IFiltersManager {
21
+ filters: Map<FilterName, IFilter>;
22
+
23
+ hasFilter: (name: FilterName) => boolean;
24
+ getFilter: (name: FilterName) => IFilter;
25
+ addFilter: (
26
+ params: FilterInitParams,
27
+ payload?: object,
28
+ config?: FilterConfig,
29
+ ) => IFilter;
30
+ updateFilter: ({
31
+ name,
32
+ }: {
33
+ name: FilterName;
34
+ value?: FilterValue;
35
+ label?: FilterLabel;
36
+ }) => IFilter;
37
+ deleteFilter: (name: FilterName) => IFilter;
38
+
39
+ /**
40
+ * Converts filters data to String, that can be stored
41
+ */
42
+ toString: () => string;
43
+
44
+ /**
45
+ * Restores filters from string
46
+ */
47
+ fromString: (snapshotStr: string) => void;
48
+
49
+ /**
50
+ * deletes filters
51
+ * If include/exclude are not provided, all filters will be deleted
52
+ */
53
+ reset: ({
54
+ include,
55
+ exclude,
56
+ }?: {
57
+ include?: FilterName[];
58
+ exclude?: FilterName[];
59
+ }) => void;
60
+
61
+ /**
62
+ * @returns Array<FilterName>
63
+ */
64
+ getAllKeys: () => FilterName[];
65
+
66
+ /**
67
+ * @returns { FilterName: FilterValue }
68
+ */
69
+
70
+ getAllValues: () => { [name: FilterName]: FilterValue };
71
+ /**
72
+ * @returns Array<IFilter>
73
+ * @param include
74
+ * @param exclude
75
+ */
76
+
77
+ getFiltersList: ({
78
+ include,
79
+ exclude,
80
+ }?: {
81
+ include?: FilterName[];
82
+ exclude?: FilterName[];
83
+ }) => IFilter[];
84
+ }
85
+
86
+ export type FiltersManagerConfig = FilterConfig;
20
87
 
21
88
  class FiltersManager implements IFiltersManager {
22
89
  filters = new Map<FilterName, IFilter>();
@@ -0,0 +1,27 @@
1
+ <template>
2
+ <component
3
+ :is="props.filterConfig.valueInputComponent"
4
+ v-model:model-value="filterValue"
5
+ :label="label"
6
+ :filter-config="props.filterConfig"
7
+ @update:invalid="emit('update:invalid', $event)"
8
+ />
9
+ </template>
10
+
11
+ <script setup lang="ts">
12
+ import {TFilterConfig} from "../../modules/filterConfig/classes/FilterConfig";
13
+
14
+ const filterValue = defineModel<unknown>();
15
+
16
+ const props = defineProps<{
17
+ filterConfig: TFilterConfig;
18
+ label?: string;
19
+ }>();
20
+
21
+ const emit = defineEmits<{
22
+ 'update:invalid': [boolean];
23
+ }>();
24
+ </script>
25
+
26
+ <style scoped>
27
+ </style>
@@ -4,10 +4,11 @@
4
4
  :clearable="false"
5
5
  :disabled="editMode"
6
6
  :label="t('webitelUI.filters.filterName')"
7
- :options="options"
7
+ :options="filterConfigOptions"
8
+ option-label="label"
8
9
  :value="filterName"
9
- track-by="value"
10
- use-value-from-options-by-prop="value"
10
+ track-by="name"
11
+ use-value-from-options-by-prop="name"
11
12
  @input="onFilterNameUpdate($event)"
12
13
  />
13
14
 
@@ -21,10 +22,11 @@
21
22
  onValueInvalidChange,
22
23
  }"
23
24
  >
24
- <component
25
- :is="FilterOptionToValueComponentMap[filterName]"
25
+ <dynamic-filter-config-form-value-input
26
+ v-if="filterName"
26
27
  :key="filterName"
27
28
  :model-value="filterValue"
29
+ :filter-config="selectedFilterConfig"
28
30
  :label="valueInputLabelText"
29
31
  @update:model-value="onValueChange"
30
32
  @update:invalid="onValueInvalidChange"
@@ -63,25 +65,28 @@ import deepcopy from 'deep-copy';
63
65
  import { computed, ref, watch } from 'vue';
64
66
  import { useI18n } from 'vue-i18n';
65
67
 
66
- import type {
67
- FilterInitParams,
68
- FilterNameSelectRepresentation,
69
- IFilter,
70
- } from '../../types/Filter';
71
- import { FilterOptionToValueComponentMap } from '../filter-options';
68
+ import {FilterInitParams, IFilter} from "../../classes/Filter";
69
+ import {BaseFilterConfig} from "../../modules/filterConfig/classes/FilterConfig";
72
70
  import DynamicFilterConfigFormLabel from './dynamic-filter-config-form-label.vue';
73
-
74
- interface AddModeProps {
75
- options: Array<FilterNameSelectRepresentation>;
76
- }
77
-
78
- interface EditModeProps {
79
- filter: IFilter;
80
- }
81
-
82
- type Props = AddModeProps | EditModeProps;
83
-
84
- const props = defineProps<Props>();
71
+ import DynamicFilterConfigFormValueInput from "./dynamic-filter-config-form-value-input.vue";
72
+
73
+ const props = defineProps<{
74
+ /**
75
+ * @description
76
+ * "Add" mode
77
+ */
78
+ filterConfigs?: BaseFilterConfig[];
79
+ /**
80
+ * @description
81
+ * "Edit" mode
82
+ */
83
+ filterConfig?: BaseFilterConfig;
84
+ /**
85
+ * @description
86
+ * Edited filter instance
87
+ */
88
+ filter?: IFilter;
89
+ }>();
85
90
 
86
91
  const emit = defineEmits<{
87
92
  submit: [FilterInitParams];
@@ -98,6 +103,24 @@ const editMode = !!props.filter;
98
103
 
99
104
  const invalid = ref(false);
100
105
 
106
+ const filterConfigOptions = computed(() => {
107
+ if (props.filterConfig) {
108
+ return [props.filterConfig];
109
+ }
110
+
111
+ return props.filterConfigs;
112
+ });
113
+
114
+ const selectedFilterConfig = computed(() => {
115
+ if (props.filterConfig) {
116
+ return props.filterConfig;
117
+ }
118
+
119
+ return filterConfigOptions.value.find((filterConfig) => {
120
+ return filterConfig.name === filterName.value;
121
+ });
122
+ });
123
+
101
124
  const onValueChange = (v) => {
102
125
  filterValue.value = v;
103
126
  };
@@ -18,7 +18,7 @@
18
18
  v-bind="{ tooltipSlotScope }"
19
19
  >
20
20
  <dynamic-filter-config-form
21
- :options="props.filterOptions"
21
+ :filter-configs="props.filterConfigs"
22
22
  @cancel="() => tooltipSlotScope.hide()"
23
23
  @submit="
24
24
  (payload) => submit(payload, { hide: tooltipSlotScope.hide })
@@ -33,15 +33,13 @@
33
33
  import { WtIconAction } from '@webitel/ui-sdk/components';
34
34
  import { useI18n } from 'vue-i18n';
35
35
 
36
- import type {
37
- FilterInitParams,
38
- FilterNameSelectRepresentation,
39
- } from '../types/Filter';
36
+ import {FilterInitParams} from "../classes/Filter";
37
+ import {BaseFilterConfig} from "../modules/filterConfig/classes/FilterConfig";
40
38
  import DynamicFilterConfigForm from './config/dynamic-filter-config-form.vue';
41
39
  import DynamicFilterConfigView from './config/dynamic-filter-config-view.vue';
42
40
 
43
41
  interface Props {
44
- filterOptions: FilterNameSelectRepresentation[];
42
+ filterConfigs: BaseFilterConfig[];
45
43
  showLabel?: boolean;
46
44
  }
47
45