@webitel/ui-datalist 1.1.46 → 1.1.48

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 (117) hide show
  1. package/package.json +2 -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 +20 -1
  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-filter-value-field.vue +46 -1
  28. package/src/modules/filters/modules/filterConfig/components/_shared/date-time-filter/date-time-options/date-time-options-filter-value-field.vue +59 -3
  29. package/src/modules/filters/modules/filterConfig/components/_shared/date-time-filter/date-time-options/date-time-options-filter-value-preview.vue +13 -7
  30. package/src/modules/filters/modules/filterConfig/components/_shared/durations/duration-filter-value-field.vue +16 -3
  31. package/src/modules/filters/modules/filterConfig/components/_shared/lookup-filter-preview/lookup-filter-value-preview.vue +14 -6
  32. package/src/modules/filters/modules/filterConfig/components/case-actual-reaction-time/case-actual-reaction-time-filter-value-preview.vue +4 -1
  33. package/src/modules/filters/modules/filterConfig/components/case-actual-resolution-time/case-actual-resolution-time-filter-value-preview.vue +4 -1
  34. package/src/modules/filters/modules/filterConfig/components/case-assignee/case-assignee-filter-value-field.vue +16 -3
  35. package/src/modules/filters/modules/filterConfig/components/case-assignee/case-assignee-filter-value-preview.vue +7 -3
  36. package/src/modules/filters/modules/filterConfig/components/case-assignee/filterConfig.ts +9 -5
  37. package/src/modules/filters/modules/filterConfig/components/case-close-reason-groups/case-close-reason-groups-filter-value-field.vue +16 -3
  38. package/src/modules/filters/modules/filterConfig/components/case-close-reason-groups/case-close-reason-groups-filter-value-preview.vue +2 -2
  39. package/src/modules/filters/modules/filterConfig/components/case-priority/case-priority-filter-value-preview.vue +2 -2
  40. package/src/modules/filters/modules/filterConfig/components/case-reaction-time/case-reaction-time-filter-value-preview.vue +4 -1
  41. package/src/modules/filters/modules/filterConfig/components/case-resolution-time/case-resolution-time-filter-value-preview.vue +4 -1
  42. package/src/modules/filters/modules/filterConfig/components/case-service/case-service-filter-value-field.vue +1 -1
  43. package/src/modules/filters/modules/filterConfig/components/case-service/case-service-filter-value-preview.vue +2 -2
  44. package/src/modules/filters/modules/filterConfig/components/case-sla/case-sla-filter-value-preview.vue +2 -2
  45. package/src/modules/filters/modules/filterConfig/components/case-sla-condition/case-sla-condition-filter-value-field.vue +16 -3
  46. package/src/modules/filters/modules/filterConfig/components/case-sla-condition/case-sla-condition-filter-value-preview.vue +2 -2
  47. package/src/modules/filters/modules/filterConfig/components/case-source/case-source-filter-value-preview.vue +2 -2
  48. package/src/modules/filters/modules/filterConfig/components/case-status/case-status-filter-value-field.vue +16 -3
  49. package/src/modules/filters/modules/filterConfig/components/case-status/case-status-filter-value-preview.vue +2 -2
  50. package/src/modules/filters/modules/filterConfig/components/contact-group/contact-group-filter-value-field.vue +19 -6
  51. package/src/modules/filters/modules/filterConfig/components/contact-group/contact-group-filter-value-preview.vue +7 -3
  52. package/src/modules/filters/modules/filterConfig/components/contact-group/index.ts +6 -3
  53. package/src/modules/filters/modules/filterConfig/components/contact-label/index.ts +14 -5
  54. package/src/modules/filters/modules/filterConfig/components/has-attachment/has-attachment-filter-value-field.vue +1 -1
  55. package/src/modules/filters/modules/filterConfig/components/index.ts +58 -57
  56. package/src/modules/filters/modules/filterConfig/components/rating/rating-from-to-filter-value-field.vue +16 -3
  57. package/src/modules/filters/modules/filterConfig/components/rating/rating-from-to-filter-value-preview.vue +4 -1
  58. package/src/modules/filters/modules/filterConfig/components/score/score-from-to-filter-value-field.vue +16 -3
  59. package/src/modules/filters/modules/filterConfig/components/score/score-from-to-filter-value-preview.vue +4 -1
  60. package/src/modules/filters/modules/filterConfig/components/tag/tag-filter-value-preview.vue +1 -1
  61. package/src/modules/filters/modules/filterConfig/components/utilization-progress/utilization-progress-filter-value-preview.vue +3 -1
  62. package/src/modules/filters/modules/filterConfig/components/variable/variable-filter-value-field.vue +2 -2
  63. package/src/modules/filters/modules/filterConfig/composables/useQueueTypeOptions.ts +2 -2
  64. package/src/modules/filters/modules/filterConfig/types/DynamicFilterPreviewComponent.ts +2 -2
  65. package/src/modules/headers/createTableHeadersStore.ts +9 -6
  66. package/src/modules/pagination/createTablePaginationStore.ts +2 -1
  67. package/src/modules/table/createTableStore.store.ts +3 -12
  68. package/src/modules/types/createDatalistStore.types.ts +1 -1
  69. package/src/modules/types/tableStore.types.ts +12 -2
  70. package/types/modules/card/composables/useCardComponent.d.ts +3 -3
  71. package/types/modules/card/composables/useCardValidation.d.ts +1 -1
  72. package/types/modules/card/composables/useNestedCardComponent.d.ts +3 -3
  73. package/types/modules/card/stores/createCardStore.d.ts +5 -1
  74. package/types/modules/filter-presets/api/PresetQuery.d.ts +2 -2
  75. package/types/modules/filter-presets/components/_shared/input-fields/preset-name-field.vue.d.ts +1 -2
  76. package/types/modules/filter-presets/components/apply-preset/apply-preset-action.vue.d.ts +2 -2
  77. package/types/modules/filter-presets/stores/createFilterPresetsStore.d.ts +90 -16
  78. package/types/modules/filter-presets/stores/headers/headers.d.ts +2 -2
  79. package/types/modules/filters/classes/FiltersManager.d.ts +7 -2
  80. package/types/modules/filters/components/preview/dynamic-filter-preview.vue.d.ts +2 -3
  81. package/types/modules/filters/components/table-filters-panel.vue.d.ts +2 -2
  82. package/types/modules/filters/composables/useFilterConfigsToolkit.d.ts +6 -2
  83. package/types/modules/filters/createTableFiltersStore.d.ts +17 -6
  84. package/types/modules/filters/modules/filterConfig/classes/FilterConfig.d.ts +33 -8
  85. package/types/modules/filters/modules/filterConfig/classes/createFilterConfig.d.ts +1 -1
  86. package/types/modules/filters/modules/filterConfig/components/_custom/filterConfig.d.ts +3 -3
  87. package/types/modules/filters/modules/filterConfig/components/_shared/date-time-filter/date-time-filter-value-field.vue.d.ts +2 -0
  88. 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
  89. package/types/modules/filters/modules/filterConfig/components/_shared/lookup-filter-preview/lookup-filter-value-preview.vue.d.ts +1 -4
  90. package/types/modules/filters/modules/filterConfig/components/case-actual-reaction-time/case-actual-reaction-time-filter-value-preview.vue.d.ts +4 -1
  91. package/types/modules/filters/modules/filterConfig/components/case-actual-resolution-time/case-actual-resolution-time-filter-value-preview.vue.d.ts +4 -1
  92. package/types/modules/filters/modules/filterConfig/components/case-assignee/case-assignee-filter-value-preview.vue.d.ts +4 -2
  93. package/types/modules/filters/modules/filterConfig/components/case-assignee/filterConfig.d.ts +10 -5
  94. package/types/modules/filters/modules/filterConfig/components/case-close-reason-groups/case-close-reason-groups-filter-value-preview.vue.d.ts +2 -2
  95. package/types/modules/filters/modules/filterConfig/components/case-priority/case-priority-filter-value-preview.vue.d.ts +2 -2
  96. package/types/modules/filters/modules/filterConfig/components/case-reaction-time/case-reaction-time-filter-value-preview.vue.d.ts +4 -1
  97. package/types/modules/filters/modules/filterConfig/components/case-resolution-time/case-resolution-time-filter-value-preview.vue.d.ts +4 -1
  98. package/types/modules/filters/modules/filterConfig/components/case-service/case-service-filter-value-preview.vue.d.ts +2 -2
  99. package/types/modules/filters/modules/filterConfig/components/case-sla/case-sla-filter-value-preview.vue.d.ts +2 -2
  100. package/types/modules/filters/modules/filterConfig/components/case-sla-condition/case-sla-condition-filter-value-preview.vue.d.ts +2 -2
  101. package/types/modules/filters/modules/filterConfig/components/case-source/case-source-filter-value-preview.vue.d.ts +2 -2
  102. package/types/modules/filters/modules/filterConfig/components/case-status/case-status-filter-value-preview.vue.d.ts +2 -2
  103. package/types/modules/filters/modules/filterConfig/components/contact-group/contact-group-filter-value-field.vue.d.ts +2 -2
  104. package/types/modules/filters/modules/filterConfig/components/contact-group/contact-group-filter-value-preview.vue.d.ts +4 -2
  105. package/types/modules/filters/modules/filterConfig/components/contact-group/index.d.ts +19 -14
  106. package/types/modules/filters/modules/filterConfig/components/contact-label/index.d.ts +4 -2
  107. package/types/modules/filters/modules/filterConfig/components/has-attachment/has-attachment-filter-value-field.vue.d.ts +3 -3
  108. package/types/modules/filters/modules/filterConfig/components/index.d.ts +50 -39
  109. package/types/modules/filters/modules/filterConfig/components/rating/rating-from-to-filter-value-preview.vue.d.ts +4 -1
  110. package/types/modules/filters/modules/filterConfig/components/score/score-from-to-filter-value-preview.vue.d.ts +4 -1
  111. package/types/modules/filters/modules/filterConfig/components/utilization-progress/utilization-progress-filter-value-preview.vue.d.ts +3 -1
  112. package/types/modules/filters/modules/filterConfig/types/DynamicFilterPreviewComponent.d.ts +2 -2
  113. package/types/modules/headers/createTableHeadersStore.d.ts +66 -12
  114. package/types/modules/pagination/createTablePaginationStore.d.ts +2 -1
  115. package/types/modules/table/createTableStore.store.d.ts +93 -24
  116. package/types/modules/types/createDatalistStore.types.d.ts +1 -1
  117. package/types/modules/types/tableStore.types.d.ts +11 -2
@@ -7,14 +7,14 @@
7
7
  props.filterConfig.field.kind === WtTypeExtensionFieldKind.Boolean
8
8
  "
9
9
  >
10
- <has-option-filter-value-preview :value="props.value" />
10
+ <has-option-filter-value-preview :value="!!props.value" />
11
11
  </template>
12
12
  <template
13
13
  v-else-if="
14
14
  props.filterConfig.field.kind === WtTypeExtensionFieldKind.Calendar
15
15
  "
16
16
  >
17
- <date-time-options-filter-value-preview :value="props.value" />
17
+ <date-time-options-filter-value-preview :value="dateTimeValue" />
18
18
  </template>
19
19
  <template v-else>
20
20
  {{ props.value }}
@@ -22,7 +22,10 @@
22
22
  </template>
23
23
 
24
24
  <script setup lang="ts">
25
- import { WtTypeExtensionFieldKind } from '@webitel/ui-sdk/enums';
25
+ import {
26
+ type RelativeDatetimeValue,
27
+ WtTypeExtensionFieldKind,
28
+ } from '@webitel/ui-sdk/enums';
26
29
  import { computed } from 'vue';
27
30
 
28
31
  import { DynamicFilterPreviewComponentProps } from '../../types/DynamicFilterPreviewComponent';
@@ -37,11 +40,24 @@ const props = defineProps<
37
40
  }
38
41
  >();
39
42
 
43
+ /* the filter value is dynamically shaped by field kind;
44
+ the Calendar branch always stores a datetime value */
45
+ const dateTimeValue = computed(
46
+ () =>
47
+ props.value as
48
+ | RelativeDatetimeValue
49
+ | {
50
+ from: number;
51
+ to: number;
52
+ },
53
+ );
54
+
40
55
  const showLookupValuePreview = computed(() => {
41
- return [
56
+ const lookupKinds: string[] = [
42
57
  WtTypeExtensionFieldKind.Multiselect,
43
58
  WtTypeExtensionFieldKind.Select,
44
- ].includes(props.filterConfig.field.kind);
59
+ ];
60
+ return lookupKinds.includes(props.filterConfig.field.kind);
45
61
  });
46
62
  </script>
47
63
 
@@ -5,6 +5,8 @@
5
5
  :model-value="model?.from"
6
6
  class="date-time-filter-value-field__picker"
7
7
  show-time
8
+ required
9
+ :v="v$.from"
8
10
  @update:model-value="handleInput('from', $event)"
9
11
  />
10
12
 
@@ -13,14 +15,18 @@
13
15
  :model-value="model?.to"
14
16
  class="date-time-filter-value-field__picker"
15
17
  show-time
18
+ required
19
+ :v="v$.to"
16
20
  @update:model-value="handleInput('to', $event)"
17
21
  />
18
22
  </div>
19
23
  </template>
20
24
 
21
25
  <script lang="ts" setup>
26
+ import { useVuelidate } from '@vuelidate/core';
27
+ import { required } from '@vuelidate/validators';
22
28
  import { endOfToday, startOfToday } from 'date-fns';
23
- import { onMounted } from 'vue';
29
+ import { computed, onMounted, watch } from 'vue';
24
30
  import { useI18n } from 'vue-i18n';
25
31
 
26
32
  type ModelValue = {
@@ -28,9 +34,48 @@ type ModelValue = {
28
34
  to: number;
29
35
  };
30
36
 
37
+ const emit = defineEmits<{
38
+ 'update:invalid': [
39
+ boolean,
40
+ ];
41
+ }>();
42
+
31
43
  const model = defineModel<ModelValue>();
32
44
  const { t } = useI18n();
33
45
 
46
+ const from = computed(() => model.value?.from);
47
+ const to = computed(() => model.value?.to);
48
+
49
+ const v$ = useVuelidate(
50
+ computed(() => ({
51
+ from: {
52
+ required,
53
+ },
54
+ to: {
55
+ required,
56
+ },
57
+ })),
58
+ {
59
+ from,
60
+ to,
61
+ },
62
+ {
63
+ $autoDirty: true,
64
+ },
65
+ );
66
+
67
+ v$.value.$touch();
68
+
69
+ watch(
70
+ () => v$.value.$invalid,
71
+ (invalid) => {
72
+ emit('update:invalid', invalid);
73
+ },
74
+ {
75
+ immediate: true,
76
+ },
77
+ );
78
+
34
79
  const handleInput = (key: keyof ModelValue, value: number) => {
35
80
  model.value = {
36
81
  ...model.value,
@@ -10,26 +10,33 @@
10
10
  />
11
11
  <wt-datepicker
12
12
  v-if="showDatepickers"
13
- :model-value="model.from"
13
+ :model-value="absoluteModel?.from"
14
14
  :label="t('reusable.from')"
15
15
  show-time
16
+ required
17
+ :v="v$.from"
16
18
  @update:model-value="changeAbsoluteValue($event, 'from')"
17
19
  />
18
20
  <wt-datepicker
19
21
  v-if="showDatepickers"
20
- :model-value="model.to"
22
+ :model-value="absoluteModel?.to"
21
23
  :label="t('reusable.to')"
22
24
  show-time
25
+ required
26
+ :v="v$.to"
23
27
  @update:model-value="changeAbsoluteValue($event, 'to')"
24
28
  />
25
29
  </div>
26
30
  </template>
27
31
 
28
32
  <script lang="ts" setup>
33
+ import { useVuelidate } from '@vuelidate/core';
34
+ import { required } from '@vuelidate/validators';
29
35
  import { WtRadio } from '@webitel/ui-sdk/components';
30
36
  import { RelativeDatetimeValue } from '@webitel/ui-sdk/enums';
37
+ import { isEmpty } from '@webitel/ui-sdk/scripts';
31
38
  import { endOfToday, startOfToday } from 'date-fns';
32
- import { computed, ref } from 'vue';
39
+ import { computed, ref, watch } from 'vue';
33
40
  import { useI18n } from 'vue-i18n';
34
41
 
35
42
  const model = defineModel<
@@ -40,6 +47,12 @@ const model = defineModel<
40
47
  }
41
48
  >();
42
49
 
50
+ const emit = defineEmits<{
51
+ 'update:invalid': [
52
+ boolean,
53
+ ];
54
+ }>();
55
+
43
56
  const { t } = useI18n();
44
57
 
45
58
  const radioOpts = [
@@ -67,10 +80,53 @@ const initialize = () => {
67
80
 
68
81
  initialize();
69
82
 
83
+ const absoluteModel = computed(() => {
84
+ return !isEmpty(model.value) && typeof model.value === 'object'
85
+ ? model.value
86
+ : undefined;
87
+ });
88
+
70
89
  const showDatepickers = computed(() => {
71
90
  return selectedRadioValue.value === RelativeDatetimeValue.Custom;
72
91
  });
73
92
 
93
+ const from = computed(() => absoluteModel.value?.from);
94
+ const to = computed(() => absoluteModel.value?.to);
95
+
96
+ const v$ = useVuelidate(
97
+ computed(() => ({
98
+ from: showDatepickers.value
99
+ ? {
100
+ required,
101
+ }
102
+ : {},
103
+ to: showDatepickers.value
104
+ ? {
105
+ required,
106
+ }
107
+ : {},
108
+ })),
109
+ {
110
+ from,
111
+ to,
112
+ },
113
+ {
114
+ $autoDirty: true,
115
+ },
116
+ );
117
+
118
+ v$.value.$touch();
119
+
120
+ watch(
121
+ () => v$.value.$invalid,
122
+ (invalid) => {
123
+ emit('update:invalid', invalid);
124
+ },
125
+ {
126
+ immediate: true,
127
+ },
128
+ );
129
+
74
130
  const handleRadioChange = (value: RelativeDatetimeValue) => {
75
131
  selectedRadioValue.value = value;
76
132
  if (value === RelativeDatetimeValue.Custom) {
@@ -26,7 +26,7 @@
26
26
 
27
27
  <script lang="ts" setup>
28
28
  import { FormatDateMode, RelativeDatetimeValue } from '@webitel/ui-sdk/enums';
29
- import { isRelativeDatetimeValue } from '@webitel/ui-sdk/scripts';
29
+ import { isEmpty, isRelativeDatetimeValue } from '@webitel/ui-sdk/scripts';
30
30
  import { formatDate } from '@webitel/ui-sdk/utils';
31
31
  import { computed } from 'vue';
32
32
  import { useI18n } from 'vue-i18n';
@@ -46,16 +46,22 @@ const isRelativeValue = computed(() => {
46
46
  return isRelativeDatetimeValue(props.value);
47
47
  });
48
48
 
49
+ const absoluteValue = computed(() => {
50
+ return !isEmpty(props.value) && typeof props.value === 'object'
51
+ ? props.value
52
+ : null;
53
+ });
54
+
49
55
  const from = computed(() => {
50
- return isRelativeDatetimeValue.value
51
- ? false
52
- : formatDate(props.value.from, FormatDateMode.DATETIME);
56
+ return absoluteValue.value
57
+ ? formatDate(absoluteValue.value.from, FormatDateMode.DATETIME)
58
+ : false;
53
59
  });
54
60
 
55
61
  const to = computed(() => {
56
- return isRelativeDatetimeValue.value
57
- ? false
58
- : formatDate(props.value.to, FormatDateMode.DATETIME);
62
+ return absoluteValue.value
63
+ ? formatDate(absoluteValue.value.to, FormatDateMode.DATETIME)
64
+ : false;
59
65
  });
60
66
  </script>
61
67
 
@@ -4,7 +4,7 @@
4
4
  v-if="model"
5
5
  :label="t('reusable.from')"
6
6
  :model-value="model.from"
7
- :v="v$.model?.from"
7
+ :v="vFrom"
8
8
  format="mm:ss"
9
9
  @update:model-value="handleInput('from', $event)"
10
10
  />
@@ -12,7 +12,7 @@
12
12
  v-if="model"
13
13
  :label="t('reusable.to')"
14
14
  :model-value="model.to"
15
- :v="v$.model?.to"
15
+ :v="vTo"
16
16
  format="mm:ss"
17
17
  @update:model-value="handleInput('to', $event)"
18
18
  />
@@ -50,7 +50,9 @@ const isValueEmpty = () => {
50
50
  return !!model?.value?.to || !!model?.value?.from;
51
51
  };
52
52
 
53
- const v$ = useVuelidate(
53
+ const v$ = useVuelidate<{
54
+ model: ModelValue;
55
+ }>(
54
56
  computed(() => ({
55
57
  model: {
56
58
  from: {
@@ -70,6 +72,17 @@ const v$ = useVuelidate(
70
72
  );
71
73
  v$.value.$touch();
72
74
 
75
+ const vFrom = computed(() => {
76
+ const modelValidation = v$.value.model;
77
+ if (!modelValidation) return undefined;
78
+ return modelValidation.from;
79
+ });
80
+ const vTo = computed(() => {
81
+ const modelValidation = v$.value.model;
82
+ if (!modelValidation) return undefined;
83
+ return modelValidation.to;
84
+ });
85
+
73
86
  const handleInput = (key: keyof ModelValue, value: number) => {
74
87
  const newValue = {
75
88
  ...model.value,
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <ul v-if="value">
3
3
  <li
4
- v-for="({ name, id }, index) of value"
4
+ v-for="({ name, id }, index) of items"
5
5
  :key="id || index"
6
6
  >
7
7
  {{ name }}
@@ -10,12 +10,20 @@
10
10
  </template>
11
11
 
12
12
  <script lang="ts" setup>
13
- defineProps<{
14
- /**
15
- * would be great to use a type for this
16
- * */
17
- value: Record<string, unknown>[];
13
+ import { computed } from 'vue';
14
+
15
+ const props = defineProps<{
16
+ value: unknown;
18
17
  }>();
18
+
19
+ const items = computed<
20
+ Array<{
21
+ id?: PropertyKey;
22
+ name?: unknown;
23
+ }>
24
+ >(() => {
25
+ return Array.isArray(props.value) ? props.value : [];
26
+ });
19
27
  </script>
20
28
 
21
29
  <style scoped></style>
@@ -23,7 +23,10 @@ import { format } from 'date-fns';
23
23
  import { useI18n } from 'vue-i18n';
24
24
 
25
25
  const props = defineProps<{
26
- value: number[];
26
+ value: {
27
+ from: number | null;
28
+ to: number | null;
29
+ };
27
30
  }>();
28
31
 
29
32
  const { t } = useI18n();
@@ -23,7 +23,10 @@ import { format } from 'date-fns';
23
23
  import { useI18n } from 'vue-i18n';
24
24
 
25
25
  const props = defineProps<{
26
- value: number[];
26
+ value: {
27
+ from: number | null;
28
+ to: number | null;
29
+ };
27
30
  }>();
28
31
 
29
32
  const { t } = useI18n();
@@ -2,7 +2,7 @@
2
2
  <wt-multi-select
3
3
  :label="t('webitelUI.filters.filterValue')"
4
4
  :search-method="props.filterConfig.searchRecords"
5
- :v="v$.model.list"
5
+ :v="vList"
6
6
  v-model:model-value="model.list"
7
7
  data-key="id"
8
8
  option-value="id"
@@ -10,7 +10,7 @@
10
10
  <wt-checkbox
11
11
  :label="t('reusable.showUnassigned')"
12
12
  :selected="model?.unassigned"
13
- :v="v$.model.unassigned"
13
+ :v="vUnassigned"
14
14
  @update:selected="model.unassigned = $event"
15
15
  />
16
16
  </template>
@@ -53,7 +53,9 @@ const initModel = () => {
53
53
  };
54
54
  onMounted(() => initModel());
55
55
 
56
- const v$ = useVuelidate(
56
+ const v$ = useVuelidate<{
57
+ model: ModelValue;
58
+ }>(
57
59
  computed(() => ({
58
60
  model: {
59
61
  list: {
@@ -73,6 +75,17 @@ const v$ = useVuelidate(
73
75
  );
74
76
  v$.value.$touch();
75
77
 
78
+ const vList = computed(() => {
79
+ const modelValidation = v$.value.model;
80
+ if (!modelValidation) return undefined;
81
+ return modelValidation.list;
82
+ });
83
+ const vUnassigned = computed(() => {
84
+ const modelValidation = v$.value.model;
85
+ if (!modelValidation) return undefined;
86
+ return modelValidation.unassigned;
87
+ });
88
+
76
89
  watch(
77
90
  () => v$.value.$invalid,
78
91
  (invalid) => {
@@ -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,10 @@
1
1
  import { contacts as ContactsAPI } 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 CaseAssigneeFilterValueField from './case-assignee-filter-value-field.vue';
6
10
  import CaseAssigneeFilterValuePreview from './case-assignee-filter-value-preview.vue';
@@ -11,16 +15,16 @@ class CaseAssigneeFilterConfig extends WtSysTypeFilterConfig {
11
15
  valuePreviewComponent = CaseAssigneeFilterValuePreview;
12
16
 
13
17
  searchRecords(
14
- params: object,
15
- { filterValue } = {},
18
+ params: FilterConfigSearchRequestParams,
19
+ { filterValue }: FilterConfigSearchFilterContext = {},
16
20
  ): Promise<{
17
21
  items: unknown[];
18
22
  next?: boolean;
19
23
  }> {
20
24
  if (filterValue?.unassigned && !filterValue.list.length)
21
- return {
25
+ return Promise.resolve({
22
26
  items: [],
23
- };
27
+ });
24
28
  const id =
25
29
  params.id?.list /* general logic from dynamic-filter-preview.vue*/ ||
26
30
  params.id /* wt-select options loadings */ ||
@@ -4,7 +4,7 @@
4
4
  :show-clear="false"
5
5
  :label="t('cases.reason')"
6
6
  :search-method="caseCloseReasonsGroupsSearchMethod"
7
- :v="v$.model.selection"
7
+ :v="vSelection"
8
8
  :model-value="model?.selection"
9
9
  data-key="id"
10
10
  option-value="id"
@@ -18,7 +18,7 @@
18
18
  :disabled="!model.selection"
19
19
  :label="t('webitelUI.filters.filterValue')"
20
20
  :search-method="getConditionList"
21
- :v="v$.model.conditions"
21
+ :v="vConditions"
22
22
  v-model:model-value="model.conditions"
23
23
  data-key="id"
24
24
  option-value="id"
@@ -67,7 +67,9 @@ const initModel = () => {
67
67
  };
68
68
  onMounted(() => initModel());
69
69
 
70
- const v$ = useVuelidate(
70
+ const v$ = useVuelidate<{
71
+ model: ModelValue;
72
+ }>(
71
73
  computed(() => ({
72
74
  model: {
73
75
  selection: {
@@ -88,6 +90,17 @@ const v$ = useVuelidate(
88
90
 
89
91
  v$.value.$touch();
90
92
 
93
+ const vSelection = computed(() => {
94
+ const modelValidation = v$.value.model;
95
+ if (!modelValidation) return undefined;
96
+ return modelValidation.selection;
97
+ });
98
+ const vConditions = computed(() => {
99
+ const modelValidation = v$.value.model;
100
+ if (!modelValidation) return undefined;
101
+ return modelValidation.conditions;
102
+ });
103
+
91
104
  const emit = defineEmits<{
92
105
  'update:invalid': [
93
106
  boolean,
@@ -3,12 +3,12 @@
3
3
  </template>
4
4
 
5
5
  <script lang="ts" setup>
6
- import { CasesCloseReasonGroup } from 'webitel-sdk';
6
+ import { WebitelCasesCloseReasonGroup } 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: CasesCloseReasonGroup[];
11
+ value: WebitelCasesCloseReasonGroup[];
12
12
  }>();
13
13
  </script>
14
14
 
@@ -3,12 +3,12 @@
3
3
  </template>
4
4
 
5
5
  <script lang="ts" setup>
6
- import { CasesPriority } from 'webitel-sdk';
6
+ import { WebitelCasesPriority } 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: CasesPriority[];
11
+ value: WebitelCasesPriority[];
12
12
  }>();
13
13
  </script>
14
14
 
@@ -23,7 +23,10 @@ import { format } from 'date-fns';
23
23
  import { useI18n } from 'vue-i18n';
24
24
 
25
25
  const props = defineProps<{
26
- value: number[];
26
+ value: {
27
+ from: number | null;
28
+ to: number | null;
29
+ };
27
30
  }>();
28
31
 
29
32
  const { t } = useI18n();
@@ -23,7 +23,10 @@ import { format } from 'date-fns';
23
23
  import { useI18n } from 'vue-i18n';
24
24
 
25
25
  const props = defineProps<{
26
- value: number[];
26
+ value: {
27
+ from: number | null;
28
+ to: number | null;
29
+ };
27
30
  }>();
28
31
 
29
32
  const { t } = useI18n();
@@ -21,7 +21,7 @@ import { searchMethod } from './config.js';
21
21
 
22
22
  type ModelValue = string[];
23
23
  const model = defineModel<ModelValue>({
24
- default: [],
24
+ default: (): ModelValue => [],
25
25
  });
26
26
 
27
27
  const catalogData = ref([]);
@@ -3,7 +3,7 @@
3
3
  </template>
4
4
 
5
5
  <script lang="ts" setup>
6
- import { CasesService } from 'webitel-sdk';
6
+ import { WebitelCasesService } from 'webitel-sdk';
7
7
 
8
8
  import LookupFilterValuePreview from '../_shared/lookup-filter-preview/lookup-filter-value-preview.vue';
9
9
 
@@ -11,7 +11,7 @@ const props = defineProps<{
11
11
  /**
12
12
  * would be great to use generated type for this
13
13
  * */
14
- value: CasesService[];
14
+ value: WebitelCasesService[];
15
15
  }>();
16
16
  </script>
17
17
 
@@ -3,12 +3,12 @@
3
3
  </template>
4
4
 
5
5
  <script lang="ts" setup>
6
- import { CasesSLA } from 'webitel-sdk';
6
+ import { WebitelCasesSLA } 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: CasesSLA[];
11
+ value: WebitelCasesSLA[];
12
12
  }>();
13
13
  </script>
14
14
 
@@ -4,7 +4,7 @@
4
4
  :show-clear="false"
5
5
  :label="t('cases.appliedSLA')"
6
6
  :search-method="slasSearchMethod"
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
  :model-value="model?.conditions"
22
22
  data-key="id"
23
23
  option-value="id"
@@ -63,7 +63,9 @@ const initModel = () => {
63
63
  }
64
64
  };
65
65
  onMounted(() => initModel());
66
- const v$ = useVuelidate(
66
+ const v$ = useVuelidate<{
67
+ model: ModelValue;
68
+ }>(
67
69
  computed(() => ({
68
70
  model: {
69
71
  selection: {
@@ -84,6 +86,17 @@ const v$ = useVuelidate(
84
86
 
85
87
  v$.value.$touch();
86
88
 
89
+ const vSelection = computed(() => {
90
+ const modelValidation = v$.value.model;
91
+ if (!modelValidation) return undefined;
92
+ return modelValidation.selection;
93
+ });
94
+ const vConditions = computed(() => {
95
+ const modelValidation = v$.value.model;
96
+ if (!modelValidation) return undefined;
97
+ return modelValidation.conditions;
98
+ });
99
+
87
100
  const emit = defineEmits<{
88
101
  'update:invalid': [
89
102
  boolean,