bfg-common 1.5.692 → 1.5.694

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 (127) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  3. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  4. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  5. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  6. package/assets/localization/local_be.json +6 -0
  7. package/assets/localization/local_en.json +6 -0
  8. package/assets/localization/local_hy.json +6 -0
  9. package/assets/localization/local_kk.json +6 -0
  10. package/assets/localization/local_ru.json +6 -0
  11. package/assets/localization/local_zh.json +6 -0
  12. package/assets/scss/components/auth.scss +17 -0
  13. package/components/atoms/TheIcon3.vue +50 -50
  14. package/components/atoms/collapse/CollapseNav.vue +170 -170
  15. package/components/atoms/perPage/PerPage.vue +58 -58
  16. package/components/atoms/switch/Switch.vue +103 -103
  17. package/components/atoms/table/dataGrid/DataGrid.vue +1718 -1718
  18. package/components/atoms/table/dataGrid/DataGridPagination.vue +97 -97
  19. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  20. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  21. package/components/common/backup/storage/actions/add/lib/utils.ts +51 -51
  22. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  23. package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
  24. package/components/common/diagramMain/port/Port.vue +580 -580
  25. package/components/common/layout/theHeader/TheHeaderNew.vue +315 -315
  26. package/components/common/layout/theHeader/TheHeaderOld.vue +262 -262
  27. package/components/common/layout/theHeader/helpMenu/About.vue +79 -79
  28. package/components/common/layout/theHeader/helpMenu/aboutOld/AboutOld.vue +79 -79
  29. package/components/common/layout/theHeader/userMenu/modals/preferences/PreferencesNew.vue +13 -0
  30. package/components/common/layout/theHeader/userMenu/modals/preferences/PreferencesOld.vue +144 -144
  31. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/ChangeLanguage.vue +8 -15
  32. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/{ChangeLanguageNew.vue → New.vue} +1 -2
  33. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/{ChangeLanguageOld.vue → Old.vue} +0 -2
  34. package/components/common/layout/theHeader/userMenu/modals/preferences/defaultConsole/DefaultConsole.vue +8 -7
  35. package/components/common/layout/theHeader/userMenu/modals/preferences/defaultConsole/{DefaultConsoleNew.vue → New.vue} +3 -3
  36. package/components/common/layout/theHeader/userMenu/modals/preferences/defaultConsole/{DefaultConsoleOld.vue → Old.vue} +2 -2
  37. package/components/common/layout/theHeader/userMenu/modals/preferences/inventory/Inventory.vue +7 -8
  38. package/components/common/layout/theHeader/userMenu/modals/preferences/inventory/{InventoryNew.vue → New.vue} +3 -2
  39. package/components/common/layout/theHeader/userMenu/modals/preferences/inventory/{InventoryOld.vue → Old.vue} +2 -2
  40. package/components/common/layout/theHeader/userMenu/modals/preferences/lib/models/types.ts +7 -7
  41. package/components/common/layout/theHeader/userMenu/modals/preferences/security/New.vue +277 -12
  42. package/components/common/layout/theHeader/userMenu/modals/preferences/security/Old.vue +184 -216
  43. package/components/common/layout/theHeader/userMenu/modals/preferences/security/Security.vue +90 -31
  44. package/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/{TimeFormatNew.vue → New.vue} +3 -3
  45. package/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/{TimeFormatOld.vue → Old.vue} +2 -2
  46. package/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/TimeFormat.vue +8 -8
  47. package/components/common/layout/theHeader/userMenu/modals/preferences/view/{ViewNew.vue → New.vue} +12 -3
  48. package/components/common/layout/theHeader/userMenu/modals/preferences/view/{ViewOld.vue → Old.vue} +2 -2
  49. package/components/common/layout/theHeader/userMenu/modals/preferences/view/View.vue +8 -7
  50. package/components/common/pages/backups/DetailView.vue +52 -52
  51. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  52. package/components/common/pages/backups/modals/Modals.vue +243 -243
  53. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
  54. package/components/common/pages/backups/modals/createBackup/lib/config/readyToCompleteOptions.ts +69 -69
  55. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  56. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  57. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  58. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  59. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  60. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  61. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  62. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  63. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  64. package/components/common/qr/Qr.vue +69 -57
  65. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  66. package/components/common/select/radio/RadioGroup.vue +137 -137
  67. package/components/common/spiceConsole/Drawer.vue +420 -420
  68. package/components/common/spiceConsole/SpiceConsole.vue +184 -184
  69. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  70. package/components/common/tools/Actions.vue +207 -207
  71. package/components/common/treeView/TreeView.vue +52 -52
  72. package/components/common/vm/actions/clone/lib/config/steps.ts +295 -295
  73. package/components/common/vm/actions/clone/new/New.vue +438 -438
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +706 -706
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +283 -283
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +489 -489
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +253 -253
  79. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +156 -156
  80. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  81. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  82. package/components/common/vm/actions/common/select/options/New.vue +264 -264
  83. package/components/common/vm/actions/common/select/options/Old.vue +109 -109
  84. package/components/common/vm/actions/common/select/options/Options.vue +58 -58
  85. package/components/common/vm/actions/common/select/storage/Old.vue +125 -125
  86. package/components/common/vm/actions/common/select/storage/new/New.vue +311 -311
  87. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  88. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  89. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  90. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  91. package/components/common/wizards/common/compatibility/Compatibility.vue +35 -35
  92. package/components/common/wizards/common/steps/computeResource/New.vue +93 -93
  93. package/components/common/wizards/common/steps/name/Name.vue +178 -178
  94. package/components/common/wizards/common/steps/name/New.vue +221 -221
  95. package/components/common/wizards/common/steps/name/Old.vue +121 -121
  96. package/components/common/wizards/common/steps/name/lib/models/interfaces.ts +4 -4
  97. package/components/common/wizards/common/steps/name/location/New.vue +40 -40
  98. package/components/common/wizards/datastore/add/Add.vue +228 -228
  99. package/components/common/wizards/datastore/add/lib/utils.ts +85 -85
  100. package/components/common/wizards/datastore/add/steps/nameAndDevice/NameAndDeviceNew.vue +232 -232
  101. package/components/common/wizards/datastore/add/steps/nameAndDevice/NameAndDeviceOld.vue +231 -231
  102. package/components/common/wizards/datastore/add/steps/nameAndDevice/advancedOptions/AdvancedOptions.vue +43 -43
  103. package/components/common/wizards/datastore/add/steps/nameAndDevice/advancedOptions/New.vue +101 -101
  104. package/components/common/wizards/datastore/add/steps/nameAndDevice/advancedOptions/Old.vue +101 -101
  105. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  106. package/composables/useAppVersion.ts +21 -21
  107. package/composables/useEnvLanguage.ts +22 -22
  108. package/composables/useLocal.ts +6 -6
  109. package/composables/useLocalCommon.ts +39 -39
  110. package/package.json +2 -2
  111. package/plugins/console.ts +21 -21
  112. package/plugins/mouse.ts +21 -21
  113. package/plugins/panelStates.ts +70 -70
  114. package/plugins/text.ts +59 -59
  115. package/public/spice-console/application/clientgui.js +854 -854
  116. package/public/spice-console/application/packetfactory.js +211 -211
  117. package/public/spice-console/application/virtualmouse.js +147 -147
  118. package/public/spice-console/lib/images/bitmap.js +203 -203
  119. package/public/spice-console/network/spicechannel.js +440 -440
  120. package/public/spice-console/process/cursorprocess.js +128 -128
  121. package/public/spice-console/process/inputprocess.js +227 -227
  122. package/public/spice-console/process/mainprocess.js +212 -212
  123. package/public/spice-console/run.js +210 -210
  124. package/store/main/mutations.ts +7 -7
  125. package/store/main/state.ts +7 -7
  126. package/store/tasks/mappers/recentTasks.ts +123 -123
  127. package/store/tasks/mutations.ts +82 -82
@@ -1,216 +1,184 @@
1
- <template>
2
- <form id="security-form" class="compact" @submit.prevent>
3
- <div class="description">
4
- {{ localization.myPreferences.twoFactorAuthentication }}
5
- </div>
6
-
7
- <div class="flex-align-center">
8
- <label for="security">{{
9
- localization.myPreferences.securityLabel
10
- }}</label>
11
- <input id="security" v-model="security" type="checkbox" class="switch" />
12
- </div>
13
-
14
- <div
15
- v-if="
16
- props.recovery && security && !initialSecurity && !otpEnabledSuccess
17
- "
18
- class="recovery-codes-wrap"
19
- >
20
- <p>
21
- {{ localization.myPreferences.enterOtpForEnabled }}
22
- </p>
23
-
24
- <div class="recovery-codes">
25
- <common-qr :qr-code-url="props.recovery.qr_code_url" />
26
-
27
- <span>{{ localization.common.or }}</span>
28
-
29
- <ul class="recovery-codes-list">
30
- <li
31
- v-for="item in props.recovery.recovery_codes"
32
- :key="item"
33
- class="recovery-codes-list-item"
34
- >
35
- {{ item }}
36
- </li>
37
- </ul>
38
- </div>
39
- <section class="form-block">
40
- <div class="form-group">
41
- <label for="otp">{{
42
- localization.myPreferences.enterOtpForEnabled
43
- }}</label>
44
- <input id="otp" v-model="otp" type="text" />
45
- <button class="btn btn-sm btn-primary" @click="onConfirm">
46
- {{ localization.common.confirm }}
47
- </button>
48
- <atoms-loader v-if="isOtpLoading" test-id="2fa-enabled-loader" />
49
- </div>
50
- </section>
51
- </div>
52
-
53
- <div v-if="!security && initialSecurity && !otpDisabledSuccess">
54
- <section class="form-block">
55
- <div class="form-group">
56
- <label for="otp">{{
57
- localization.myPreferences.enterOtpForDisabled
58
- }}</label>
59
- <input id="otp" v-model="otp" type="text" />
60
- <button class="btn btn-sm btn-primary" @click="onDisabled">
61
- {{ localization.common.confirm }}
62
- </button>
63
- <atoms-loader v-if="isOtpLoading" test-id="2fa-disabled-loader" />
64
- </div>
65
- </section>
66
- </div>
67
- </form>
68
- </template>
69
-
70
- <script setup lang="ts">
71
- import type { UI_I_Localization } from '~/lib/models/interfaces'
72
- import type { UI_I_Recovery } from '~/components/common/layout/theHeader/userMenu/modals/preferences/security/lib/models/interfaces'
73
-
74
- const security = defineModel<boolean>('security')
75
-
76
- const props = defineProps<{
77
- recovery?: UI_I_Recovery
78
- }>()
79
- const emits = defineEmits<{
80
- (event: 'confirm', value: boolean): void
81
- }>()
82
-
83
- const localization = computed<UI_I_Localization>(() => useLocal())
84
-
85
- const initialSecurity = ref<boolean>(security.value || false)
86
-
87
- // TODO refactoring and move to Sphere
88
- const otp = ref<string>('')
89
- const isOtpLoading = ref<boolean>(false)
90
-
91
- const otpEnabledSuccess = ref<boolean>(false)
92
- const onConfirm = async (): Promise<void> => {
93
- isOtpLoading.value = true
94
- const { data } = await useMyFetch<any, any>('ui/auth/2fa/confirm', {
95
- method: 'POST',
96
- body: {
97
- otp: otp.value,
98
- },
99
- })
100
- if (data.value) {
101
- otpEnabledSuccess.value = true
102
- otpDisabledSuccess.value = false
103
- initialSecurity.value = true
104
- otp.value = ''
105
- emits('confirm', true)
106
- }
107
- isOtpLoading.value = false
108
- }
109
-
110
- const otpDisabledSuccess = ref<boolean>(false)
111
- const onDisabled = async (): Promise<void> => {
112
- isOtpLoading.value = true
113
- const { data } = await useMyFetch<any, I_ErrorResponse>(
114
- 'ui/auth/2fa/disable',
115
- {
116
- method: 'POST',
117
- body: {
118
- otp: otp.value,
119
- },
120
- }
121
- )
122
- if (data.value) {
123
- otpDisabledSuccess.value = true
124
- otpEnabledSuccess.value = false
125
- initialSecurity.value = false
126
- otp.value = ''
127
- emits('confirm', false)
128
- }
129
- isOtpLoading.value = false
130
- }
131
- </script>
132
-
133
- <style lang="scss" scoped>
134
- .description {
135
- margin-bottom: 10px;
136
- }
137
-
138
- .recovery-codes-wrap {
139
- margin: 10px 0;
140
-
141
- .recovery-codes {
142
- display: flex;
143
- align-items: center;
144
- justify-content: space-evenly;
145
-
146
- .recovery-codes-list-item {
147
- font-size: 12px;
148
- }
149
- }
150
- }
151
-
152
- label {
153
- margin-right: 6px;
154
- }
155
-
156
- // TODO повторяется в ../view, необходимо вынести глобально
157
- input[type='checkbox'] {
158
- --active: var(--checkbox-value-active-color);
159
- --active-inner: var(--checkbox-mark-color);
160
- --border: var(--checkbox-mark-color);
161
- --background: var(--checkbox-mark-background-color);
162
- -webkit-appearance: none;
163
- -moz-appearance: none;
164
- height: 20px;
165
- outline: none;
166
- display: inline-block;
167
- vertical-align: top;
168
- position: relative;
169
- margin: 0;
170
- cursor: pointer;
171
- border: 1px solid var(--bc, var(--border));
172
- background: var(--b, var(--background));
173
- transition: background 0.3s, border-color 0.3s, box-shadow 0.2s;
174
- &:after {
175
- content: '';
176
- display: block;
177
- left: 0;
178
- top: 0;
179
- position: absolute;
180
- transition: transform var(--d-t, 0.3s) var(--d-t-e, ease),
181
- opacity var(--d-o, 0.2s);
182
- }
183
- &:checked {
184
- --b: var(--active);
185
- --bc: var(--active);
186
- --d-o: 0.3s;
187
- --d-t: 0.6s;
188
- --d-t-e: cubic-bezier(0.2, 0.85, 0.32, 1.2);
189
- }
190
- }
191
- input[type='checkbox'] {
192
- &.switch {
193
- width: 35px;
194
- border-radius: 11px;
195
- &:after {
196
- left: 2px;
197
- top: 2px;
198
- bottom: 2px;
199
- border-radius: 50%;
200
- width: 14px;
201
- height: 14px;
202
- border: 1px solid var(--bc, var(--border));
203
- background: var(--ab, var(--border));
204
- transform: translateX(var(--x, 0));
205
- }
206
- &:checked {
207
- --ab: var(--active-inner);
208
- --x: 14px;
209
- }
210
- &:disabled {
211
- cursor: not-allowed;
212
- opacity: 0.5;
213
- }
214
- }
215
- }
216
- </style>
1
+ <template>
2
+ <form id="security-form" class="compact" @submit.prevent>
3
+ <div class="description">
4
+ {{ localization.myPreferences.twoFactorAuthentication }}
5
+ </div>
6
+
7
+ <div class="flex-align-center">
8
+ <label for="security">{{
9
+ localization.myPreferences.securityLabel
10
+ }}</label>
11
+ <input id="security" v-model="security" type="checkbox" class="switch" />
12
+ </div>
13
+
14
+ <div
15
+ v-if="
16
+ props.recovery &&
17
+ security &&
18
+ !props.initialSecurity &&
19
+ !props.otpEnabledSuccess
20
+ "
21
+ class="recovery-codes-wrap"
22
+ >
23
+ <p>
24
+ {{ localization.myPreferences.enterOtpForEnabled }}
25
+ </p>
26
+
27
+ <div class="recovery-codes">
28
+ <common-qr :qr-code-url="props.recovery.qr_code_url" />
29
+
30
+ <span>{{ localization.common.or }}</span>
31
+
32
+ <ul class="recovery-codes-list">
33
+ <li
34
+ v-for="item in props.recovery.recovery_codes"
35
+ :key="item"
36
+ class="recovery-codes-list-item"
37
+ >
38
+ {{ item }}
39
+ </li>
40
+ </ul>
41
+ </div>
42
+ <section class="form-block">
43
+ <div class="form-group">
44
+ <label for="otp">{{
45
+ localization.myPreferences.enterOtpForEnabled
46
+ }}</label>
47
+ <input id="otp" v-model="otp" type="text" />
48
+ <button class="btn btn-sm btn-primary" @click="emits('confirm')">
49
+ {{ localization.common.confirm }}
50
+ </button>
51
+ <atoms-loader
52
+ v-if="props.isOtpLoading"
53
+ test-id="2fa-enabled-loader"
54
+ />
55
+ </div>
56
+ </section>
57
+ </div>
58
+
59
+ <div v-if="!security && props.initialSecurity && !props.otpDisabledSuccess">
60
+ <section class="form-block">
61
+ <div class="form-group">
62
+ <label for="otp">{{
63
+ localization.myPreferences.enterOtpForDisabled
64
+ }}</label>
65
+ <input id="otp" v-model="otp" type="text" />
66
+ <button class="btn btn-sm btn-primary" @click="emits('disabled')">
67
+ {{ localization.common.confirm }}
68
+ </button>
69
+ <atoms-loader
70
+ v-if="props.isOtpLoading"
71
+ test-id="2fa-disabled-loader"
72
+ />
73
+ </div>
74
+ </section>
75
+ </div>
76
+ </form>
77
+ </template>
78
+
79
+ <script setup lang="ts">
80
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
81
+ import type { UI_I_Recovery } from '~/components/common/layout/theHeader/userMenu/modals/preferences/security/lib/models/interfaces'
82
+
83
+ const security = defineModel<boolean>('security')
84
+ const otp = defineModel<string>('otp')
85
+
86
+ const props = defineProps<{
87
+ initialSecurity: boolean
88
+ isOtpLoading: boolean
89
+ otpEnabledSuccess: boolean
90
+ otpDisabledSuccess: boolean
91
+ recovery: UI_I_Recovery
92
+ }>()
93
+ const emits = defineEmits<{
94
+ (event: 'confirm'): void
95
+ (event: 'disabled'): void
96
+ }>()
97
+
98
+ const localization = computed<UI_I_Localization>(() => useLocal())
99
+ </script>
100
+
101
+ <style lang="scss" scoped>
102
+ .description {
103
+ margin-bottom: 10px;
104
+ }
105
+
106
+ .recovery-codes-wrap {
107
+ margin: 10px 0;
108
+
109
+ .recovery-codes {
110
+ display: flex;
111
+ align-items: center;
112
+ justify-content: space-evenly;
113
+
114
+ .recovery-codes-list-item {
115
+ font-size: 12px;
116
+ }
117
+ }
118
+ }
119
+
120
+ label {
121
+ margin-right: 6px;
122
+ }
123
+
124
+ // TODO повторяется в ../view, необходимо вынести глобально
125
+ input[type='checkbox'] {
126
+ --active: var(--checkbox-value-active-color);
127
+ --active-inner: var(--checkbox-mark-color);
128
+ --border: var(--checkbox-mark-color);
129
+ --background: var(--checkbox-mark-background-color);
130
+ -webkit-appearance: none;
131
+ -moz-appearance: none;
132
+ height: 20px;
133
+ outline: none;
134
+ display: inline-block;
135
+ vertical-align: top;
136
+ position: relative;
137
+ margin: 0;
138
+ cursor: pointer;
139
+ border: 1px solid var(--bc, var(--border));
140
+ background: var(--b, var(--background));
141
+ transition: background 0.3s, border-color 0.3s, box-shadow 0.2s;
142
+ &:after {
143
+ content: '';
144
+ display: block;
145
+ left: 0;
146
+ top: 0;
147
+ position: absolute;
148
+ transition: transform var(--d-t, 0.3s) var(--d-t-e, ease),
149
+ opacity var(--d-o, 0.2s);
150
+ }
151
+ &:checked {
152
+ --b: var(--active);
153
+ --bc: var(--active);
154
+ --d-o: 0.3s;
155
+ --d-t: 0.6s;
156
+ --d-t-e: cubic-bezier(0.2, 0.85, 0.32, 1.2);
157
+ }
158
+ }
159
+ input[type='checkbox'] {
160
+ &.switch {
161
+ width: 35px;
162
+ border-radius: 11px;
163
+ &:after {
164
+ left: 2px;
165
+ top: 2px;
166
+ bottom: 2px;
167
+ border-radius: 50%;
168
+ width: 14px;
169
+ height: 14px;
170
+ border: 1px solid var(--bc, var(--border));
171
+ background: var(--ab, var(--border));
172
+ transform: translateX(var(--x, 0));
173
+ }
174
+ &:checked {
175
+ --ab: var(--active-inner);
176
+ --x: 14px;
177
+ }
178
+ &:disabled {
179
+ cursor: not-allowed;
180
+ opacity: 0.5;
181
+ }
182
+ }
183
+ }
184
+ </style>
@@ -1,31 +1,90 @@
1
- <template>
2
- <component
3
- v-model:security="security"
4
- :is="currentComponent"
5
- :recovery="props.recovery"
6
- @confirm="emits('confirm', $event)"
7
- />
8
- </template>
9
-
10
- <script setup lang="ts">
11
- import type {
12
- UI_I_Recovery
13
- } from "~/components/common/layout/theHeader/userMenu/modals/preferences/security/lib/models/interfaces";
14
-
15
- const props = defineProps<{
16
- recovery: UI_I_Recovery | null
17
- }>()
18
- const emits = defineEmits<{
19
- (event: 'confirm', value: boolean): void
20
- }>()
21
-
22
- const security = defineModel<boolean>('security')
23
-
24
- const { $store }: any = useNuxtApp()
25
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
26
- const currentComponent = computed(() =>
27
- isNewView.value
28
- ? defineAsyncComponent(() => import('./New.vue'))
29
- : defineAsyncComponent(() => import('./Old.vue'))
30
- )
31
- </script>
1
+ <template>
2
+ <component
3
+ v-model:security="security"
4
+ v-model:otp="otp"
5
+ :is="currentComponent"
6
+ :initial-security="initialSecurity"
7
+ :is-otp-loading="isOtpLoading"
8
+ :otp-enabled-success="otpEnabledSuccess"
9
+ :otp-disabled-success="otpDisabledSuccess"
10
+ :recovery="props.recovery"
11
+ :otp-error-api-text="otpErrorApiText"
12
+ :otp-disabled-error-api-text="otpDisabledErrorApiText"
13
+ @confirm="onConfirm"
14
+ @disabled="onDisabled"
15
+ />
16
+ </template>
17
+
18
+ <script setup lang="ts">
19
+ import type { UI_I_Recovery } from '~/components/common/layout/theHeader/userMenu/modals/preferences/security/lib/models/interfaces'
20
+
21
+ const security = defineModel<boolean>('security')
22
+
23
+ const props = defineProps<{
24
+ recovery: UI_I_Recovery | null
25
+ }>()
26
+
27
+ const emits = defineEmits<{
28
+ (event: 'confirm', value: boolean): void
29
+ }>()
30
+
31
+ const { $store }: any = useNuxtApp()
32
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
33
+ const currentComponent = computed(() =>
34
+ isNewView.value
35
+ ? defineAsyncComponent(() => import('./New.vue'))
36
+ : defineAsyncComponent(() => import('./Old.vue'))
37
+ )
38
+
39
+ const initialSecurity = ref<boolean>(security.value || false)
40
+
41
+ // TODO refactoring and move to Sphere
42
+ const otp = ref<string>('')
43
+ const isOtpLoading = ref<boolean>(false)
44
+
45
+ const otpEnabledSuccess = ref<boolean>(false)
46
+ const otpErrorApiText = ref<string>('')
47
+ const otpDisabledErrorApiText = ref<string>('')
48
+ const onConfirm = async (): Promise<void> => {
49
+ otpErrorApiText.value = ''
50
+ isOtpLoading.value = true
51
+ const { data, error } = await useMyFetch<any, any>('ui/auth/2fa/confirm', {
52
+ method: 'POST',
53
+ body: {
54
+ otp: otp.value,
55
+ },
56
+ })
57
+ otpErrorApiText.value = error.value.data
58
+ if (data.value) {
59
+ otpEnabledSuccess.value = true
60
+ otpDisabledSuccess.value = false
61
+ initialSecurity.value = true
62
+ otp.value = ''
63
+ emits('confirm', true)
64
+ }
65
+ isOtpLoading.value = false
66
+ }
67
+
68
+ const otpDisabledSuccess = ref<boolean>(false)
69
+ const onDisabled = async (): Promise<void> => {
70
+ isOtpLoading.value = true
71
+ const { data, error } = await useMyFetch<any, I_ErrorResponse>(
72
+ 'ui/auth/2fa/disable',
73
+ {
74
+ method: 'POST',
75
+ body: {
76
+ otp: otp.value,
77
+ },
78
+ }
79
+ )
80
+ otpDisabledErrorApiText.value = error.value.data
81
+ if (data.value) {
82
+ otpDisabledSuccess.value = true
83
+ otpEnabledSuccess.value = false
84
+ initialSecurity.value = false
85
+ otp.value = ''
86
+ emits('confirm', false)
87
+ }
88
+ isOtpLoading.value = false
89
+ }
90
+ </script>
@@ -22,7 +22,7 @@
22
22
  :test-id="item.testId"
23
23
  :label="item.label"
24
24
  :value="item.value"
25
- size="sm"
25
+ size="md"
26
26
  />
27
27
  </div>
28
28
  </div>
@@ -35,14 +35,14 @@ import type { UI_I_Localization } from '~/lib/models/interfaces'
35
35
  import type { UI_I_RadioItem } from '~/components/common/layout/theHeader/userMenu/lib/models/interfaces'
36
36
  import type { UI_T_TimeValue } from '~/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/lib/models/types'
37
37
 
38
+ const timeItem = defineModel<UI_T_TimeValue>()
39
+
38
40
  const props = defineProps<{
39
41
  description: string
40
42
  formatOptions: UI_I_RadioItem[]
41
43
  }>()
42
44
 
43
45
  const localization = computed<UI_I_Localization>(() => useLocal())
44
-
45
- const timeItem = defineModel<UI_T_TimeValue>()
46
46
  </script>
47
47
 
48
48
  <style lang="scss" scoped>
@@ -23,12 +23,12 @@
23
23
  import type { UI_I_RadioItem } from '~/components/common/layout/theHeader/userMenu/lib/models/interfaces'
24
24
  import type { UI_T_TimeValue } from '~/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/lib/models/types'
25
25
 
26
+ const timeItem = defineModel<UI_T_TimeValue>()
27
+
26
28
  const props = defineProps<{
27
29
  description: string
28
30
  formatOptions: UI_I_RadioItem[]
29
31
  }>()
30
-
31
- const timeItem = defineModel<UI_T_TimeValue>()
32
32
  </script>
33
33
 
34
34
  <style lang="scss" scoped>
@@ -1,12 +1,6 @@
1
1
  <template>
2
- <common-layout-the-header-user-menu-modals-preferences-time-format-new
3
- v-if="props.newView"
4
- v-model="timeItem"
5
- :description="description"
6
- :format-options="formatOptions"
7
- />
8
- <common-layout-the-header-user-menu-modals-preferences-time-format-old
9
- v-else
2
+ <component
3
+ :is="currentComponent"
10
4
  v-model="timeItem"
11
5
  :description="description"
12
6
  :format-options="formatOptions"
@@ -28,6 +22,12 @@ const emits = defineEmits<{
28
22
  (event: 'update-time-format', value: UI_T_TimeValue): void
29
23
  }>()
30
24
 
25
+ const currentComponent = computed(() =>
26
+ props.newView
27
+ ? defineAsyncComponent(() => import('./New.vue'))
28
+ : defineAsyncComponent(() => import('./Old.vue'))
29
+ )
30
+
31
31
  const localization = computed<UI_I_Localization>(() => useLocal())
32
32
 
33
33
  const config = useRuntimeConfig()
@@ -13,7 +13,7 @@
13
13
  {{ props.description }}
14
14
  </div>
15
15
 
16
- <div class="flex-align-center">
16
+ <div class="flex-align-center new-view-switch-container">
17
17
  <ui-switch
18
18
  v-model="newViewLocal"
19
19
  :label="localization.common.newView"
@@ -28,11 +28,20 @@
28
28
  <script setup lang="ts">
29
29
  import type { UI_I_Localization } from '~/lib/models/interfaces'
30
30
 
31
+ const newViewLocal = defineModel<boolean>()
32
+
31
33
  const props = defineProps<{
32
34
  description: string
33
35
  }>()
34
36
 
35
- const newViewLocal = defineModel<boolean>()
36
-
37
37
  const localization = computed<UI_I_Localization>(() => useLocal())
38
38
  </script>
39
+
40
+ <style lang="scss" scoped>
41
+ .new-view-switch-container {
42
+ :deep(.switch-content .switch-label) {
43
+ font-size: 13px;
44
+ font-weight: 400;
45
+ }
46
+ }
47
+ </style>
@@ -20,14 +20,14 @@
20
20
  <script setup lang="ts">
21
21
  import type { UI_I_Localization } from '~/lib/models/interfaces'
22
22
 
23
+ const newViewLocal = defineModel<boolean>()
24
+
23
25
  const props = defineProps<{
24
26
  description: string
25
27
  }>()
26
28
 
27
29
  const localization = computed<UI_I_Localization>(() => useLocal())
28
30
 
29
- const newViewLocal = defineModel<boolean>()
30
-
31
31
  const isDisabled = ref<boolean>(true)
32
32
  // @ts-ignore
33
33
  window.tools = new Proxy(