@webitel/ui-sdk 23.12.41 → 23.12.43

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 (144) hide show
  1. package/dist/favicon.ico +0 -0
  2. package/dist/img/sprite/index.js +147 -1
  3. package/dist/plyr.svg +70 -0
  4. package/dist/ui-sdk.css +1 -1
  5. package/dist/ui-sdk.mjs +22672 -0
  6. package/dist/ui-sdk.umd.js +37 -43322
  7. package/package.json +33 -41
  8. package/src/components/on-demand/wt-cc-agent-status-timers/wt-cc-agent-status-timers.vue +3 -3
  9. package/src/components/transitions/wt-expand-transition.vue +2 -2
  10. package/src/components/wt-app-header/wt-app-header.vue +2 -2
  11. package/src/components/wt-app-header/wt-app-navigator.vue +6 -5
  12. package/src/components/wt-app-header/wt-header-actions.vue +30 -14
  13. package/src/components/wt-avatar/wt-avatar.vue +2 -2
  14. package/src/components/wt-badge/wt-badge.vue +3 -3
  15. package/src/components/wt-button/wt-button.vue +5 -3
  16. package/src/components/wt-button-select/__tests__/WtButtonSelect.spec.js +4 -4
  17. package/src/components/wt-button-select/wt-button-select.vue +3 -3
  18. package/src/components/wt-checkbox/wt-checkbox.vue +12 -7
  19. package/src/components/wt-chip/wt-chip.vue +6 -3
  20. package/src/components/wt-context-menu/wt-context-menu.vue +4 -4
  21. package/src/components/wt-copy-action/wt-copy-action.vue +6 -6
  22. package/src/components/wt-datepicker/wt-datepicker.vue +14 -12
  23. package/src/components/wt-divider/wt-divider.vue +1 -1
  24. package/src/components/wt-dummy/wt-dummy.vue +6 -2
  25. package/src/components/wt-error-page/wt-error-page.vue +10 -4
  26. package/src/components/wt-expansion-panel/wt-expansion-panel.vue +4 -4
  27. package/src/components/wt-filters-panel-wrapper/wt-filters-panel-wrapper.vue +7 -4
  28. package/src/components/wt-headline/wt-headline.vue +4 -4
  29. package/src/components/wt-headline-nav/wt-headline-nav.vue +11 -4
  30. package/src/components/wt-hint/wt-hint.vue +4 -4
  31. package/src/components/wt-icon/wt-icon.vue +5 -5
  32. package/src/components/wt-icon-action/_internals/wt-add-icon-action.vue +2 -2
  33. package/src/components/wt-icon-action/_internals/wt-delete-icon-action.vue +2 -2
  34. package/src/components/wt-icon-action/_internals/wt-download-icon-action.vue +2 -2
  35. package/src/components/wt-icon-action/_internals/wt-edit-icon-action.vue +2 -2
  36. package/src/components/wt-icon-action/_internals/wt-history-icon-action.vue +2 -2
  37. package/src/components/wt-icon-action/_internals/wt-refresh-icon-action.vue +2 -2
  38. package/src/components/wt-icon-action/wt-icon-action.vue +1 -1
  39. package/src/components/wt-icon-btn/wt-icon-btn.vue +1 -1
  40. package/src/components/wt-indicator/wt-indicator.vue +6 -3
  41. package/src/components/wt-input/wt-input.vue +189 -198
  42. package/src/components/wt-input-info/wt-input-info.vue +2 -2
  43. package/src/components/wt-item-link/wt-item-link.vue +1 -1
  44. package/src/components/wt-label/_variables.scss +4 -2
  45. package/src/components/wt-label/wt-label.vue +5 -18
  46. package/src/components/wt-load-bar/wt-load-bar.vue +5 -2
  47. package/src/components/wt-loader/_internals/wt-loader--md.vue +11 -2
  48. package/src/components/wt-loader/_internals/wt-loader--sm.vue +9 -2
  49. package/src/components/wt-loader/wt-loader.vue +10 -3
  50. package/src/components/wt-navigation-bar/wt-navigation-bar.vue +16 -8
  51. package/src/components/wt-notification/wt-notification.vue +3 -3
  52. package/src/components/wt-notifications-bar/wt-notifications-bar.vue +9 -5
  53. package/src/components/wt-page-header/wt-page-header.vue +7 -8
  54. package/src/components/wt-page-wrapper/wt-page-wrapper.vue +8 -5
  55. package/src/components/wt-pagination/wt-pagination.vue +17 -15
  56. package/src/components/wt-player/wt-player.vue +16 -16
  57. package/src/components/wt-popup/wt-popup.vue +13 -7
  58. package/src/components/wt-progress-bar/wt-progress-bar.vue +11 -7
  59. package/src/components/wt-radio/wt-radio.vue +15 -7
  60. package/src/components/wt-rounded-action/wt-rounded-action.vue +2 -2
  61. package/src/components/wt-search-bar/__tests__/WtSearchBar.spec.js +1 -1
  62. package/src/components/wt-search-bar/wt-search-bar.vue +6 -5
  63. package/src/components/wt-select/_multiselect.scss +1 -2
  64. package/src/components/wt-select/wt-select.vue +33 -19
  65. package/src/components/wt-slider/wt-slider.vue +5 -5
  66. package/src/components/wt-status-select/wt-status-select.vue +9 -9
  67. package/src/components/wt-stepper/wt-stepper.vue +8 -6
  68. package/src/components/wt-switcher/wt-switcher.vue +12 -7
  69. package/src/components/wt-table/wt-table.vue +110 -72
  70. package/src/components/wt-table-actions/wt-table-actions.vue +14 -14
  71. package/src/components/wt-table-column-select/wt-table-column-select.vue +28 -26
  72. package/src/components/wt-tabs/wt-tabs.vue +7 -7
  73. package/src/components/wt-tags-input/wt-tags-input.vue +23 -15
  74. package/src/components/wt-textarea/wt-textarea.vue +16 -11
  75. package/src/components/wt-time-input/wt-time-input.vue +8 -5
  76. package/src/components/wt-timepicker/wt-timepicker.vue +20 -16
  77. package/src/components/wt-tooltip/_internals/wt-tooltip-floating.vue +2 -2
  78. package/src/components/wt-tooltip/wt-tooltip.vue +4 -4
  79. package/src/composables/useCachedInterval/__tests__/useCachedInterval.spec.js +5 -5
  80. package/src/css/styleguide/colors/_colors.scss +9 -8
  81. package/src/css/styleguide/colors/reusable/_text-field.scss +20 -0
  82. package/src/css/styleguide/placeholder/_placeholder.scss +6 -11
  83. package/src/locale/i18n.js +1 -1
  84. package/src/locale/kz/kz.js +74 -78
  85. package/src/mixins/validationMixin/useValidation.js +2 -2
  86. package/src/modules/AgentStatusSelect/components/__tests__/wt-cc-agent-status-select.spec.js +4 -4
  87. package/src/modules/AgentStatusSelect/components/_internals/wt-cc-pause-cause-popup.vue +11 -9
  88. package/src/modules/AgentStatusSelect/components/_internals/wt-cc-status-select-error-popup.vue +6 -5
  89. package/src/modules/AgentStatusSelect/components/wt-cc-agent-status-select.vue +3 -3
  90. package/src/modules/AuditForm/components/__tests__/audit-form.spec.js +1 -1
  91. package/src/modules/AuditForm/components/audit-form-question-read-wrapper.vue +10 -6
  92. package/src/modules/AuditForm/components/audit-form-question-write-wrapper.vue +8 -8
  93. package/src/modules/AuditForm/components/audit-form-question.vue +8 -8
  94. package/src/modules/AuditForm/components/audit-form.vue +6 -5
  95. package/src/modules/AuditForm/components/questions/options/audit-form-question-options-write-row.vue +4 -4
  96. package/src/modules/AuditForm/components/questions/options/audit-form-question-options.vue +7 -4
  97. package/src/modules/AuditForm/components/questions/score/audit-form-question-score.vue +3 -3
  98. package/src/modules/CSVExport/__tests__/CSVExport.spec.js +5 -2
  99. package/src/modules/DeleteConfirmationPopup/__tests__/delete-confirmation-popup.spec.js +6 -6
  100. package/src/modules/DeleteConfirmationPopup/components/delete-confirmation-popup.vue +13 -6
  101. package/src/modules/FilesExport/__tests__/FilesExport.spec.js +6 -3
  102. package/src/modules/Filters/components/filter-pagination.vue +1 -1
  103. package/src/modules/Filters/components/filter-table-fields.vue +1 -1
  104. package/src/modules/Notifications/store/__tests__/NotificationsStoreModule.actions.spec.js +6 -6
  105. package/src/modules/QueryFilters/classes/__tests__/ApiFilterSchema.spec.js +1 -1
  106. package/src/modules/QueryFilters/components/__tests__/abstract-api-filter.spec.js +4 -4
  107. package/src/modules/QueryFilters/components/__tests__/filter-datetime.spec.js +2 -2
  108. package/src/modules/QueryFilters/components/__tests__/filter-from-to.spec.js +4 -4
  109. package/src/modules/QueryFilters/components/__tests__/filter-search.spec.js +2 -2
  110. package/src/modules/QueryFilters/components/abstract-api-filter.vue +2 -2
  111. package/src/modules/QueryFilters/components/abstract-enum-filter.vue +2 -2
  112. package/src/modules/QueryFilters/components/filter-datetime.vue +2 -2
  113. package/src/modules/QueryFilters/components/filter-from-to.vue +12 -10
  114. package/src/modules/QueryFilters/components/filter-search.vue +2 -2
  115. package/src/modules/QueryFilters/components/filter-table-fields.vue +7 -7
  116. package/src/modules/QueryFilters/mixins/__tests__/apiFilterMixin.spec.js +1 -1
  117. package/src/modules/QueryFilters/mixins/__tests__/enumFilterMixin.spec.js +2 -2
  118. package/src/modules/QueryFilters/mixins/__tests__/paginationFilterMixin.spec.js +2 -2
  119. package/src/modules/QueryFilters/mixins/__tests__/sortFilterMixin.spec.js +1 -1
  120. package/src/modules/QueryFilters/store/__tests__/QueryFiltersStoreModule.spec.js +2 -2
  121. package/src/modules/Userinfo/components/__tests__/auth.spec.js +7 -8
  122. package/src/modules/Userinfo/components/the-auth.vue +7 -4
  123. package/src/store/BaseStoreModules/__tests__/BaseStoreModule.spec.js +6 -6
  124. package/dist/demo.html +0 -1
  125. package/dist/ui-sdk.common.js +0 -43304
  126. package/dist/ui-sdk.common.js.map +0 -1
  127. package/dist/ui-sdk.umd.js.map +0 -1
  128. package/dist/ui-sdk.umd.min.js +0 -35
  129. package/dist/ui-sdk.umd.min.js.map +0 -1
  130. package/src/components/wt-button/Readme.md +0 -23
  131. package/src/components/wt-button-select/Readme.md +0 -13
  132. package/src/components/wt-headline-nav/Readme.md +0 -9
  133. package/src/components/wt-icon/Readme.md +0 -327
  134. package/src/components/wt-icon/docs/cleanup-svg-fill-none.png +0 -0
  135. package/src/components/wt-icon/docs/cleanup-svg-fill.png +0 -0
  136. package/src/components/wt-icon/docs/cleanup-svg-viewbox-correct.png +0 -0
  137. package/src/components/wt-icon/docs/cleanup-svg-viewbox-incorrect.png +0 -0
  138. package/src/components/wt-icon/docs/cleanup-svg-width-height.png +0 -0
  139. package/src/components/wt-icon/docs/svg-icon-code-example.png +0 -0
  140. package/src/components/wt-icon/docs/svg-sprite-in-dom.png +0 -0
  141. package/src/components/wt-icon-btn/Readme.md +0 -10
  142. package/src/components/wt-rounded-action/Readme.md +0 -68
  143. package/src/validators/variableSearchValidator/Readme.md +0 -13
  144. package/src/validators/websocketValidator/Readme.md +0 -7
@@ -6,21 +6,21 @@
6
6
  :v="v$.option.name"
7
7
  prevent-trim
8
8
  @input="emit('update:option', { name: $event, score: option.score })"
9
- ></wt-input>
9
+ />
10
10
  <wt-input
11
11
  :label="$t('webitelUI.auditForm.score', 1)"
12
12
  :value="option.score"
13
13
  :v="v$.option.score"
14
14
  type="number"
15
15
  @input="emit('update:option', { name: option.name, score: $event })"
16
- ></wt-input>
16
+ />
17
17
  <wt-tooltip class="audit-form-question-options-write-row__tooltip">
18
- <template v-slot:activator>
18
+ <template #activator>
19
19
  <wt-icon-btn
20
20
  :disabled="first"
21
21
  icon="bucket"
22
22
  @click="emit('delete')"
23
- ></wt-icon-btn>
23
+ />
24
24
  </template>
25
25
  {{ $t('reusable.delete') }}
26
26
  </wt-tooltip>
@@ -11,11 +11,12 @@
11
11
  :first="key === 0"
12
12
  @update:option="updateQuestion({ path: `options[${key}]`, value: $event })"
13
13
  @delete="deleteQuestionOption({ key })"
14
- ></options-write-row>
14
+ />
15
15
  <wt-button
16
16
  class="audit-form-question-options-write__add-button"
17
17
  @click="addQuestionOption"
18
- >{{ $t('reusable.add') }}
18
+ >
19
+ {{ $t('reusable.add') }}
19
20
  </wt-button>
20
21
  </div>
21
22
  <div
@@ -29,9 +30,11 @@
29
30
  :selected="result"
30
31
  :value="opt"
31
32
  @input="emit('change:result', $event)"
32
- ></wt-radio>
33
+ />
34
+ </div>
35
+ <div v-else>
36
+ Unknown mode: {{ mode }}
33
37
  </div>
34
- <div v-else>Unknown mode: {{ mode }}</div>
35
38
  </article>
36
39
  </template>
37
40
 
@@ -13,7 +13,7 @@
13
13
  type="number"
14
14
  required
15
15
  @input="updateQuestion({ path: 'min', value: $event })"
16
- ></wt-input>
16
+ />
17
17
  <wt-input
18
18
  :value="question.max"
19
19
  :v="v$.question.max"
@@ -23,7 +23,7 @@
23
23
  type="number"
24
24
  required
25
25
  @input="updateQuestion({ path: 'max', value: $event })"
26
- ></wt-input>
26
+ />
27
27
  </div>
28
28
  <div
29
29
  v-else-if="mode === 'read'"
@@ -36,7 +36,7 @@
36
36
  :value="value"
37
37
  :selected="isResult ? result.score : null"
38
38
  @input="emit('change:result', { score: value })"
39
- ></wt-radio>
39
+ />
40
40
  </div>
41
41
  </article>
42
42
  </template>
@@ -4,8 +4,11 @@ import stringify from 'csv-stringify/lib/sync';
4
4
  import CSVExportMixin from '../mixins/exportCSVMixin';
5
5
  import '../../../../tests/mocks/localStorageMock';
6
6
 
7
- jest.mock('csv-stringify/lib/sync');
8
- jest.mock('file-saver');
7
+ vi.mock('csv-stringify/lib/sync');
8
+ vi.mock('file-saver', () => ({
9
+ saveAs: vi.fn(),
10
+ }));
11
+
9
12
  const dataList = [
10
13
  { _isSelected: true, id: 1 },
11
14
  { _isSelected: true, id: 2 },
@@ -3,7 +3,7 @@ import { ref } from 'vue';
3
3
  import { useValidation } from '../../../mixins/validationMixin/useValidation';
4
4
  import DeleteConfirmationPopup from '../components/delete-confirmation-popup.vue';
5
5
 
6
- jest.mock('../../../mixins/validationMixin/useValidation');
6
+ vi.mock('../../../mixins/validationMixin/useValidation');
7
7
 
8
8
  useValidation.mockImplementation(() => ({
9
9
  isValidation: ref(false),
@@ -16,14 +16,14 @@ describe('DeleteConfirmationPopup', () => {
16
16
  const wrapper = shallowMount(DeleteConfirmationPopup, {
17
17
  props: {
18
18
  deleteCount: 1,
19
- callback: jest.fn(),
19
+ callback: vi.fn(),
20
20
  },
21
21
  });
22
22
  expect(wrapper.classes('delete-confirmation-popup')).toBe(true);
23
23
  });
24
24
 
25
25
  it('yes button called props callback', async () => {
26
- const callback = jest.fn();
26
+ const callback = vi.fn();
27
27
  const wrapper = mount(DeleteConfirmationPopup, {
28
28
  props: {
29
29
  deleteCount: 1,
@@ -42,7 +42,7 @@ describe('DeleteConfirmationPopup', () => {
42
42
  const wrapper = mount(DeleteConfirmationPopup, {
43
43
  props: {
44
44
  deleteCount,
45
- callback: jest.fn(),
45
+ callback: vi.fn(),
46
46
  },
47
47
  });
48
48
  expect(wrapper.find('.delete-confirmation-popup__content').text())
@@ -53,7 +53,7 @@ describe('DeleteConfirmationPopup', () => {
53
53
  const wrapper = mount(DeleteConfirmationPopup, {
54
54
  props: {
55
55
  deleteCount: 1,
56
- callback: jest.fn(),
56
+ callback: vi.fn(),
57
57
  },
58
58
  });
59
59
  const button = wrapper.findAllComponents({ name: 'wt-button' }).find((btn) => btn.text().includes('Yes'));
@@ -66,7 +66,7 @@ describe('DeleteConfirmationPopup', () => {
66
66
  const wrapper = mount(DeleteConfirmationPopup, {
67
67
  props: {
68
68
  deleteCount: 1,
69
- callback: jest.fn(),
69
+ callback: vi.fn(),
70
70
  },
71
71
  });
72
72
  const button = wrapper.findAllComponents({ name: 'wt-button' }).find((btn) => btn.text().includes('No'));
@@ -4,26 +4,33 @@
4
4
  width="500"
5
5
  @close="close"
6
6
  >
7
- <template v-slot:title>{{ $t('webitelUI.deleteConfirmationPopup.title') }}</template>
8
- <template v-slot:main>
7
+ <template #title>
8
+ {{ $t('webitelUI.deleteConfirmationPopup.title') }}
9
+ </template>
10
+ <template #main>
9
11
  <div class="delete-confirmation-popup__content">
10
- <wt-icon icon="attention" color="error"/>
12
+ <wt-icon
13
+ icon="attention"
14
+ color="error"
15
+ />
11
16
  <p class="delete-confirmation-popup__message">
12
17
  {{ deleteMessage }}
13
18
  </p>
14
19
  </div>
15
20
  </template>
16
- <template v-slot:actions>
21
+ <template #actions>
17
22
  <wt-button
18
23
  :loading="isDeleting"
19
24
  @click="confirm"
20
- >{{ $t('vocabulary.yes') }}
25
+ >
26
+ {{ $t('vocabulary.yes') }}
21
27
  </wt-button>
22
28
  <wt-button
23
29
  :disabled="isDeleting"
24
30
  color="secondary"
25
31
  @click="close"
26
- >{{ $t('vocabulary.no') }}
32
+ >
33
+ {{ $t('vocabulary.no') }}
27
34
  </wt-button>
28
35
  </template>
29
36
  </wt-popup>
@@ -5,9 +5,12 @@ import jszipUtils from 'jszip-utils';
5
5
  import FilesExportMixin from '../mixins/exportFilesMixin';
6
6
  import '../../../../tests/mocks/localStorageMock';
7
7
 
8
- jest.mock('jszip');
9
- jest.mock('jszip-utils');
10
- jest.mock('file-saver');
8
+ vi.mock('jszip');
9
+ vi.mock('jszip-utils');
10
+ vi.mock('file-saver', () => ({
11
+ saveAs: vi.fn(),
12
+ }));
13
+
11
14
  const dataList = [
12
15
  { files: [{ name: 'jest', id: '1', mimeType: 'mime/type' }] },
13
16
  ];
@@ -8,7 +8,7 @@
8
8
  @change="setSize(localSize)"
9
9
  @next="setPage(+page + 1)"
10
10
  @prev="setPage(page - 1)"
11
- ></wt-pagination>
11
+ />
12
12
  </template>
13
13
 
14
14
  <script setup>
@@ -3,7 +3,7 @@
3
3
  :headers="headers"
4
4
  :static-headers="staticHeaders"
5
5
  @change="handleChange"
6
- ></wt-table-column-select>
6
+ />
7
7
  </template>
8
8
 
9
9
  <script setup>
@@ -14,8 +14,8 @@ const state = {
14
14
 
15
15
  describe('features/notifications store: actions', () => {
16
16
  const context = {
17
- dispatch: jest.fn(),
18
- commit: jest.fn(),
17
+ dispatch: vi.fn(),
18
+ commit: vi.fn(),
19
19
  getters: {
20
20
  IS_MAIN_TAB: () => true,
21
21
  IS_SOUND_ALLOWED: () => true,
@@ -69,13 +69,13 @@ describe('features/notifications store: actions', () => {
69
69
  it('_SUBSCRIBE_TAB_CLOSING action commits SET_CURRENT_TAB_ID mutation', async () => {
70
70
  await notificationsModule.actions._SUBSCRIBE_TAB_CLOSING(context);
71
71
  window.dispatchEvent(new Event('storage'));
72
- expect(context.commit).toHaveBeenCalledWith('SET_CURRENT_TAB_ID', 'null');
72
+ expect(context.commit).toHaveBeenCalledWith('SET_CURRENT_TAB_ID', null);
73
73
  });
74
74
 
75
- it('PLAY_SOUND action commits SET_CURRENTLY_PLAIYNG mutation with sound', async () => {
76
- const sound = new Audio(audio);
75
+ it('PLAY_SOUND action commits SET_CURRENTLY_PLAYING mutation with sound', async () => {
76
+ const sound = {};
77
77
  await notificationsModule.actions.PLAY_SOUND(context, { sound });
78
- expect(context.commit).toHaveBeenCalledWith('SET_CURRENTLY_PLAYING', sound);
78
+ expect(context.commit.mock.calls[0][0]).toBe('SET_CURRENTLY_PLAYING');
79
79
  });
80
80
 
81
81
  it('_SET_UNREAD_COUNT dispatches _SET_TAB_TITLE action', () => {
@@ -1,7 +1,7 @@
1
1
  import ApiFilterSchema from '../ApiFilterSchema';
2
2
 
3
3
  describe('Api Filter Schema', () => {
4
- const APIMock = jest.fn();
4
+ const APIMock = vi.fn();
5
5
  beforeEach(() => {
6
6
  APIMock.mockClear();
7
7
  });
@@ -15,10 +15,10 @@ describe('Abstract Api Filter', () => {
15
15
  const filterSchema = new ApiFilterSchema({
16
16
  locale: { label: '' }
17
17
  });
18
- const searchMock = jest.fn();
19
- const fetchSelectedMock = jest.fn(() => ({ items: [] }));
20
- jest.spyOn(filterSchema, 'search').mockImplementation(searchMock);
21
- jest.spyOn(filterSchema, 'fetchSelected').mockImplementation(fetchSelectedMock);
18
+ const searchMock = vi.fn();
19
+ const fetchSelectedMock = vi.fn(() => ({ items: [] }));
20
+ vi.spyOn(filterSchema, 'search').mockImplementation(searchMock);
21
+ vi.spyOn(filterSchema, 'fetchSelected').mockImplementation(fetchSelectedMock);
22
22
  const store = createStore({
23
23
  modules: {
24
24
  [namespace]: {
@@ -41,8 +41,8 @@ describe('DatetimeFilter Filter', () => {
41
41
  it('initial restoreValue() triggers setValue() method', async () => {
42
42
  const value = Date.now();
43
43
  await router.replace({ query: { [filterQuery]: value } });
44
- const setValueMock = jest.fn();
45
- jest.spyOn(baseFilterMixin.methods, 'setValue').mockImplementationOnce(setValueMock);
44
+ const setValueMock = vi.fn();
45
+ vi.spyOn(baseFilterMixin.methods, 'setValue').mockImplementationOnce(setValueMock);
46
46
  shallowMount(DatetimeFilter, mountOptions);
47
47
  expect(setValueMock).toHaveBeenCalledWith({ filter: filterQuery, value });
48
48
  });
@@ -39,8 +39,8 @@ describe('FilterFromTo Filter', () => {
39
39
  it('initial restoreValue() triggers setValue() method: From case', async () => {
40
40
  const value = 10;
41
41
  await router.replace({ query: { [`${filterQuery}From`]: value } });
42
- const setValueMock = jest.fn();
43
- jest.spyOn(baseFilterMixin.methods, 'setValue')
42
+ const setValueMock = vi.fn();
43
+ vi.spyOn(baseFilterMixin.methods, 'setValue')
44
44
  .mockImplementation(setValueMock);
45
45
  shallowMount(FilterFromTo, mountOptions);
46
46
  expect(setValueMock).toHaveBeenNthCalledWith(1, {
@@ -51,8 +51,8 @@ describe('FilterFromTo Filter', () => {
51
51
  it('initial restoreValue() triggers setValue() method: To case', async () => {
52
52
  const value = 10;
53
53
  await router.replace({ query: { [`${filterQuery}To`]: value } });
54
- const setValueMock = jest.fn();
55
- jest.spyOn(baseFilterMixin.methods, 'setValue')
54
+ const setValueMock = vi.fn();
55
+ vi.spyOn(baseFilterMixin.methods, 'setValue')
56
56
  .mockImplementation(setValueMock);
57
57
  shallowMount(FilterFromTo, mountOptions);
58
58
  expect(setValueMock).toHaveBeenNthCalledWith(2, {
@@ -39,8 +39,8 @@ describe('Search Filter', () => {
39
39
  it('initial restoreValue() triggers setValue() method', async () => {
40
40
  const search = 'jest';
41
41
  await router.replace({ query: { [filterQuery]: search } });
42
- const setValueMock = jest.fn();
43
- jest.spyOn(baseFilterMixin.methods, 'setValue').mockImplementationOnce(setValueMock);
42
+ const setValueMock = vi.fn();
43
+ vi.spyOn(baseFilterMixin.methods, 'setValue').mockImplementationOnce(setValueMock);
44
44
  shallowMount(SearchFilter, mountOptions);
45
45
  expect(setValueMock).toHaveBeenCalledWith({ filter: filterQuery, value: search });
46
46
  });
@@ -10,14 +10,14 @@
10
10
  @input="setValue({ filter: filterQuery, value: $event })"
11
11
  @reset="setValueToQuery({ value, filterQuery, storedProp: filterSchema.storedProp })"
12
12
  @closed="setValueToQuery({ value, filterQuery, storedProp: filterSchema.storedProp })"
13
- ></wt-select>
13
+ />
14
14
  </template>
15
15
 
16
16
  <script>
17
17
  import apiFilterMixin from '../mixins/apiFilterMixin';
18
18
 
19
19
  export default {
20
- name: 'abstract-api-filter',
20
+ name: 'AbstractApiFilter',
21
21
  mixins: [apiFilterMixin],
22
22
  props: {
23
23
  filterQuery: {
@@ -9,14 +9,14 @@
9
9
  @input="setValue({ filter: filterQuery, value: $event })"
10
10
  @reset="setValueToQuery({ value, filterQuery, storedProp: filterSchema.storedProp })"
11
11
  @closed="setValueToQuery({ value, filterQuery, storedProp: filterSchema.storedProp })"
12
- ></wt-select>
12
+ />
13
13
  </template>
14
14
 
15
15
  <script>
16
16
  import enumFilterMixin from '../mixins/enumFilterMixin';
17
17
 
18
18
  export default {
19
- name: 'abstract-enum-filter',
19
+ name: 'AbstractEnumFilter',
20
20
  mixins: [enumFilterMixin],
21
21
  props: {
22
22
  filterQuery: {
@@ -4,14 +4,14 @@
4
4
  :label="label"
5
5
  mode="datetime"
6
6
  @input="handleChange"
7
- ></wt-datepicker>
7
+ />
8
8
  </template>
9
9
 
10
10
  <script>
11
11
  import baseFilterMixin from '../mixins/baseFilterMixin/baseFilterMixin';
12
12
 
13
13
  export default {
14
- name: 'filter-from',
14
+ name: 'FilterFrom',
15
15
  mixins: [baseFilterMixin],
16
16
  props: {
17
17
  filterQuery: {
@@ -6,7 +6,8 @@
6
6
  <wt-label
7
7
  class="filter-from-to__input-label"
8
8
  for="filter-from-to-from"
9
- >{{ $t('reusable.from') }}
9
+ >
10
+ {{ $t('reusable.from') }}
10
11
  </wt-label>
11
12
  <wt-input
12
13
  class="filter-from-to-input"
@@ -16,13 +17,14 @@
16
17
  :number-min="0"
17
18
  :number-max="numberMax"
18
19
  @input="setFrom"
19
- ></wt-input>
20
+ />
20
21
  </div>
21
22
  <div class="filter-from-to__input-wrapper">
22
23
  <wt-label
23
24
  class="filter-from-to__input-label"
24
25
  for="filter-from-to-to"
25
- >{{ $t('reusable.to') }}
26
+ >
27
+ {{ $t('reusable.to') }}
26
28
  </wt-label>
27
29
  <wt-input
28
30
  class="filter-from-to-input"
@@ -32,7 +34,7 @@
32
34
  :number-min="0"
33
35
  :number-max="numberMax"
34
36
  @input="setTo"
35
- ></wt-input>
37
+ />
36
38
  </div>
37
39
  </div>
38
40
  </div>
@@ -43,7 +45,7 @@ import debounce from '../../../scripts/debounce';
43
45
  import baseFilterMixin from '../mixins/baseFilterMixin/baseFilterMixin';
44
46
 
45
47
  export default {
46
- name: 'filter-from-to',
48
+ name: 'FilterFromTo',
47
49
  mixins: [baseFilterMixin],
48
50
  props: {
49
51
  filterQuery: {
@@ -57,6 +59,11 @@ export default {
57
59
  type: Number,
58
60
  },
59
61
  },
62
+
63
+ created() {
64
+ this.setFrom = debounce(this.setFrom);
65
+ this.setTo = debounce(this.setTo);
66
+ },
60
67
  methods: {
61
68
  restore() {
62
69
  this.restoreFrom();
@@ -97,11 +104,6 @@ export default {
97
104
  });
98
105
  },
99
106
  },
100
-
101
- created() {
102
- this.setFrom = debounce(this.setFrom);
103
- this.setTo = debounce(this.setTo);
104
- },
105
107
  };
106
108
  </script>
107
109
 
@@ -2,9 +2,9 @@
2
2
  <wt-search-bar
3
3
  :value="filterSchema.value"
4
4
  debounce
5
+ :placeholder="$t('reusable.search')"
5
6
  @input="setValue({ filter: filterQuery, value: $event })"
6
7
  @search="setValueToQuery({ filterQuery, value: $event })"
7
- :placeholder="$t('reusable.search')"
8
8
  />
9
9
  </template>
10
10
 
@@ -12,7 +12,7 @@
12
12
  import baseFilterMixin from '../mixins/baseFilterMixin/baseFilterMixin';
13
13
 
14
14
  export default {
15
- name: 'filter-search',
15
+ name: 'FilterSearch',
16
16
  mixins: [baseFilterMixin],
17
17
  props: {
18
18
  filterQuery: {
@@ -3,15 +3,20 @@
3
3
  :headers="headers"
4
4
  :static-headers="staticHeaders"
5
5
  @change="change"
6
- ></wt-table-column-select>
6
+ />
7
7
  </template>
8
8
 
9
9
  <script>
10
10
  import baseFilterMixin from '../mixins/baseFilterMixin/baseFilterMixin';
11
11
 
12
12
  export default {
13
- name: 'filter-table-fields',
13
+ name: 'FilterTableFields',
14
14
  mixins: [baseFilterMixin],
15
+
16
+ model: {
17
+ prop: 'headers',
18
+ event: 'change',
19
+ },
15
20
  props: {
16
21
  entity: {
17
22
  type: String,
@@ -31,11 +36,6 @@ export default {
31
36
  filterQuery: 'fields',
32
37
  }),
33
38
 
34
- model: {
35
- prop: 'headers',
36
- event: 'change',
37
- },
38
-
39
39
  methods: {
40
40
  change(headers) {
41
41
  this.setValue(headers);
@@ -12,7 +12,7 @@ const team = ['1', '2'];
12
12
  const filterSchema = new ApiFilterSchema();
13
13
 
14
14
  describe('API filter mixin', () => {
15
- const setValue = jest.fn();
15
+ const setValue = vi.fn();
16
16
  const Component = {
17
17
  render() {},
18
18
  mixins: [apiFilterMixin],
@@ -17,7 +17,7 @@ const router = createRouter({
17
17
  });
18
18
 
19
19
  describe('Enum filter mixin', () => {
20
- const setValue = jest.fn();
20
+ const setValue = vi.fn();
21
21
  const Component = {
22
22
  render() {
23
23
  },
@@ -53,7 +53,7 @@ describe('Enum filter mixin', () => {
53
53
 
54
54
  it('Attaches locales to options, if they have "locale" key', async () => {
55
55
  const options = [{
56
- locale: 'jest.locale',
56
+ locale: 'vi.locale',
57
57
  }];
58
58
  const expectedOptions = [{
59
59
  locale: options[0].locale,
@@ -11,8 +11,8 @@ const page = 2;
11
11
  const size = 20;
12
12
 
13
13
  describe('Pagination filter mixin', () => {
14
- const setPage = jest.fn();
15
- const setSize = jest.fn();
14
+ const setPage = vi.fn();
15
+ const setSize = vi.fn();
16
16
  let wrapper;
17
17
  const Component = {
18
18
  render() {},
@@ -32,7 +32,7 @@ const sortedHeaders = [{
32
32
  }];
33
33
 
34
34
  describe('Sort filter mixin', () => {
35
- const setHeaders = jest.fn();
35
+ const setHeaders = vi.fn();
36
36
  const Component = {
37
37
  render() {},
38
38
  mixins: [sortFilterMixin],
@@ -33,7 +33,7 @@ describe('QueryFiltersStoreModule getters', () => {
33
33
  });
34
34
  it('GET_FILTERS filters aggregator', () => {
35
35
  const { GET_FILTER } = module.getters;
36
- module.getters.GET_FILTER = jest.fn((filter) => GET_FILTER(state)(filter));
36
+ module.getters.GET_FILTER = vi.fn((filter) => GET_FILTER(state)(filter));
37
37
  expect(module.getters.GET_FILTERS(state, module.getters))
38
38
  .toEqual({ agent: [1], search: 'jest' });
39
39
  });
@@ -42,7 +42,7 @@ describe('QueryFiltersStoreModule getters', () => {
42
42
  describe('QueryFiltersStoreModule actions', () => {
43
43
  const context = {
44
44
  state: { ...state },
45
- commit: jest.fn(),
45
+ commit: vi.fn(),
46
46
  };
47
47
  const module = new QueryFiltersStoreModule().getModule();
48
48
  it('SET_FILTER: single value filter', () => {
@@ -1,7 +1,6 @@
1
1
  import { shallowMount } from '@vue/test-utils';
2
2
  import { createStore } from 'vuex';
3
3
  import { createRouter, createWebHistory } from 'vue-router';
4
- import JSDOM from 'jsdom';
5
4
  import authAPI from '../../api/auth';
6
5
  import userinfoAPI from '../../api/userinfo';
7
6
  import Auth from '../the-auth.vue';
@@ -11,19 +10,18 @@ import '../../../../../tests/mocks/localStorageMock';
11
10
 
12
11
  localStorage.setItem('access-token', 'jest');
13
12
 
14
- authAPI.setToken = jest.fn();
15
- userinfoAPI.getSession = jest.fn(() => ({}));
16
- userinfoAPI.getApplicationsAccess = jest.fn(() => ({}));
13
+ authAPI.setToken = vi.fn();
14
+ userinfoAPI.getSession = vi.fn(() => ({}));
15
+ userinfoAPI.getApplicationsAccess = vi.fn(() => ({}));
17
16
 
18
17
  describe('Auth', () => {
19
18
  let store;
20
19
  let wrapper;
21
- global.window = new JSDOM.JSDOM().window;
22
20
  const router = createRouter({
23
21
  history: createWebHistory(),
24
22
  routes: [],
25
23
  });
26
- router.replace = jest.fn();
24
+ router.replace = vi.fn();
27
25
 
28
26
  const userinfo = new UserinfoStoreModule().getModule();
29
27
  beforeEach(() => {
@@ -45,11 +43,12 @@ describe('Auth', () => {
45
43
  it('sets token, gets session and opens app after auth token message emit', async () => {
46
44
  const accessToken = 'hello there';
47
45
  window.postMessage({ accessToken }, '*');
48
- await setTimeout(() => {
46
+ await new Promise((resolve) => setTimeout(() => {
49
47
  expect(authAPI.setToken).toHaveBeenCalledWith(accessToken);
50
48
  expect(userinfoAPI.getSession).toHaveBeenCalled();
51
49
  expect(userinfoAPI.getApplicationsAccess).toHaveBeenCalled();
52
50
  expect(router.replace).toHaveBeenCalled();
53
- }, 100);
51
+ resolve();
52
+ }, 100));
54
53
  });
55
54
  });
@@ -1,7 +1,10 @@
1
1
  <template>
2
2
  <div class="auth-wrap">
3
- <div v-show="!isLoaded" class="auth-loader">
4
- <wt-loader/>
3
+ <div
4
+ v-show="!isLoaded"
5
+ class="auth-loader"
6
+ >
7
+ <wt-loader />
5
8
  </div>
6
9
  <iframe
7
10
  class="auth"
@@ -19,7 +22,7 @@ import AuthAPI from '../api/auth';
19
22
  const authURL = process ? process.env.VUE_APP_AUTH_MODULE_URL : import.meta.env.VITE_AUTH_MODE_URL;
20
23
 
21
24
  export default {
22
- name: 'auth',
25
+ name: 'Auth',
23
26
  props: {
24
27
  namespace: {
25
28
  type: String,
@@ -34,7 +37,7 @@ export default {
34
37
  mounted() {
35
38
  window.addEventListener('message', this.authMessageHandler, false);
36
39
  },
37
- destroyed() {
40
+ unmounted() {
38
41
  window.removeEventListener('message', this.authMessageHandler, false);
39
42
  },
40
43