@webitel/ui-sdk 25.4.27 → 25.4.29

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 (126) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/ui-sdk.js +2 -2
  3. package/dist/ui-sdk.umd.cjs +1 -1
  4. package/package.json +1 -1
  5. package/src/locale/en/en.js +27 -0
  6. package/src/locale/ru/ru.js +26 -0
  7. package/src/locale/ua/ua.js +26 -0
  8. package/src/mixins/validationMixin/useValidation.js +3 -0
  9. package/src/modules/Filters/v2/filter-presets/api/PresetQuery.api.ts +88 -102
  10. package/src/modules/Filters/v2/filter-presets/components/_shared/preset-filters-preview.vue +7 -8
  11. package/src/modules/Filters/v2/filter-presets/components/apply-preset/apply-preset-action.vue +20 -3
  12. package/src/modules/Filters/v2/filter-presets/components/save-preset/save-preset-action.vue +22 -3
  13. package/src/modules/Filters/v2/filters/components/{values → filter-options}/_shared/has-options/has-option-filter-value-field.vue +1 -1
  14. package/src/modules/Filters/v2/filters/components/{values → filter-options}/amd-result/amd-result-filter-value-field.vue +1 -1
  15. package/src/modules/Filters/v2/filters/components/{values → filter-options}/cause/cause-filter-value-field.vue +1 -1
  16. package/src/modules/Filters/v2/filters/components/{values → filter-options}/direction/direction-filter-value-field.vue +1 -1
  17. package/src/modules/Filters/v2/filters/components/{values → filter-options}/has-attachment/has-attachment-filter-value-preview.vue +1 -1
  18. package/src/modules/Filters/v2/filters/components/{values/index.js → filter-options/index.ts} +87 -0
  19. package/src/modules/Filters/v2/filters/components/{values → filter-options}/tag/tag-filter-value-field.vue +1 -1
  20. package/src/modules/Filters/v2/filters/enums/FilterOption.ts +43 -0
  21. package/src/modules/Filters/v2/filters/{components/enums → enums}/amd-result-options.ts +1 -1
  22. package/src/modules/Filters/v2/filters/{components/enums → enums}/boolean-options.ts +1 -1
  23. package/src/modules/Filters/v2/filters/{components/enums → enums}/hangup-cause-options.ts +1 -1
  24. package/src/modules/Filters/v2/filters/{components/enums → enums}/tag-options.ts +1 -1
  25. package/src/modules/Filters/v2/filters/components/values/filterComponentsMap.ts +0 -147
  26. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/_shared/composables/booleanFilterToolkit.ts +0 -0
  27. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/_shared/composables/useFromToSecToPreviewTime.ts +0 -0
  28. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/_shared/date-time-filter/date-time-filter-value-field.vue +0 -0
  29. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/_shared/durations/duration-filter-value-field.vue +0 -0
  30. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/_shared/types/BooleanFilter.ts +0 -0
  31. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/actual-reaction-time/actual-reaction-time-filter-value-field.vue +0 -0
  32. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/actual-reaction-time/actual-reaction-time-filter-value-preview.vue +0 -0
  33. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/actual-resolution-time/actual-resolution-time-filter-value-field.vue +0 -0
  34. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/actual-resolution-time/actual-resolution-time-filter-value-preview.vue +0 -0
  35. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/agent/agent-filter-value-field.vue +0 -0
  36. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/agent/agent-filter-value-preview.vue +0 -0
  37. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/agent/config.js +0 -0
  38. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/amd-result/amd-result-filter-value-preview.vue +0 -0
  39. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/assignee/assignee-filter-value-field.vue +0 -0
  40. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/assignee/assignee-filter-value-preview.vue +0 -0
  41. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/assignee/config.js +0 -0
  42. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/author/author-filter-value-field.vue +0 -0
  43. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/author/author-filter-value-preview.vue +0 -0
  44. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/author/config.js +0 -0
  45. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/cause/cause-filter-value-preview.vue +0 -0
  46. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/close-reason-groups-case/close-reason-groups-case-filter-value-field.vue +0 -0
  47. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/close-reason-groups-case/close-reason-groups-case-filter-value-preview.vue +0 -0
  48. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/close-reason-groups-case/config.js +0 -0
  49. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/contact/config.js +0 -0
  50. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/contact/contact-filter-value-field.vue +0 -0
  51. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/contact/contact-filter-value-preview.vue +0 -0
  52. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/contact-group/config.js +0 -0
  53. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/contact-group/contact-group-filter-value-field.vue +0 -0
  54. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/contact-group/contact-group-filter-value-preview.vue +0 -0
  55. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/created-at-from/created-at-from-filter-value-field.vue +0 -0
  56. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/created-at-from/created-at-from-filter-value-preview.vue +0 -0
  57. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/created-at-to/created-at-to-filter-value-field.vue +0 -0
  58. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/created-at-to/created-at-to-filter-value-preview.vue +0 -0
  59. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/direction/direction-filter-value-preview.vue +0 -0
  60. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/gateway/config.js +0 -0
  61. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/gateway/gateway-filter-value-field.vue +0 -0
  62. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/gateway/gateway-filter-value-preview.vue +0 -0
  63. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/grantee/config.js +0 -0
  64. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/grantee/grantee-filter-value-field.vue +0 -0
  65. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/grantee/grantee-filter-value-preview.vue +0 -0
  66. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/has-attachment/has-attachment-filter-value-field.vue +0 -0
  67. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/has-file/has-file-filter-value-field.vue +0 -0
  68. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/has-file/has-file-filter-value-preview.vue +0 -0
  69. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/has-rating/has-rating-filter-value-field.vue +0 -0
  70. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/has-rating/has-rating-filter-value-preview.vue +0 -0
  71. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/has-transcription/has-transcription-filter-value-field.vue +0 -0
  72. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/has-transcription/has-transcription-filter-value-preview.vue +0 -0
  73. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/impacted/config.js +0 -0
  74. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/impacted/impacted-filter-value-field.vue +0 -0
  75. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/impacted/impacted-filter-value-preview.vue +0 -0
  76. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/priority-case/config.js +0 -0
  77. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/priority-case/priority-case-filter-value-field.vue +0 -0
  78. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/priority-case/priority-case-filter-value-preview.vue +0 -0
  79. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/queue/config.js +0 -0
  80. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/queue/queue-filter-value-field.vue +0 -0
  81. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/queue/queue-filter-value-preview.vue +0 -0
  82. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/rated-by/config.js +0 -0
  83. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/rated-by/rated-by-filter-value-field.vue +0 -0
  84. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/rated-by/rated-by-filter-value-preview.vue +0 -0
  85. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/rating/rating-from-to-filter-value-field.vue +0 -0
  86. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/rating/rating-from-to-filter-value-preview.vue +0 -0
  87. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/reaction-time/reaction-time-filter-value-field.vue +0 -0
  88. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/reaction-time/reaction-time-filter-value-preview.vue +0 -0
  89. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/reporter/config.js +0 -0
  90. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/reporter/reporter-filter-value-field.vue +0 -0
  91. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/reporter/reporter-filter-value-preview.vue +0 -0
  92. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/resolution-time/resolution-time-filter-value-field.vue +0 -0
  93. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/resolution-time/resolution-time-filter-value-preview.vue +0 -0
  94. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/score/score-from-to-filter-value-field.vue +0 -0
  95. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/score/score-from-to-filter-value-preview.vue +0 -0
  96. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/service-case/config.js +0 -0
  97. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/service-case/service-case-filter-value-field.vue +0 -0
  98. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/service-case/service-case-filter-value-preview.vue +0 -0
  99. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/sla/config.js +0 -0
  100. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/sla/sla-filter-value-field.vue +0 -0
  101. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/sla/sla-filter-value-preview.vue +0 -0
  102. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/sla-condition/config.js +0 -0
  103. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/sla-condition/sla-condition-filter-value-field.vue +0 -0
  104. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/sla-condition/sla-condition-filter-value-preview.vue +0 -0
  105. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/source-case/config.js +0 -0
  106. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/source-case/source-case-filter-value-field.vue +0 -0
  107. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/source-case/source-case-filter-value-preview.vue +0 -0
  108. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/status-case/config.js +0 -0
  109. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/status-case/status-case-filter-value-field.vue +0 -0
  110. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/status-case/status-case-filter-value-preview.vue +0 -0
  111. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/tag/tag-filter-value-preview.vue +0 -0
  112. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/talk-duration/TalkDurationFilter.d.ts +0 -0
  113. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/talk-duration/talk-duration-filter-value-field.vue +0 -0
  114. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/talk-duration/talk-duration-filter-value-preview.vue +0 -0
  115. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/team/config.js +0 -0
  116. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/team/team-filter-value-field.vue +0 -0
  117. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/team/team-filter-value-preview.vue +0 -0
  118. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/total-duration/TotalDurationFilter.d.ts +0 -0
  119. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/total-duration/total-duration-filter-value-field.vue +0 -0
  120. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/total-duration/total-duration-filter-value-preview.vue +0 -0
  121. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/user/config.js +0 -0
  122. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/user/user-filter-value-field.vue +0 -0
  123. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/user/user-filter-value-preview.vue +0 -0
  124. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/variable/variable-filter-value-field.vue +0 -0
  125. /package/src/modules/Filters/v2/filters/components/{values → filter-options}/variable/variable-filter-value-preview.vue +0 -0
  126. /package/src/modules/Filters/v2/filters/{components/enums → enums}/direction-options.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webitel/ui-sdk",
3
- "version": "25.04.27",
3
+ "version": "25.4.29",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "dev": "vite",
@@ -631,9 +631,36 @@ export default {
631
631
  preset: 'Preset | Presets',
632
632
  overwritePresetTitle: 'A preset with this name already exists',
633
633
  overwritePresetText: 'A preset with this name already exists. Do you want to replace it?',
634
+ notifications: {
635
+ success: {
636
+ /* suka ebuchij linked(,param) ne praciuje */
637
+ update: ({ linked }) => {
638
+ return linked('systemNotifications.success.update', {
639
+ entity: linked('filters.presets.preset'),
640
+ });
641
+ },
642
+ create: ({ linked }) => {
643
+ return linked('systemNotifications.success.create', {
644
+ entity: linked('filters.presets.preset'),
645
+ });
646
+ },
647
+ delete: ({ linked }) => {
648
+ return linked('systemNotifications.success.delete', {
649
+ entity: linked('filters.presets.preset'),
650
+ });
651
+ },
652
+ },
653
+ },
634
654
  },
635
655
  },
636
656
  },
657
+ systemNotifications: {
658
+ success: {
659
+ update: ({ named }) => `The ${named('entity')} was updated`,
660
+ create: ({ named }) => `The ${named('entity')} was saved`,
661
+ delete: ({ named }) => `The ${named('entity')} was deleted`,
662
+ },
663
+ },
637
664
  errorNotifications: {
638
665
  chatHistoryApi: 'There was an error loading the chat history',
639
666
  markChatProcessed: 'Failed to move the chat to “Closed”',
@@ -628,9 +628,35 @@ export default {
628
628
  preset: 'Пресет | Пресеты',
629
629
  overwritePresetTitle: 'Пресет с таким названием уже существует',
630
630
  overwritePresetText: 'Пресет с таким названием уже существует. Хотите его заменить?',
631
+ notifications: {
632
+ success: {
633
+ update: ({ linked }) => {
634
+ return linked('systemNotifications.success.update', {
635
+ entity: linked('filters.presets.preset'),
636
+ });
637
+ },
638
+ create: ({ linked }) => {
639
+ return linked('systemNotifications.success.create', {
640
+ entity: linked('filters.presets.preset'),
641
+ });
642
+ },
643
+ delete: ({ linked }) => {
644
+ return linked('systemNotifications.success.delete', {
645
+ entity: linked('filters.presets.preset'),
646
+ });
647
+ },
648
+ },
649
+ },
631
650
  },
632
651
  },
633
652
  },
653
+ systemNotifications: {
654
+ success: {
655
+ update: ({ named }) => `${named('entity')} был обновлён`,
656
+ create: ({ named }) => `${named('entity')} был сохранён`,
657
+ delete: ({ named }) => `${named('entity')} был удалён`,
658
+ },
659
+ },
634
660
  errorNotifications: {
635
661
  chatHistoryApi: 'Произошла ошибка загрузки истории чата',
636
662
  markChatProcessed: 'Не удалось переместить чат в “Закрытые”',
@@ -628,9 +628,35 @@ export default {
628
628
  preset: 'Пресет | Пресети',
629
629
  overwritePresetTitle: 'Пресет з такою назвою вже існує',
630
630
  overwritePresetText: 'Пресет з такою назвою вже існує. Бажаєте його замінити?',
631
+ notifications: {
632
+ success: {
633
+ update: ({ linked }) => {
634
+ return linked('systemNotifications.success.update', {
635
+ entity: linked('filters.presets.preset'),
636
+ });
637
+ },
638
+ create: ({ linked }) => {
639
+ return linked('systemNotifications.success.create', {
640
+ entity: linked('filters.presets.preset'),
641
+ });
642
+ },
643
+ delete: ({ linked }) => {
644
+ return linked('systemNotifications.success.delete', {
645
+ entity: linked('filters.presets.preset'),
646
+ });
647
+ },
648
+ },
649
+ },
631
650
  },
632
651
  },
633
652
  },
653
+ systemNotifications: {
654
+ success: {
655
+ update: ({ named }) => `${named('entity')} було оновлено`,
656
+ create: ({ named }) => `${named('entity')} було збережено`,
657
+ delete: ({ named }) => `${named('entity')} було видалено`,
658
+ },
659
+ },
634
660
  errorNotifications: {
635
661
  chatHistoryApi: 'Сталася помилка завантаження історії чату',
636
662
  markChatProcessed: 'Не вдалося перемістити чат у “Закриті”',
@@ -62,6 +62,9 @@ export function useValidation({
62
62
  validationText =
63
63
  v.value.regex?.$message ||
64
64
  `${t('validation.isRegExpMatched')} ${v.value.regex?.$params?.regex}`;
65
+ else if (v.value.nameAlreadyInUse.$invalid) {
66
+ validationText = t('validation.nameAlreadyInUse');
67
+ }
65
68
  }
66
69
 
67
70
  if (customValidators?.value) {
@@ -1,12 +1,22 @@
1
- import {EngineCreatePresetQueryRequest, EnginePresetQuery, PresetQueryServiceApiFactory} from 'webitel-sdk';
2
- import {getDefaultGetListResponse, getDefaultGetParams, getDefaultInstance, getDefaultOpenAPIConfig} from '../../../../../api/defaults/index';
1
+ import {
2
+ EngineCreatePresetQueryRequest,
3
+ EnginePresetQuery,
4
+ PresetQueryServiceApiFactory,
5
+ } from 'webitel-sdk';
6
+
7
+ import {
8
+ getDefaultGetListResponse,
9
+ getDefaultGetParams,
10
+ getDefaultInstance,
11
+ getDefaultOpenAPIConfig,
12
+ } from '../../../../../api/defaults/index';
3
13
  import applyTransform, {
4
- camelToSnake,
5
- merge,
6
- notify,
7
- snakeToCamel,
8
- starToSearch,
9
- skipIf,
14
+ camelToSnake,
15
+ merge,
16
+ notify,
17
+ skipIf,
18
+ snakeToCamel,
19
+ starToSearch,
10
20
  } from '../../../../../api/transformers/index';
11
21
 
12
22
  const instance = getDefaultInstance();
@@ -15,117 +25,93 @@ const configuration = getDefaultOpenAPIConfig();
15
25
  const service = PresetQueryServiceApiFactory(configuration, '', instance);
16
26
 
17
27
  type GetPresetListRequestConfig = {
18
- transformers: {
19
- useStarToSearch?: boolean,
20
- },
28
+ transformers: {
29
+ useStarToSearch?: boolean;
30
+ };
21
31
  };
22
32
 
23
33
  const getPresetList = async (params, config: GetPresetListRequestConfig) => {
34
+ const useStarToSearch = config?.transformers?.useStarToSearch ?? true;
24
35
 
25
- const useStarToSearch = config?.transformers?.useStarToSearch ?? true;
26
-
27
- const {
28
- page,
29
- size,
30
- search,
31
- sort,
32
- fields,
33
- presetNamespace,
34
- id,
35
- } = applyTransform(params, [
36
- merge(getDefaultGetParams()),
37
- (params) => useStarToSearch ? starToSearch('search')(params) : params,
36
+ const { page, size, search, sort, fields, presetNamespace, id } =
37
+ applyTransform(params, [
38
+ merge(getDefaultGetParams()),
39
+ (params) => (useStarToSearch ? starToSearch('search')(params) : params),
38
40
  ]);
39
41
 
40
- try {
41
- const response = await service.searchPresetQuery(
42
- page,
43
- size,
44
- search,
45
- sort,
46
- fields || ['id', 'name', 'preset', 'description'],
47
- id,
48
- );
49
- const {items, next} = applyTransform(response.data, [
50
- snakeToCamel(),
51
- merge(getDefaultGetListResponse()),
52
- ]);
53
- return {
54
- items: applyTransform(items, [
55
- (items) => items.filter(({preset}) => preset.namespace === presetNamespace),
56
- ]),
57
- next,
58
- };
59
- } catch (err) {
60
- throw applyTransform(err, [
61
- notify,
62
- ]);
63
- }
42
+ try {
43
+ const response = await service.searchPresetQuery(
44
+ page,
45
+ size,
46
+ search,
47
+ sort || '-created_at',
48
+ fields || ['id', 'name', 'preset', 'description'],
49
+ id,
50
+ );
51
+ const { items, next } = applyTransform(response.data, [
52
+ snakeToCamel(),
53
+ merge(getDefaultGetListResponse()),
54
+ ]);
55
+ return {
56
+ items: applyTransform(items, [
57
+ (items) =>
58
+ items.filter(({ preset }) => preset.namespace === presetNamespace),
59
+ ]),
60
+ next,
61
+ };
62
+ } catch (err) {
63
+ throw applyTransform(err, [notify]);
64
+ }
64
65
  };
65
66
 
66
- const addPreset = async ({preset, namespace}: {
67
- preset: EngineCreatePresetQueryRequest,
68
- namespace: string
67
+ const addPreset = async ({
68
+ preset,
69
+ namespace,
70
+ }: {
71
+ preset: EngineCreatePresetQueryRequest;
72
+ namespace: string;
69
73
  }): Promise<EnginePresetQuery> => {
70
- const item = applyTransform(preset, [
71
- camelToSnake(),
72
- (item) => {
73
- item.preset.namespace = namespace;
74
- return item;
75
- },
76
- ]);
77
- try {
78
- const response = await service.createPresetQuery(item);
79
- return applyTransform(response.data, [
80
- snakeToCamel(),
81
- ]);
82
- } catch (err) {
83
- throw applyTransform(err, [
84
- skipIf(notify, (err) => err.status === 409),
85
- ]);
86
- }
74
+ const item = applyTransform(preset, [
75
+ camelToSnake(),
76
+ (item) => {
77
+ item.preset.namespace = namespace;
78
+ return item;
79
+ },
80
+ ]);
81
+ try {
82
+ const response = await service.createPresetQuery(item);
83
+ return applyTransform(response.data, [snakeToCamel()]);
84
+ } catch (err) {
85
+ throw applyTransform(err, [skipIf(notify, (err) => err.status === 409)]);
86
+ }
87
87
  };
88
88
 
89
- const updatePreset = async ({item: itemInstance, id}) => {
90
- const item = applyTransform(itemInstance, [
91
- camelToSnake(),
92
- ]);
93
- try {
94
- const response = await service.updatePresetQuery(id, item);
95
- return applyTransform(response.data, [
96
- snakeToCamel(),
97
- ]);
98
- } catch (err) {
99
- throw applyTransform(err, [
100
- skipIf(notify, (err) => err.status === 409),
101
- ]);
102
- }
89
+ const updatePreset = async ({ item: itemInstance, id }) => {
90
+ const item = applyTransform(itemInstance, [camelToSnake()]);
91
+ try {
92
+ const response = await service.updatePresetQuery(id, item);
93
+ return applyTransform(response.data, [snakeToCamel()]);
94
+ } catch (err) {
95
+ throw applyTransform(err, [skipIf(notify, (err) => err.status === 409)]);
96
+ }
103
97
  };
104
98
 
105
- const deletePreset = async ({id}) => {
106
- try {
107
- const response = await service.deletePresetQuery(id);
108
- return applyTransform(response.data, [
109
- ]);
110
- } catch (err) {
111
- throw applyTransform(err, [
112
- notify,
113
- ]);
114
- }
99
+ const deletePreset = async ({ id }) => {
100
+ try {
101
+ const response = await service.deletePresetQuery(id);
102
+ return applyTransform(response.data, []);
103
+ } catch (err) {
104
+ throw applyTransform(err, [notify]);
105
+ }
115
106
  };
116
107
 
117
108
  const PresetQueryAPI = {
118
- getList: getPresetList,
119
- add: addPreset,
120
- update: updatePreset,
121
- delete: deletePreset,
109
+ getList: getPresetList,
110
+ add: addPreset,
111
+ update: updatePreset,
112
+ delete: deletePreset,
122
113
  };
123
114
 
124
- export {
125
- getPresetList,
126
- addPreset,
127
- updatePreset,
128
- deletePreset,
129
- };
115
+ export { addPreset, deletePreset,getPresetList, updatePreset };
130
116
 
131
117
  export default PresetQueryAPI;
@@ -13,7 +13,7 @@
13
13
  >
14
14
  <template #info>
15
15
  <component
16
- :is="getFilterFieldComponent(filter.name, 'previewField')"
16
+ :is="FilterOptionToPreviewComponentMap[filter.name]"
17
17
  :value="filter.value"
18
18
  >
19
19
  </component>
@@ -27,12 +27,14 @@
27
27
 
28
28
  <script setup lang="ts">
29
29
  import {useI18n} from "vue-i18n";
30
- import DynamicFilterPreview
31
- from "../../../filters/components/preview/dynamic-filter-preview.vue";
30
+
31
+ import { WtLabel } from '../../../../../../components/index';
32
+ import type {IFilter} from "../../../filters";
32
33
  import DynamicFilterPanelWrapper
33
34
  from "../../../filters/components/dynamic-filter-panel-wrapper.vue";
34
- import type {IFilter} from "../../../filters/types/Filter.d.ts";
35
- import {getFilterFieldComponent} from "../../../filters/components/values/filterComponentsMap";
35
+ import { FilterOptionToPreviewComponentMap} from "../../../filters/components/filter-options";
36
+ import DynamicFilterPreview
37
+ from "../../../filters/components/preview/dynamic-filter-preview.vue";
36
38
 
37
39
  type Props = {
38
40
  filters: IFilter[];
@@ -45,7 +47,4 @@ const { t } = useI18n();
45
47
  </script>
46
48
 
47
49
  <style scoped lang="scss">
48
- .preset-filters-preview {
49
-
50
- }
51
50
  </style>
@@ -35,7 +35,7 @@
35
35
  :preset="preset"
36
36
  @preset:select="selectedPreset = preset"
37
37
  @preset:update="updatePreset"
38
- @preset:delete="() => deleteEls([preset])"
38
+ @preset:delete="() => deletePreset(preset)"
39
39
  />
40
40
  </section>
41
41
  <!-- TODO: infinite scroll -->
@@ -66,10 +66,11 @@
66
66
  </template>
67
67
 
68
68
  <script lang="ts" setup>
69
+ import {type StoreDefinition, storeToRefs } from "pinia";
69
70
  import {computed, inject, ref, watch} from "vue";
70
71
  import {useI18n} from "vue-i18n";
71
- import {type StoreDefinition, storeToRefs } from "pinia";
72
- import {WtButton, WtIconBtn, WtPopup, WtSearchBar, WtEmpty} from "../../../../../../components/index";
72
+
73
+ import {WtButton, WtEmpty,WtIconBtn, WtPopup, WtSearchBar} from "../../../../../../components/index";
73
74
  import {useTableEmpty} from "../../../../../TableComponentModule/composables/useTableEmpty";
74
75
  import PresetQueryAPI from '../../api/PresetQuery.api.ts';
75
76
  import PresetPreview from "./preset-preview.vue";
@@ -158,6 +159,12 @@ const updatePreset = async ({preset, onSuccess, onFailure}) => {
158
159
  item: { ...preset, section: props.namespace },
159
160
  id: preset.id,
160
161
  });
162
+ eventBus.$emit('notification', {
163
+ type: 'success',
164
+ text: t('systemNotifications.success.update', {
165
+ entity: t('webitelUI.filters.presets.preset').toLowerCase(),
166
+ }),
167
+ });
161
168
  onSuccess();
162
169
  return loadDataList();
163
170
  } catch (err) {
@@ -165,6 +172,16 @@ const updatePreset = async ({preset, onSuccess, onFailure}) => {
165
172
  throw err;
166
173
  }
167
174
  };
175
+
176
+ const deletePreset = async (preset) => {
177
+ await deleteEls([preset.id]);
178
+ eventBus.$emit('notification', {
179
+ type: 'success',
180
+ text: t('systemNotifications.success.delete', {
181
+ entity: t('webitelUI.filters.presets.preset').toLowerCase(),
182
+ }),
183
+ });
184
+ };
168
185
  </script>
169
186
 
170
187
  <style lang="scss" scoped>
@@ -25,13 +25,15 @@
25
25
  </template>
26
26
 
27
27
  <script lang="ts" setup>
28
- import {computed, ref, type Ref} from 'vue';
28
+ import {computed, inject, type Ref,ref} from 'vue';
29
+ import {useI18n} from "vue-i18n";
29
30
  import {EnginePresetQuery} from "webitel-sdk";
31
+
30
32
  import { WtIconBtn } from '../../../../../../components/index';
33
+ import {IFiltersManager} from "../../../filters/index";
31
34
  import {addPreset, getPresetList, updatePreset} from '../../api/PresetQuery.api.ts';
32
- import SavePresetPopup, {SubmitConfig} from "./save-preset-popup.vue";
33
35
  import OverwritePresetPopup from "./overwrite-preset-popup.vue";
34
- import {IFiltersManager} from "../../../filters/index";
36
+ import SavePresetPopup, {SubmitConfig} from "./save-preset-popup.vue";
35
37
 
36
38
  const props = defineProps<{
37
39
  /**
@@ -41,6 +43,10 @@ const props = defineProps<{
41
43
  filtersManager: IFiltersManager;
42
44
  }>();
43
45
 
46
+ const eventBus = inject('$eventBus');
47
+
48
+ const { t } = useI18n();
49
+
44
50
  /**
45
51
  * disable "save" btn if there's nothing to save
46
52
  * */
@@ -61,6 +67,13 @@ const presetToOverwriteWith: Ref<EnginePresetQuery | null> = ref(null);
61
67
  const handlePresetSubmit = async (preset: EnginePresetQuery, { onCompleted }: SubmitConfig) => {
62
68
  try {
63
69
  await addPreset({ preset, namespace: props.namespace });
70
+
71
+ eventBus.$emit('notification', {
72
+ type: 'success', text: t('systemNotifications.success.create', {
73
+ entity: t('webitelUI.filters.presets.preset').toLowerCase(),
74
+ }),
75
+ });
76
+
64
77
  showSaveForm.value = false;
65
78
  } catch (err) {
66
79
  if (err?.status === 409) {
@@ -88,6 +101,12 @@ const handlePresetOverwriteConfirmation = async ({ onCompleted }: SubmitConfig)
88
101
  },
89
102
  });
90
103
 
104
+ eventBus.$emit('notification', {
105
+ type: 'success', text: t('systemNotifications.success.update', {
106
+ entity: t('webitelUI.filters.presets.preset').toLowerCase(),
107
+ }),
108
+ });
109
+
91
110
  presetToOverwriteWith.value = null;
92
111
  showSaveForm.value = false;
93
112
  } finally {
@@ -17,7 +17,7 @@ import {computed, useAttrs} from 'vue';
17
17
  import { useI18n } from 'vue-i18n';
18
18
 
19
19
  import WtSelect from '../../../../../../../../components/wt-select/wt-select.vue';
20
- import { BooleanOptions } from '../../../enums/boolean-options';
20
+ import { BooleanOptions } from '../../../../enums/boolean-options';
21
21
 
22
22
  const model = defineModel<boolean | null>();
23
23
 
@@ -19,7 +19,7 @@ import { computed, watch } from 'vue';
19
19
  import { useI18n } from 'vue-i18n';
20
20
 
21
21
  import WtSelect from '../../../../../../../components/wt-select/wt-select.vue';
22
- import { AmdResultOptions } from '../../enums/amd-result-options';
22
+ import { AmdResultOptions } from '../../../enums/amd-result-options';
23
23
 
24
24
  const model = defineModel<string>();
25
25
  const { t } = useI18n();
@@ -19,7 +19,7 @@ import { computed, watch } from 'vue';
19
19
  import { useI18n } from 'vue-i18n';
20
20
 
21
21
  import WtSelect from '../../../../../../../components/wt-select/wt-select.vue';
22
- import { HangupCauseOptions } from '../../enums/hangup-cause-options';
22
+ import { HangupCauseOptions } from '../../../enums/hangup-cause-options';
23
23
 
24
24
  const model = defineModel<string>();
25
25
  const { t } = useI18n();
@@ -18,7 +18,7 @@ import { computed, watch } from 'vue';
18
18
  import { useI18n } from 'vue-i18n';
19
19
 
20
20
  import WtSelect from '../../../../../../../components/wt-select/wt-select.vue';
21
- import { DirectionOptions } from '../../enums/direction-options';
21
+ import { DirectionOptions } from '../../../enums/direction-options';
22
22
 
23
23
  const model = defineModel<string>();
24
24
  const { t } = useI18n();
@@ -6,7 +6,7 @@
6
6
  import { computed } from 'vue';
7
7
  import { useI18n } from 'vue-i18n';
8
8
 
9
- import { BooleanOptions } from '../../enums/boolean-options';
9
+ import { BooleanOptions } from '../../../enums/boolean-options';
10
10
 
11
11
  const props = defineProps<{
12
12
  value: boolean;
@@ -1,3 +1,5 @@
1
+ import type {Component} from "vue";
2
+
1
3
  import ActualReactionTimeFilter from './actual-reaction-time/actual-reaction-time-filter-value-field.vue';
2
4
  import ActualReactionTimeFilterPreview from './actual-reaction-time/actual-reaction-time-filter-value-preview.vue';
3
5
  import ActualResolutionTimeFilter from './actual-resolution-time/actual-resolution-time-filter-value-field.vue';
@@ -24,6 +26,7 @@ import CreatedAtToFilter from './created-at-to/created-at-to-filter-value-field.
24
26
  import CreatedAtToFilterPreview from './created-at-to/created-at-to-filter-value-preview.vue';
25
27
  import DirectionFilter from './direction/direction-filter-value-field.vue';
26
28
  import DirectionFilterPreview from './direction/direction-filter-value-preview.vue';
29
+ import {FilterOption} from "../../enums/FilterOption";
27
30
  import GatewayFilter from './gateway/gateway-filter-value-field.vue';
28
31
  import GatewayFilterPreview from './gateway/gateway-filter-value-preview.vue';
29
32
  import GranteeFilter from './grantee/grantee-filter-value-field.vue';
@@ -157,3 +160,87 @@ export {
157
160
  VariableFilter,
158
161
  VariableFilterPreview,
159
162
  };
163
+
164
+ export const FilterOptionToValueComponentMap: Record<FilterOption, Component> = {
165
+ [FilterOption.Agent]: AgentFilter,
166
+ [FilterOption.AmdResult]: AmdResultFilter,
167
+ [FilterOption.Contact]: ContactFilter,
168
+ [FilterOption.Direction]: DirectionFilter,
169
+ [FilterOption.Rated]: HasRatingFilterValueField,
170
+ [FilterOption.Gateway]: GatewayFilter,
171
+ [FilterOption.Grantee]: GranteeFilter,
172
+ [FilterOption.Cause]: CauseFilter,
173
+ [FilterOption.Queue]: QueueFilter,
174
+ [FilterOption.RatedBy]: RatedByFilter,
175
+ [FilterOption.HasFile]: HasFileFilter,
176
+ [FilterOption.Score]: ScoreFilter,
177
+ [FilterOption.Tag]: TagFilter,
178
+ [FilterOption.TalkDuration]: TalkDurationFilter,
179
+ [FilterOption.Team]: TeamFilter,
180
+ [FilterOption.TotalDuration]: TotalDurationFilter,
181
+ [FilterOption.HasTranscription]: HasTranscriptionFilter,
182
+ [FilterOption.User]: UserFilter,
183
+ [FilterOption.Variable]: VariableFilter,
184
+ [FilterOption.CreatedAtFrom]: CreatedAtFromFilter,
185
+ [FilterOption.CreatedAtTo]: CreatedAtToFilter,
186
+ [FilterOption.Status]: CaseStatusFilter,
187
+ [FilterOption.Source]: CaseSourceFilter,
188
+ [FilterOption.Service]: CaseServiceFilter,
189
+ [FilterOption.Author]: AuthorFilter,
190
+ [FilterOption.Reporter]: ReporterFilter,
191
+ [FilterOption.Impacted]: ImpactedFilter,
192
+ [FilterOption.Assignee]: AssigneeFilter,
193
+ [FilterOption.ContactGroup]: ContactGroupFilter,
194
+ [FilterOption.Priority]: CasePriorityFilter,
195
+ [FilterOption.CloseReasonGroups]: CloseReasonGroupsCaseFilter,
196
+ [FilterOption.Rating]: RatingFromToFilter,
197
+ [FilterOption.Sla]: SlaFilter,
198
+ [FilterOption.SlaCondition]: SlaConditionFilter,
199
+ [FilterOption.ReactionTime]: ReactionTimeFilter,
200
+ [FilterOption.ResolutionTime]: ResolutionTimeFilter,
201
+ [FilterOption.ActualReactionTime]: ActualReactionTimeFilter,
202
+ [FilterOption.ActualResolutionTime]: ActualResolutionTimeFilter,
203
+ [FilterOption.HasAttachment]: HasAttachmentFilter,
204
+ };
205
+
206
+ export const FilterOptionToPreviewComponentMap: Record<FilterOption, Component> = {
207
+ [FilterOption.Agent]: AgentFilterPreview,
208
+ [FilterOption.AmdResult]: AmdResultFilterPreview,
209
+ [FilterOption.Contact]: ContactFilterPreview,
210
+ [FilterOption.Direction]: DirectionFilterPreview,
211
+ [FilterOption.Rated]: HasRatingFilterValuePreview,
212
+ [FilterOption.Gateway]: GatewayFilterPreview,
213
+ [FilterOption.Grantee]: GranteeFilterPreview,
214
+ [FilterOption.Cause]: CauseFilterPreview,
215
+ [FilterOption.Queue]: QueueFilterPreview,
216
+ [FilterOption.RatedBy]: RatedByFilterPreview,
217
+ [FilterOption.HasFile]: HasFileFilterPreview,
218
+ [FilterOption.Score]: ScoreFilterPreview,
219
+ [FilterOption.Tag]: TagFilterPreview,
220
+ [FilterOption.TalkDuration]: TalkDurationFilterPreview,
221
+ [FilterOption.Team]: TeamFilterPreview,
222
+ [FilterOption.TotalDuration]: TotalDurationFilterPreview,
223
+ [FilterOption.HasTranscription]: HasTranscriptionFilterPreview,
224
+ [FilterOption.User]: UserFilterPreview,
225
+ [FilterOption.Variable]: VariableFilterPreview,
226
+ [FilterOption.CreatedAtFrom]: CreatedAtFromFilterPreview,
227
+ [FilterOption.CreatedAtTo]: CreatedAtToFilterPreview,
228
+ [FilterOption.Status]: CaseStatusFilterPreview,
229
+ [FilterOption.Source]: CaseSourceFilterPreview,
230
+ [FilterOption.Service]: CaseServiceFilterPreview,
231
+ [FilterOption.Author]: AuthorFilterPreview,
232
+ [FilterOption.Reporter]: ReporterFilterPreview,
233
+ [FilterOption.Impacted]: ImpactedFilterPreview,
234
+ [FilterOption.Assignee]: AssigneeFilterPreview,
235
+ [FilterOption.ContactGroup]: ContactGroupFilterPreview,
236
+ [FilterOption.Priority]: CasePriorityFilterPreview,
237
+ [FilterOption.CloseReasonGroups]: CloseReasonGroupsCaseFilterPreview,
238
+ [FilterOption.Rating]: RatingFromToFilterPreview,
239
+ [FilterOption.Sla]: SlaFilterPreview,
240
+ [FilterOption.SlaCondition]: SlaConditionFilterPreview,
241
+ [FilterOption.ReactionTime]: ReactionTimeFilterPreview,
242
+ [FilterOption.ResolutionTime]: ResolutionTimeFilterPreview,
243
+ [FilterOption.ActualReactionTime]: ActualReactionTimeFilterPreview,
244
+ [FilterOption.ActualResolutionTime]: ActualResolutionTimeFilterPreview,
245
+ [FilterOption.HasAttachment]: HasAttachmentFilterPreview,
246
+ };
@@ -19,7 +19,7 @@ import { computed, watch } from 'vue';
19
19
  import { useI18n } from 'vue-i18n';
20
20
 
21
21
  import WtSelect from '../../../../../../../components/wt-select/wt-select.vue';
22
- import { TagOptions } from '../../enums/tag-options';
22
+ import { TagOptions } from '../../../enums/tag-options';
23
23
 
24
24
  const model = defineModel<string>();
25
25
  const { t } = useI18n();