@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.
- package/dist/ui-sdk.js +1 -1
- package/dist/ui-sdk.umd.cjs +1 -1
- package/package.json +1 -1
- package/src/api/clients/caseCloseReasonGroups/caseCloseReasonGroups.js +130 -0
- package/src/api/clients/caseCloseReasons/caseCloseReasons.js +130 -0
- package/src/api/clients/casePriorities/casePriorities.js +130 -0
- package/src/api/clients/caseServiceCatalogs/service-catalogs.js +198 -0
- package/src/api/clients/caseServices/services.js +174 -0
- package/src/api/clients/caseSources/caseSources.js +138 -0
- package/src/api/clients/caseStatusConditions/caseStatusConditions.js +167 -0
- package/src/api/clients/caseStatuses/caseStatuses.js +121 -0
- package/src/api/clients/contactGroups/contactGroups.js +162 -0
- package/src/api/clients/index.js +16 -0
- package/src/api/clients/slaConditions/slaConditions.js +167 -0
- package/src/api/clients/slas/slas.js +129 -0
- package/src/locale/en/en.js +104 -30
- package/src/locale/ru/ru.js +105 -31
- package/src/locale/ua/ua.js +105 -31
- package/src/modules/Filters/v2/filters/components/config/dynamic-filter-config-form.vue +3 -2
- package/src/modules/Filters/v2/filters/components/values/_shared/date-time-filter/date-time-filter-value-field.vue +53 -0
- package/src/modules/Filters/v2/filters/components/values/actual-reaction-time/actual-reaction-time-filter-value-field.vue +18 -0
- package/src/modules/Filters/v2/filters/components/values/actual-reaction-time/actual-reaction-time-filter-value-preview.vue +42 -0
- package/src/modules/Filters/v2/filters/components/values/actual-resolution-time/actual-resolution-time-filter-value-field.vue +18 -0
- package/src/modules/Filters/v2/filters/components/values/actual-resolution-time/actual-resolution-time-filter-value-preview.vue +42 -0
- package/src/modules/Filters/v2/filters/components/values/assignee/assignee-filter-value-field.vue +74 -0
- package/src/modules/Filters/v2/filters/components/values/assignee/assignee-filter-value-preview.vue +40 -0
- package/src/modules/Filters/v2/filters/components/values/assignee/config.js +4 -0
- package/src/modules/Filters/v2/filters/components/values/author/author-filter-value-field.vue +56 -0
- package/src/modules/Filters/v2/filters/components/values/author/author-filter-value-preview.vue +32 -0
- package/src/modules/Filters/v2/filters/components/values/author/config.js +4 -0
- package/src/modules/Filters/v2/filters/components/values/close-reason-groups-case/close-reason-groups-case-filter-value-field.vue +99 -0
- package/src/modules/Filters/v2/filters/components/values/close-reason-groups-case/close-reason-groups-case-filter-value-preview.vue +32 -0
- package/src/modules/Filters/v2/filters/components/values/close-reason-groups-case/config.js +6 -0
- package/src/modules/Filters/v2/filters/components/values/contact-group/config.js +4 -0
- package/src/modules/Filters/v2/filters/components/values/contact-group/contact-group-filter-value-field.vue +74 -0
- package/src/modules/Filters/v2/filters/components/values/contact-group/contact-group-filter-value-preview.vue +43 -0
- package/src/modules/Filters/v2/filters/components/values/has-attachment/has-attachment-filter-value-field.vue +43 -0
- package/src/modules/Filters/v2/filters/components/values/has-attachment/has-attachment-filter-value-preview.vue +22 -0
- package/src/modules/Filters/v2/filters/components/values/has-file/has-file-filter-value-field.vue +1 -1
- package/src/modules/Filters/v2/filters/components/values/has-transcription/has-transcription-filter-value-field.vue +1 -1
- package/src/modules/Filters/v2/filters/components/values/impacted/config.js +4 -0
- package/src/modules/Filters/v2/filters/components/values/impacted/impacted-filter-value-field.vue +56 -0
- package/src/modules/Filters/v2/filters/components/values/impacted/impacted-filter-value-preview.vue +32 -0
- package/src/modules/Filters/v2/filters/components/values/index.js +77 -5
- package/src/modules/Filters/v2/filters/components/values/priority-case/config.js +5 -0
- package/src/modules/Filters/v2/filters/components/values/priority-case/priority-case-filter-value-field.vue +57 -0
- package/src/modules/Filters/v2/filters/components/values/priority-case/priority-case-filter-value-preview.vue +32 -0
- package/src/modules/Filters/v2/filters/components/values/rated/rated-filter-value-field.vue +1 -1
- package/src/modules/Filters/v2/filters/components/values/rating/rating-from-to-filter-value-field.vue +89 -0
- package/src/modules/Filters/v2/filters/components/values/rating/rating-from-to-filter-value-preview.vue +37 -0
- package/src/modules/Filters/v2/filters/components/values/reaction-time/reaction-time-filter-value-field.vue +18 -0
- package/src/modules/Filters/v2/filters/components/values/reaction-time/reaction-time-filter-value-preview.vue +42 -0
- package/src/modules/Filters/v2/filters/components/values/reporter/config.js +4 -0
- package/src/modules/Filters/v2/filters/components/values/reporter/reporter-filter-value-field.vue +56 -0
- package/src/modules/Filters/v2/filters/components/values/reporter/reporter-filter-value-preview.vue +32 -0
- package/src/modules/Filters/v2/filters/components/values/resolution-time/resolution-time-filter-value-field.vue +18 -0
- package/src/modules/Filters/v2/filters/components/values/resolution-time/resolution-time-filter-value-preview.vue +42 -0
- package/src/modules/Filters/v2/filters/components/values/service-case/config.js +6 -0
- package/src/modules/Filters/v2/filters/components/values/service-case/service-case-filter-value-field.vue +113 -0
- package/src/modules/Filters/v2/filters/components/values/service-case/service-case-filter-value-preview.vue +15 -0
- package/src/modules/Filters/v2/filters/components/values/sla/config.js +4 -0
- package/src/modules/Filters/v2/filters/components/values/sla/sla-filter-value-field.vue +57 -0
- package/src/modules/Filters/v2/filters/components/values/sla/sla-filter-value-preview.vue +32 -0
- package/src/modules/Filters/v2/filters/components/values/sla-condition/config.js +6 -0
- package/src/modules/Filters/v2/filters/components/values/sla-condition/sla-condition-filter-value-field.vue +98 -0
- package/src/modules/Filters/v2/filters/components/values/sla-condition/sla-condition-filter-value-preview.vue +37 -0
- package/src/modules/Filters/v2/filters/components/values/source-case/config.js +5 -0
- package/src/modules/Filters/v2/filters/components/values/source-case/source-case-filter-value-field.vue +57 -0
- package/src/modules/Filters/v2/filters/components/values/source-case/source-case-filter-value-preview.vue +32 -0
- package/src/modules/Filters/v2/filters/components/values/status-case/config.js +6 -0
- package/src/modules/Filters/v2/filters/components/values/status-case/status-case-filter-value-field.vue +99 -0
- package/src/modules/Filters/v2/filters/components/values/status-case/status-case-filter-value-preview.vue +37 -0
- package/src/modules/Filters/v2/filters/components/values/talk-duration/talk-duration-filter-value-field.vue +1 -1
- 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
|
|
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
|
|
34
|
-
import
|
|
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
|
-
|
|
78
|
-
|
|
149
|
+
TalkDurationFilter,
|
|
150
|
+
TalkDurationFilterPreview,
|
|
79
151
|
TeamFilter,
|
|
80
152
|
TeamFilterPreview,
|
|
81
153
|
TotalDurationFilter,
|
|
@@ -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>
|
|
@@ -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>
|
package/src/modules/Filters/v2/filters/components/values/reporter/reporter-filter-value-field.vue
ADDED
|
@@ -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>
|
package/src/modules/Filters/v2/filters/components/values/reporter/reporter-filter-value-preview.vue
ADDED
|
@@ -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 = '';
|