@webitel/ui-datalist 1.1.45 → 1.1.47

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 (114) hide show
  1. package/package.json +1 -1
  2. package/src/modules/_shared/createDatalistStore.ts +5 -1
  3. package/src/modules/card/composables/useCardComponent.ts +0 -1
  4. package/src/modules/card/composables/useCardValidation.ts +1 -1
  5. package/src/modules/card/stores/createCardStore.ts +7 -1
  6. package/src/modules/filter-presets/api/PresetQuery.ts +1 -1
  7. package/src/modules/filter-presets/components/_shared/input-fields/preset-name-field.vue +1 -2
  8. package/src/modules/filter-presets/components/apply-preset/apply-preset-action.vue +7 -6
  9. package/src/modules/filter-presets/components/save-preset/save-preset-action.vue +5 -4
  10. package/src/modules/filter-presets/components/save-preset/save-preset-popup.vue +0 -4
  11. package/src/modules/filter-presets/stores/createFilterPresetsStore.ts +7 -1
  12. package/src/modules/filter-presets/stores/headers/headers.ts +2 -2
  13. package/src/modules/filters/classes/FiltersManager.ts +5 -2
  14. package/src/modules/filters/components/config/dynamic-view/dynamic-filter-config-form.vue +21 -2
  15. package/src/modules/filters/components/config/dynamic-view/dynamic-filter-config-view.vue +1 -1
  16. package/src/modules/filters/components/dynamic-filter-add-action.vue +4 -2
  17. package/src/modules/filters/components/preview/dynamic-filter-preview.vue +11 -8
  18. package/src/modules/filters/components/search-bar/dynamic-filter-search.vue +3 -1
  19. package/src/modules/filters/components/table-filters-panel.vue +2 -2
  20. package/src/modules/filters/composables/useFilterConfigsToolkit.ts +7 -2
  21. package/src/modules/filters/createTableFiltersStore.ts +3 -2
  22. package/src/modules/filters/modules/filterConfig/classes/FilterConfig.ts +39 -8
  23. package/src/modules/filters/modules/filterConfig/classes/createFilterConfig.ts +1 -1
  24. package/src/modules/filters/modules/filterConfig/components/_custom/filterConfig.ts +7 -8
  25. package/src/modules/filters/modules/filterConfig/components/_custom/type-extension-filter-value-field.vue +27 -10
  26. package/src/modules/filters/modules/filterConfig/components/_custom/type-extension-filter-value-preview.vue +21 -5
  27. package/src/modules/filters/modules/filterConfig/components/_shared/date-time-filter/date-time-options/date-time-options-filter-value-field.vue +59 -3
  28. package/src/modules/filters/modules/filterConfig/components/_shared/date-time-filter/date-time-options/date-time-options-filter-value-preview.vue +13 -7
  29. package/src/modules/filters/modules/filterConfig/components/_shared/durations/duration-filter-value-field.vue +16 -3
  30. package/src/modules/filters/modules/filterConfig/components/_shared/lookup-filter-preview/lookup-filter-value-preview.vue +14 -6
  31. package/src/modules/filters/modules/filterConfig/components/case-actual-reaction-time/case-actual-reaction-time-filter-value-preview.vue +4 -1
  32. package/src/modules/filters/modules/filterConfig/components/case-actual-resolution-time/case-actual-resolution-time-filter-value-preview.vue +4 -1
  33. package/src/modules/filters/modules/filterConfig/components/case-assignee/case-assignee-filter-value-field.vue +16 -3
  34. package/src/modules/filters/modules/filterConfig/components/case-assignee/case-assignee-filter-value-preview.vue +7 -3
  35. package/src/modules/filters/modules/filterConfig/components/case-assignee/filterConfig.ts +9 -5
  36. package/src/modules/filters/modules/filterConfig/components/case-close-reason-groups/case-close-reason-groups-filter-value-field.vue +16 -3
  37. package/src/modules/filters/modules/filterConfig/components/case-close-reason-groups/case-close-reason-groups-filter-value-preview.vue +2 -2
  38. package/src/modules/filters/modules/filterConfig/components/case-priority/case-priority-filter-value-preview.vue +2 -2
  39. package/src/modules/filters/modules/filterConfig/components/case-reaction-time/case-reaction-time-filter-value-preview.vue +4 -1
  40. package/src/modules/filters/modules/filterConfig/components/case-resolution-time/case-resolution-time-filter-value-preview.vue +4 -1
  41. package/src/modules/filters/modules/filterConfig/components/case-service/case-service-filter-value-field.vue +1 -1
  42. package/src/modules/filters/modules/filterConfig/components/case-service/case-service-filter-value-preview.vue +2 -2
  43. package/src/modules/filters/modules/filterConfig/components/case-sla/case-sla-filter-value-preview.vue +2 -2
  44. package/src/modules/filters/modules/filterConfig/components/case-sla-condition/case-sla-condition-filter-value-field.vue +16 -3
  45. package/src/modules/filters/modules/filterConfig/components/case-sla-condition/case-sla-condition-filter-value-preview.vue +2 -2
  46. package/src/modules/filters/modules/filterConfig/components/case-source/case-source-filter-value-preview.vue +2 -2
  47. package/src/modules/filters/modules/filterConfig/components/case-status/case-status-filter-value-field.vue +16 -3
  48. package/src/modules/filters/modules/filterConfig/components/case-status/case-status-filter-value-preview.vue +2 -2
  49. package/src/modules/filters/modules/filterConfig/components/contact-group/contact-group-filter-value-field.vue +19 -6
  50. package/src/modules/filters/modules/filterConfig/components/contact-group/contact-group-filter-value-preview.vue +7 -3
  51. package/src/modules/filters/modules/filterConfig/components/contact-group/index.ts +6 -3
  52. package/src/modules/filters/modules/filterConfig/components/contact-label/index.ts +14 -5
  53. package/src/modules/filters/modules/filterConfig/components/has-attachment/has-attachment-filter-value-field.vue +1 -1
  54. package/src/modules/filters/modules/filterConfig/components/index.ts +58 -57
  55. package/src/modules/filters/modules/filterConfig/components/rating/rating-from-to-filter-value-field.vue +16 -3
  56. package/src/modules/filters/modules/filterConfig/components/rating/rating-from-to-filter-value-preview.vue +4 -1
  57. package/src/modules/filters/modules/filterConfig/components/score/score-from-to-filter-value-field.vue +16 -3
  58. package/src/modules/filters/modules/filterConfig/components/score/score-from-to-filter-value-preview.vue +4 -1
  59. package/src/modules/filters/modules/filterConfig/components/tag/tag-filter-value-preview.vue +1 -1
  60. package/src/modules/filters/modules/filterConfig/components/utilization-progress/utilization-progress-filter-value-preview.vue +3 -1
  61. package/src/modules/filters/modules/filterConfig/composables/useQueueTypeOptions.ts +2 -2
  62. package/src/modules/filters/modules/filterConfig/types/DynamicFilterPreviewComponent.ts +2 -2
  63. package/src/modules/headers/createTableHeadersStore.ts +9 -6
  64. package/src/modules/pagination/createTablePaginationStore.ts +2 -1
  65. package/src/modules/table/createTableStore.store.ts +3 -12
  66. package/src/modules/types/createDatalistStore.types.ts +1 -1
  67. package/src/modules/types/tableStore.types.ts +12 -2
  68. package/types/modules/card/composables/useCardComponent.d.ts +3 -3
  69. package/types/modules/card/composables/useCardValidation.d.ts +1 -1
  70. package/types/modules/card/composables/useNestedCardComponent.d.ts +3 -3
  71. package/types/modules/card/stores/createCardStore.d.ts +5 -1
  72. package/types/modules/filter-presets/api/PresetQuery.d.ts +2 -2
  73. package/types/modules/filter-presets/components/_shared/input-fields/preset-name-field.vue.d.ts +1 -2
  74. package/types/modules/filter-presets/components/apply-preset/apply-preset-action.vue.d.ts +2 -2
  75. package/types/modules/filter-presets/stores/createFilterPresetsStore.d.ts +90 -16
  76. package/types/modules/filter-presets/stores/headers/headers.d.ts +2 -2
  77. package/types/modules/filters/classes/FiltersManager.d.ts +7 -2
  78. package/types/modules/filters/components/preview/dynamic-filter-preview.vue.d.ts +2 -3
  79. package/types/modules/filters/components/table-filters-panel.vue.d.ts +2 -2
  80. package/types/modules/filters/composables/useFilterConfigsToolkit.d.ts +6 -2
  81. package/types/modules/filters/createTableFiltersStore.d.ts +17 -6
  82. package/types/modules/filters/modules/filterConfig/classes/FilterConfig.d.ts +33 -8
  83. package/types/modules/filters/modules/filterConfig/classes/createFilterConfig.d.ts +1 -1
  84. package/types/modules/filters/modules/filterConfig/components/_custom/filterConfig.d.ts +3 -3
  85. package/types/modules/filters/modules/filterConfig/components/_shared/date-time-filter/date-time-options/date-time-options-filter-value-field.vue.d.ts +2 -0
  86. package/types/modules/filters/modules/filterConfig/components/_shared/lookup-filter-preview/lookup-filter-value-preview.vue.d.ts +1 -4
  87. package/types/modules/filters/modules/filterConfig/components/case-actual-reaction-time/case-actual-reaction-time-filter-value-preview.vue.d.ts +4 -1
  88. package/types/modules/filters/modules/filterConfig/components/case-actual-resolution-time/case-actual-resolution-time-filter-value-preview.vue.d.ts +4 -1
  89. package/types/modules/filters/modules/filterConfig/components/case-assignee/case-assignee-filter-value-preview.vue.d.ts +4 -2
  90. package/types/modules/filters/modules/filterConfig/components/case-assignee/filterConfig.d.ts +10 -5
  91. package/types/modules/filters/modules/filterConfig/components/case-close-reason-groups/case-close-reason-groups-filter-value-preview.vue.d.ts +2 -2
  92. package/types/modules/filters/modules/filterConfig/components/case-priority/case-priority-filter-value-preview.vue.d.ts +2 -2
  93. package/types/modules/filters/modules/filterConfig/components/case-reaction-time/case-reaction-time-filter-value-preview.vue.d.ts +4 -1
  94. package/types/modules/filters/modules/filterConfig/components/case-resolution-time/case-resolution-time-filter-value-preview.vue.d.ts +4 -1
  95. package/types/modules/filters/modules/filterConfig/components/case-service/case-service-filter-value-preview.vue.d.ts +2 -2
  96. package/types/modules/filters/modules/filterConfig/components/case-sla/case-sla-filter-value-preview.vue.d.ts +2 -2
  97. package/types/modules/filters/modules/filterConfig/components/case-sla-condition/case-sla-condition-filter-value-preview.vue.d.ts +2 -2
  98. package/types/modules/filters/modules/filterConfig/components/case-source/case-source-filter-value-preview.vue.d.ts +2 -2
  99. package/types/modules/filters/modules/filterConfig/components/case-status/case-status-filter-value-preview.vue.d.ts +2 -2
  100. package/types/modules/filters/modules/filterConfig/components/contact-group/contact-group-filter-value-field.vue.d.ts +2 -2
  101. package/types/modules/filters/modules/filterConfig/components/contact-group/contact-group-filter-value-preview.vue.d.ts +4 -2
  102. package/types/modules/filters/modules/filterConfig/components/contact-group/index.d.ts +19 -14
  103. package/types/modules/filters/modules/filterConfig/components/contact-label/index.d.ts +4 -2
  104. package/types/modules/filters/modules/filterConfig/components/has-attachment/has-attachment-filter-value-field.vue.d.ts +3 -3
  105. package/types/modules/filters/modules/filterConfig/components/index.d.ts +50 -39
  106. package/types/modules/filters/modules/filterConfig/components/rating/rating-from-to-filter-value-preview.vue.d.ts +4 -1
  107. package/types/modules/filters/modules/filterConfig/components/score/score-from-to-filter-value-preview.vue.d.ts +4 -1
  108. package/types/modules/filters/modules/filterConfig/components/utilization-progress/utilization-progress-filter-value-preview.vue.d.ts +3 -1
  109. package/types/modules/filters/modules/filterConfig/types/DynamicFilterPreviewComponent.d.ts +2 -2
  110. package/types/modules/headers/createTableHeadersStore.d.ts +66 -12
  111. package/types/modules/pagination/createTablePaginationStore.d.ts +2 -1
  112. package/types/modules/table/createTableStore.store.d.ts +93 -24
  113. package/types/modules/types/createDatalistStore.types.d.ts +1 -1
  114. package/types/modules/types/tableStore.types.d.ts +11 -2
@@ -4,7 +4,7 @@
4
4
  :show-clear="false"
5
5
  :label="t('cases.status')"
6
6
  :search-method="caseStatusesSearchMethod"
7
- :v="v$.model.selection"
7
+ :v="vSelection"
8
8
  :model-value="model?.selection"
9
9
  data-key="id"
10
10
  option-value="id"
@@ -17,7 +17,7 @@
17
17
  :disabled="!model.selection"
18
18
  :label="t('webitelUI.filters.filterValue')"
19
19
  :search-method="getConditionList"
20
- :v="v$.model.conditions"
20
+ :v="vConditions"
21
21
  v-model:model-value="model.conditions"
22
22
  data-key="id"
23
23
  option-value="id"
@@ -66,7 +66,9 @@ const initModel = () => {
66
66
  };
67
67
  onMounted(() => initModel());
68
68
 
69
- const v$ = useVuelidate(
69
+ const v$ = useVuelidate<{
70
+ model: ModelValue;
71
+ }>(
70
72
  computed(() => ({
71
73
  model: {
72
74
  selection: {
@@ -87,6 +89,17 @@ const v$ = useVuelidate(
87
89
 
88
90
  v$.value.$touch();
89
91
 
92
+ const vSelection = computed(() => {
93
+ const modelValidation = v$.value.model;
94
+ if (!modelValidation) return undefined;
95
+ return modelValidation.selection;
96
+ });
97
+ const vConditions = computed(() => {
98
+ const modelValidation = v$.value.model;
99
+ if (!modelValidation) return undefined;
100
+ return modelValidation.conditions;
101
+ });
102
+
90
103
  const emit = defineEmits<{
91
104
  'update:invalid': [
92
105
  boolean,
@@ -3,12 +3,12 @@
3
3
  </template>
4
4
 
5
5
  <script lang="ts" setup>
6
- import type { WebitelcasesStatus } from 'webitel-sdk';
6
+ import type { WebitelCasesStatus } from 'webitel-sdk';
7
7
 
8
8
  import LookupFilterValuePreview from '../_shared/lookup-filter-preview/lookup-filter-value-preview.vue';
9
9
 
10
10
  const props = defineProps<{
11
- value: WebitelcasesStatus[];
11
+ value: WebitelCasesStatus[];
12
12
  }>();
13
13
  </script>
14
14
 
@@ -2,7 +2,7 @@
2
2
  <wt-multi-select
3
3
  :label="labelValue"
4
4
  :search-method="props.filterConfig.searchRecords"
5
- :v="!disableValidation && v$?.model?.list"
5
+ :v="!disableValidation && vList"
6
6
  :model-value="model?.list"
7
7
  data-key="id"
8
8
  option-value="id"
@@ -13,7 +13,7 @@
13
13
  v-if="!props.filterConfig?.hideUnassigned"
14
14
  :label="t('reusable.showUnassigned')"
15
15
  :selected="model?.unassigned"
16
- :v="!disableValidation && v$?.model?.unassigned"
16
+ :v="!disableValidation && vUnassigned"
17
17
  @update:selected="model.unassigned = $event"
18
18
  />
19
19
  </template>
@@ -34,8 +34,8 @@ const props = defineProps<{
34
34
  }>();
35
35
 
36
36
  type ModelValue = {
37
- list: string[];
38
- unassigned: boolean;
37
+ list?: string[];
38
+ unassigned?: boolean | null;
39
39
  };
40
40
 
41
41
  const model = defineModel<ModelValue>();
@@ -61,7 +61,9 @@ const changeListValue = (event) => {
61
61
  list: event,
62
62
  };
63
63
  };
64
- const v$ = useVuelidate(
64
+ const v$ = useVuelidate<{
65
+ model: ModelValue;
66
+ }>(
65
67
  computed(() => ({
66
68
  model: {
67
69
  list: {
@@ -69,7 +71,7 @@ const v$ = useVuelidate(
69
71
  },
70
72
  unassigned: {
71
73
  required: requiredIf(
72
- () => props.filterConfig?.hideUnassigned && !model.value.list.length,
74
+ () => props.filterConfig?.hideUnassigned && !model.value.list?.length,
73
75
  ),
74
76
  },
75
77
  },
@@ -82,6 +84,17 @@ const v$ = useVuelidate(
82
84
  },
83
85
  );
84
86
 
87
+ const vList = computed(() => {
88
+ const modelValidation = v$.value.model;
89
+ if (!modelValidation) return undefined;
90
+ return modelValidation.list;
91
+ });
92
+ const vUnassigned = computed(() => {
93
+ const modelValidation = v$.value.model;
94
+ if (!modelValidation) return undefined;
95
+ return modelValidation.unassigned;
96
+ });
97
+
85
98
  const initModel = () => {
86
99
  if (!model.value) {
87
100
  model.value = {
@@ -5,20 +5,24 @@
5
5
  <script lang="ts" setup>
6
6
  import { computed } from 'vue';
7
7
  import { useI18n } from 'vue-i18n';
8
- import { WebitelContactsContact } from 'webitel-sdk';
9
8
 
10
9
  import { IFilter } from '../../../../classes/Filter';
11
10
  import LookupFilterValuePreview from '../_shared/lookup-filter-preview/lookup-filter-value-preview.vue';
12
11
 
13
12
  const props = defineProps<{
14
- value: WebitelContactsContact[];
13
+ value: Array<{
14
+ id?: string | number;
15
+ name?: string;
16
+ }>;
15
17
  filter: IFilter;
16
18
  }>();
17
19
 
18
20
  const { t } = useI18n();
19
21
 
20
22
  const rawValue = computed(() => {
21
- return props.filter.value;
23
+ return props.filter.value as {
24
+ unassigned?: boolean;
25
+ };
22
26
  });
23
27
 
24
28
  const shownValue = computed(() => {
@@ -1,6 +1,9 @@
1
1
  import { contactGroups } from '@webitel/ui-sdk/api/clients/index';
2
2
 
3
3
  import {
4
+ type FilterConfigBaseParams,
5
+ type FilterConfigSearchFilterContext,
6
+ type FilterConfigSearchRequestParams,
4
7
  type IWtSysTypeFilterConfig,
5
8
  WtSysTypeFilterConfig,
6
9
  } from '../../classes/FilterConfig';
@@ -15,7 +18,7 @@ class ContactGroupFilterConfig extends WtSysTypeFilterConfig {
15
18
  hideUnassigned?: boolean;
16
19
 
17
20
  constructor(
18
- params: {
21
+ params: FilterConfigBaseParams & {
19
22
  hideUnassigned?: boolean;
20
23
  } = {},
21
24
  ) {
@@ -26,8 +29,8 @@ class ContactGroupFilterConfig extends WtSysTypeFilterConfig {
26
29
  }
27
30
 
28
31
  searchRecords(
29
- params: object,
30
- { filterValue } = {},
32
+ params: FilterConfigSearchRequestParams,
33
+ { filterValue }: FilterConfigSearchFilterContext = {},
31
34
  ): Promise<{
32
35
  items: unknown[];
33
36
  next?: boolean;
@@ -1,6 +1,10 @@
1
1
  import { labels as contactLabels } from '@webitel/ui-sdk/api/clients/index';
2
2
 
3
- import { WtSysTypeFilterConfig } from '../../classes/FilterConfig';
3
+ import {
4
+ type FilterConfigSearchFilterContext,
5
+ type FilterConfigSearchRequestParams,
6
+ WtSysTypeFilterConfig,
7
+ } from '../../classes/FilterConfig';
4
8
  import { FilterOption } from '../../enums/FilterOption';
5
9
  import ContactLabelFilterValueField from './contact-label-filter-value-field.vue';
6
10
  import ContactLabelFilterValuePreview from './contact-label-filter-value-preview.vue';
@@ -11,8 +15,13 @@ class ContactLabelFilterConfig extends WtSysTypeFilterConfig {
11
15
  valuePreviewComponent = ContactLabelFilterValuePreview;
12
16
 
13
17
  searchRecords(
14
- params: object,
15
- { filterValue } = {},
18
+ params: FilterConfigSearchRequestParams,
19
+ {
20
+ filterValue,
21
+ }: Omit<FilterConfigSearchFilterContext, 'filterValue'> & {
22
+ /* label filter stores the selected labels list itself */
23
+ filterValue?: unknown[];
24
+ } = {},
16
25
  ): Promise<{
17
26
  items: unknown[];
18
27
  next?: boolean;
@@ -22,9 +31,9 @@ class ContactLabelFilterConfig extends WtSysTypeFilterConfig {
22
31
  // For label preview component no need to call the API, so we return filterValue back to the searchRecords method and display it
23
32
 
24
33
  if (filterValue)
25
- return {
34
+ return Promise.resolve({
26
35
  items: filterValue,
27
- };
36
+ });
28
37
 
29
38
  return contactLabels.getLookup(params);
30
39
  }
@@ -13,7 +13,7 @@ import { computed, watch } from 'vue';
13
13
 
14
14
  import HasOptionFilterValueField from '../_shared/has-options/has-option-filter-value-field.vue';
15
15
 
16
- const model = defineModel<string>();
16
+ const model = defineModel<boolean | null>();
17
17
 
18
18
  const v$ = useVuelidate(
19
19
  computed(() => ({
@@ -1,6 +1,7 @@
1
1
  import type { Component } from 'vue';
2
2
 
3
- import { FilterOption, type FilterOptionName } from '../enums/FilterOption';
3
+ import type { FilterConfigSearchMethodParams } from '../classes/FilterConfig';
4
+ import { FilterOption } from '../enums/FilterOption';
4
5
  import DateTimeOptionsFilterValueField from './_shared/date-time-filter/date-time-options/date-time-options-filter-value-field.vue';
5
6
  import DateTimeOptionsFilterValuePreview from './_shared/date-time-filter/date-time-options/date-time-options-filter-value-preview.vue';
6
7
  import AgentFilter from './agent/agent-filter-value-field.vue';
@@ -222,60 +223,59 @@ export {
222
223
  VariableFilterPreview,
223
224
  };
224
225
 
225
- export const FilterOptionToValueComponentMap: Record<
226
- FilterOptionName,
227
- Component
228
- > = {
229
- [FilterOption.Agent]: AgentFilter,
230
- [FilterOption.AgentStatus]: AgentStatusFilter,
231
- [FilterOption.UtilizationProgress]: UtilizationProgressFilter,
232
- [FilterOption.Skill]: SkillFilter,
233
- [FilterOption.Region]: RegionFilter,
234
- [FilterOption.Auditor]: AuditorFilter,
235
- [FilterOption.Supervisor]: SupervisorFilter,
236
- [FilterOption.AmdResult]: AmdResultFilter,
237
- [FilterOption.Contact]: ContactFilter,
238
- [FilterOption.CallDirection]: CallDirectionFilterValueField,
239
- [FilterOption.Rated]: HasRatingFilterValueField,
240
- [FilterOption.Gateway]: GatewayFilter,
241
- [FilterOption.Grantee]: GranteeFilter,
242
- [FilterOption.HangupCause]: HangupCauseFilterValueField,
243
- [FilterOption.Queue]: QueueFilter,
244
- [FilterOption.QueueType]: QueueTypeFilter,
245
- [FilterOption.QueuePeriod]: QueuePeriodFilter,
246
- [FilterOption.RatedBy]: RatedByFilter,
247
- [FilterOption.HasFile]: HasFileFilter,
248
- [FilterOption.Score]: ScoreFilter,
249
- [FilterOption.Tag]: TagFilter,
250
- [FilterOption.TalkDuration]: TalkDurationFilter,
251
- [FilterOption.Team]: TeamFilter,
252
- [FilterOption.TotalDuration]: TotalDurationFilter,
253
- [FilterOption.HasTranscription]: HasTranscriptionFilter,
254
- [FilterOption.HasUser]: HasUserFilter,
255
- [FilterOption.User]: UserFilter,
256
- [FilterOption.Variable]: VariableFilter,
257
- [FilterOption.CreatedAt]: DateTimeOptionsFilterValueField,
258
- [FilterOption.CaseStatus]: CaseStatusFilterValueField,
259
- [FilterOption.CaseSource]: CaseSourceFilterValueField,
260
- [FilterOption.CaseService]: CaseServiceFilterValueField,
261
- [FilterOption.CaseAuthor]: CaseAuthorFilterValueField,
262
- [FilterOption.CaseReporter]: CaseReporterFilterValueField,
263
- [FilterOption.CaseImpacted]: CaseImpactedFilterValueField,
264
- [FilterOption.CasePriority]: CasePriorityFilterValueField,
265
- [FilterOption.CaseCloseReasonGroups]: CaseCloseReasonGroupsFilterValueField,
266
- [FilterOption.Rating]: RatingFromToFilter,
267
- [FilterOption.CaseSla]: CaseSlaFilterValueField,
268
- [FilterOption.CaseSlaCondition]: CaseSlaConditionFilterValueField,
269
- [FilterOption.CaseReactionTime]: CaseReactionTimeFilterValueField,
270
- [FilterOption.CaseResolutionTime]: CaseResolutionTimeFilterValueField,
271
- [FilterOption.CaseActualReactionTime]: CaseActualReactionTimeFilterValueField,
272
- [FilterOption.CaseActualResolutionTime]:
273
- CaseActualResolutionTimeFilterValueField,
274
- [FilterOption.HasAttachment]: HasAttachmentFilter,
275
- };
226
+ export const FilterOptionToValueComponentMap: Record<FilterOption, Component> =
227
+ {
228
+ [FilterOption.Agent]: AgentFilter,
229
+ [FilterOption.AgentStatus]: AgentStatusFilter,
230
+ [FilterOption.UtilizationProgress]: UtilizationProgressFilter,
231
+ [FilterOption.Skill]: SkillFilter,
232
+ [FilterOption.Region]: RegionFilter,
233
+ [FilterOption.Auditor]: AuditorFilter,
234
+ [FilterOption.Supervisor]: SupervisorFilter,
235
+ [FilterOption.AmdResult]: AmdResultFilter,
236
+ [FilterOption.Contact]: ContactFilter,
237
+ [FilterOption.CallDirection]: CallDirectionFilterValueField,
238
+ [FilterOption.Rated]: HasRatingFilterValueField,
239
+ [FilterOption.Gateway]: GatewayFilter,
240
+ [FilterOption.Grantee]: GranteeFilter,
241
+ [FilterOption.HangupCause]: HangupCauseFilterValueField,
242
+ [FilterOption.Queue]: QueueFilter,
243
+ [FilterOption.QueueType]: QueueTypeFilter,
244
+ [FilterOption.QueuePeriod]: QueuePeriodFilter,
245
+ [FilterOption.RatedBy]: RatedByFilter,
246
+ [FilterOption.HasFile]: HasFileFilter,
247
+ [FilterOption.Score]: ScoreFilter,
248
+ [FilterOption.Tag]: TagFilter,
249
+ [FilterOption.TalkDuration]: TalkDurationFilter,
250
+ [FilterOption.Team]: TeamFilter,
251
+ [FilterOption.TotalDuration]: TotalDurationFilter,
252
+ [FilterOption.HasTranscription]: HasTranscriptionFilter,
253
+ [FilterOption.HasUser]: HasUserFilter,
254
+ [FilterOption.User]: UserFilter,
255
+ [FilterOption.Variable]: VariableFilter,
256
+ [FilterOption.CreatedAt]: DateTimeOptionsFilterValueField,
257
+ [FilterOption.CaseStatus]: CaseStatusFilterValueField,
258
+ [FilterOption.CaseSource]: CaseSourceFilterValueField,
259
+ [FilterOption.CaseService]: CaseServiceFilterValueField,
260
+ [FilterOption.CaseAuthor]: CaseAuthorFilterValueField,
261
+ [FilterOption.CaseReporter]: CaseReporterFilterValueField,
262
+ [FilterOption.CaseImpacted]: CaseImpactedFilterValueField,
263
+ [FilterOption.CasePriority]: CasePriorityFilterValueField,
264
+ [FilterOption.CaseCloseReasonGroups]: CaseCloseReasonGroupsFilterValueField,
265
+ [FilterOption.Rating]: RatingFromToFilter,
266
+ [FilterOption.CaseSla]: CaseSlaFilterValueField,
267
+ [FilterOption.CaseSlaCondition]: CaseSlaConditionFilterValueField,
268
+ [FilterOption.CaseReactionTime]: CaseReactionTimeFilterValueField,
269
+ [FilterOption.CaseResolutionTime]: CaseResolutionTimeFilterValueField,
270
+ [FilterOption.CaseActualReactionTime]:
271
+ CaseActualReactionTimeFilterValueField,
272
+ [FilterOption.CaseActualResolutionTime]:
273
+ CaseActualResolutionTimeFilterValueField,
274
+ [FilterOption.HasAttachment]: HasAttachmentFilter,
275
+ };
276
276
 
277
277
  export const FilterOptionToPreviewComponentMap: Record<
278
- FilterOptionName,
278
+ FilterOption,
279
279
  Component
280
280
  > = {
281
281
  [FilterOption.CreatedAt]: DateTimeOptionsFilterValuePreview,
@@ -328,10 +328,11 @@ export const FilterOptionToPreviewComponentMap: Record<
328
328
  };
329
329
 
330
330
  export const FilterOptionToPreviewApiSearchMethodMap: Record<
331
- FilterOptionName,
332
- (unknown) => {
333
- items;
334
- }
331
+ FilterOption,
332
+ (...params: FilterConfigSearchMethodParams) => Promise<{
333
+ items: unknown[];
334
+ next?: boolean;
335
+ }>
335
336
  > = {
336
337
  [FilterOption.Agent]: agentSearchMethod,
337
338
  [FilterOption.Gateway]: gatewaySearchMethod,
@@ -4,7 +4,7 @@
4
4
  v-if="model"
5
5
  :label="`${t('reusable.from')}:`"
6
6
  :placeholder="t('webitelUI.filters.filterValue')"
7
- :v="v$.model?.from"
7
+ :v="vFrom"
8
8
  :model-value="model.from"
9
9
  class="rating-from-to-filter-value-field__input"
10
10
  @update:model-value="handleInput('from', $event)"
@@ -14,7 +14,7 @@
14
14
  v-if="model"
15
15
  :label="`${t('reusable.to')}:`"
16
16
  :placeholder="t('webitelUI.filters.filterValue')"
17
- :v="v$.model?.to"
17
+ :v="vTo"
18
18
  :model-value="model.to"
19
19
  class="rating-from-to-filter-value-field__input"
20
20
  @update:model-value="handleInput('to', $event)"
@@ -48,7 +48,9 @@ const emit = defineEmits<{
48
48
 
49
49
  const { t } = useI18n();
50
50
 
51
- const v$ = useVuelidate(
51
+ const v$ = useVuelidate<{
52
+ model: ModelValue;
53
+ }>(
52
54
  computed(() => ({
53
55
  model: {
54
56
  from: {
@@ -73,6 +75,17 @@ const v$ = useVuelidate(
73
75
  );
74
76
  v$.value.$touch();
75
77
 
78
+ const vFrom = computed(() => {
79
+ const modelValidation = v$.value.model;
80
+ if (!modelValidation) return undefined;
81
+ return modelValidation.from;
82
+ });
83
+ const vTo = computed(() => {
84
+ const modelValidation = v$.value.model;
85
+ if (!modelValidation) return undefined;
86
+ return modelValidation.to;
87
+ });
88
+
76
89
  const handleInput = (key: keyof ModelValue, value: number) => {
77
90
  const newValue = {
78
91
  ...model.value,
@@ -22,7 +22,10 @@
22
22
  import { useI18n } from 'vue-i18n';
23
23
 
24
24
  const props = defineProps<{
25
- value: number[];
25
+ value: {
26
+ from: number | null;
27
+ to: number | null;
28
+ };
26
29
  }>();
27
30
 
28
31
  const { t } = useI18n();
@@ -5,7 +5,7 @@
5
5
  :model-value="model.from"
6
6
  :max="props.numberMax"
7
7
  :min="0"
8
- :v="v$.model?.from"
8
+ :v="vFrom"
9
9
  :label="`${t('reusable.from')}:`"
10
10
  :placeholder="t('webitelUI.filters.filterValue')"
11
11
  class="score-from-to-filter-value-field__input"
@@ -18,7 +18,7 @@
18
18
  :model-value="model.to"
19
19
  :max="props.numberMax"
20
20
  :min="0"
21
- :v="v$.model?.to"
21
+ :v="vTo"
22
22
  :label="`${t('reusable.to')}:`"
23
23
  :placeholder="t('webitelUI.filters.filterValue')"
24
24
  class="score-from-to-filter-value-field__input"
@@ -63,7 +63,9 @@ const emit = defineEmits<{
63
63
 
64
64
  const { t } = useI18n();
65
65
 
66
- const v$ = useVuelidate(
66
+ const v$ = useVuelidate<{
67
+ model: ModelValue;
68
+ }>(
67
69
  computed(() => ({
68
70
  model: {
69
71
  from: {
@@ -83,6 +85,17 @@ const v$ = useVuelidate(
83
85
  );
84
86
  v$.value.$touch();
85
87
 
88
+ const vFrom = computed(() => {
89
+ const modelValidation = v$.value.model;
90
+ if (!modelValidation) return undefined;
91
+ return modelValidation.from;
92
+ });
93
+ const vTo = computed(() => {
94
+ const modelValidation = v$.value.model;
95
+ if (!modelValidation) return undefined;
96
+ return modelValidation.to;
97
+ });
98
+
86
99
  const handleInput = (key: keyof ModelValue, value: number) => {
87
100
  const newValue = {
88
101
  ...model.value,
@@ -22,7 +22,10 @@
22
22
  import { useI18n } from 'vue-i18n';
23
23
 
24
24
  const props = defineProps<{
25
- value: number[];
25
+ value: {
26
+ from: number | null;
27
+ to: number | null;
28
+ };
26
29
  }>();
27
30
 
28
31
  const { t } = useI18n();
@@ -24,7 +24,7 @@ const { t } = useI18n();
24
24
  const tags = computed(() => {
25
25
  const tagLocaleMap = CallHistoryTagFilterOptions.reduce(
26
26
  (acc, option) => {
27
- acc[option.value] = option.locale;
27
+ acc[String(option.value)] = option.locale;
28
28
  return acc;
29
29
  },
30
30
  {} as Record<string, string>,
@@ -11,7 +11,9 @@
11
11
 
12
12
  <script lang="ts" setup>
13
13
  const props = defineProps<{
14
- value: number[];
14
+ value: {
15
+ name?: string;
16
+ }[];
15
17
  }>();
16
18
  </script>
17
19
 
@@ -5,11 +5,11 @@ import { useI18n } from 'vue-i18n';
5
5
  export function useQueueTypeOptions() {
6
6
  const { t } = useI18n();
7
7
 
8
- const mapQueueTypeToLabel = (value: string) =>
8
+ const mapQueueTypeToLabel = (value: string | number) =>
9
9
  t(`objects.queue.type.${value}`);
10
10
 
11
11
  const options = computed(() =>
12
- Object.entries(QueueType).map(([key, value]) => ({
12
+ Object.entries(QueueType).map(([, value]) => ({
13
13
  value,
14
14
  label: mapQueueTypeToLabel(value),
15
15
  })),
@@ -1,8 +1,8 @@
1
1
  import type { IFilter } from '../../../classes/Filter';
2
- import type { TFilterConfig } from './FilterConfig';
2
+ import type { AnyFilterConfig } from '../classes/FilterConfig';
3
3
 
4
4
  export type DynamicFilterPreviewComponentProps = {
5
5
  value: unknown;
6
- filterConfig: TFilterConfig;
6
+ filterConfig: AnyFilterConfig;
7
7
  filter: IFilter;
8
8
  };
@@ -1,4 +1,3 @@
1
- import type { WtTableHeader } from '@webitel/ui-sdk/components/wt-table/types/WtTable';
2
1
  import { sortToQueryAdapter } from '@webitel/ui-sdk/scripts';
3
2
  import { SortSymbols } from '@webitel/ui-sdk/scripts/sortQueryAdapters';
4
3
  import { computed, nextTick, ref } from 'vue';
@@ -6,10 +5,14 @@ import { computed, nextTick, ref } from 'vue';
6
5
  import { createDatalistStore } from '../_shared/createDatalistStore';
7
6
  import { PersistedStorageType } from '../persist/PersistedStorage.types';
8
7
  import { usePersistedStorage } from '../persist/usePersistedStorage';
9
- import type { useTableStoreConfig } from '../types/tableStore.types';
8
+ import type { Identifiable } from '../types/createDatalistStore.types';
9
+ import type {
10
+ DatalistTableHeader,
11
+ useTableStoreConfig,
12
+ } from '../types/tableStore.types';
10
13
 
11
14
  interface TableHeadersStoreBodyParams {
12
- rawHeaders: WtTableHeader[];
15
+ rawHeaders: DatalistTableHeader[];
13
16
  id: string;
14
17
  }
15
18
 
@@ -17,7 +20,7 @@ export const tableHeadersStoreBody = ({
17
20
  rawHeaders,
18
21
  id,
19
22
  }: TableHeadersStoreBodyParams) => {
20
- const headers = ref<WtTableHeader[]>(rawHeaders);
23
+ const headers = ref<DatalistTableHeader[]>(rawHeaders);
21
24
  const isReorderingColumn = ref(false);
22
25
 
23
26
  const shownHeaders = computed(() => {
@@ -104,7 +107,7 @@ export const tableHeadersStoreBody = ({
104
107
  const fieldsSet = new Set(fields);
105
108
  const mainFieldNames = new Set(headers.value.map((header) => header.field));
106
109
 
107
- const mainHeaders = headers.value.map((header: WtTableHeader) => ({
110
+ const mainHeaders = headers.value.map((header: DatalistTableHeader) => ({
108
111
  ...header,
109
112
  show: fieldsSet.has(header.field),
110
113
  }));
@@ -311,7 +314,7 @@ export const tableHeadersStoreBody = ({
311
314
  };
312
315
  };
313
316
 
314
- export const createTableHeadersStore = <Entity>(
317
+ export const createTableHeadersStore = <Entity extends Identifiable>(
315
318
  namespace: string,
316
319
  config: useTableStoreConfig<Entity>,
317
320
  { headers: rawHeaders },
@@ -2,6 +2,7 @@ import { ref } from 'vue';
2
2
 
3
3
  import { createDatalistStore } from '../_shared/createDatalistStore';
4
4
  import { usePersistedStorage } from '../persist/usePersistedStorage';
5
+ import type { Identifiable } from '../types/createDatalistStore.types';
5
6
  import type { useTableStoreConfig } from '../types/tableStore.types';
6
7
 
7
8
  export const tablePaginationStoreBody = () => {
@@ -63,7 +64,7 @@ export const tablePaginationStoreBody = () => {
63
64
  };
64
65
  };
65
66
 
66
- export const createTablePaginationStore = <Entity>(
67
+ export const createTablePaginationStore = <Entity extends Identifiable>(
67
68
  namespace: string,
68
69
  config: useTableStoreConfig<Entity>,
69
70
  ) => {
@@ -9,18 +9,14 @@ import {
9
9
  import { createTableFiltersStore } from '../filters/createTableFiltersStore';
10
10
  import { createTableHeadersStore } from '../headers/createTableHeadersStore';
11
11
  import { createTablePaginationStore } from '../pagination/createTablePaginationStore';
12
+ import type { Identifiable } from '../types/createDatalistStore.types';
12
13
  import type {
13
14
  LoadDataListOptions,
14
15
  PatchItemPropertyParams,
15
16
  useTableStoreConfig,
16
17
  } from '../types/tableStore.types';
17
18
 
18
- export const tableStoreBody = <
19
- Entity extends {
20
- id: string;
21
- etag?: string;
22
- },
23
- >(
19
+ export const tableStoreBody = <Entity extends Identifiable>(
24
20
  namespace: string,
25
21
  config: useTableStoreConfig<Entity>,
26
22
  ) => {
@@ -360,12 +356,7 @@ export const tableStoreBody = <
360
356
  };
361
357
  };
362
358
 
363
- export const createTableStore = <
364
- Entity extends {
365
- id: string;
366
- etag?: string;
367
- },
368
- >(
359
+ export const createTableStore = <Entity extends Identifiable>(
369
360
  namespace: string,
370
361
  config: useTableStoreConfig<Entity>,
371
362
  ) => {
@@ -9,7 +9,7 @@ import type { useTableStoreConfig } from './tableStore.types';
9
9
  export type Patch = Record<string, unknown> | Ref<unknown>;
10
10
 
11
11
  export type Identifiable = {
12
- id: string;
12
+ id?: string | number;
13
13
  etag?: string;
14
14
  };
15
15