@webitel/ui-sdk 24.12.121 → 24.12.122

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 (74) hide show
  1. package/dist/ui-sdk.js +1 -1
  2. package/dist/ui-sdk.umd.cjs +1 -1
  3. package/package.json +1 -1
  4. package/src/api/clients/caseCloseReasonGroups/caseCloseReasonGroups.js +130 -0
  5. package/src/api/clients/caseCloseReasons/caseCloseReasons.js +130 -0
  6. package/src/api/clients/casePriorities/casePriorities.js +130 -0
  7. package/src/api/clients/caseServiceCatalogs/service-catalogs.js +198 -0
  8. package/src/api/clients/caseServices/services.js +174 -0
  9. package/src/api/clients/caseSources/caseSources.js +138 -0
  10. package/src/api/clients/caseStatusConditions/caseStatusConditions.js +167 -0
  11. package/src/api/clients/caseStatuses/caseStatuses.js +121 -0
  12. package/src/api/clients/contactGroups/contactGroups.js +162 -0
  13. package/src/api/clients/index.js +16 -0
  14. package/src/api/clients/slaConditions/slaConditions.js +167 -0
  15. package/src/api/clients/slas/slas.js +129 -0
  16. package/src/locale/en/en.js +104 -30
  17. package/src/locale/ru/ru.js +105 -31
  18. package/src/locale/ua/ua.js +105 -31
  19. package/src/modules/Filters/v2/filters/components/config/dynamic-filter-config-form.vue +3 -2
  20. package/src/modules/Filters/v2/filters/components/values/_shared/date-time-filter/date-time-filter-value-field.vue +53 -0
  21. package/src/modules/Filters/v2/filters/components/values/actual-reaction-time/actual-reaction-time-filter-value-field.vue +18 -0
  22. package/src/modules/Filters/v2/filters/components/values/actual-reaction-time/actual-reaction-time-filter-value-preview.vue +42 -0
  23. package/src/modules/Filters/v2/filters/components/values/actual-resolution-time/actual-resolution-time-filter-value-field.vue +18 -0
  24. package/src/modules/Filters/v2/filters/components/values/actual-resolution-time/actual-resolution-time-filter-value-preview.vue +42 -0
  25. package/src/modules/Filters/v2/filters/components/values/assignee/assignee-filter-value-field.vue +74 -0
  26. package/src/modules/Filters/v2/filters/components/values/assignee/assignee-filter-value-preview.vue +40 -0
  27. package/src/modules/Filters/v2/filters/components/values/assignee/config.js +4 -0
  28. package/src/modules/Filters/v2/filters/components/values/author/author-filter-value-field.vue +56 -0
  29. package/src/modules/Filters/v2/filters/components/values/author/author-filter-value-preview.vue +32 -0
  30. package/src/modules/Filters/v2/filters/components/values/author/config.js +4 -0
  31. package/src/modules/Filters/v2/filters/components/values/close-reason-groups-case/close-reason-groups-case-filter-value-field.vue +99 -0
  32. package/src/modules/Filters/v2/filters/components/values/close-reason-groups-case/close-reason-groups-case-filter-value-preview.vue +32 -0
  33. package/src/modules/Filters/v2/filters/components/values/close-reason-groups-case/config.js +6 -0
  34. package/src/modules/Filters/v2/filters/components/values/contact-group/config.js +4 -0
  35. package/src/modules/Filters/v2/filters/components/values/contact-group/contact-group-filter-value-field.vue +74 -0
  36. package/src/modules/Filters/v2/filters/components/values/contact-group/contact-group-filter-value-preview.vue +43 -0
  37. package/src/modules/Filters/v2/filters/components/values/has-attachment/has-attachment-filter-value-field.vue +43 -0
  38. package/src/modules/Filters/v2/filters/components/values/has-attachment/has-attachment-filter-value-preview.vue +22 -0
  39. package/src/modules/Filters/v2/filters/components/values/has-file/has-file-filter-value-field.vue +1 -1
  40. package/src/modules/Filters/v2/filters/components/values/has-transcription/has-transcription-filter-value-field.vue +1 -1
  41. package/src/modules/Filters/v2/filters/components/values/impacted/config.js +4 -0
  42. package/src/modules/Filters/v2/filters/components/values/impacted/impacted-filter-value-field.vue +56 -0
  43. package/src/modules/Filters/v2/filters/components/values/impacted/impacted-filter-value-preview.vue +32 -0
  44. package/src/modules/Filters/v2/filters/components/values/index.js +77 -5
  45. package/src/modules/Filters/v2/filters/components/values/priority-case/config.js +5 -0
  46. package/src/modules/Filters/v2/filters/components/values/priority-case/priority-case-filter-value-field.vue +57 -0
  47. package/src/modules/Filters/v2/filters/components/values/priority-case/priority-case-filter-value-preview.vue +32 -0
  48. package/src/modules/Filters/v2/filters/components/values/rated/rated-filter-value-field.vue +1 -1
  49. package/src/modules/Filters/v2/filters/components/values/rating/rating-from-to-filter-value-field.vue +89 -0
  50. package/src/modules/Filters/v2/filters/components/values/rating/rating-from-to-filter-value-preview.vue +37 -0
  51. package/src/modules/Filters/v2/filters/components/values/reaction-time/reaction-time-filter-value-field.vue +18 -0
  52. package/src/modules/Filters/v2/filters/components/values/reaction-time/reaction-time-filter-value-preview.vue +42 -0
  53. package/src/modules/Filters/v2/filters/components/values/reporter/config.js +4 -0
  54. package/src/modules/Filters/v2/filters/components/values/reporter/reporter-filter-value-field.vue +56 -0
  55. package/src/modules/Filters/v2/filters/components/values/reporter/reporter-filter-value-preview.vue +32 -0
  56. package/src/modules/Filters/v2/filters/components/values/resolution-time/resolution-time-filter-value-field.vue +18 -0
  57. package/src/modules/Filters/v2/filters/components/values/resolution-time/resolution-time-filter-value-preview.vue +42 -0
  58. package/src/modules/Filters/v2/filters/components/values/service-case/config.js +6 -0
  59. package/src/modules/Filters/v2/filters/components/values/service-case/service-case-filter-value-field.vue +113 -0
  60. package/src/modules/Filters/v2/filters/components/values/service-case/service-case-filter-value-preview.vue +15 -0
  61. package/src/modules/Filters/v2/filters/components/values/sla/config.js +4 -0
  62. package/src/modules/Filters/v2/filters/components/values/sla/sla-filter-value-field.vue +57 -0
  63. package/src/modules/Filters/v2/filters/components/values/sla/sla-filter-value-preview.vue +32 -0
  64. package/src/modules/Filters/v2/filters/components/values/sla-condition/config.js +6 -0
  65. package/src/modules/Filters/v2/filters/components/values/sla-condition/sla-condition-filter-value-field.vue +98 -0
  66. package/src/modules/Filters/v2/filters/components/values/sla-condition/sla-condition-filter-value-preview.vue +37 -0
  67. package/src/modules/Filters/v2/filters/components/values/source-case/config.js +5 -0
  68. package/src/modules/Filters/v2/filters/components/values/source-case/source-case-filter-value-field.vue +57 -0
  69. package/src/modules/Filters/v2/filters/components/values/source-case/source-case-filter-value-preview.vue +32 -0
  70. package/src/modules/Filters/v2/filters/components/values/status-case/config.js +6 -0
  71. package/src/modules/Filters/v2/filters/components/values/status-case/status-case-filter-value-field.vue +99 -0
  72. package/src/modules/Filters/v2/filters/components/values/status-case/status-case-filter-value-preview.vue +37 -0
  73. package/src/modules/Filters/v2/filters/components/values/talk-duration/talk-duration-filter-value-field.vue +1 -1
  74. package/src/modules/Filters/v2/filters/components/values/total-duration/total-duration-filter-value-field.vue +1 -1
@@ -1,11 +1,21 @@
1
+ import ActualReactionTimeFilter from './actual-reaction-time/actual-reaction-time-filter-value-field.vue';
2
+ import ActualReactionTimeFilterPreview from './actual-reaction-time/actual-reaction-time-filter-value-preview.vue';
3
+ import ActualResolutionTimeFilter from './actual-resolution-time/actual-resolution-time-filter-value-field.vue';
4
+ import ActualResolutionTimeFilterPreview from './actual-resolution-time/actual-resolution-time-filter-value-preview.vue';
1
5
  import AgentFilter from './agent/agent-filter-value-field.vue';
2
6
  import AgentFilterPreview from './agent/agent-filter-value-preview.vue';
3
7
  import AmdResultFilter from './amd-result/amd-result-filter-value-field.vue';
4
8
  import AmdResultFilterPreview from './amd-result/amd-result-filter-value-preview.vue';
9
+ import AssigneeFilter from './assignee/assignee-filter-value-field.vue';
10
+ import AssigneeFilterPreview from './assignee/assignee-filter-value-preview.vue';
11
+ import AuthorFilter from './author/author-filter-value-field.vue';
12
+ import AuthorFilterPreview from './author/author-filter-value-preview.vue';
5
13
  import CauseFilter from './cause/cause-filter-value-field.vue';
6
14
  import CauseFilterPreview from './cause/cause-filter-value-preview.vue';
7
15
  import ContactFilter from './contact/contact-filter-value-field.vue';
8
16
  import ContactFilterPreview from './contact/contact-filter-value-preview.vue';
17
+ import ContactGroupFilter from './contact-group/contact-group-filter-value-field.vue';
18
+ import ContactGroupFilterPreview from './contact-group/contact-group-filter-value-preview.vue';
9
19
  import CreatedAtFromFilter from './created-at-from/created-at-from-filter-value-field.vue';
10
20
  import CreatedAtFromFilterPreview from './created-at-from/created-at-from-filter-value-preview.vue';
11
21
  import CreatedAtToFilter from './created-at-to/created-at-to-filter-value-field.vue';
@@ -16,22 +26,48 @@ import GatewayFilter from './gateway/gateway-filter-value-field.vue';
16
26
  import GatewayFilterPreview from './gateway/gateway-filter-value-preview.vue';
17
27
  import GranteeFilter from './grantee/grantee-filter-value-field.vue';
18
28
  import GranteeFilterPreview from './grantee/grantee-filter-value-preview.vue';
19
- import HasFileFilter from './has-file/has-file-filter-value-field.vue';
29
+ import HasAttachmentFilter from './has-attachment/has-attachment-filter-value-field.vue';
30
+ import HasAttachmentFilterPreview from './has-attachment/has-attachment-filter-value-preview.vue';
31
+ import HasFileFilter from './has-file/has-file-filter-value-preview.vue';
20
32
  import HasFileFilterPreview from './has-file/has-file-filter-value-preview.vue';
21
33
  import HasTranscriptionFilter from './has-transcription/has-transcription-filter-value-field.vue';
22
34
  import HasTranscriptionFilterPreview from './has-transcription/has-transcription-filter-value-preview.vue';
35
+ import ImpactedFilter from './impacted/impacted-filter-value-field.vue';
36
+ import ImpactedFilterPreview from './impacted/impacted-filter-value-preview.vue';
37
+ import PriorityCaseFilter from './priority-case/priority-case-filter-value-field.vue';
38
+ import PriorityCaseFilterPreview from './priority-case/priority-case-filter-value-preview.vue';
23
39
  import QueueFilter from './queue/queue-filter-value-field.vue';
24
40
  import QueueFilterPreview from './queue/queue-filter-value-preview.vue';
25
41
  import RatedFilter from './rated/rated-filter-value-field.vue';
26
42
  import RatedFilterPreview from './rated/rated-filter-value-preview.vue';
27
43
  import RatedByFilter from './rated-by/rated-by-filter-value-field.vue';
28
44
  import RatedByFilterPreview from './rated-by/rated-by-filter-value-preview.vue';
45
+ import RatingFromToFilter from './rating/rating-from-to-filter-value-field.vue';
46
+ import RatingFromToFilterPreview from './rating/rating-from-to-filter-value-preview.vue';
47
+ import ReactionTimeFilter from './reaction-time/reaction-time-filter-value-field.vue';
48
+ import ReactionTimeFilterPreview from './reaction-time/reaction-time-filter-value-preview.vue';
49
+ import CloseReasonGroupsCaseFilter from './close-reason-groups-case/close-reason-groups-case-filter-value-field.vue';
50
+ import CloseReasonGroupsCaseFilterPreview from './close-reason-groups-case/close-reason-groups-case-filter-value-preview.vue';
51
+ import ReporterFilter from './reporter/reporter-filter-value-field.vue';
52
+ import ReporterFilterPreview from './reporter/reporter-filter-value-preview.vue';
53
+ import ResolutionTimeFilter from './resolution-time/resolution-time-filter-value-field.vue';
54
+ import ResolutionTimeFilterPreview from './resolution-time/resolution-time-filter-value-preview.vue';
29
55
  import ScoreFilter from './score/score-from-to-filter-value-field.vue';
30
56
  import ScoreFilterPreview from './score/score-from-to-filter-value-preview.vue';
57
+ // import ServiceCaseFilter from './service-case/service-case-filter-value-field.vue';
58
+ // import ServiceCaseFilterPreview from './service-case/service-case-filter-value-preview.vue';
59
+ import SlaFilter from './sla/sla-filter-value-field.vue';
60
+ import SlaFilterPreview from './sla/sla-filter-value-preview.vue';
61
+ import SourceCaseFilter from './source-case/source-case-filter-value-field.vue';
62
+ import SourceCaseFilterPreview from './source-case/source-case-filter-value-preview.vue';
63
+ import SlaConditionFilter from './sla-condition/sla-condition-filter-value-field.vue';
64
+ import SlaConditionFilterPreview from './sla-condition/sla-condition-filter-value-preview.vue';
65
+ import StatusCaseFilter from './status-case/status-case-filter-value-field.vue';
66
+ import StatusCaseFilterPreview from './status-case/status-case-filter-value-preview.vue';
31
67
  import TagFilter from './tag/tag-filter-value-field.vue';
32
68
  import TagFilterPreview from './tag/tag-filter-value-preview.vue';
33
- import TalkDuration from './talk-duration/talk-duration-filter-value-field.vue';
34
- import TalkDurationPreview from './talk-duration/talk-duration-filter-value-preview.vue';
69
+ import TalkDurationFilter from './talk-duration/talk-duration-filter-value-field.vue';
70
+ import TalkDurationFilterPreview from './talk-duration/talk-duration-filter-value-preview.vue';
35
71
  import TeamFilter from './team/team-filter-value-field.vue';
36
72
  import TeamFilterPreview from './team/team-filter-value-preview.vue';
37
73
  import TotalDurationFilter from './total-duration/total-duration-filter-value-field.vue';
@@ -42,14 +78,24 @@ import VariableFilter from './variable/variable-filter-value-field.vue';
42
78
  import VariableFilterPreview from './variable/variable-filter-value-preview.vue';
43
79
 
44
80
  export {
81
+ ActualReactionTimeFilter,
82
+ ActualReactionTimeFilterPreview,
83
+ ActualResolutionTimeFilter,
84
+ ActualResolutionTimeFilterPreview,
45
85
  AgentFilter,
46
86
  AgentFilterPreview,
47
87
  AmdResultFilter,
48
88
  AmdResultFilterPreview,
89
+ AssigneeFilter,
90
+ AssigneeFilterPreview,
91
+ AuthorFilter,
92
+ AuthorFilterPreview,
49
93
  CauseFilter,
50
94
  CauseFilterPreview,
51
95
  ContactFilter,
52
96
  ContactFilterPreview,
97
+ ContactGroupFilter,
98
+ ContactGroupFilterPreview,
53
99
  CreatedAtFromFilter,
54
100
  CreatedAtFromFilterPreview,
55
101
  CreatedAtToFilter,
@@ -60,22 +106,48 @@ export {
60
106
  GatewayFilterPreview,
61
107
  GranteeFilter,
62
108
  GranteeFilterPreview,
109
+ HasAttachmentFilter,
110
+ HasAttachmentFilterPreview,
63
111
  HasFileFilter,
64
112
  HasFileFilterPreview,
65
113
  HasTranscriptionFilter,
66
114
  HasTranscriptionFilterPreview,
115
+ ImpactedFilter,
116
+ ImpactedFilterPreview,
117
+ PriorityCaseFilter,
118
+ PriorityCaseFilterPreview,
67
119
  QueueFilter,
68
120
  QueueFilterPreview,
69
121
  RatedByFilter,
70
122
  RatedByFilterPreview,
71
123
  RatedFilter,
72
124
  RatedFilterPreview,
125
+ RatingFromToFilter,
126
+ RatingFromToFilterPreview,
127
+ ReactionTimeFilter,
128
+ ReactionTimeFilterPreview,
129
+ CloseReasonGroupsCaseFilter,
130
+ CloseReasonGroupsCaseFilterPreview,
131
+ ReporterFilter,
132
+ ReporterFilterPreview,
133
+ ResolutionTimeFilter,
134
+ ResolutionTimeFilterPreview,
73
135
  ScoreFilter,
74
136
  ScoreFilterPreview,
137
+ // ServiceCaseFilter,
138
+ // ServiceCaseFilterPreview,
139
+ SlaFilter,
140
+ SlaFilterPreview,
141
+ SlaConditionFilter,
142
+ SlaConditionFilterPreview,
143
+ SourceCaseFilter,
144
+ SourceCaseFilterPreview,
145
+ StatusCaseFilter,
146
+ StatusCaseFilterPreview,
75
147
  TagFilter,
76
148
  TagFilterPreview,
77
- TalkDuration,
78
- TalkDurationPreview,
149
+ TalkDurationFilter,
150
+ TalkDurationFilterPreview,
79
151
  TeamFilter,
80
152
  TeamFilterPreview,
81
153
  TotalDurationFilter,
@@ -0,0 +1,5 @@
1
+ import CasePrioritiesAPI
2
+ from '../../../../../../../api/clients/casePriorities/casePriorities.js';
3
+
4
+ export const searchMethod = CasePrioritiesAPI.getLookup;
5
+ export const localePath = '';
@@ -0,0 +1,57 @@
1
+ <template>
2
+ <wt-select
3
+ :close-on-select="false"
4
+ :label="t('webitelUI.filters.filterValue')"
5
+ :search-method="searchMethod"
6
+ :value="model"
7
+ multiple
8
+ use-value-from-options-by-prop="id"
9
+ @input="handleInput"
10
+ />
11
+ </template>
12
+
13
+ <script lang="ts" setup>
14
+ import { useVuelidate } from '@vuelidate/core';
15
+ import { required } from '@vuelidate/validators';
16
+ import { computed, watch } from 'vue';
17
+ import { useI18n } from 'vue-i18n';
18
+
19
+ import WtSelect from '../../../../../../../components/wt-select/wt-select.vue';
20
+ import { searchMethod } from './config.js';
21
+
22
+ type ModelValue = number[];
23
+
24
+ const model = defineModel<ModelValue>();
25
+
26
+ const emit = defineEmits<{
27
+ 'update:invalid': [boolean];
28
+ }>();
29
+
30
+ const { t } = useI18n();
31
+
32
+ const v$ = useVuelidate(
33
+ computed(() => ({
34
+ model: {
35
+ required,
36
+ },
37
+ })),
38
+ { model },
39
+ { $autoDirty: true },
40
+ );
41
+ v$.value.$touch();
42
+
43
+ watch(
44
+ () => v$.value.$invalid,
45
+ (invalid) => {
46
+ emit('update:invalid', invalid);
47
+ },
48
+ { immediate: true },
49
+ );
50
+
51
+ const handleInput = (value: ModelValue) => {
52
+ model.value = value;
53
+ };
54
+ </script>
55
+
56
+ <style lang="scss" scoped>
57
+ </style>
@@ -0,0 +1,32 @@
1
+ <template>
2
+ <ul
3
+ v-if="localValue">
4
+ <li
5
+ v-for="({ name }, index) of localValue"
6
+ :key="index"
7
+ >
8
+ {{ name }}
9
+ </li>
10
+ </ul>
11
+ </template>
12
+
13
+ <script lang="ts" setup>
14
+ import { searchMethod } from './config.js';
15
+ import {ref} from 'vue';
16
+
17
+ const props = defineProps<{
18
+ value: number[];
19
+ }>();
20
+
21
+ const localValue = ref([]);
22
+
23
+ const getLocalValue = async () => {
24
+ const { items } = await searchMethod({id: props.value});
25
+ localValue.value = items;
26
+ };
27
+
28
+ getLocalValue();
29
+ </script>
30
+
31
+ <style lang="scss" scoped>
32
+ </style>
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <has-option-filter-value-field
3
- :value="model"
3
+ :model-value="model"
4
4
  :v="v$.model"
5
5
  @update:model-value="model = $event"
6
6
  />
@@ -0,0 +1,89 @@
1
+ <template>
2
+ <div class="rating-from-to-filter-value-field">
3
+ <wt-input
4
+ v-if="model"
5
+ :label="`${t('webitelUI.filters.filterValueFrom')}:`"
6
+ :number-min="0"
7
+ :placeholder="t('webitelUI.filters.filterValue')"
8
+ :v="v$.model?.from"
9
+ :value="model.from"
10
+ type="number"
11
+ @input="handleInput('from', $event)"
12
+ />
13
+
14
+ <wt-input
15
+ v-if="model"
16
+ :label="`${t('reusable.to').toLowerCase()}:`"
17
+ :number-min="0"
18
+ :placeholder="t('webitelUI.filters.filterValue')"
19
+ :v="v$.model?.to"
20
+ :value="model.to"
21
+ type="number"
22
+ @input="handleInput('to', $event)"
23
+ />
24
+ </div>
25
+ </template>
26
+
27
+ <script lang="ts" setup>
28
+ import { useVuelidate } from '@vuelidate/core';
29
+ import { requiredIf, maxValue } from '@vuelidate/validators';
30
+ import { computed, watch } from 'vue';
31
+ import { useI18n } from 'vue-i18n';
32
+
33
+ type ModelValue = {
34
+ from: number;
35
+ to: number;
36
+ };
37
+ const model = defineModel<ModelValue>();
38
+ if (!model.value) {
39
+ model.value = {
40
+ from: null,
41
+ to: null,
42
+ };
43
+ }
44
+
45
+ const emit = defineEmits<{
46
+ 'update:invalid': [boolean];
47
+ }>();
48
+
49
+ const { t } = useI18n();
50
+
51
+ const v$ = useVuelidate(
52
+ computed(() => ({
53
+ model: {
54
+ from: {
55
+ requiredIf: requiredIf(() => !model.value.to),
56
+ maxValue: maxValue((model?.value?.to && model.value.from > model.value.to) ? model.value.to : Infinity),
57
+ },
58
+ to: {
59
+ requiredIf: requiredIf(() => !model.value.from),
60
+ },
61
+ },
62
+ })),
63
+ { model },
64
+ { $autoDirty: true },
65
+ );
66
+ v$.value.$touch();
67
+
68
+ const handleInput = (key: keyof ModelValue, value: number) => {
69
+ const newValue = { ...model.value };
70
+ newValue[key] = value;
71
+ model.value = newValue;
72
+ };
73
+
74
+ watch(
75
+ () => v$.value.$invalid,
76
+ (invalid) => {
77
+ emit('update:invalid', invalid);
78
+ },
79
+ { immediate: true },
80
+ );
81
+ </script>
82
+
83
+ <style lang="scss" scoped>
84
+ .rating-from-to-filter-value-field {
85
+ display: flex;
86
+ align-items: center;
87
+ grid-gap: var(--spacing-xs);
88
+ }
89
+ </style>
@@ -0,0 +1,37 @@
1
+ <template>
2
+ <div class="score-from-to-filter-value-preview">
3
+ <div v-if="props.value.from">
4
+ <p class="score-from-to-filter-value-preview__title">
5
+ {{t('reusable.from')}}
6
+ </p>
7
+
8
+ <span>{{props.value.from}}</span>
9
+ </div>
10
+
11
+ <div v-if="props.value.to">
12
+ <p class="score-from-to-filter-value-preview__title">
13
+ {{t('reusable.to')}}
14
+ </p>
15
+
16
+ <span>{{props.value.to}}</span>
17
+ </div>
18
+ </div>
19
+ </template>
20
+
21
+ <script lang="ts" setup>
22
+ import {useI18n} from "vue-i18n";
23
+
24
+ const props = defineProps<{
25
+ value: number[];
26
+ }>();
27
+
28
+ const { t } = useI18n();
29
+ </script>
30
+
31
+ <style lang="scss" scoped>
32
+ .score-from-to-filter-value-preview {
33
+ &__title {
34
+ @extend %typo-subtitle-1;
35
+ }
36
+ }
37
+ </style>
@@ -0,0 +1,18 @@
1
+ <template>
2
+ <date-time-filter-value-field
3
+ :model-value="model"
4
+ @update:model-value="model = $event"
5
+ />
6
+ </template>
7
+
8
+ <script lang="ts" setup>
9
+ import DateTimeFilterValueField from '../_shared/date-time-filter/date-time-filter-value-field.vue';
10
+
11
+ type ModelValue = {
12
+ from: number;
13
+ to: number;
14
+ };
15
+ const model = defineModel<ModelValue>();
16
+ </script>
17
+
18
+ <style lang="scss" scoped></style>
@@ -0,0 +1,42 @@
1
+ <template>
2
+ <div class="reaction-time-filter-value-preview">
3
+ <div v-if="props.value.from">
4
+ <p class="reaction-time-filter-value-preview__title">
5
+ {{t('reusable.from')}}
6
+ </p>
7
+
8
+ <span>{{convertTimestampToDate(props.value.from)}}</span>
9
+ </div>
10
+
11
+ <div v-if="props.value.to">
12
+ <p class="reaction-time-filter-value-preview__title">
13
+ {{t('reusable.to')}}
14
+ </p>
15
+
16
+ <span>{{convertTimestampToDate(props.value.to)}}</span>
17
+ </div>
18
+ </div>
19
+ </template>
20
+
21
+ <script lang="ts" setup>
22
+ import {useI18n} from "vue-i18n";
23
+ import { format } from "date-fns";
24
+
25
+ const props = defineProps<{
26
+ value: number[];
27
+ }>();
28
+
29
+ const { t } = useI18n();
30
+
31
+ function convertTimestampToDate(value) {
32
+ return format(new Date(value), 'dd.MM.yyyy HH:mm');
33
+ }
34
+ </script>
35
+
36
+ <style lang="scss" scoped>
37
+ .reaction-time-filter-value-preview {
38
+ &__title {
39
+ @extend %typo-subtitle-1;
40
+ }
41
+ }
42
+ </style>
@@ -0,0 +1,4 @@
1
+ import ContactsAPI from '../../../../../../../api/clients/сontacts/contacts.js';
2
+
3
+ export const searchMethod = ContactsAPI.getLookup;
4
+ export const localePath = '';
@@ -0,0 +1,56 @@
1
+ <template>
2
+ <wt-select
3
+ :close-on-select="false"
4
+ :label="t('webitelUI.filters.filterValue')"
5
+ :search-method="searchMethod"
6
+ :value="model"
7
+ multiple
8
+ use-value-from-options-by-prop="id"
9
+ @input="handleInput"
10
+ />
11
+ </template>
12
+
13
+ <script lang="ts" setup>
14
+ import { useVuelidate } from '@vuelidate/core';
15
+ import { required } from '@vuelidate/validators';
16
+ import { computed, watch } from 'vue';
17
+ import { useI18n } from 'vue-i18n';
18
+
19
+ import WtSelect from '../../../../../../../components/wt-select/wt-select.vue';
20
+ import { searchMethod } from './config.js';
21
+
22
+ type ModelValue = number[];
23
+
24
+ const model = defineModel<ModelValue>();
25
+
26
+ const emit = defineEmits<{
27
+ 'update:invalid': [boolean];
28
+ }>();
29
+ const { t } = useI18n();
30
+
31
+ const v$ = useVuelidate(
32
+ computed(() => ({
33
+ model: {
34
+ required,
35
+ },
36
+ })),
37
+ { model },
38
+ { $autoDirty: true },
39
+ );
40
+ v$.value.$touch();
41
+
42
+ watch(
43
+ () => v$.value.$invalid,
44
+ (invalid) => {
45
+ emit('update:invalid', invalid);
46
+ },
47
+ { immediate: true },
48
+ );
49
+
50
+ const handleInput = (value: ModelValue) => {
51
+ model.value = value;
52
+ };
53
+ </script>
54
+
55
+ <style lang="scss" scoped>
56
+ </style>
@@ -0,0 +1,32 @@
1
+ <template>
2
+ <ul
3
+ v-if="localValue">
4
+ <li
5
+ v-for="({ name }, index) of localValue"
6
+ :key="index"
7
+ >
8
+ {{ name }}
9
+ </li>
10
+ </ul>
11
+ </template>
12
+
13
+ <script lang="ts" setup>
14
+ import { searchMethod } from './config.js';
15
+ import {ref} from 'vue';
16
+
17
+ const props = defineProps<{
18
+ value: number[];
19
+ }>();
20
+
21
+ const localValue = ref([]);
22
+
23
+ const getLocalValue = async () => {
24
+ const { items } = await searchMethod({id: props.value});
25
+ localValue.value = items;
26
+ };
27
+
28
+ getLocalValue();
29
+ </script>
30
+
31
+ <style lang="scss" scoped>
32
+ </style>
@@ -0,0 +1,18 @@
1
+ <template>
2
+ <date-time-filter-value-field
3
+ :model-value="model"
4
+ @update:model-value="model = $event"
5
+ />
6
+ </template>
7
+
8
+ <script lang="ts" setup>
9
+ import DateTimeFilterValueField from '../_shared/date-time-filter/date-time-filter-value-field.vue';
10
+
11
+ type ModelValue = {
12
+ from: number;
13
+ to: number;
14
+ };
15
+ const model = defineModel<ModelValue>();
16
+ </script>
17
+
18
+ <style lang="scss" scoped></style>
@@ -0,0 +1,42 @@
1
+ <template>
2
+ <div class="resolution-time-filter-value-preview">
3
+ <div v-if="props.value.from">
4
+ <p class="resolution-time-filter-value-preview__title">
5
+ {{t('reusable.from')}}
6
+ </p>
7
+
8
+ <span>{{convertTimestampToDate(props.value.from)}}</span>
9
+ </div>
10
+
11
+ <div v-if="props.value.to">
12
+ <p class="resolution-time-filter-value-preview__title">
13
+ {{t('reusable.to')}}
14
+ </p>
15
+
16
+ <span>{{convertTimestampToDate(props.value.to)}}</span>
17
+ </div>
18
+ </div>
19
+ </template>
20
+
21
+ <script lang="ts" setup>
22
+ import {useI18n} from "vue-i18n";
23
+ import { format } from "date-fns";
24
+
25
+ const props = defineProps<{
26
+ value: number[];
27
+ }>();
28
+
29
+ const { t } = useI18n();
30
+
31
+ function convertTimestampToDate(value) {
32
+ return format(new Date(value), 'dd.MM.yyyy HH:mm');
33
+ }
34
+ </script>
35
+
36
+ <style lang="scss" scoped>
37
+ .resolution-time-filter-value-preview {
38
+ &__title {
39
+ @extend %typo-subtitle-1;
40
+ }
41
+ }
42
+ </style>
@@ -0,0 +1,6 @@
1
+ import ServiceCatalogsAPI from '../../../../../../../api/clients/caseServiceCatalogs/service-catalogs.js';
2
+ import ServicesAPI from '../../../../../../../api/clients/caseServices/services.js';
3
+
4
+ export const servicesSearchMethod = ServicesAPI.getLookup;
5
+ export const serviceCatalogsSearchMethod = ServiceCatalogsAPI.getLookup;
6
+ export const localePath = '';