@webitel/ui-sdk 24.12.102 → 24.12.115

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 (86) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/{plyr.min-ClXVuhkx.js → plyr.min-BRLz1cd6.js} +1 -1
  3. package/dist/ui-sdk.css +1 -1
  4. package/dist/ui-sdk.js +9707 -9471
  5. package/dist/ui-sdk.umd.cjs +19 -19
  6. package/package.json +1 -1
  7. package/src/api/clients/roles/roles.js +1 -1
  8. package/src/components/wt-tooltip/wt-tooltip.vue +10 -6
  9. package/src/composables/useAccessControl/v2/createUserAccessControl.ts +16 -6
  10. package/src/composables/useAccessControl/v2/types/CreateUserAccessControl.d.ts +2 -1
  11. package/src/composables/useWtTable/useWtTable.js +19 -20
  12. package/src/css/styleguide/placeholder/_placeholder.scss +0 -2
  13. package/src/enums/index.js +7 -7
  14. package/src/locale/en/en.js +80 -0
  15. package/src/locale/ru/ru.js +97 -0
  16. package/src/locale/ua/ua.js +97 -0
  17. package/src/modules/Filters/v2/filters/classes/FiltersManager.ts +3 -3
  18. package/src/modules/Filters/v2/filters/components/config/dynamic-filter-config-form-label.vue +2 -2
  19. package/src/modules/Filters/v2/filters/components/config/dynamic-filter-config-form.vue +13 -10
  20. package/src/modules/Filters/v2/filters/components/dynamic-filter-add-action.vue +17 -8
  21. package/src/modules/Filters/v2/filters/components/enums/amd-result-options.ts +38 -0
  22. package/src/modules/Filters/v2/filters/components/enums/boolean-options.ts +16 -0
  23. package/src/modules/Filters/v2/filters/components/enums/direction-options.ts +20 -0
  24. package/src/modules/Filters/v2/filters/components/enums/hangup-cause-options.ts +265 -0
  25. package/src/modules/Filters/v2/filters/components/enums/tag-options.ts +8 -0
  26. package/src/modules/Filters/v2/filters/components/preview/dynamic-filter-preview-info.vue +14 -27
  27. package/src/modules/Filters/v2/filters/components/preview/dynamic-filter-preview.vue +15 -6
  28. package/src/modules/Filters/v2/filters/components/values/_shared/durations/duration-filter-value-field.vue +48 -0
  29. package/src/modules/Filters/v2/filters/components/values/_shared/has-options/has-option-filter-value-field.vue +29 -0
  30. package/src/modules/Filters/v2/filters/components/values/agent/agent-filter-value-field.vue +57 -0
  31. package/src/modules/Filters/v2/filters/components/values/agent/agent-filter-value-preview.vue +32 -0
  32. package/src/modules/Filters/v2/filters/components/values/agent/config.js +4 -0
  33. package/src/modules/Filters/v2/filters/components/values/amd-result/amd-result-filter-value-field.vue +52 -0
  34. package/src/modules/Filters/v2/filters/components/values/amd-result/amd-result-filter-value-preview.vue +20 -0
  35. package/src/modules/Filters/v2/filters/components/values/cause/cause-filter-value-field.vue +52 -0
  36. package/src/modules/Filters/v2/filters/components/values/cause/cause-filter-value-preview.vue +19 -0
  37. package/src/modules/Filters/v2/filters/components/values/contact/config.js +4 -0
  38. package/src/modules/Filters/v2/filters/components/values/contact/contact-filter-value-field.vue +56 -0
  39. package/src/modules/Filters/v2/filters/components/values/contact/contact-filter-value-preview.vue +32 -0
  40. package/src/modules/Filters/v2/filters/components/values/created-at-from/created-at-from-filter-value-field.vue +23 -0
  41. package/src/modules/Filters/v2/filters/components/values/created-at-from/created-at-from-filter-value-preview.vue +15 -0
  42. package/src/modules/Filters/v2/filters/components/values/created-at-to/created-at-to-filter-value-field.vue +23 -0
  43. package/src/modules/Filters/v2/filters/components/values/created-at-to/created-at-to-filter-value-preview.vue +15 -0
  44. package/src/modules/Filters/v2/filters/components/values/direction/direction-filter-value-field.vue +51 -0
  45. package/src/modules/Filters/v2/filters/components/values/direction/direction-filter-value-preview.vue +17 -0
  46. package/src/modules/Filters/v2/filters/components/values/gateway/config.js +4 -0
  47. package/src/modules/Filters/v2/filters/components/values/gateway/gateway-filter-value-field.vue +56 -0
  48. package/src/modules/Filters/v2/filters/components/values/gateway/gateway-filter-value-preview.vue +32 -0
  49. package/src/modules/Filters/v2/filters/components/values/grantee/config.js +4 -0
  50. package/src/modules/Filters/v2/filters/components/values/grantee/grantee-filter-value-field.vue +56 -0
  51. package/src/modules/Filters/v2/filters/components/values/grantee/grantee-filter-value-preview.vue +32 -0
  52. package/src/modules/Filters/v2/filters/components/values/has-file/has-file-filter-value-field.vue +43 -0
  53. package/src/modules/Filters/v2/filters/components/values/has-file/has-file-filter-value-preview.vue +22 -0
  54. package/src/modules/Filters/v2/filters/components/values/has-transcription/has-transcription-filter-value-field.vue +43 -0
  55. package/src/modules/Filters/v2/filters/components/values/has-transcription/has-transcription-filter-value-preview.vue +22 -0
  56. package/src/modules/Filters/v2/filters/components/values/index.js +87 -0
  57. package/src/modules/Filters/v2/filters/components/values/queue/config.js +4 -0
  58. package/src/modules/Filters/v2/filters/components/values/queue/queue-filter-value-field.vue +56 -0
  59. package/src/modules/Filters/v2/filters/components/values/queue/queue-filter-value-preview.vue +32 -0
  60. package/src/modules/Filters/v2/filters/components/values/rated/rated-filter-value-field.vue +43 -0
  61. package/src/modules/Filters/v2/filters/components/values/rated/rated-filter-value-preview.vue +22 -0
  62. package/src/modules/Filters/v2/filters/components/values/rated-by/config.js +4 -0
  63. package/src/modules/Filters/v2/filters/components/values/rated-by/rated-by-filter-value-field.vue +56 -0
  64. package/src/modules/Filters/v2/filters/components/values/rated-by/rated-by-filter-value-preview.vue +32 -0
  65. package/src/modules/Filters/v2/filters/components/values/score/score-from-to-filter-value-field.vue +99 -0
  66. package/src/modules/Filters/v2/filters/components/values/score/score-from-to-filter-value-preview.vue +37 -0
  67. package/src/modules/Filters/v2/filters/components/values/tag/tag-filter-value-field.vue +52 -0
  68. package/src/modules/Filters/v2/filters/components/values/tag/tag-filter-value-preview.vue +18 -0
  69. package/src/modules/Filters/v2/filters/components/values/talk-duration/talk-duration-filter-value-field.vue +19 -0
  70. package/src/modules/Filters/v2/filters/components/values/talk-duration/talk-duration-filter-value-preview.vue +44 -0
  71. package/src/modules/Filters/v2/filters/components/values/team/config.js +4 -0
  72. package/src/modules/Filters/v2/filters/components/values/team/team-filter-value-field.vue +56 -0
  73. package/src/modules/Filters/v2/filters/components/values/team/team-filter-value-preview.vue +32 -0
  74. package/src/modules/Filters/v2/filters/components/values/total-duration/total-duration-filter-value-field.vue +19 -0
  75. package/src/modules/Filters/v2/filters/components/values/total-duration/total-duration-filter-value-preview.vue +44 -0
  76. package/src/modules/Filters/v2/filters/components/values/user/config.js +4 -0
  77. package/src/modules/Filters/v2/filters/components/values/user/user-filter-value-field.vue +56 -0
  78. package/src/modules/Filters/v2/filters/components/values/user/user-filter-value-preview.vue +32 -0
  79. package/src/modules/Filters/v2/filters/components/values/variable/variable-filter-value-field.vue +51 -0
  80. package/src/modules/Filters/v2/filters/components/values/variable/variable-filter-value-preview.vue +36 -0
  81. package/src/modules/Filters/v2/filters/types/Filter.d.ts +5 -0
  82. package/src/modules/Filters/v2/table/createTableStore.store.ts +12 -1
  83. package/src/modules/Filters/v2/types/tableStore.types.ts +1 -0
  84. package/src/modules/Filters/v2/filters/components/values/users/config.js +0 -4
  85. package/src/modules/Filters/v2/filters/components/values/users/user-filter-value-field.vue +0 -35
  86. package/src/modules/Filters/v2/filters/components/values/users/user-filter-value-preview.vue +0 -13
@@ -0,0 +1,4 @@
1
+ import TeamsAPI from '../../../../../../../api/clients/teams/teams.js';
2
+
3
+ export const searchMethod = TeamsAPI.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
+ :v="v$.model"
8
+ multiple
9
+ use-value-from-options-by-prop="id"
10
+ @input="handleInput"
11
+ />
12
+ </template>
13
+
14
+ <script lang="ts" setup>
15
+ import { useVuelidate } from '@vuelidate/core';
16
+ import { required } from '@vuelidate/validators';
17
+ import { computed, watch } from 'vue';
18
+ import { useI18n } from 'vue-i18n';
19
+
20
+ import WtSelect from '../../../../../../../components/wt-select/wt-select.vue';
21
+ import { searchMethod } from './config.js';
22
+
23
+ type ModelValue = number[];
24
+
25
+ const model = defineModel<ModelValue>();
26
+
27
+ const emit = defineEmits<{
28
+ 'update:invalid': [boolean];
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></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,19 @@
1
+ <template>
2
+ <duration-filter-value-field
3
+ :value="model"
4
+ @update:model-value="model = $event"
5
+ />
6
+ </template>
7
+
8
+ <script lang="ts" setup>
9
+ import DurationFilterValueField from '../_shared/durations/duration-filter-value-field.vue';
10
+
11
+ type ModelValue = {
12
+ from: number;
13
+ to: number;
14
+ };
15
+
16
+ const model = defineModel<ModelValue>();
17
+ </script>
18
+
19
+ <style lang="scss" scoped></style>
@@ -0,0 +1,44 @@
1
+ <template>
2
+ <div class="total-duration-filter-value-preview">
3
+ <div v-if="props.value.from">
4
+ <p class="total-duration-filter-value-preview__title">
5
+ {{t('reusable.from')}}
6
+ </p>
7
+
8
+ <span>{{formatTime(props.value.from)}}</span>
9
+ </div>
10
+
11
+ <div v-if="props.value.to">
12
+ <p class="total-duration-filter-value-preview__title">
13
+ {{t('reusable.to')}}
14
+ </p>
15
+
16
+ <span>{{formatTime(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
+
30
+ const formatTime = (value) => {
31
+ const minutes = Math.floor(value / 60);
32
+ const seconds = value % 60;
33
+
34
+ return `${t('webitelUI.timepicker.min')} ${minutes} ${t('webitelUI.timepicker.sec')} ${seconds}`;
35
+ }
36
+ </script>
37
+
38
+ <style lang="scss" scoped>
39
+ .duration-filter-value-preview {
40
+ &__title {
41
+ @extend %typo-subtitle-1;
42
+ }
43
+ }
44
+ </style>
@@ -0,0 +1,4 @@
1
+ import UsersAPI from '../../../../../../../api/clients/users/users.js';
2
+
3
+ export const searchMethod = UsersAPI.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
+ :v="v$.model"
8
+ multiple
9
+ use-value-from-options-by-prop="id"
10
+ @input="handleInput"
11
+ />
12
+ </template>
13
+
14
+ <script lang="ts" setup>
15
+ import { useVuelidate } from '@vuelidate/core';
16
+ import { required } from '@vuelidate/validators';
17
+ import { computed, watch } from 'vue';
18
+ import { useI18n } from 'vue-i18n';
19
+
20
+ import WtSelect from '../../../../../../../components/wt-select/wt-select.vue';
21
+ import { searchMethod } from './config.js';
22
+
23
+ type ModelValue = number[];
24
+
25
+ const model = defineModel<ModelValue>();
26
+
27
+ const emit = defineEmits<{
28
+ 'update:invalid': [boolean];
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></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,51 @@
1
+ <template>
2
+ <wt-input
3
+ v-model="model"
4
+ :label="t('webitelUI.filters.filterValue')"
5
+ :v="v$.model"
6
+ />
7
+ </template>
8
+
9
+ <script lang="ts" setup>
10
+ import { useVuelidate } from '@vuelidate/core';
11
+ import { computed, watch } from 'vue';
12
+ import { useI18n } from 'vue-i18n';
13
+
14
+ import variableSearchValidator from '../../../../../../../validators/variableSearchValidator/variableSearchValidator.js';
15
+
16
+ type ModelValue = string;
17
+
18
+ const model = defineModel<ModelValue>();
19
+ if (!model.value) {
20
+ model.value = '';
21
+ }
22
+
23
+ const { t } = useI18n();
24
+
25
+ const v$ = useVuelidate(
26
+ computed(() => ({
27
+ model: {
28
+ required: variableSearchValidator(),
29
+ },
30
+ })),
31
+ { model },
32
+ { $autoDirty: true },
33
+ );
34
+
35
+ v$.value.$touch();
36
+
37
+ const emit = defineEmits<{
38
+ 'update:invalid': [boolean];
39
+ }>();
40
+
41
+ watch(
42
+ () => v$.value.$invalid,
43
+ (invalid) => {
44
+ emit('update:invalid', invalid);
45
+ },
46
+ { immediate: true },
47
+ );
48
+ </script>
49
+
50
+ <style lang="scss" scoped>
51
+ </style>
@@ -0,0 +1,36 @@
1
+ <template>
2
+ <div class="variables-filter-value-preview">
3
+
4
+ <div>
5
+ <p class="variables-filter-value-preview__title">{{t('vocabulary.keys')}}:</p>
6
+ <span>{{variable[0]}}</span>
7
+ </div>
8
+
9
+ <div>
10
+ <p class="variables-filter-value-preview__title">{{t('vocabulary.values')}}:</p>
11
+ <span>{{variable[1]}}</span>
12
+ </div>
13
+
14
+
15
+ </div>
16
+ </template>
17
+
18
+ <script lang="ts" setup>
19
+ import {useI18n} from "vue-i18n";
20
+
21
+ const props = defineProps<{
22
+ value: string;
23
+ }>();
24
+
25
+ const { t } = useI18n();
26
+
27
+ const variable = props.value.split('=');
28
+ </script>
29
+
30
+ <style lang="scss" scoped>
31
+ .variables-filter-value-preview {
32
+ &__title {
33
+ @extend %typo-subtitle-1;
34
+ }
35
+ }
36
+ </style>
@@ -21,6 +21,11 @@ export interface FilterInitParams extends FilterData {
21
21
  name: FilterName;
22
22
  }
23
23
 
24
+ export interface FilterEnumOption {
25
+ locale: string;
26
+ value: FilterValue;
27
+ }
28
+
24
29
  export interface FilterConfig {
25
30
  /**
26
31
  * Perform simple type conversion on store/restore,
@@ -32,7 +32,11 @@ export const createTableStore = <Entity extends { id: string; etag?: string }>(
32
32
 
33
33
  const headersStore = useHeadersStore();
34
34
  const { headers, shownHeaders, fields, sort } = storeToRefs(headersStore);
35
- const { updateSort, updateShownHeaders, setupPersistence: setupHeadersPersistence } = headersStore;
35
+ const {
36
+ updateSort,
37
+ updateShownHeaders,
38
+ setupPersistence: setupHeadersPersistence,
39
+ } = headersStore;
36
40
 
37
41
  const filtersStore = useFiltersStore();
38
42
  const { filtersManager, isRestoring: isFiltersRestoring } =
@@ -50,6 +54,10 @@ export const createTableStore = <Entity extends { id: string; etag?: string }>(
50
54
  const error = ref(null);
51
55
  const isLoading = ref(false);
52
56
 
57
+ const updateSelected = (value: Entity[]) => {
58
+ selected.value = value;
59
+ };
60
+
53
61
  const loadDataList = async () => {
54
62
  isLoading.value = true;
55
63
  $patchPaginationStore({ next: false });
@@ -67,6 +75,7 @@ export const createTableStore = <Entity extends { id: string; etag?: string }>(
67
75
  const { items, next } = await apiModule.getList(params);
68
76
 
69
77
  dataList.value = items;
78
+ updateSelected([]);
70
79
  $patchPaginationStore({ next });
71
80
  } catch (err) {
72
81
  error.value = err;
@@ -163,6 +172,8 @@ export const createTableStore = <Entity extends { id: string; etag?: string }>(
163
172
  initialize,
164
173
 
165
174
  loadDataList,
175
+
176
+ updateSelected,
166
177
  patchItemProperty,
167
178
  deleteEls,
168
179
 
@@ -41,6 +41,7 @@ export interface TableStore<Entity> {
41
41
  // tableStore
42
42
  initialize: () => Promise<void>;
43
43
  loadDataList: (query?: object) => Promise<void>;
44
+ updateSelected: (selected: Entity[]) => void;
44
45
  patchItemProperty: (payload: PatchItemPropertyParams) => Promise<void>;
45
46
  deleteEls: (deleted: Entity[]) => Promise<void>;
46
47
 
@@ -1,4 +0,0 @@
1
- // import { UsersApi}
2
-
3
- export const searchMethod = UsersAPI.getLookup;
4
- export const localePath = ''; /* label locale goes here */
@@ -1,35 +0,0 @@
1
- <template>
2
- <wt-select
3
- :close-on-select="false"
4
- :search-method="searchMethod"
5
- :value="model"
6
- multiple
7
- use-value-from-options-by-prop="id"
8
- @input="handleInput"
9
- />
10
- </template>
11
-
12
- <script lang="ts" setup>
13
- import WtSelect from '@webitel/ui-sdk/src/components/wt-select/wt-select.vue';
14
-
15
- import { searchMethod } from './config';
16
-
17
- type ModelValue = number[];
18
-
19
- const model = defineModel<ModelValue>();
20
-
21
- // const props = defineProps({});
22
- //
23
- // const emit = defineEmits([]);
24
-
25
- const handleInput = (value: ModelValue) => {
26
- model.value = value;
27
- };
28
-
29
- </script>
30
-
31
- <style lang="scss" scoped>
32
- .user-filter {
33
-
34
- }
35
- </style>
@@ -1,13 +0,0 @@
1
-
2
- <template>
3
- <div class="">
4
- </div>
5
- </template>
6
-
7
- <script setup lang="ts">
8
- import { searchMethod } from './config';
9
- </script>
10
-
11
- <style scoped lang="scss">
12
-
13
- </style>