bfg-common 1.5.421 → 1.5.423

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 (157) 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 +7 -3
  7. package/assets/localization/local_en.json +12 -8
  8. package/assets/localization/local_hy.json +8 -4
  9. package/assets/localization/local_kk.json +7 -3
  10. package/assets/localization/local_ru.json +12 -8
  11. package/assets/localization/local_zh.json +7 -3
  12. package/assets/scss/common/theme.scss +0 -214
  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/table/dataGrid/lib/config/settingsTable.ts +94 -94
  17. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  18. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  19. package/components/common/context/lib/models/interfaces.ts +33 -33
  20. package/components/common/diagramMain/modals/lib/config/networkModal.ts +398 -398
  21. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  22. package/components/common/pages/backups/Backups.vue +102 -102
  23. package/components/common/pages/backups/DetailView.vue +52 -52
  24. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  25. package/components/common/pages/backups/modals/Modals.vue +231 -226
  26. package/components/common/pages/backups/modals/createBackup/CreateBackup.vue +376 -353
  27. package/components/common/pages/backups/modals/createBackup/configuration/Configuration.vue +29 -29
  28. package/components/common/pages/backups/modals/createBackup/configuration/backupWindow/BackupWindow.vue +26 -26
  29. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/MaxBandwidth.vue +66 -66
  30. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
  31. package/components/common/pages/backups/modals/createBackup/configuration/strategy/Strategy.vue +35 -35
  32. package/components/common/pages/backups/modals/createBackup/datastores/Datastores.vue +59 -59
  33. package/components/common/pages/backups/modals/createBackup/datastores/tableView/TableView.vue +95 -95
  34. package/components/common/pages/backups/modals/createBackup/datastores/tableView/lib/config/table.ts +119 -119
  35. package/components/common/pages/backups/modals/createBackup/disks/Disks.vue +2 -2
  36. package/components/common/pages/backups/modals/createBackup/disks/tableView/TableView.vue +7 -4
  37. package/components/common/pages/backups/modals/createBackup/disks/tableView/lib/config/table.ts +117 -117
  38. package/components/common/pages/backups/modals/createBackup/general/General.vue +135 -48
  39. package/components/common/pages/backups/modals/createBackup/lib/config/steps.ts +117 -117
  40. package/components/common/pages/backups/modals/createBackup/lib/config/strategyOptions.ts +12 -12
  41. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  42. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -185
  43. package/components/common/pages/backups/modals/restore/Restore.vue +417 -417
  44. package/components/common/pages/backups/modals/restore/disks/Disks.vue +27 -27
  45. package/components/common/pages/backups/modals/restore/disks/tableView/TableView.vue +102 -102
  46. package/components/common/pages/backups/modals/restore/disks/tableView/lib/config/table.ts +117 -117
  47. package/components/common/pages/backups/modals/restore/lib/config/steps.ts +108 -108
  48. package/components/common/pages/backups/modals/restore/name/Name.vue +160 -160
  49. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  50. package/components/common/pages/backups/modals/restore/networks/Networks.vue +67 -67
  51. package/components/common/pages/backups/modals/restore/networks/table/Table.vue +214 -214
  52. package/components/common/pages/backups/modals/restore/types/lib/config/typeOptions.ts +25 -25
  53. package/components/common/pages/backups/tools/Tools.vue +75 -75
  54. package/components/common/pages/backups/tools/lib/config/tabs.ts +36 -36
  55. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  56. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  57. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  58. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  59. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  60. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  61. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  62. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  63. package/components/common/select/radio/RadioGroup.vue +137 -137
  64. package/components/common/spiceConsole/Drawer.vue +381 -381
  65. package/components/common/spiceConsole/SpiceConsole.vue +127 -127
  66. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  67. package/components/common/split/horizontal/HorizontalNew.vue +22 -5
  68. package/components/common/split/horizontal/HorizontalOld.vue +8 -1
  69. package/components/common/split/vertical/VerticalNew.vue +13 -2
  70. package/components/common/summary/notification/NotificationNew.vue +20 -4
  71. package/components/common/titleBar/titleBarNew/notification/Notification.vue +31 -0
  72. package/components/common/tools/Actions.vue +207 -207
  73. package/components/common/tooltip/Help.vue +14 -1
  74. package/components/common/treeView/TreeView.vue +52 -52
  75. package/components/common/vm/actions/add/New.vue +10 -0
  76. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  77. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  78. package/components/common/vm/actions/clone/Clone.vue +11 -0
  79. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -291
  80. package/components/common/vm/actions/clone/toTemplate/ToTemplate.vue +11 -0
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +26 -0
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +78 -70
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/CpuNew.vue +8 -0
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/tooltip/TooltipNew.vue +2 -0
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +15 -0
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/file/FileNew.vue +8 -0
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationOld.vue +85 -85
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/maximumSize/MaximumSize.vue +23 -23
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/maximumSize/MaximumSizeNew.vue +8 -0
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/inputDevices/InputDevicesNew.vue +10 -0
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  107. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  108. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  109. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +174 -174
  110. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  111. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapOld.vue +44 -44
  112. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  113. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  114. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  115. package/components/common/vm/actions/common/select/compatibility/New.vue +18 -0
  116. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  117. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +143 -143
  118. package/components/common/vm/actions/common/select/computeResource/New.vue +184 -168
  119. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +131 -131
  120. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  121. package/components/common/vm/actions/common/select/createType/New.vue +16 -0
  122. package/components/common/vm/actions/common/select/createType/Old.vue +9 -0
  123. package/components/common/vm/actions/common/select/createType/lib/config/items.ts +48 -48
  124. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  125. package/components/common/vm/actions/common/select/name/New.vue +20 -0
  126. package/components/common/vm/actions/common/select/os/New.vue +10 -0
  127. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  128. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  129. package/components/common/vm/actions/common/select/storage/new/New.vue +32 -0
  130. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  131. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  132. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  133. package/components/common/vm/actions/common/select/template/treeView/New.vue +10 -0
  134. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  135. package/components/common/vmt/actions/add/Old.vue +10 -0
  136. package/components/common/vmt/actions/add/lib/models/interfaces.ts +23 -23
  137. package/components/common/wizards/datastore/add/steps/nameAndConfigure/_serversList/DeletePopover.vue +8 -0
  138. package/components/common/wizards/datastore/add/steps/nameAndDevice/table/new/New.vue +11 -0
  139. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  140. package/components/common/wizards/network/add/modals/SelectStandardSwitch.vue +17 -6
  141. package/components/common/wizards/network/add/modals/SelectSwitch.vue +17 -6
  142. package/components/common/wizards/vm/migrate/lib/config/steps.ts +157 -157
  143. package/components/common/wizards/vm/migrate/lib/validations.ts +68 -68
  144. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  145. package/components/common/wizards/vm/migrate/select/type/lib/config/typeOptions.ts +45 -45
  146. package/composables/productNameLocal.ts +30 -30
  147. package/composables/useAppVersion.ts +21 -21
  148. package/package.json +1 -1
  149. package/plugins/date.ts +233 -233
  150. package/plugins/panelStates.ts +70 -70
  151. package/plugins/text.ts +59 -59
  152. package/public/spice-console/lib/images/bitmap.js +203 -203
  153. package/public/spice-console/network/spicechannel.js +390 -390
  154. package/store/main/mutations.ts +7 -7
  155. package/store/main/state.ts +7 -7
  156. package/components/common/pages/backups/modals/createBackup/disks/tableView/lib/models/interfaces.ts +0 -4
  157. package/components/common/wizards/network/add/modals/lib/models/interfaces.ts +0 -21
@@ -1,417 +1,417 @@
1
- <template>
2
- <div class="restore">
3
- <atoms-wizard
4
- show
5
- :wizard="wizard"
6
- :selected-scheme="selectedScheme"
7
- :title="localization.common.restore"
8
- :localization="localization"
9
- test-id="restore"
10
- @change-steps="onChangeSteps"
11
- @hide="onHideModal"
12
- @submit="onRestore"
13
- >
14
- <template #modalBody="{ selectedStep }">
15
- <div
16
- v-show="isLoading"
17
- class="loader-wrap absolute left-0 right-0 top-0 bottom-0"
18
- >
19
- <atoms-loader-pre-loader
20
- id="loader"
21
- :show="isLoading"
22
- class="absolute-center"
23
- test-id="backup-restore-spinner"
24
- />
25
- </div>
26
- <atoms-alert
27
- v-show="errors.length"
28
- :items="errors"
29
- status="alert-danger"
30
- test-id="restore-alert"
31
- @remove="onRemoveValidationErrors"
32
- />
33
-
34
- <common-pages-backups-modals-restore-types
35
- v-show="selectedStep.id === dynamicSteps.selectType"
36
- v-model="model"
37
- />
38
-
39
- <common-pages-backups-modals-restore-name
40
- v-show="selectedStep.id === dynamicSteps.selectName"
41
- v-model="model"
42
- :show="selectedStep.id === dynamicSteps.selectName"
43
- :name-form-submit="nameFormSubmit"
44
- @check-name="onCheckName"
45
- />
46
-
47
- <!-- TODO refactoring-->
48
- <common-vm-actions-common-select-storage
49
- v-show="selectedStep.id === dynamicSteps.selectStorage"
50
- :storage-submit="storageSubmit"
51
- :datastore="props.datastore"
52
- :is-datastore-loading="props.datastoreLoading"
53
- :storage="model.pvm.storage"
54
- :get-datastore-table-func="getDatastoreTableFunc"
55
- @submit="onChangeStorage"
56
- />
57
-
58
- <common-pages-backups-modals-restore-disks
59
- v-show="selectedStep.id === dynamicSteps.selectDisks"
60
- v-model="model"
61
- />
62
- <common-pages-backups-modals-restore-networks
63
- v-if="selectedStep.id === dynamicSteps.selectNetwork"
64
- v-model="model"
65
- :alert-messages="[]"
66
- :networks="props.networks"
67
- @get-networks="onGetNetworks"
68
- />
69
-
70
- <common-ready-to-complete
71
- v-show="selectedStep.id === dynamicSteps.readyComplete"
72
- :data="readyToCompleteInfo"
73
- />
74
- </template>
75
- </atoms-wizard>
76
- </div>
77
-
78
- <common-modals-confirmation
79
- v-if="isShowConfirm"
80
- :headline="localization.common.attention"
81
- :description="localization.common.restoreBackupConfirmDescription"
82
- @hide-modal="isShowConfirm = false"
83
- @confirm="onFinish"
84
- />
85
- </template>
86
-
87
- <script setup lang="ts">
88
- import type { UI_I_Localization } from '~/lib/models/interfaces'
89
- import type {
90
- UI_I_WizardStep,
91
- UI_I_ValidationReturn,
92
- } from '~/components/atoms/wizard/lib/models/interfaces'
93
- import Wizard from '~/components/atoms/wizard/lib/utils/utils'
94
- import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
95
- import type { UI_I_TableInfoItem } from '~/components/atoms/table/info/lib/models/interfaces'
96
- import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
97
- import type { UI_I_NameCheck } from '~/components/common/pages/backups/modals/restore/name/lib/models/interfaces'
98
- import type { UI_I_RestoreForm } from '~/components/common/pages/backups/modals/lib/models/interfaces'
99
- import {
100
- stepsSchemeInitial,
101
- stepsFunc,
102
- dynamicSteps,
103
- } from '~/components/common/pages/backups/modals/restore/lib/config/steps'
104
- import { restoreCodes } from '~/components/common/pages/backups/modals/restore/lib/config/restoreCodes'
105
-
106
- const model = defineModel<UI_I_RestoreForm>({ required: true })
107
-
108
- const props = defineProps<{
109
- datastore: UI_I_DatastoreTableItem[]
110
- datastoreLoading: boolean
111
- networks: UI_I_NetworkTableItem[]
112
- }>()
113
- const emits = defineEmits<{
114
- (event: 'get-datastore', value: string): void
115
- (event: 'get-networks', value: string): void
116
- (event: 'check-name', value: UI_I_NameCheck): void
117
- (event: 'finish'): void
118
- (event: 'hide'): void
119
- }>()
120
-
121
- const { $store }: any = useNuxtApp()
122
-
123
- const localization = computed<UI_I_Localization>(() => useLocal())
124
-
125
- const wizard: Wizard = new Wizard(
126
- stepsFunc(localization.value),
127
- stepsSchemeInitial
128
- )
129
-
130
- watch(
131
- () => model.value.restore_code,
132
- (newValue) => {
133
- wizard.changeScheme(newValue - 1)
134
- },
135
- { immediate: true }
136
- )
137
- const selectedScheme = computed<number[]>(() => wizard.selectedScheme.value)
138
- const onChangeSteps = async (value: UI_I_WizardStep[]): Promise<void> => {
139
- wizard.changeSteps(value, validationFunc)
140
- }
141
-
142
- const nameFormSubmit = ref<null | Function>(null)
143
- const storageSubmit = ref<null | Function>(null)
144
-
145
- const validationFunc = async (
146
- value: UI_I_WizardStep[],
147
- currentStep: UI_I_WizardStep,
148
- nextStep: UI_I_WizardStep
149
- ): Promise<UI_I_ValidationReturn> => {
150
- let stepHasError = false
151
- const stepShouldStop = {
152
- ifOnCurrentStep: false,
153
- ifFromAnyStep: false,
154
- stoppageStepId: -1,
155
- }
156
-
157
- wizard.setLoader(true)
158
-
159
- if (
160
- wizard.isValidateForStep(
161
- dynamicSteps.selectName,
162
- currentStep.id,
163
- nextStep.id
164
- )
165
- ) {
166
- const nameValidation = await checkName(value)
167
-
168
- value = nameValidation.newValue
169
- stepHasError = stepHasError || nameValidation.stepHasError
170
- }
171
-
172
- if (
173
- wizard.isValidateForStep(
174
- dynamicSteps.selectStorage,
175
- currentStep.id,
176
- nextStep.id
177
- )
178
- ) {
179
- const validation = await checkStorage(value)
180
-
181
- value = validation.newValue
182
- stepHasError = stepHasError || validation.stepHasError
183
- }
184
-
185
- if (
186
- wizard.isValidateForStep(
187
- dynamicSteps.selectDisks,
188
- currentStep.id,
189
- nextStep.id
190
- )
191
- ) {
192
- const validation = checkDisks(value)
193
-
194
- value = validation.newValue
195
- stepHasError = stepHasError || validation.stepHasError
196
- }
197
-
198
- wizard.setLoader(false)
199
-
200
- return {
201
- newValue: value,
202
- stepHasError,
203
- stepShouldStop,
204
- }
205
- }
206
-
207
- const checkName = async (
208
- value: UI_I_WizardStep[]
209
- ): Promise<UI_I_ValidationReturn> => {
210
- let stepHasError = false
211
-
212
- return new Promise((resolve) => {
213
- nameFormSubmit.value = (isValid: boolean): void => {
214
- if (!isValid) {
215
- stepHasError = wizard.setValidation(dynamicSteps.selectName, 'name', {
216
- fieldMessage: 'aaa',
217
- alertMessage: 'aaa',
218
- })
219
- } else if (wizard.hasMessage(dynamicSteps.selectName, 'name')) {
220
- value = wizard.removeValidation(dynamicSteps.selectName, 'name', value)
221
- }
222
-
223
- resolve({
224
- stepHasError,
225
- newValue: value,
226
- })
227
- nameFormSubmit.value = null
228
- }
229
- })
230
- }
231
-
232
- const checkStorage = async (
233
- value: UI_I_WizardStep[]
234
- ): Promise<UI_I_ValidationReturn> => {
235
- let stepHasError = false
236
-
237
- return new Promise((resolve) => {
238
- storageSubmit.value = (isValid: boolean): void => {
239
- if (!isValid) {
240
- stepHasError = wizard.setValidation(
241
- dynamicSteps.selectStorage,
242
- 'storage',
243
- {
244
- fieldMessage: 'aaa',
245
- alertMessage: 'aaa',
246
- }
247
- )
248
- } else if (wizard.hasMessage(dynamicSteps.selectStorage, 'storage')) {
249
- value = wizard.removeValidation(
250
- dynamicSteps.selectStorage,
251
- 'storage',
252
- value
253
- )
254
- }
255
-
256
- resolve({
257
- stepHasError,
258
- newValue: value,
259
- })
260
- storageSubmit.value = null
261
- }
262
- })
263
- }
264
-
265
- const checkDisks = (value: UI_I_WizardStep[]): UI_I_ValidationReturn => {
266
- let stepHasError = false
267
-
268
- const isValidStores = !!model.value?.pvm.disk_devices.length
269
- if (!isValidStores) {
270
- stepHasError = wizard.setValidation(
271
- dynamicSteps.selectDisks,
272
- 'disk_devices',
273
- {
274
- fieldMessage: localization.value.common.diskIsRequired,
275
- alertMessage: localization.value.common.diskIsRequired,
276
- }
277
- )
278
- showValidationErrors([localization.value.common.diskIsRequired])
279
- } else if (wizard.hasMessage(dynamicSteps.selectDisks, 'disk_devices')) {
280
- value = wizard.removeValidation(
281
- dynamicSteps.selectDisks,
282
- 'disk_devices',
283
- value
284
- )
285
- onRemoveValidationErrors()
286
- }
287
-
288
- return {
289
- stepHasError,
290
- newValue: value,
291
- }
292
- }
293
-
294
- const getDatastoreTableFunc = async (): Promise<void> => {
295
- emits('get-datastore', model.value.bucket)
296
- }
297
-
298
- const selectedStorageName = ref<string>('')
299
- const onChangeStorage = (storage: UI_I_DatastoreTableItem | null): void => {
300
- if (!storage) return
301
- selectedStorageName.value = storage.name
302
- model.value.pvm.storage = {
303
- id: storage.id,
304
- folder: '',
305
- }
306
- }
307
-
308
- const onCheckName = async (data: UI_I_NameCheck): Promise<void> => {
309
- emits('check-name', data)
310
- }
311
-
312
- const isLoading = ref<boolean>(true)
313
- // В Сфере и Прокураторе одно и тоже
314
- const getPvm = async (): Promise<void> => {
315
- await $store.dispatch('backup/A_GET_PVM', {
316
- target: model.value.backup_storage,
317
- bucketId: model.value.bucket, // TODO bucket поменять на vm так как это сейчас vm
318
- backupId: model.value.backup,
319
- })
320
-
321
- model.value.pvm = useDeepCopy($store.getters['backup/getPvm'])
322
- isLoading.value = false
323
- }
324
- getPvm()
325
-
326
- const readyToCompleteInfo = computed<UI_I_TableInfoItem[]>(() => {
327
- const result = []
328
-
329
- switch (model.value.restore_code) {
330
- case restoreCodes.diskOnly:
331
- case restoreCodes.existing:
332
- result.push({
333
- label: localization.value.common.backup,
334
- value: model.value.backup,
335
- })
336
- break
337
- case restoreCodes.asNew:
338
- result.push({
339
- label: localization.value.common.vmName,
340
- value: model.value.pvm.name,
341
- })
342
-
343
- // Datastores
344
- result.push({
345
- label: localization.value.common.datastore,
346
- value: selectedStorageName.value,
347
- })
348
-
349
- // Disks
350
- model.value.pvm.disk_devices.forEach((disk_device, i) => {
351
- if (!disk_device.source) return
352
-
353
- result.push({
354
- label: `${localization.value.common.disk} ${i}`,
355
- value: disk_device.source,
356
- })
357
- })
358
-
359
- // Networks
360
- model.value.pvm.network_devices.forEach((network) => {
361
- result.push({
362
- label: localization.value.common.network,
363
- value: network.network,
364
- })
365
- })
366
- break
367
- // case 1:
368
- // result.push({
369
- // label: localization.value.common.vmName,
370
- // value: model.value.pvm.name,
371
- // })
372
- // break
373
- }
374
-
375
- return result
376
- })
377
-
378
- const errors = ref<string[]>([])
379
- const showValidationErrors = (data: string[]): void => {
380
- errors.value = data
381
- }
382
- const onRemoveValidationErrors = (): void => {
383
- errors.value = []
384
- }
385
-
386
- const onFinish = (): void => {
387
- emits('finish')
388
- }
389
- const onHideModal = (): void => {
390
- emits('hide')
391
- }
392
-
393
- const onRestore = (): void => {
394
- if (model.value.restore_code === restoreCodes.existing) {
395
- isShowConfirm.value = true
396
- } else {
397
- onFinish()
398
- }
399
- }
400
-
401
- const isShowConfirm = ref<boolean>(false)
402
-
403
- const onGetNetworks = (hostId: string): void => {
404
- emits('get-networks', hostId)
405
- }
406
- </script>
407
-
408
- <style scoped lang="scss">
409
- :deep(.modal-body) {
410
- display: flex;
411
- flex-direction: column;
412
- }
413
- .loader-wrap {
414
- background-color: rgba(0, 0, 0, 0.3);
415
- z-index: var(--z-fixed);
416
- }
417
- </style>
1
+ <template>
2
+ <div class="restore">
3
+ <atoms-wizard
4
+ show
5
+ :wizard="wizard"
6
+ :selected-scheme="selectedScheme"
7
+ :title="localization.common.restore"
8
+ :localization="localization"
9
+ test-id="restore"
10
+ @change-steps="onChangeSteps"
11
+ @hide="onHideModal"
12
+ @submit="onRestore"
13
+ >
14
+ <template #modalBody="{ selectedStep }">
15
+ <div
16
+ v-show="isLoading"
17
+ class="loader-wrap absolute left-0 right-0 top-0 bottom-0"
18
+ >
19
+ <atoms-loader-pre-loader
20
+ id="loader"
21
+ :show="isLoading"
22
+ class="absolute-center"
23
+ test-id="backup-restore-spinner"
24
+ />
25
+ </div>
26
+ <atoms-alert
27
+ v-show="errors.length"
28
+ :items="errors"
29
+ status="alert-danger"
30
+ test-id="restore-alert"
31
+ @remove="onRemoveValidationErrors"
32
+ />
33
+
34
+ <common-pages-backups-modals-restore-types
35
+ v-show="selectedStep.id === dynamicSteps.selectType"
36
+ v-model="model"
37
+ />
38
+
39
+ <common-pages-backups-modals-restore-name
40
+ v-show="selectedStep.id === dynamicSteps.selectName"
41
+ v-model="model"
42
+ :show="selectedStep.id === dynamicSteps.selectName"
43
+ :name-form-submit="nameFormSubmit"
44
+ @check-name="onCheckName"
45
+ />
46
+
47
+ <!-- TODO refactoring-->
48
+ <common-vm-actions-common-select-storage
49
+ v-show="selectedStep.id === dynamicSteps.selectStorage"
50
+ :storage-submit="storageSubmit"
51
+ :datastore="props.datastore"
52
+ :is-datastore-loading="props.datastoreLoading"
53
+ :storage="model.pvm.storage"
54
+ :get-datastore-table-func="getDatastoreTableFunc"
55
+ @submit="onChangeStorage"
56
+ />
57
+
58
+ <common-pages-backups-modals-restore-disks
59
+ v-show="selectedStep.id === dynamicSteps.selectDisks"
60
+ v-model="model"
61
+ />
62
+ <common-pages-backups-modals-restore-networks
63
+ v-if="selectedStep.id === dynamicSteps.selectNetwork"
64
+ v-model="model"
65
+ :alert-messages="[]"
66
+ :networks="props.networks"
67
+ @get-networks="onGetNetworks"
68
+ />
69
+
70
+ <common-ready-to-complete
71
+ v-show="selectedStep.id === dynamicSteps.readyComplete"
72
+ :data="readyToCompleteInfo"
73
+ />
74
+ </template>
75
+ </atoms-wizard>
76
+ </div>
77
+
78
+ <common-modals-confirmation
79
+ v-if="isShowConfirm"
80
+ :headline="localization.common.attention"
81
+ :description="localization.common.restoreBackupConfirmDescription"
82
+ @hide-modal="isShowConfirm = false"
83
+ @confirm="onFinish"
84
+ />
85
+ </template>
86
+
87
+ <script setup lang="ts">
88
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
89
+ import type {
90
+ UI_I_WizardStep,
91
+ UI_I_ValidationReturn,
92
+ } from '~/components/atoms/wizard/lib/models/interfaces'
93
+ import Wizard from '~/components/atoms/wizard/lib/utils/utils'
94
+ import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
95
+ import type { UI_I_TableInfoItem } from '~/components/atoms/table/info/lib/models/interfaces'
96
+ import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
97
+ import type { UI_I_NameCheck } from '~/components/common/pages/backups/modals/restore/name/lib/models/interfaces'
98
+ import type { UI_I_RestoreForm } from '~/components/common/pages/backups/modals/lib/models/interfaces'
99
+ import {
100
+ stepsSchemeInitial,
101
+ stepsFunc,
102
+ dynamicSteps,
103
+ } from '~/components/common/pages/backups/modals/restore/lib/config/steps'
104
+ import { restoreCodes } from '~/components/common/pages/backups/modals/restore/lib/config/restoreCodes'
105
+
106
+ const model = defineModel<UI_I_RestoreForm>({ required: true })
107
+
108
+ const props = defineProps<{
109
+ datastore: UI_I_DatastoreTableItem[]
110
+ datastoreLoading: boolean
111
+ networks: UI_I_NetworkTableItem[]
112
+ }>()
113
+ const emits = defineEmits<{
114
+ (event: 'get-datastore', value: string): void
115
+ (event: 'get-networks', value: string): void
116
+ (event: 'check-name', value: UI_I_NameCheck): void
117
+ (event: 'finish'): void
118
+ (event: 'hide'): void
119
+ }>()
120
+
121
+ const { $store }: any = useNuxtApp()
122
+
123
+ const localization = computed<UI_I_Localization>(() => useLocal())
124
+
125
+ const wizard: Wizard = new Wizard(
126
+ stepsFunc(localization.value),
127
+ stepsSchemeInitial
128
+ )
129
+
130
+ watch(
131
+ () => model.value.restore_code,
132
+ (newValue) => {
133
+ wizard.changeScheme(newValue - 1)
134
+ },
135
+ { immediate: true }
136
+ )
137
+ const selectedScheme = computed<number[]>(() => wizard.selectedScheme.value)
138
+ const onChangeSteps = async (value: UI_I_WizardStep[]): Promise<void> => {
139
+ wizard.changeSteps(value, validationFunc)
140
+ }
141
+
142
+ const nameFormSubmit = ref<null | Function>(null)
143
+ const storageSubmit = ref<null | Function>(null)
144
+
145
+ const validationFunc = async (
146
+ value: UI_I_WizardStep[],
147
+ currentStep: UI_I_WizardStep,
148
+ nextStep: UI_I_WizardStep
149
+ ): Promise<UI_I_ValidationReturn> => {
150
+ let stepHasError = false
151
+ const stepShouldStop = {
152
+ ifOnCurrentStep: false,
153
+ ifFromAnyStep: false,
154
+ stoppageStepId: -1,
155
+ }
156
+
157
+ wizard.setLoader(true)
158
+
159
+ if (
160
+ wizard.isValidateForStep(
161
+ dynamicSteps.selectName,
162
+ currentStep.id,
163
+ nextStep.id
164
+ )
165
+ ) {
166
+ const nameValidation = await checkName(value)
167
+
168
+ value = nameValidation.newValue
169
+ stepHasError = stepHasError || nameValidation.stepHasError
170
+ }
171
+
172
+ if (
173
+ wizard.isValidateForStep(
174
+ dynamicSteps.selectStorage,
175
+ currentStep.id,
176
+ nextStep.id
177
+ )
178
+ ) {
179
+ const validation = await checkStorage(value)
180
+
181
+ value = validation.newValue
182
+ stepHasError = stepHasError || validation.stepHasError
183
+ }
184
+
185
+ if (
186
+ wizard.isValidateForStep(
187
+ dynamicSteps.selectDisks,
188
+ currentStep.id,
189
+ nextStep.id
190
+ )
191
+ ) {
192
+ const validation = checkDisks(value)
193
+
194
+ value = validation.newValue
195
+ stepHasError = stepHasError || validation.stepHasError
196
+ }
197
+
198
+ wizard.setLoader(false)
199
+
200
+ return {
201
+ newValue: value,
202
+ stepHasError,
203
+ stepShouldStop,
204
+ }
205
+ }
206
+
207
+ const checkName = async (
208
+ value: UI_I_WizardStep[]
209
+ ): Promise<UI_I_ValidationReturn> => {
210
+ let stepHasError = false
211
+
212
+ return new Promise((resolve) => {
213
+ nameFormSubmit.value = (isValid: boolean): void => {
214
+ if (!isValid) {
215
+ stepHasError = wizard.setValidation(dynamicSteps.selectName, 'name', {
216
+ fieldMessage: 'aaa',
217
+ alertMessage: 'aaa',
218
+ })
219
+ } else if (wizard.hasMessage(dynamicSteps.selectName, 'name')) {
220
+ value = wizard.removeValidation(dynamicSteps.selectName, 'name', value)
221
+ }
222
+
223
+ resolve({
224
+ stepHasError,
225
+ newValue: value,
226
+ })
227
+ nameFormSubmit.value = null
228
+ }
229
+ })
230
+ }
231
+
232
+ const checkStorage = async (
233
+ value: UI_I_WizardStep[]
234
+ ): Promise<UI_I_ValidationReturn> => {
235
+ let stepHasError = false
236
+
237
+ return new Promise((resolve) => {
238
+ storageSubmit.value = (isValid: boolean): void => {
239
+ if (!isValid) {
240
+ stepHasError = wizard.setValidation(
241
+ dynamicSteps.selectStorage,
242
+ 'storage',
243
+ {
244
+ fieldMessage: 'aaa',
245
+ alertMessage: 'aaa',
246
+ }
247
+ )
248
+ } else if (wizard.hasMessage(dynamicSteps.selectStorage, 'storage')) {
249
+ value = wizard.removeValidation(
250
+ dynamicSteps.selectStorage,
251
+ 'storage',
252
+ value
253
+ )
254
+ }
255
+
256
+ resolve({
257
+ stepHasError,
258
+ newValue: value,
259
+ })
260
+ storageSubmit.value = null
261
+ }
262
+ })
263
+ }
264
+
265
+ const checkDisks = (value: UI_I_WizardStep[]): UI_I_ValidationReturn => {
266
+ let stepHasError = false
267
+
268
+ const isValidStores = !!model.value?.pvm.disk_devices.length
269
+ if (!isValidStores) {
270
+ stepHasError = wizard.setValidation(
271
+ dynamicSteps.selectDisks,
272
+ 'disk_devices',
273
+ {
274
+ fieldMessage: localization.value.common.diskIsRequired,
275
+ alertMessage: localization.value.common.diskIsRequired,
276
+ }
277
+ )
278
+ showValidationErrors([localization.value.common.diskIsRequired])
279
+ } else if (wizard.hasMessage(dynamicSteps.selectDisks, 'disk_devices')) {
280
+ value = wizard.removeValidation(
281
+ dynamicSteps.selectDisks,
282
+ 'disk_devices',
283
+ value
284
+ )
285
+ onRemoveValidationErrors()
286
+ }
287
+
288
+ return {
289
+ stepHasError,
290
+ newValue: value,
291
+ }
292
+ }
293
+
294
+ const getDatastoreTableFunc = async (): Promise<void> => {
295
+ emits('get-datastore', model.value.bucket)
296
+ }
297
+
298
+ const selectedStorageName = ref<string>('')
299
+ const onChangeStorage = (storage: UI_I_DatastoreTableItem | null): void => {
300
+ if (!storage) return
301
+ selectedStorageName.value = storage.name
302
+ model.value.pvm.storage = {
303
+ id: storage.id,
304
+ folder: '',
305
+ }
306
+ }
307
+
308
+ const onCheckName = async (data: UI_I_NameCheck): Promise<void> => {
309
+ emits('check-name', data)
310
+ }
311
+
312
+ const isLoading = ref<boolean>(true)
313
+ // В Сфере и Прокураторе одно и тоже
314
+ const getPvm = async (): Promise<void> => {
315
+ await $store.dispatch('backup/A_GET_PVM', {
316
+ target: model.value.backup_storage,
317
+ bucketId: model.value.bucket, // TODO bucket поменять на vm так как это сейчас vm
318
+ backupId: model.value.backup,
319
+ })
320
+
321
+ model.value.pvm = useDeepCopy($store.getters['backup/getPvm'])
322
+ isLoading.value = false
323
+ }
324
+ getPvm()
325
+
326
+ const readyToCompleteInfo = computed<UI_I_TableInfoItem[]>(() => {
327
+ const result = []
328
+
329
+ switch (model.value.restore_code) {
330
+ case restoreCodes.diskOnly:
331
+ case restoreCodes.existing:
332
+ result.push({
333
+ label: localization.value.common.backup,
334
+ value: model.value.backup,
335
+ })
336
+ break
337
+ case restoreCodes.asNew:
338
+ result.push({
339
+ label: localization.value.common.vmName,
340
+ value: model.value.pvm.name,
341
+ })
342
+
343
+ // Datastores
344
+ result.push({
345
+ label: localization.value.common.datastore,
346
+ value: selectedStorageName.value,
347
+ })
348
+
349
+ // Disks
350
+ model.value.pvm.disk_devices.forEach((disk_device, i) => {
351
+ if (!disk_device.source) return
352
+
353
+ result.push({
354
+ label: `${localization.value.common.disk} ${i}`,
355
+ value: disk_device.source,
356
+ })
357
+ })
358
+
359
+ // Networks
360
+ model.value.pvm.network_devices.forEach((network) => {
361
+ result.push({
362
+ label: localization.value.common.network,
363
+ value: network.network,
364
+ })
365
+ })
366
+ break
367
+ // case 1:
368
+ // result.push({
369
+ // label: localization.value.common.vmName,
370
+ // value: model.value.pvm.name,
371
+ // })
372
+ // break
373
+ }
374
+
375
+ return result
376
+ })
377
+
378
+ const errors = ref<string[]>([])
379
+ const showValidationErrors = (data: string[]): void => {
380
+ errors.value = data
381
+ }
382
+ const onRemoveValidationErrors = (): void => {
383
+ errors.value = []
384
+ }
385
+
386
+ const onFinish = (): void => {
387
+ emits('finish')
388
+ }
389
+ const onHideModal = (): void => {
390
+ emits('hide')
391
+ }
392
+
393
+ const onRestore = (): void => {
394
+ if (model.value.restore_code === restoreCodes.existing) {
395
+ isShowConfirm.value = true
396
+ } else {
397
+ onFinish()
398
+ }
399
+ }
400
+
401
+ const isShowConfirm = ref<boolean>(false)
402
+
403
+ const onGetNetworks = (hostId: string): void => {
404
+ emits('get-networks', hostId)
405
+ }
406
+ </script>
407
+
408
+ <style scoped lang="scss">
409
+ :deep(.modal-body) {
410
+ display: flex;
411
+ flex-direction: column;
412
+ }
413
+ .loader-wrap {
414
+ background-color: rgba(0, 0, 0, 0.3);
415
+ z-index: var(--z-fixed);
416
+ }
417
+ </style>