@webitel/ui-sdk 23.12.2 → 23.12.5-1

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 (191) hide show
  1. package/dist/favicon.ico +0 -0
  2. package/dist/img/sprite/index.js +148 -1
  3. package/dist/img/sprite/link.svg +8 -0
  4. package/dist/img/sprite/variable-select.svg +9 -0
  5. package/dist/plyr.svg +70 -0
  6. package/dist/ui-sdk.css +1 -1
  7. package/dist/ui-sdk.mjs +22670 -0
  8. package/dist/ui-sdk.umd.js +37 -43084
  9. package/package.json +34 -40
  10. package/src/api/axios/generateInstance.js +1 -1
  11. package/src/components/on-demand/wt-cc-agent-status-timers/wt-cc-agent-status-timers.vue +3 -3
  12. package/src/components/on-demand/wt-save-failed-popup/__tests__/WtPopup.spec.js +9 -0
  13. package/src/components/on-demand/wt-save-failed-popup/wt-save-failed-popup.vue +70 -0
  14. package/src/components/transitions/wt-expand-transition.vue +2 -2
  15. package/src/components/wt-app-header/_variables.scss +1 -1
  16. package/src/components/wt-app-header/wt-app-header.vue +2 -5
  17. package/src/components/wt-app-header/wt-app-navigator.vue +6 -5
  18. package/src/components/wt-app-header/wt-header-actions.vue +30 -14
  19. package/src/components/wt-avatar/_variables.scss +1 -1
  20. package/src/components/wt-avatar/wt-avatar.vue +2 -2
  21. package/src/components/wt-badge/wt-badge.vue +3 -3
  22. package/src/components/wt-button/_variables.scss +2 -32
  23. package/src/components/wt-button/wt-button.vue +5 -3
  24. package/src/components/wt-button-select/__tests__/WtButtonSelect.spec.js +9 -8
  25. package/src/components/wt-button-select/wt-button-select.vue +58 -59
  26. package/src/components/wt-checkbox/wt-checkbox.vue +15 -48
  27. package/src/components/wt-chip/_variables.scss +21 -2
  28. package/src/components/wt-chip/wt-chip.scss +20 -17
  29. package/src/components/wt-chip/wt-chip.vue +10 -5
  30. package/src/components/wt-context-menu/wt-context-menu.vue +4 -4
  31. package/src/components/wt-copy-action/wt-copy-action.vue +6 -6
  32. package/src/components/wt-datepicker/_variables.scss +1 -1
  33. package/src/components/wt-datepicker/wt-datepicker.vue +14 -12
  34. package/src/components/wt-divider/wt-divider.vue +1 -1
  35. package/src/components/wt-dummy/wt-dummy.vue +6 -2
  36. package/src/components/wt-error-page/wt-error-page.vue +10 -4
  37. package/src/components/wt-expansion-panel/wt-expansion-panel.vue +4 -4
  38. package/src/components/wt-filters-panel-wrapper/wt-filters-panel-wrapper.vue +7 -4
  39. package/src/components/wt-headline/wt-headline.vue +4 -4
  40. package/src/components/wt-headline-nav/_variables.scss +5 -2
  41. package/src/components/wt-headline-nav/wt-headline-nav.vue +46 -33
  42. package/src/components/wt-hint/wt-hint.vue +5 -6
  43. package/src/components/wt-icon/_variables.scss +5 -10
  44. package/src/components/wt-icon/wt-icon.vue +15 -6
  45. package/src/components/wt-icon-action/_internals/wt-add-icon-action.vue +2 -2
  46. package/src/components/wt-icon-action/_internals/wt-delete-icon-action.vue +2 -2
  47. package/src/components/wt-icon-action/_internals/wt-download-icon-action.vue +2 -2
  48. package/src/components/wt-icon-action/_internals/wt-edit-icon-action.vue +2 -2
  49. package/src/components/wt-icon-action/_internals/wt-history-icon-action.vue +2 -2
  50. package/src/components/wt-icon-action/_internals/wt-refresh-icon-action.vue +2 -2
  51. package/src/components/wt-icon-action/wt-icon-action.vue +1 -1
  52. package/src/components/wt-icon-btn/wt-icon-btn.vue +4 -2
  53. package/src/components/wt-indicator/_variables.scss +14 -19
  54. package/src/components/wt-indicator/wt-indicator.vue +26 -27
  55. package/src/components/wt-input/wt-input.vue +200 -219
  56. package/src/components/wt-input-info/wt-input-info.vue +2 -2
  57. package/src/components/wt-item-link/wt-item-link.vue +1 -1
  58. package/src/components/wt-label/_variables.scss +4 -2
  59. package/src/components/wt-label/wt-label.vue +5 -18
  60. package/src/components/wt-load-bar/wt-load-bar.vue +7 -4
  61. package/src/components/wt-loader/_internals/wt-loader--md.vue +11 -2
  62. package/src/components/wt-loader/_internals/wt-loader--sm.vue +9 -2
  63. package/src/components/wt-loader/_variables.scss +2 -2
  64. package/src/components/wt-loader/wt-loader.vue +10 -3
  65. package/src/components/wt-navigation-bar/wt-navigation-bar.vue +17 -9
  66. package/src/components/wt-notification/wt-notification.vue +4 -4
  67. package/src/components/wt-notifications-bar/wt-notifications-bar.vue +9 -5
  68. package/src/components/wt-page-header/wt-page-header.vue +7 -8
  69. package/src/components/wt-page-wrapper/wt-page-wrapper.vue +8 -5
  70. package/src/components/wt-pagination/wt-pagination.vue +17 -15
  71. package/src/components/wt-player/__tests__/WtPlayer.spec.js +1 -1
  72. package/src/components/wt-player/_variables.scss +1 -1
  73. package/src/components/wt-player/wt-player.vue +17 -17
  74. package/src/components/wt-popup/_variables.scss +4 -3
  75. package/src/components/wt-popup/wt-popup.vue +18 -10
  76. package/src/components/wt-progress-bar/_variables.scss +10 -8
  77. package/src/components/wt-progress-bar/wt-progress-bar.vue +27 -18
  78. package/src/components/wt-radio/wt-radio.vue +26 -54
  79. package/src/components/wt-rounded-action/_variables.scss +4 -35
  80. package/src/components/wt-rounded-action/wt-rounded-action.vue +15 -70
  81. package/src/components/wt-search-bar/__tests__/WtSearchBar.spec.js +1 -1
  82. package/src/components/wt-search-bar/wt-search-bar.vue +18 -42
  83. package/src/components/wt-select/_multiselect.scss +48 -53
  84. package/src/components/wt-select/_variables.scss +0 -3
  85. package/src/components/wt-select/mixins/multiselectMixin.js +9 -1
  86. package/src/components/wt-select/wt-select.vue +41 -40
  87. package/src/components/wt-slider/_variables.scss +6 -0
  88. package/src/components/wt-slider/wt-slider.vue +25 -9
  89. package/src/components/wt-status-select/_variables.scss +7 -4
  90. package/src/components/wt-status-select/wt-status-select.vue +18 -12
  91. package/src/components/wt-stepper/_variables.scss +5 -0
  92. package/src/components/wt-stepper/wt-stepper.vue +15 -9
  93. package/src/components/wt-switcher/_variables.scss +30 -7
  94. package/src/components/wt-switcher/wt-switcher.vue +56 -35
  95. package/src/components/wt-table/_variables.scss +8 -5
  96. package/src/components/wt-table/wt-table.vue +123 -90
  97. package/src/components/wt-table-actions/wt-table-actions.vue +14 -14
  98. package/src/components/wt-table-column-select/wt-table-column-select.vue +33 -28
  99. package/src/components/wt-tabs/_variables.scss +4 -4
  100. package/src/components/wt-tabs/wt-tabs.vue +15 -13
  101. package/src/components/wt-tags-input/wt-tags-input.vue +26 -35
  102. package/src/components/wt-textarea/wt-textarea.vue +37 -54
  103. package/src/components/wt-time-input/wt-time-input.vue +24 -54
  104. package/src/components/wt-timepicker/wt-timepicker.vue +19 -27
  105. package/src/components/wt-tooltip/__tests__/WtTooltip.spec.js +0 -10
  106. package/src/components/wt-tooltip/_internals/wt-tooltip-floating.vue +2 -2
  107. package/src/components/wt-tooltip/_variables.scss +2 -4
  108. package/src/components/wt-tooltip/wt-tooltip.vue +6 -18
  109. package/src/composables/useCachedInterval/__tests__/useCachedInterval.spec.js +5 -5
  110. package/src/composables/useRepresentableAgentPauseCause/__tests__/useRepresentableAgentPauseCause.spec.js +1 -1
  111. package/src/composables/useRepresentableAgentPauseCause/useRepresentableAgentPauseCause.js +1 -1
  112. package/src/css/styleguide/colors/_colors.scss +45 -29
  113. package/src/css/styleguide/colors/reusable/_text-field.scss +36 -0
  114. package/src/css/styleguide/placeholder/_placeholder.scss +9 -9
  115. package/src/enums/WebitelApplications/AdminSections.enum.js +2 -1
  116. package/src/locale/en/en.js +11 -3
  117. package/src/locale/es/es.js +2 -0
  118. package/src/locale/i18n.js +3 -1
  119. package/src/locale/kz/kz.js +327 -0
  120. package/src/locale/ru/ru.js +11 -3
  121. package/src/locale/ua/ua.js +11 -3
  122. package/src/mixins/validationMixin/__tests__/validationMixin.spec.js +2 -2
  123. package/src/mixins/validationMixin/useValidation.js +19 -4
  124. package/src/mixins/validationMixin/validationMixin.js +1 -0
  125. package/src/modules/AgentStatusSelect/components/__tests__/wt-cc-agent-status-select.spec.js +4 -4
  126. package/src/modules/AgentStatusSelect/components/_internals/wt-cc-pause-cause-popup.vue +11 -9
  127. package/src/modules/AgentStatusSelect/components/_internals/wt-cc-status-select-error-popup.vue +6 -5
  128. package/src/modules/AgentStatusSelect/components/wt-cc-agent-status-select.vue +3 -3
  129. package/src/modules/AuditForm/components/__tests__/audit-form.spec.js +1 -1
  130. package/src/modules/AuditForm/components/audit-form-question-read-wrapper.vue +11 -8
  131. package/src/modules/AuditForm/components/audit-form-question-write-wrapper.vue +8 -8
  132. package/src/modules/AuditForm/components/audit-form-question.vue +8 -8
  133. package/src/modules/AuditForm/components/audit-form.vue +6 -5
  134. package/src/modules/AuditForm/components/questions/options/audit-form-question-options-write-row.vue +4 -4
  135. package/src/modules/AuditForm/components/questions/options/audit-form-question-options.vue +7 -4
  136. package/src/modules/AuditForm/components/questions/score/audit-form-question-score.vue +3 -3
  137. package/src/modules/CSVExport/__tests__/CSVExport.spec.js +5 -2
  138. package/src/modules/DeleteConfirmationPopup/__tests__/delete-confirmation-popup.spec.js +77 -0
  139. package/src/modules/DeleteConfirmationPopup/components/delete-confirmation-popup.vue +35 -17
  140. package/src/modules/FilesExport/__tests__/FilesExport.spec.js +6 -3
  141. package/src/modules/FilesExport/scripts/generateMediaURL.js +1 -1
  142. package/src/modules/Filters/components/filter-pagination.vue +1 -1
  143. package/src/modules/Filters/components/filter-table-fields.vue +1 -1
  144. package/src/modules/Notifications/store/__tests__/NotificationsStoreModule.actions.spec.js +6 -6
  145. package/src/modules/QueryFilters/classes/__tests__/ApiFilterSchema.spec.js +1 -1
  146. package/src/modules/QueryFilters/components/__tests__/abstract-api-filter.spec.js +7 -5
  147. package/src/modules/QueryFilters/components/__tests__/abstract-enum-filter.spec.js +3 -1
  148. package/src/modules/QueryFilters/components/__tests__/filter-datetime.spec.js +2 -2
  149. package/src/modules/QueryFilters/components/__tests__/filter-from-to.spec.js +4 -4
  150. package/src/modules/QueryFilters/components/__tests__/filter-search.spec.js +2 -2
  151. package/src/modules/QueryFilters/components/abstract-api-filter.vue +2 -2
  152. package/src/modules/QueryFilters/components/abstract-enum-filter.vue +2 -2
  153. package/src/modules/QueryFilters/components/filter-datetime.vue +2 -2
  154. package/src/modules/QueryFilters/components/filter-from-to.vue +12 -10
  155. package/src/modules/QueryFilters/components/filter-search.vue +2 -2
  156. package/src/modules/QueryFilters/components/filter-table-fields.vue +7 -7
  157. package/src/modules/QueryFilters/mixins/__tests__/apiFilterMixin.spec.js +1 -1
  158. package/src/modules/QueryFilters/mixins/__tests__/enumFilterMixin.spec.js +2 -2
  159. package/src/modules/QueryFilters/mixins/__tests__/paginationFilterMixin.spec.js +2 -2
  160. package/src/modules/QueryFilters/mixins/__tests__/sortFilterMixin.spec.js +1 -1
  161. package/src/modules/QueryFilters/store/__tests__/QueryFiltersStoreModule.spec.js +2 -2
  162. package/src/modules/Userinfo/classes/ApplicationsAccess.js +6 -2
  163. package/src/modules/Userinfo/components/__tests__/auth.spec.js +7 -8
  164. package/src/modules/Userinfo/components/the-auth.vue +8 -5
  165. package/src/scripts/debounce.js +1 -1
  166. package/src/scripts/saveAsJSON.js +9 -0
  167. package/src/store/BaseStoreModules/__tests__/BaseStoreModule.spec.js +6 -6
  168. package/src/validators/variableSearchValidator/__tests__/variableSearchValidator.spec.js +48 -0
  169. package/src/validators/variableSearchValidator/variableSearchValidator.js +10 -0
  170. package/src/validators/websocketValidator/__tests__/websocketValidator.spec.js +28 -0
  171. package/src/validators/websocketValidator/websocketValidator.js +9 -0
  172. package/dist/demo.html +0 -1
  173. package/dist/ui-sdk.common.js +0 -43066
  174. package/dist/ui-sdk.common.js.map +0 -1
  175. package/dist/ui-sdk.umd.js.map +0 -1
  176. package/dist/ui-sdk.umd.min.js +0 -35
  177. package/dist/ui-sdk.umd.min.js.map +0 -1
  178. package/src/components/wt-button/Readme.md +0 -23
  179. package/src/components/wt-button-select/Readme.md +0 -13
  180. package/src/components/wt-icon/Readme.md +0 -327
  181. package/src/components/wt-icon/docs/cleanup-svg-fill-none.png +0 -0
  182. package/src/components/wt-icon/docs/cleanup-svg-fill.png +0 -0
  183. package/src/components/wt-icon/docs/cleanup-svg-viewbox-correct.png +0 -0
  184. package/src/components/wt-icon/docs/cleanup-svg-viewbox-incorrect.png +0 -0
  185. package/src/components/wt-icon/docs/cleanup-svg-width-height.png +0 -0
  186. package/src/components/wt-icon/docs/svg-icon-code-example.png +0 -0
  187. package/src/components/wt-icon/docs/svg-sprite-in-dom.png +0 -0
  188. package/src/components/wt-icon-btn/Readme.md +0 -10
  189. package/src/components/wt-rounded-action/Readme.md +0 -68
  190. package/src/components/wt-tags-input/_variables.scss +0 -24
  191. package/src/locale/.DS_Store +0 -0
@@ -0,0 +1,327 @@
1
+ import {
2
+ AgentStatus,
3
+ CallDirection,
4
+ ChannelState,
5
+ ChannelType,
6
+ EngineRoutingSchemaType,
7
+ } from 'webitel-sdk';
8
+ import { QueueType } from 'webitel-sdk/esm2015/enums';
9
+ import AdminSections from '../../enums/WebitelApplications/AdminSections.enum';
10
+ import CrmSections from '../../enums/WebitelApplications/CrmSections.enum';
11
+ import SupervisorSections
12
+ from '../../enums/WebitelApplications/SupervisorSections.enum';
13
+ import WebitelApplications
14
+ from '../../enums/WebitelApplications/WebitelApplications.enum';
15
+ import { snakeToCamel } from '../../scripts/caseConverters';
16
+
17
+ export default {
18
+ reusable: {
19
+ total: 'Барлығы',
20
+ ok: 'ок',
21
+ save: 'Сақтау',
22
+ saveAs: 'ретінде сақтау',
23
+ saved: 'Сақталды',
24
+ send: 'Жіберу',
25
+ start: 'Бастау',
26
+ close: 'Жабу',
27
+ add: 'Қосу',
28
+ cancel: 'Бас тарту',
29
+ import: 'Импорттау',
30
+ export: 'Экспорттау',
31
+ true: 'Иә',
32
+ delete: 'Жою',
33
+ search: 'Іздеу',
34
+ open: 'Ашу',
35
+ name: 'Атауы',
36
+ expand: 'Ашу',
37
+ collapse: 'Жию ',
38
+ generate: 'Бастау',
39
+ lang: {
40
+ en: 'English',
41
+ es: 'Español',
42
+ ru: 'Орысша',
43
+ ua: 'Українська',
44
+ kz: 'Қазақ',
45
+ },
46
+ from: 'Бастап',
47
+ to: 'Дейін',
48
+ state: 'Жағдай',
49
+ refresh: 'Жаңарту',
50
+ retry: 'Қайталау',
51
+ downloadAll: 'Барлығын жүктеп алу',
52
+ warning: 'Ескерту',
53
+ doNotSave: 'Сақтамау',
54
+ required: 'Міндетті',
55
+ copy: 'Көшіру',
56
+ new: 'Жаңа',
57
+ createdAt: 'Жасалды',
58
+ createdBy: 'кім жасады',
59
+ modifiedAt: 'Өзгертілді',
60
+ modifiedBy: 'кім өзгертті',
61
+ general: 'Жалпы',
62
+ generalInfo: 'жалпы ақпарат',
63
+ all: 'Барлығы { entity }',
64
+ upload: 'Жүктеп алу',
65
+ edit: 'Редакциялау',
66
+ back: 'Артқа',
67
+ step: 'Қадам { count }',
68
+ },
69
+ vocabulary: {
70
+ language: 'Тіл',
71
+ voice: 'Дауыс',
72
+ format: 'Формат',
73
+ text: 'Мәтін',
74
+ yes: 'Иә',
75
+ no: 'Жоқ',
76
+ description: 'Сипаттама',
77
+ login: 'Логин',
78
+ host: 'Хост',
79
+ time: 'Уақыт',
80
+ channel: 'Арна',
81
+ file: 'Файл',
82
+ logout: 'Шығу',
83
+ priority: 'Басымдық',
84
+ variables: 'Ауыспалы | Ауыспалылар',
85
+ type: 'Тип',
86
+ tag: 'Тег | Тегтер',
87
+ output: 'Шығу',
88
+ values: 'Мәні| Мәндер',
89
+ keys: 'Кілт | Кілттер',
90
+ duration: 'Ұзақтығы',
91
+ reset: 'Қалпына келтіру',
92
+ errors: 'Қате | Қателер',
93
+ labels: 'Белгі | Белгілер',
94
+ permissions: 'Рұқсат | Рұқсат',
95
+ options: 'Опция | Опциялар',
96
+ emails: 'Email | Emails',
97
+ phones: 'Телефон | Телефондар',
98
+ messaging: 'Хабарламалар',
99
+ },
100
+ date: {
101
+ sec: 'Сек',
102
+ timezone: 'Уақыт белдеуі | Уақыт белдеулері',
103
+ },
104
+ objects: {
105
+ team: 'Команда | Командалар',
106
+ supervisor: 'Супервизор | Супервизорлар',
107
+ auditor: 'Аудитор | Аудиторлар',
108
+ region: 'Аймақ | Аймақтар',
109
+ communicationType: 'Байланыс түрі |Байланыс түрлері',
110
+ queue: {
111
+ type: {
112
+ [QueueType.INBOUND_QUEUE]: 'Кіріс кезегі',
113
+ [QueueType.OFFLINE_QUEUE]: 'Офлайн кезек',
114
+ [QueueType.OUTBOUND_IVR_QUEUE]: 'Шығыс IVR',
115
+ [QueueType.PREDICTIVE_DIALER]: 'Предиктивтік қоңырау',
116
+ [QueueType.PROGRESSIVE_DIALER]: 'Прогрессивті қоңырау',
117
+ [QueueType.PREVIEW_DIALER]: 'Қоңырауды алдын ала қарау',
118
+ [QueueType.CHAT_INBOUND_QUEUE]: 'Чаттар кезегі',
119
+ [QueueType.INBOUND_JOB_QUEUE]: 'Кіріс тапсырмалар кезегі',
120
+ [QueueType.OUTBOUND_JOB_QUEUE]: 'Шығыс тапсырмалар кезегі',
121
+ },
122
+ },
123
+ agent: {
124
+ status: {
125
+ [AgentStatus.Online]: 'Онлайн',
126
+ [AgentStatus.Pause]: 'Үзіліс',
127
+ [AgentStatus.Offline]: 'Оффлайн',
128
+ [snakeToCamel(AgentStatus.BreakOut)]: 'Мәжбүрлі үзіліс',
129
+ },
130
+ },
131
+ flow: {
132
+ type: {
133
+ [EngineRoutingSchemaType.Chat]: 'Мәтіндік',
134
+ [EngineRoutingSchemaType.Voice]: 'Дыбыстық',
135
+ [EngineRoutingSchemaType.Service]: 'Қызметтік',
136
+ [EngineRoutingSchemaType.Processing]: 'Нысандар',
137
+ [EngineRoutingSchemaType.Default]: 'Типі жоқ',
138
+ },
139
+ },
140
+ },
141
+ channel: {
142
+ state: {
143
+ [ChannelState.Waiting]: 'Күту',
144
+ [ChannelState.Distribute]: 'Резервтелген',
145
+ [ChannelState.Offering]: 'Тарату',
146
+ [ChannelState.Answered]: 'Жауап берді',
147
+ [ChannelState.Active]: 'Белсенді',
148
+ [ChannelState.Bridged]: 'Қосылды',
149
+ [ChannelState.Hold]: 'Ұстап тұру',
150
+ [ChannelState.Missed]: 'Өткізіп жіберді',
151
+ [snakeToCamel(ChannelState.WrapTime)]: 'Кейінгі өңдеу',
152
+ [ChannelState.Processing]: 'Өңдеу',
153
+ [ChannelState.Transfer]: 'Ауыстыру',
154
+ },
155
+ type: {
156
+ [ChannelType.Call]: 'Қоңырау',
157
+ [ChannelType.Email]: 'Пошта',
158
+ [ChannelType.Chat]: 'Чат',
159
+ },
160
+ },
161
+ calls: {
162
+ direction: {
163
+ [CallDirection.Inbound]: 'Кіріс | Кірістер',
164
+ [CallDirection.Outbound]: 'Шығыс | Шығыстар',
165
+ },
166
+ },
167
+ WebitelApplications: {
168
+ [WebitelApplications.AGENT]: {},
169
+ [WebitelApplications.AUDIT]: {
170
+ sections: {},
171
+ },
172
+ [WebitelApplications.CRM]: {
173
+ sections: {
174
+ [CrmSections.CONTACTS]: 'Байланыстар',
175
+ },
176
+ },
177
+ [WebitelApplications.HISTORY]: {},
178
+ [WebitelApplications.ANALYTICS]: {},
179
+ [WebitelApplications.SUPERVISOR]: {
180
+ sections: {
181
+ [SupervisorSections.QUEUES]: 'Кезектер',
182
+ [SupervisorSections.AGENTS]: 'Операторлар',
183
+ [SupervisorSections.ACTIVE_CALLS]: 'Белсенді қоңыраулар',
184
+ },
185
+ },
186
+ [WebitelApplications.ADMIN]: {
187
+ sections: {
188
+ [AdminSections.USERS]: 'Пайдаланушылар',
189
+ [AdminSections.LICENSE]: 'Лицензиялар',
190
+ [AdminSections.DEVICES]: 'Құрылғылар',
191
+ [AdminSections.FLOW]: 'Схемалар',
192
+ [AdminSections.DIALPLAN]: 'Шығыс бағыттау',
193
+ [AdminSections.GATEWAYS]: 'Шлюздер',
194
+ [AdminSections.CHATPLAN]: 'Мәтіндік хабарламаны бағыттау қағидасы',
195
+ [AdminSections.SKILLS]: 'Оператор дағдылары',
196
+ [AdminSections.BUCKETS]: 'Себеттер',
197
+ [AdminSections.MEDIA]: 'Медиафайлдар',
198
+ [AdminSections.BLACKLIST]: 'Тізімдер',
199
+ [AdminSections.CALENDARS]: 'Күнтізбелер',
200
+ [AdminSections.COMMUNICATIONS]: 'Байланыс түрлері',
201
+ [AdminSections.REGIONS]: 'Орындар',
202
+ [AdminSections.PAUSE_CAUSE]: 'Оператор күйлері',
203
+ [AdminSections.AGENTS]: 'Операторлар',
204
+ [AdminSections.TEAMS]: 'Командалар',
205
+ [AdminSections.RESOURCES]: 'Ресурстар',
206
+ [AdminSections.RESOURCE_GROUPS]: 'Ресурстар топтары',
207
+ [AdminSections.QUEUES]: 'Кезектер',
208
+ [AdminSections.STORAGE]: 'Қойма',
209
+ [AdminSections.COGNITIVE_PROFILES]: 'Дыбыстық профильдер',
210
+ [AdminSections.EMAIL_PROFILES]: 'Email профильдері',
211
+ [AdminSections.IMPORT_CSV]: 'CSV файлдарынан деректерді импорттау',
212
+ [AdminSections.TRIGGERS]: 'Триггерлер',
213
+ [AdminSections.ROLES]: 'Рөлдер',
214
+ [AdminSections.OBJECTS]: 'Бөлімдер',
215
+ },
216
+ },
217
+ },
218
+ validation: {
219
+ required: 'Міндетті өріс',
220
+ numeric: 'Сандық мәнді енгізу керек',
221
+ email: 'Электрондық пошта мекенжайын енгізу қажет',
222
+ gatewayHostValidator: 'IPv4 немесе FQDN енгізу керек',
223
+ sipAccountValidator: 'SIP-аккаунт енгізу керек',
224
+ ipValidator: 'IPv4 енгізу керек',
225
+ macValidator: 'MAC-мекенжайын енгізу керек',
226
+ minValue: 'Мәні кіші болмауы керек',
227
+ maxValue: 'Мәні үлкен болмауы керек',
228
+ sameAs: 'Қате құпиясөз',
229
+ requiredArrayValue: 'Өріс бос болмауы керек',
230
+ minLength: 'Таңбалар саны кем болмауы керек',
231
+ url: 'Жарамды URL-мекенжайын енгізу қажет',
232
+ regExpValidator: 'Жарамсыз тұрақты мән',
233
+ domainValidator: 'Қате домен',
234
+ },
235
+ webitelUI: {
236
+ searchBar: {
237
+ placeholder: 'Іздеу',
238
+ },
239
+ timepicker: {
240
+ hour: 'Сағат:',
241
+ min: 'Мин:',
242
+ sec: 'Сек:',
243
+ },
244
+ datetimepicker: {
245
+ lastHour: 'Соңғы сағат',
246
+ lastDay: 'Соңғы күн',
247
+ },
248
+ pagination: {
249
+ sizeText: 'Беттегі жазбалар:',
250
+ prev: 'Артқа',
251
+ next: 'Әрі қарай',
252
+ },
253
+ appNavigator: {
254
+ title: 'Webitel қосымшалары',
255
+ },
256
+ headerActions: {
257
+ account: 'Аккаунт',
258
+ docs: 'Құжаттама',
259
+ settings: 'Баптау',
260
+ logout: 'Шығу',
261
+ buildVersion: 'Құрастыру нұсқасы',
262
+ },
263
+ tableActions: {
264
+ filterReset: 'Іріктемені қалпына келтіру',
265
+ columnSelect: 'Бағандарды қосу',
266
+ refreshTable: 'Жаңарту',
267
+ expandFilters: 'Іріктемені кеңейту',
268
+ },
269
+ tableColumnSelect: {
270
+ title: 'Көрсетілетін бағандарды таңдаңыз',
271
+ },
272
+ statusSelect: {
273
+ online: 'Онлайн',
274
+ pause: 'Үзіліс ',
275
+ offline: 'Оффлайн',
276
+ breakOut: 'Мәжбүрлі үзіліс',
277
+ },
278
+ iconAction: {
279
+ deleteActionHint: 'Жою',
280
+ editActionHint: 'Редакциялау',
281
+ addActionHint: 'Қосу',
282
+ historyActionHint: 'Тарих',
283
+ downloadActionHint: 'Жүктеп алу',
284
+ },
285
+ errorPages: {
286
+ goBack: 'Артқа қайту',
287
+ page403: {
288
+ title: 'Кіруге болмайды',
289
+ text: 'Кешіріңіз, бұл бетті көруге сізде рұқсат жоқ.',
290
+ },
291
+ page404: {
292
+ title: 'Сіз адасып кеткен сияқтысыз',
293
+ text: 'Кешіріңіз, біз сіз іздегенді таба алмадық',
294
+ },
295
+ },
296
+ copyAction: {
297
+ copy: 'Көшіру',
298
+ copied: 'Көшірілді!',
299
+ },
300
+ auditForm: {
301
+ question: 'Критерий',
302
+ option: 'Нұсқа |Нұсқалар',
303
+ addQuestion: 'Критерий қосу',
304
+ answerType: 'Жауап түрі',
305
+ type: {
306
+ options: 'Нұсқа ',
307
+ score: 'Бал',
308
+ },
309
+ },
310
+ deleteConfirmationPopup: {
311
+ title: 'Жоюды растаңыз',
312
+ askingAlert: '{count} жазбасын жойғыңыз келетініне сенімдісіз бе? | {count} жазбасын жойғыңыз келетініне сенімдісіз бе?',
313
+ undoneActionAlert: 'Бұл әрекетті қайтару мүмкін емес.',
314
+ deleteAll: 'БАРЛЫҒЫ',
315
+ },
316
+ dummy: {
317
+ text: 'Бөлімде әлі жазбалар жазылмаған',
318
+ },
319
+ agentStatusSelect: {
320
+ pauseCausePopup: {
321
+ title: 'Үзіліс себебін таңдаңыз',
322
+ min: 'Мин',
323
+ unlimited: 'Лимитсіз',
324
+ },
325
+ },
326
+ },
327
+ };
@@ -44,6 +44,7 @@ export default {
44
44
  es: 'Español',
45
45
  ru: 'Русский',
46
46
  ua: 'Українська',
47
+ kz: 'Қазақ',
47
48
  },
48
49
  from: 'От',
49
50
  to: 'До',
@@ -222,12 +223,13 @@ export default {
222
223
  [AdminSections.STORAGE]: 'Хранилища',
223
224
  [AdminSections.COGNITIVE_PROFILES]: 'Голосовые профили',
224
225
  [AdminSections.EMAIL_PROFILES]: 'Email профили',
226
+ [AdminSections.SINGLE_SIGN_ON]: 'Single Sign-on',
225
227
  [AdminSections.IMPORT_CSV]: 'Импорт данных из CSV файлов',
226
228
  [AdminSections.TRIGGERS]: 'Триггеры',
227
229
  [AdminSections.ROLES]: 'Роли',
228
230
  [AdminSections.OBJECTS]: 'Разделы',
229
231
  [AdminSections.CHANGELOGS]: 'Журнал изменений',
230
- [AdminSections.SETTINGS]: 'Настройки',
232
+ [AdminSections.CONFIGURATION]: 'Конфигурация',
231
233
  },
232
234
  },
233
235
  },
@@ -245,6 +247,7 @@ export default {
245
247
  requiredArrayValue: 'Поле не должно быть пустым',
246
248
  minLength: 'Количество символов не должно быть меньше, чем',
247
249
  url: 'Необходимо ввести корректный url-адрес',
250
+ websocketValidator: 'Необходимо ввести корректный WebSocket url-адрес',
248
251
  regExpValidator: 'Не правильное регулярное выражение',
249
252
  domainValidator: 'Неправильный домен',
250
253
  decimalValidator: 'Количество десятичных знаков не должно быть больше { count }',
@@ -254,6 +257,7 @@ export default {
254
257
  searchBar: {
255
258
  placeholder: 'Поиск',
256
259
  settingsHint: 'Настройки поиска',
260
+ variableSearchHint: 'Формат запроса: "ключ=значение"',
257
261
  },
258
262
  timepicker: {
259
263
  hour: 'Час:',
@@ -336,8 +340,7 @@ export default {
336
340
  },
337
341
  deleteConfirmationPopup: {
338
342
  title: 'Подтвердите удаление',
339
- askingAlert: 'Вы уверенны, что хотите удалить {count} запись? | Вы уверенны, что хотите удалить {count} записей?',
340
- undoneActionAlert: 'Это действие не может быть отменено.',
343
+ askingAlert: 'Вы уверенны, что хотите\n удалить {count} запись? | Вы уверенны, что хотите\n удалить {count} записей?',
341
344
  deleteAll: 'ВСЕ',
342
345
  },
343
346
  dummy: {
@@ -354,5 +357,10 @@ export default {
354
357
  message: 'Лимит операторов в паузе превышен. Перерыв сейчас недоступен.',
355
358
  },
356
359
  },
360
+ saveFailedPopup: {
361
+ title: 'Ошибка сохранения',
362
+ label: 'Что-то пошло не так. Пожалуйста, попробуйте еще раз',
363
+ exportToJson: 'Экспортировать в JSON',
364
+ },
357
365
  },
358
366
  };
@@ -44,6 +44,7 @@ export default {
44
44
  es: 'Español',
45
45
  ru: 'Русский',
46
46
  ua: 'Українська',
47
+ kz: 'Қазақ',
47
48
  },
48
49
  from: 'Від',
49
50
  to: 'До',
@@ -222,12 +223,13 @@ export default {
222
223
  [AdminSections.STORAGE]: 'Сховища',
223
224
  [AdminSections.COGNITIVE_PROFILES]: 'Голосові профілі',
224
225
  [AdminSections.EMAIL_PROFILES]: 'Email профілі',
226
+ [AdminSections.SINGLE_SIGN_ON]: 'Single Sign-on',
225
227
  [AdminSections.IMPORT_CSV]: 'Імпорт даних з CSV файлів',
226
228
  [AdminSections.TRIGGERS]: 'Тригери',
227
229
  [AdminSections.ROLES]: 'Ролі',
228
230
  [AdminSections.OBJECTS]: 'Розділи',
229
231
  [AdminSections.CHANGELOGS]: 'Журнал змін',
230
- [AdminSections.SETTINGS]: 'Налаштування',
232
+ [AdminSections.CONFIGURATION]: 'Конфігурація',
231
233
  },
232
234
  },
233
235
  },
@@ -245,6 +247,7 @@ export default {
245
247
  requiredArrayValue: 'Поле не повинно бути пустим',
246
248
  minLength: 'Кількість символів повинна бути не меншою, ніж',
247
249
  url: 'Необхідно ввести правильну url-адресу',
250
+ websocketValidator: 'Необхідно ввести правильну WebSocket url-адресу',
248
251
  regExpValidator: 'Не правильний регулярний вираз',
249
252
  domainValidator: 'Невірний домен',
250
253
  decimalValidator: 'Кількість десяткових знаків не повинна бути більше { count }',
@@ -254,6 +257,7 @@ export default {
254
257
  searchBar: {
255
258
  placeholder: 'Пошук',
256
259
  settingsHint: 'Налаштування пошуку',
260
+ variableSearchHint: 'Формат запиту: "ключ=значення"',
257
261
  },
258
262
  timepicker: {
259
263
  hour: 'Год:',
@@ -336,8 +340,7 @@ export default {
336
340
  },
337
341
  deleteConfirmationPopup: {
338
342
  title: 'Підтвердіть видалення',
339
- askingAlert: 'Ви впевнені, що хочете видалити {count} запис? | Ви впевнені, що хочете видалити {count} записів?',
340
- undoneActionAlert: 'Дана дія не може бути скасована.',
343
+ askingAlert: 'Ви впевнені, що хочете\n видалити {count} запис? | Ви впевнені, що хочете\n видалити {count} записів?',
341
344
  deleteAll: 'ВСІ',
342
345
  },
343
346
  dummy: {
@@ -354,5 +357,10 @@ export default {
354
357
  message: 'Ліміт операторів в паузі перевищено. Перерва наразі недоступна.',
355
358
  },
356
359
  },
360
+ saveFailedPopup: {
361
+ title: 'Помилка збереження',
362
+ label: 'Щось пішло не так. Будь ласка, спробуйте ще раз',
363
+ exportToJson: 'Експортувати в JSON',
364
+ },
357
365
  },
358
366
  };
@@ -30,7 +30,7 @@ describe('Validation mixin', () => {
30
30
  },
31
31
  },
32
32
  });
33
- expect(wrapper.vm.validationText).toBe('validation.email');
33
+ expect(wrapper.vm.validationText).toBe('Should look like email');
34
34
  });
35
35
 
36
36
  it('prioritizes error messages', () => {
@@ -42,6 +42,6 @@ describe('Validation mixin', () => {
42
42
  },
43
43
  },
44
44
  });
45
- expect(wrapper.vm.validationText).toBe('validation.required');
45
+ expect(wrapper.vm.validationText).toBe('Field is required');
46
46
  });
47
47
  });
@@ -1,14 +1,28 @@
1
- import { computed } from 'vue';
1
+ import { computed, isReactive, isRef } from 'vue';
2
2
  import { useI18n } from 'vue-i18n';
3
3
 
4
- export function useValidation({ v, customValidators }) {
4
+ export function useValidation({ v: inputV, customValidators: inputCustomValidators }) {
5
5
  const { t } = useI18n();
6
- const isValidation = computed(() => !!v.value && !!Object.keys(v.value).length);
6
+
7
+ // support vue options api, where v is a reactive, not ref
8
+ let v = inputV;
9
+ let customValidators = inputCustomValidators;
10
+
11
+ if (isReactive(v)) {
12
+ v = computed(() => inputV);
13
+ customValidators = computed(() => inputCustomValidators);
14
+ }
15
+
16
+ // end
17
+
18
+ console.info(v, inputV, isRef(v), isReactive(inputV));
19
+
20
+ const isValidation = computed(() => !!v && !!v.value && !!Object.keys(v.value).length);
7
21
  const invalid = computed(() => isValidation.value && v.value.$error);
8
22
 
9
23
  const validationText = computed(() => {
10
24
  let validationText = '';
11
- if (isValidation && invalid) {
25
+ if (isValidation.value && invalid) {
12
26
  if (v.value.required?.$invalid) validationText = t('validation.required');
13
27
  else if (v.value.numeric?.$invalid) validationText = t('validation.numeric');
14
28
  else if (v.value.email?.$invalid) validationText = t('validation.email');
@@ -24,6 +38,7 @@ export function useValidation({ v, customValidators }) {
24
38
  else if (v.value.sameAs?.$invalid) validationText = `${t('validation.sameAs')}`;
25
39
  else if (v.value.domainValidator?.$invalid) validationText = `${t('validation.domainValidator')}`;
26
40
  else if (v.value.decimalValidator?.$invalid) validationText = `${t('validation.decimalValidator')} ${v.value.decimalValidator.$params.count}`;
41
+ else if (v.value.websocketValidator?.$invalid) validationText = `${t('validation.websocketValidator')}`;
27
42
  else if (v.value.integer?.$invalid) validationText = `${t('validation.integer')}`;
28
43
  }
29
44
  // eslint-disable-next-line no-restricted-syntax
@@ -34,6 +34,7 @@ export default {
34
34
  else if (this.v.sameAs?.$invalid) validationText = `${this.$t('validation.sameAs')}`;
35
35
  else if (this.v.domainValidator?.$invalid) validationText = `${this.$t('validation.domainValidator')}`;
36
36
  else if (this.v.decimalValidator?.$invalid) validationText = `${this.$t('validation.decimalValidator')} ${this.v.decimalValidator.$params.count}`;
37
+ else if (this.v.websocketValidator?.$invalid) validationText = `${this.$t('validation.websocketValidator')}`;
37
38
  else if (this.v.integer?.$invalid) validationText = `${this.$t('validation.integer')}`;
38
39
  }
39
40
  // eslint-disable-next-line no-restricted-syntax
@@ -6,13 +6,13 @@ import * as PauseCauseAPIFactory from '../../api/pause-cause';
6
6
  import WtCcAgentStatusSelect from '../wt-cc-agent-status-select.vue';
7
7
 
8
8
  const pauseCauses = [{ name: 'jest1' }, { name: 'jest2' }];
9
- const getAgentPauseCausesMock = jest.fn(() => ({ items: pauseCauses }));
9
+ const getAgentPauseCausesMock = vi.fn(() => ({ items: pauseCauses }));
10
10
  // https://stackoverflow.com/a/63727813
11
- jest.spyOn(PauseCauseAPIFactory, 'default').mockImplementation(() => ({ getList: getAgentPauseCausesMock }));
11
+ vi.spyOn(PauseCauseAPIFactory, 'default').mockImplementation(() => ({ getList: getAgentPauseCausesMock }));
12
12
 
13
- const agentStatusMock = jest.fn(() => {});
13
+ const agentStatusMock = vi.fn(() => {});
14
14
  // https://stackoverflow.com/a/63727813
15
- jest.spyOn(AgentStatusAPIFactory, 'default').mockImplementation(() => ({ patch: agentStatusMock }));
15
+ vi.spyOn(AgentStatusAPIFactory, 'default').mockImplementation(() => ({ patch: agentStatusMock }));
16
16
 
17
17
  const agent = {
18
18
  status: '',
@@ -4,16 +4,16 @@
4
4
  min-width="480"
5
5
  @close="close"
6
6
  >
7
- <template v-slot:title>
7
+ <template #title>
8
8
  {{ $t('webitelUI.agentStatusSelect.pauseCausePopup.title') }}
9
9
  </template>
10
- <template v-slot:main>
10
+ <template #main>
11
11
  <form @submit.prevent="setPause">
12
12
  <ul>
13
13
  <li
14
- class="wt-cc-pause-cause-popup-option"
15
14
  v-for="(option) of pauseCause"
16
15
  :key="option.id"
16
+ class="wt-cc-pause-cause-popup-option"
17
17
  >
18
18
  <wt-radio
19
19
  class="wt-cc-pause-cause-popup-option__radio"
@@ -21,12 +21,12 @@
21
21
  :value="option.id"
22
22
  :label="option.name"
23
23
  @input="select(option)"
24
- ></wt-radio>
24
+ />
25
25
  <div class="wt-cc-pause-cause-popup-option__limits-wrapper">
26
26
  <span
27
27
  :class="{
28
- 'wt-cc-pause-cause-popup-option__duration--overflow': option.isOverflow,
29
- }"
28
+ 'wt-cc-pause-cause-popup-option__duration--overflow': option.isOverflow,
29
+ }"
30
30
  >
31
31
  {{ option.duration }}
32
32
  </span>
@@ -37,16 +37,18 @@
37
37
  </ul>
38
38
  </form>
39
39
  </template>
40
- <template v-slot:actions>
40
+ <template #actions>
41
41
  <wt-button
42
42
  :disabled="!selected"
43
43
  @click="setPause"
44
- >{{ $t('reusable.ok') }}
44
+ >
45
+ {{ $t('reusable.ok') }}
45
46
  </wt-button>
46
47
  <wt-button
47
48
  color="secondary"
48
49
  @click="close"
49
- >{{ $t('reusable.cancel') }}
50
+ >
51
+ {{ $t('reusable.cancel') }}
50
52
  </wt-button>
51
53
  </template>
52
54
  </wt-popup>
@@ -4,25 +4,26 @@
4
4
  min-width="480"
5
5
  @close="close"
6
6
  >
7
- <template v-slot:header>
7
+ <template #header>
8
8
  {{ $t('webitelUI.agentStatusSelect.statusSelectErrorPopup.title') }}
9
9
  </template>
10
- <template v-slot:main>
10
+ <template #main>
11
11
  <article class="wt-cc-status-select-error-popup__main-wrapper">
12
12
  <wt-icon
13
13
  icon="attention"
14
14
  color="danger"
15
- ></wt-icon>
15
+ />
16
16
  <p class="wt-cc-status-select-error-popup__message">
17
17
  {{ $t('webitelUI.agentStatusSelect.statusSelectErrorPopup.message') }}
18
18
  </p>
19
19
  </article>
20
20
  </template>
21
- <template v-slot:actions>
21
+ <template #actions>
22
22
  <wt-button
23
23
  color="secondary"
24
24
  @click="close"
25
- >{{ $t('reusable.ok') }}
25
+ >
26
+ {{ $t('reusable.ok') }}
26
27
  </wt-button>
27
28
  </template>
28
29
  </wt-popup>
@@ -4,18 +4,18 @@
4
4
  :status="status"
5
5
  :status-duration="statusDuration"
6
6
  @change="handleStatusSelectInput"
7
- ></wt-status-select>
7
+ />
8
8
  <pause-cause-popup
9
9
  v-if="isPauseCausePopup"
10
10
  :options="pauseCauses"
11
11
  @change="handlePauseCauseInput"
12
12
  @close="closePauseCausePopup"
13
- ></pause-cause-popup>
13
+ />
14
14
  <status-select-error-popup
15
15
  v-if="error"
16
16
  :error="error"
17
17
  @close="error = null"
18
- ></status-select-error-popup>
18
+ />
19
19
  </article>
20
20
  </template>
21
21
 
@@ -6,7 +6,7 @@ import {
6
6
  useDestroyableSortable,
7
7
  } from '../../../../composables/useDestroyableSortable/useDestroyableSortable';
8
8
 
9
- jest.mock('../../../../composables/useDestroyableSortable/useDestroyableSortable');
9
+ vi.mock('../../../../composables/useDestroyableSortable/useDestroyableSortable');
10
10
 
11
11
  useDestroyableSortable.mockImplementation(() => ({ reloadSortable: ref(false) }));
12
12