bfg-common 1.5.332 → 1.5.333

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 (38) hide show
  1. package/assets/localization/local_be.json +5 -2
  2. package/assets/localization/local_en.json +3269 -3266
  3. package/assets/localization/local_hy.json +5 -2
  4. package/assets/localization/local_kk.json +5 -2
  5. package/assets/localization/local_ru.json +8 -5
  6. package/assets/localization/local_zh.json +3266 -3263
  7. package/components/common/pages/home/widgets/WidgetsNew.vue +21 -19
  8. package/components/common/pages/home/widgets/WidgetsOld.vue +9 -7
  9. package/components/common/select/radio/RadioGroup.vue +11 -4
  10. package/components/common/select/radio/lib/models/interfaces.ts +1 -0
  11. package/components/common/vm/actions/add/New.vue +6 -1
  12. package/components/common/vm/actions/add/Old.vue +4 -1
  13. package/components/common/vm/actions/add/lib/config/steps.ts +22 -10
  14. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +3 -0
  15. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +2 -0
  16. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +2 -0
  17. package/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/dropdownItems.ts +36 -34
  18. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +3 -0
  19. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +2 -0
  20. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsOld.vue +2 -0
  21. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptions.vue +12 -0
  22. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +2 -1
  23. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsOld.vue +4 -3
  24. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +8 -6
  25. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/Old.vue +8 -6
  26. package/components/common/vm/actions/common/customizeHardware/vmoptions/tools/ToolsNew.vue +2 -0
  27. package/components/common/vm/actions/common/customizeHardware/vmoptions/tools/ToolsOld.vue +2 -1
  28. package/components/common/vm/actions/common/select/name/New.vue +13 -11
  29. package/components/common/vm/actions/common/select/options/Options.vue +6 -1
  30. package/components/common/vm/actions/editSettings/EditSettings.vue +3 -0
  31. package/components/common/vm/actions/editSettings/EditSettingsOld.vue +2 -0
  32. package/components/common/vm/actions/editSettings/new/New.vue +2 -0
  33. package/components/common/vmt/actions/add/Add.vue +542 -542
  34. package/components/common/vmt/actions/add/New.vue +345 -346
  35. package/components/common/vmt/actions/add/Old.vue +301 -301
  36. package/components/common/vmt/actions/add/lib/config/steps.ts +107 -107
  37. package/components/common/wizards/vm/migrate/select/type/lib/config/typeOptions.ts +16 -14
  38. package/package.json +1 -1
@@ -1,346 +1,345 @@
1
- <template>
2
- <ui-wizard
3
- :steps="props.wizard.steps"
4
- :selected-scheme="props.selectedScheme"
5
- :title="props.title"
6
- :texts="texts"
7
- :is-loading="props.isLoading"
8
- test-id="vmt-add"
9
- show
10
- @change-steps="emits('change-steps', $event)"
11
- @hide="emits('hide')"
12
- @submit="emits('finish')"
13
- >
14
- <template #content="{ selectedStep }">
15
- <!-- <ui-wizard-block-->
16
- <!-- v-if="selectedStep.id === props.dynamicSteps.scheduledTasks"-->
17
- <!-- >-->
18
- <!-- <template #content>-->
19
- <!-- <common-pages-scheduled-tasks-modals-common-new-task-form-->
20
- <!-- v-model="props.newTaskForm"-->
21
- <!-- target="0"-->
22
- <!-- class="new-task-form"-->
23
- <!-- />-->
24
- <!-- </template>-->
25
- <!-- </ui-wizard-block>-->
26
- <ui-wizard-block
27
- v-if="selectedStep.id === props.dynamicSteps.selectName"
28
- :sub-title-height="height0"
29
- >
30
- <template #subTitle>
31
- <div ref="subTitleBlock0" class="subtitle-block">
32
- <div
33
- id="name-alert-wrapper"
34
- :class="[{ 'mb-4': !isNameAlertWrapperEmpty }]"
35
- ></div>
36
- <ui-wizard-subtitle
37
- :sub-title="
38
- localization.vmWizard.specifyUniqueNameAndTargetLocationForVm
39
- "
40
- />
41
- </div>
42
- </template>
43
- <template #content>
44
- <common-vm-actions-common-select-name
45
- :show="selectedStep.id === props.dynamicSteps.selectName"
46
- :name-form-submit="props.nameFormSubmit"
47
- :project="props.project"
48
- @submit="emits('change-name', $event)"
49
- @check-name="emits('check-name', $event)"
50
- @has-errors="isNameAlertWrapperEmpty = $event"
51
- />
52
- </template>
53
- </ui-wizard-block>
54
- <ui-wizard-block
55
- v-if="selectedStep.id === props.dynamicSteps.selectStorage"
56
- :sub-title-height="height2"
57
- >
58
- <template #subTitle>
59
- <div ref="subTitleBlock2">
60
- <div class="subtitle-block">
61
- <div
62
- id="storage-alert-wrapper"
63
- :class="[{ 'mb-4': !isStorageAlertWrapperEmpty }]"
64
- ></div>
65
- <ui-wizard-subtitle
66
- :sub-title="localization.vmt.wizardSubTitle2"
67
- />
68
- </div>
69
- </div>
70
- </template>
71
- <template #content>
72
- <common-vm-actions-common-select-storage
73
- :storage-submit="props.storageSubmit"
74
- :datastore="props.datastore"
75
- :is-datastore-loading="props.isDatastoreLoading"
76
- :get-datastore-table-func="props.getDatastoreTableFunc"
77
- @submit="emits('change-storage', $event)"
78
- @has-errors="isStorageAlertWrapperEmpty = $event"
79
- />
80
- </template>
81
- </ui-wizard-block>
82
-
83
- <ui-wizard-block
84
- v-if="selectedStep.id === props.dynamicSteps.selectGuestOSMachineType"
85
- :sub-title-height="height3"
86
- >
87
- <template #subTitle>
88
- <div ref="subTitleBlock3">
89
- <div class="subtitle-block">
90
- <ui-wizard-subtitle
91
- :sub-title="localization.common.chooseGuestOSInstalledVM"
92
- />
93
- </div>
94
- </div>
95
- </template>
96
- <template #content>
97
- <common-vm-actions-common-select-os
98
- v-model:machine-type="vmtForm.guestMachineType"
99
- v-model:guest-os-family="vmtForm.guestOsFamily"
100
- v-model:guest-os-version="vmtForm.guestOsVersion"
101
- :families-options="props.guestOsFamilies"
102
- :versions-options="props.guestOsVersions"
103
- :machine-types-options="props.machineTypes"
104
- :error-validation-fields="props.errorValidationFields"
105
- @remove-error-by-title="emits('remove-error-by-title', $event)"
106
- />
107
- </template>
108
- </ui-wizard-block>
109
-
110
- <ui-wizard-block
111
- v-if="selectedStep.id === props.dynamicSteps.customizeHardware"
112
- >
113
- <template #content>
114
- <div
115
- class="select-block-wrap overflow-auto h-full flex flex-col pr-8"
116
- >
117
- <common-vm-actions-common-customize-hardware
118
- :project="props.project"
119
- :vm-name="vmtForm.name"
120
- :guest-machine-type="vmtForm.guestMachineType"
121
- :guest-os-family="vmtForm.guestOsFamily"
122
- :guest-os-version="vmtForm.guestOsVersion"
123
- :storage="vmtForm.storage"
124
- :hard-disks-for-boot-options="props.virtualHardwareHardDisksLocal"
125
- :cd-dvd-drives-for-boot-options="
126
- props.virtualHardwareCdDvdDrivesLocal
127
- "
128
- :networks-for-boot-options="props.virtualHardwareNetworksLocal"
129
- :cd-dvd-drives="props.virtualHardwareCdDvdDrivesLocal"
130
- :customize-hardware-submit="props.customizeHardwareSubmit"
131
- :max-cpus="props.maxCpus"
132
- :max-memory="props.maxMemory"
133
- :cpu-models="props.cpuModels"
134
- :selected-nav-item="props.selectedNavItem"
135
- :nodes="props.nodes"
136
- :files="props.files"
137
- :networks-table="props.networksTable"
138
- :error-validation-fields="props.errorValidationFields"
139
- :get-datastore-table-func="props.getDatastoreTableFunc"
140
- :datastore="props.datastore"
141
- :is-datastore-loading="props.isDatastoreLoading"
142
- :vm-cpu-help-text-second="props.vmCpuHelpTextSecond"
143
- :passthrough-devices="props.passthroughDevices"
144
- :mediated-devices="props.mediatedDevices"
145
- :compute-resource="vmtForm.computeResource"
146
- @change-boot-order="emits('change-boot-order', $event)"
147
- @send-data="emits('change-customize-hardware', $event)"
148
- @get-storage="emits('get-storage', $event)"
149
- @get-folders-or-files="emits('get-folders-or-files', $event)"
150
- @get-active-device-child="
151
- emits('get-active-device-child', $event)
152
- "
153
- @show-datastore-child="emits('show-datastore-child', $event)"
154
- @remove-error-by-title="emits('remove-error-by-title', $event)"
155
- @get-networks-table="emits('get-networks-table', $event)"
156
- @get-pci-devices="emits('get-pci-devices')"
157
- />
158
- </div>
159
- </template>
160
- </ui-wizard-block>
161
- <ui-wizard-block
162
- v-if="selectedStep.id === props.dynamicSteps.readyComplete"
163
- :sub-title-height="heightLast"
164
- >
165
- <template #subTitle>
166
- <div ref="subTitleBlockLast">
167
- <div class="subtitle-block">
168
- <ui-wizard-subtitle
169
- :sub-title="localization.vmt.wizardSubTitleLast"
170
- />
171
- </div>
172
- </div>
173
- </template>
174
- <template #content>
175
- <div class="mt-3 mb-4">
176
- <common-ready-to-complete
177
- v-if="selectedStep.id === props.dynamicSteps.readyComplete"
178
- :data="props.readyCompleteTableInfo"
179
- />
180
- </div>
181
- </template>
182
- </ui-wizard-block>
183
- </template>
184
- </ui-wizard>
185
- </template>
186
-
187
- <script setup lang="ts">
188
- import { useElementSize } from '@vueuse/core'
189
- import type {
190
- UI_I_DatastoreTableItem,
191
- UI_I_FolderOrFileTreePayload,
192
- } from '~/lib/models/store/storage/interfaces'
193
- import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
194
- import type { API_UI_I_Error } from '~/lib/models/store/interfaces'
195
- import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
196
- import type { UI_I_FileTreeNode } from '~/components/lib/models/interfaces'
197
- import type {
198
- UI_I_ArbitraryObject,
199
- UI_I_Localization,
200
- } from '~/lib/models/interfaces'
201
- import type { UI_I_SendDataCustomizeHardware } from '~/components/common/vm/actions/common/customizeHardware/lib/models/interfaces'
202
- import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
203
- import type {
204
- UI_I_SendDataNewCdDvdDrive,
205
- UI_I_SendDataNewHardDisk,
206
- UI_I_SendDataNewNetwork,
207
- } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
208
- import type { UI_I_ScheduleNewTasksForm } from '~/components/common/pages/scheduledTasks/modals/lib/models/interfaces'
209
- import type { UI_T_SelectedNavItem } from '~/components/common/vm/actions/common/lib/models/types'
210
- import type { UI_I_TableInfoItem } from '~/components/atoms/table/info/lib/models/interfaces'
211
- import type { UI_T_ChangeBootOrder } from '~/components/common/vm/actions/lib/models/types'
212
- import type { UI_T_Project } from '~/lib/models/types'
213
- import type {
214
- UI_I_MediatedDevice,
215
- UI_I_PciDevice,
216
- } from '~/lib/models/store/vm/interfaces'
217
- import type { UI_I_WizardStep } from '~/components/atoms/wizard/lib/models/interfaces'
218
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
219
- import type { UI_I_VmtForm } from '~/components/common/vmt/actions/add/lib/models/interfaces'
220
- import type { I_DynamicSteps } from '~/components/common/vmt/actions/add/lib/models/interfaces'
221
- import Wizard from '~/components/atoms/wizard/lib/utils/utils'
222
- import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
223
-
224
- const vmtForm = defineModel<UI_I_VmtForm>('vmtForm')
225
- const props = defineProps<{
226
- alertMessages: string[]
227
- title: string
228
- wizard: Wizard
229
- dynamicSteps: I_DynamicSteps
230
- newTaskForm: UI_I_ScheduleNewTasksForm
231
- selectedScheme: number[]
232
- nameFormSubmit: Function | null
233
- storageSubmit: Function | null
234
- customizeHardwareSubmit: Function | null
235
- isLoading: boolean
236
- selectedNavItem: UI_T_SelectedNavItem
237
- virtualHardwareCdDvdDrivesLocal: UI_I_SendDataNewCdDvdDrive[] | null
238
- virtualHardwareNetworksLocal: UI_I_SendDataNewNetwork[] | null
239
- virtualHardwareHardDisksLocal: UI_I_SendDataNewHardDisk[] | null
240
- maxMemory: number
241
- maxCpus: number
242
- machineTypes: UI_I_OptionItem[]
243
- cpuModels: UI_I_OptionItem[]
244
- guestOsVersions: UI_I_ArbitraryObject<UI_I_OptionItem[]>
245
- guestOsFamilies: UI_I_OptionItem[]
246
- project: UI_T_Project
247
- nodes: UI_I_FileTreeNode[]
248
- files: UI_I_FileTreeNode[]
249
- networksTable: UI_I_NetworkTableItem[]
250
- datastore: UI_I_DatastoreTableItem[]
251
- isDatastoreLoading: boolean
252
- errorValidationFields: UI_I_ErrorValidationField[]
253
- readyCompleteTableInfo: UI_I_TableInfoItem[]
254
- vmCpuHelpTextSecond: string
255
- getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
256
- passthroughDevices: UI_I_PciDevice[]
257
- mediatedDevices: UI_I_MediatedDevice[]
258
- }>()
259
-
260
- const emits = defineEmits<{
261
- (event: 'change-steps', value: UI_I_WizardStep[]): void
262
- (
263
- event: 'check-name',
264
- value: [[string, UI_I_TreeNode | null], (error: any) => void]
265
- ): void
266
- (event: 'get-storage', value: UI_I_TablePayload): void
267
- (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
268
- (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
269
- (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
270
- (event: 'remove-error-by-title', value: string): void
271
- (event: 'get-networks-table', value: UI_I_TablePayload): void
272
- (event: 'change-boot-order', value: UI_T_ChangeBootOrder): void
273
- (
274
- event: 'change-customize-hardware',
275
- value: UI_I_SendDataCustomizeHardware
276
- ): void
277
- (event: 'get-pci-devices'): void
278
- (event: 'change-storage', value: UI_I_DatastoreTableItem | null): void
279
- (event: 'change-name', value: [string, UI_I_TreeNode | null]): void
280
- (event: 'hide'): void
281
- (event: 'finish'): void
282
- }>()
283
-
284
- const localization = computed<UI_I_Localization>(() => useLocal())
285
-
286
- const texts = computed<UI_I_WizardTexts>(() => ({
287
- cancel: localization.value.common.cancel,
288
- back: localization.value.common.backCap,
289
- processing: localization.value.common.processing,
290
- next: localization.value.common.next,
291
- finish: localization.value.common.create,
292
- incompleteTitle: localization.value.common.incompleteProcess,
293
- incompleteMessage: localization.value.common.incompleteProcessMessage,
294
- incompleteCancel: localization.value.common.cancel,
295
- incompleteLeave: localization.value.common.leave,
296
- step: localization.value.common.step,
297
- of: localization.value.common.of2,
298
- }))
299
-
300
- const subTitleBlock0 = ref<HTMLElement | null>(null)
301
- const { height: height0 } = useElementSize(subTitleBlock0)
302
-
303
- const subTitleBlock2 = ref<HTMLElement | null>(null)
304
- const { height: height2 } = useElementSize(subTitleBlock2)
305
-
306
- const subTitleBlock3 = ref<HTMLElement | null>(null)
307
- const { height: height3 } = useElementSize(subTitleBlock3)
308
-
309
- const subTitleBlockLast = ref<HTMLElement | null>(null)
310
- const { height: heightLast } = useElementSize(subTitleBlockLast)
311
-
312
- const isNameAlertWrapperEmpty = ref<boolean>(false)
313
- const isStorageAlertWrapperEmpty = ref<boolean>(false)
314
- </script>
315
-
316
- <style scoped lang="scss">
317
- .subtitle-block {
318
- display: flex;
319
- flex-direction: column;
320
- border-bottom: 1px solid var(--wizard-line);
321
- padding-bottom: 12px;
322
- }
323
- .select-block-wrap {
324
- :deep(.customize-hardware) {
325
- height: inherit;
326
- max-height: 100%;
327
- padding-bottom: 40px;
328
-
329
- :deep(.tabs-wrapper) {
330
- overflow-y: auto;
331
- }
332
- :deep(.tabs-wrapper),
333
- :deep(.errors-alert),
334
- :deep(.action-wrap) {
335
- margin-right: 32px;
336
- }
337
- :deep(.virtual-hardware-content-block),
338
- :deep(.vm-options) {
339
- padding-right: 18px;
340
- }
341
- }
342
- :deep(.details-list) {
343
- margin-top: 0;
344
- }
345
- }
346
- </style>
1
+ <template>
2
+ <ui-wizard
3
+ :steps="props.wizard.steps"
4
+ :selected-scheme="props.selectedScheme"
5
+ :title="props.title"
6
+ :texts="texts"
7
+ :is-loading="props.isLoading"
8
+ test-id="vmt-add"
9
+ show
10
+ @change-steps="emits('change-steps', $event)"
11
+ @hide="emits('hide')"
12
+ @submit="emits('finish')"
13
+ >
14
+ <template #content="{ selectedStep }">
15
+ <!-- <ui-wizard-block-->
16
+ <!-- v-if="selectedStep.id === props.dynamicSteps.scheduledTasks"-->
17
+ <!-- >-->
18
+ <!-- <template #content>-->
19
+ <!-- <common-pages-scheduled-tasks-modals-common-new-task-form-->
20
+ <!-- v-model="props.newTaskForm"-->
21
+ <!-- target="0"-->
22
+ <!-- class="new-task-form"-->
23
+ <!-- />-->
24
+ <!-- </template>-->
25
+ <!-- </ui-wizard-block>-->
26
+ <ui-wizard-block
27
+ v-if="selectedStep.id === props.dynamicSteps.selectName"
28
+ :sub-title-height="height0"
29
+ >
30
+ <template #subTitle>
31
+ <div ref="subTitleBlock0" class="subtitle-block">
32
+ <div
33
+ id="name-alert-wrapper"
34
+ :class="[{ 'mb-4': !isNameAlertWrapperEmpty }]"
35
+ ></div>
36
+ <ui-wizard-subtitle
37
+ :sub-title="
38
+ localization.vmWizard.specifyUniqueNameAndTargetLocationForVm
39
+ "
40
+ />
41
+ </div>
42
+ </template>
43
+ <template #content>
44
+ <common-vm-actions-common-select-name
45
+ :show="selectedStep.id === props.dynamicSteps.selectName"
46
+ :name-form-submit="props.nameFormSubmit"
47
+ :project="props.project"
48
+ @submit="emits('change-name', $event)"
49
+ @check-name="emits('check-name', $event)"
50
+ @has-errors="isNameAlertWrapperEmpty = $event"
51
+ />
52
+ </template>
53
+ </ui-wizard-block>
54
+ <ui-wizard-block
55
+ v-if="selectedStep.id === props.dynamicSteps.selectStorage"
56
+ :sub-title-height="height2"
57
+ >
58
+ <template #subTitle>
59
+ <div ref="subTitleBlock2">
60
+ <div class="subtitle-block">
61
+ <div
62
+ id="storage-alert-wrapper"
63
+ :class="[{ 'mb-4': !isStorageAlertWrapperEmpty }]"
64
+ ></div>
65
+ <ui-wizard-subtitle
66
+ :sub-title="localization.vmt.wizardSubTitle2"
67
+ />
68
+ </div>
69
+ </div>
70
+ </template>
71
+ <template #content>
72
+ <common-vm-actions-common-select-storage
73
+ :storage-submit="props.storageSubmit"
74
+ :datastore="props.datastore"
75
+ :is-datastore-loading="props.isDatastoreLoading"
76
+ :get-datastore-table-func="props.getDatastoreTableFunc"
77
+ @submit="emits('change-storage', $event)"
78
+ @has-errors="isStorageAlertWrapperEmpty = $event"
79
+ />
80
+ </template>
81
+ </ui-wizard-block>
82
+
83
+ <ui-wizard-block
84
+ v-if="selectedStep.id === props.dynamicSteps.selectGuestOSMachineType"
85
+ :sub-title-height="height3"
86
+ >
87
+ <template #subTitle>
88
+ <div ref="subTitleBlock3">
89
+ <div class="subtitle-block">
90
+ <ui-wizard-subtitle
91
+ :sub-title="localization.common.chooseGuestOSInstalledVM"
92
+ />
93
+ </div>
94
+ </div>
95
+ </template>
96
+ <template #content>
97
+ <common-vm-actions-common-select-os
98
+ v-model:machine-type="vmtForm.guestMachineType"
99
+ v-model:guest-os-family="vmtForm.guestOsFamily"
100
+ v-model:guest-os-version="vmtForm.guestOsVersion"
101
+ :families-options="props.guestOsFamilies"
102
+ :versions-options="props.guestOsVersions"
103
+ :machine-types-options="props.machineTypes"
104
+ :error-validation-fields="props.errorValidationFields"
105
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
106
+ />
107
+ </template>
108
+ </ui-wizard-block>
109
+
110
+ <ui-wizard-block
111
+ v-if="selectedStep.id === props.dynamicSteps.customizeHardware"
112
+ >
113
+ <template #content>
114
+ <div
115
+ class="select-block-wrap overflow-auto h-full flex flex-col pr-8"
116
+ >
117
+ <common-vm-actions-common-customize-hardware
118
+ :project="props.project"
119
+ :vm-name="vmtForm.name"
120
+ :guest-machine-type="vmtForm.guestMachineType"
121
+ :guest-os-family="vmtForm.guestOsFamily"
122
+ :guest-os-version="vmtForm.guestOsVersion"
123
+ :storage="vmtForm.storage"
124
+ :hard-disks-for-boot-options="props.virtualHardwareHardDisksLocal"
125
+ :cd-dvd-drives-for-boot-options="
126
+ props.virtualHardwareCdDvdDrivesLocal
127
+ "
128
+ :networks-for-boot-options="props.virtualHardwareNetworksLocal"
129
+ :cd-dvd-drives="props.virtualHardwareCdDvdDrivesLocal"
130
+ :customize-hardware-submit="props.customizeHardwareSubmit"
131
+ :max-cpus="props.maxCpus"
132
+ :max-memory="props.maxMemory"
133
+ :cpu-models="props.cpuModels"
134
+ :selected-nav-item="props.selectedNavItem"
135
+ :nodes="props.nodes"
136
+ :files="props.files"
137
+ :networks-table="props.networksTable"
138
+ :error-validation-fields="props.errorValidationFields"
139
+ :get-datastore-table-func="props.getDatastoreTableFunc"
140
+ :datastore="props.datastore"
141
+ :is-datastore-loading="props.isDatastoreLoading"
142
+ :vm-cpu-help-text-second="props.vmCpuHelpTextSecond"
143
+ :passthrough-devices="props.passthroughDevices"
144
+ :mediated-devices="props.mediatedDevices"
145
+ :compute-resource="vmtForm.computeResource"
146
+ @change-boot-order="emits('change-boot-order', $event)"
147
+ @send-data="emits('change-customize-hardware', $event)"
148
+ @get-storage="emits('get-storage', $event)"
149
+ @get-folders-or-files="emits('get-folders-or-files', $event)"
150
+ @get-active-device-child="
151
+ emits('get-active-device-child', $event)
152
+ "
153
+ @show-datastore-child="emits('show-datastore-child', $event)"
154
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
155
+ @get-networks-table="emits('get-networks-table', $event)"
156
+ @get-pci-devices="emits('get-pci-devices')"
157
+ />
158
+ </div>
159
+ </template>
160
+ </ui-wizard-block>
161
+ <ui-wizard-block
162
+ v-if="selectedStep.id === props.dynamicSteps.readyComplete"
163
+ :sub-title-height="heightLast"
164
+ >
165
+ <template #subTitle>
166
+ <div ref="subTitleBlockLast">
167
+ <div class="subtitle-block">
168
+ <ui-wizard-subtitle
169
+ :sub-title="localization.vmt.wizardSubTitleLast"
170
+ />
171
+ </div>
172
+ </div>
173
+ </template>
174
+ <template #content>
175
+ <div class="mt-3 mb-4">
176
+ <common-ready-to-complete
177
+ v-if="selectedStep.id === props.dynamicSteps.readyComplete"
178
+ :data="props.readyCompleteTableInfo"
179
+ />
180
+ </div>
181
+ </template>
182
+ </ui-wizard-block>
183
+ </template>
184
+ </ui-wizard>
185
+ </template>
186
+
187
+ <script setup lang="ts">
188
+ import { useElementSize } from '@vueuse/core'
189
+ import type {
190
+ UI_I_DatastoreTableItem,
191
+ UI_I_FolderOrFileTreePayload,
192
+ } from '~/lib/models/store/storage/interfaces'
193
+ import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
194
+ import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
195
+ import type { UI_I_FileTreeNode } from '~/components/lib/models/interfaces'
196
+ import type {
197
+ UI_I_ArbitraryObject,
198
+ UI_I_Localization,
199
+ } from '~/lib/models/interfaces'
200
+ import type { UI_I_SendDataCustomizeHardware } from '~/components/common/vm/actions/common/customizeHardware/lib/models/interfaces'
201
+ import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
202
+ import type {
203
+ UI_I_SendDataNewCdDvdDrive,
204
+ UI_I_SendDataNewHardDisk,
205
+ UI_I_SendDataNewNetwork,
206
+ } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
207
+ import type { UI_I_ScheduleNewTasksForm } from '~/components/common/pages/scheduledTasks/modals/lib/models/interfaces'
208
+ import type { UI_T_SelectedNavItem } from '~/components/common/vm/actions/common/lib/models/types'
209
+ import type { UI_I_TableInfoItem } from '~/components/atoms/table/info/lib/models/interfaces'
210
+ import type { UI_T_ChangeBootOrder } from '~/components/common/vm/actions/lib/models/types'
211
+ import type { UI_T_Project } from '~/lib/models/types'
212
+ import type {
213
+ UI_I_MediatedDevice,
214
+ UI_I_PciDevice,
215
+ } from '~/lib/models/store/vm/interfaces'
216
+ import type { UI_I_WizardStep } from '~/components/atoms/wizard/lib/models/interfaces'
217
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
218
+ import type { UI_I_VmtForm } from '~/components/common/vmt/actions/add/lib/models/interfaces'
219
+ import type { I_DynamicSteps } from '~/components/common/vmt/actions/add/lib/models/interfaces'
220
+ import Wizard from '~/components/atoms/wizard/lib/utils/utils'
221
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
222
+
223
+ const vmtForm = defineModel<UI_I_VmtForm>('vmtForm')
224
+ const props = defineProps<{
225
+ alertMessages: string[]
226
+ title: string
227
+ wizard: Wizard
228
+ dynamicSteps: I_DynamicSteps
229
+ newTaskForm: UI_I_ScheduleNewTasksForm
230
+ selectedScheme: number[]
231
+ nameFormSubmit: Function | null
232
+ storageSubmit: Function | null
233
+ customizeHardwareSubmit: Function | null
234
+ isLoading: boolean
235
+ selectedNavItem: UI_T_SelectedNavItem
236
+ virtualHardwareCdDvdDrivesLocal: UI_I_SendDataNewCdDvdDrive[] | null
237
+ virtualHardwareNetworksLocal: UI_I_SendDataNewNetwork[] | null
238
+ virtualHardwareHardDisksLocal: UI_I_SendDataNewHardDisk[] | null
239
+ maxMemory: number
240
+ maxCpus: number
241
+ machineTypes: UI_I_OptionItem[]
242
+ cpuModels: UI_I_OptionItem[]
243
+ guestOsVersions: UI_I_ArbitraryObject<UI_I_OptionItem[]>
244
+ guestOsFamilies: UI_I_OptionItem[]
245
+ project: UI_T_Project
246
+ nodes: UI_I_FileTreeNode[]
247
+ files: UI_I_FileTreeNode[]
248
+ networksTable: UI_I_NetworkTableItem[]
249
+ datastore: UI_I_DatastoreTableItem[]
250
+ isDatastoreLoading: boolean
251
+ errorValidationFields: UI_I_ErrorValidationField[]
252
+ readyCompleteTableInfo: UI_I_TableInfoItem[]
253
+ vmCpuHelpTextSecond: string
254
+ getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
255
+ passthroughDevices: UI_I_PciDevice[]
256
+ mediatedDevices: UI_I_MediatedDevice[]
257
+ }>()
258
+
259
+ const emits = defineEmits<{
260
+ (event: 'change-steps', value: UI_I_WizardStep[]): void
261
+ (
262
+ event: 'check-name',
263
+ value: [[string, UI_I_TreeNode | null], (error: any) => void]
264
+ ): void
265
+ (event: 'get-storage', value: UI_I_TablePayload): void
266
+ (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
267
+ (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
268
+ (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
269
+ (event: 'remove-error-by-title', value: string): void
270
+ (event: 'get-networks-table', value: UI_I_TablePayload): void
271
+ (event: 'change-boot-order', value: UI_T_ChangeBootOrder): void
272
+ (
273
+ event: 'change-customize-hardware',
274
+ value: UI_I_SendDataCustomizeHardware
275
+ ): void
276
+ (event: 'get-pci-devices'): void
277
+ (event: 'change-storage', value: UI_I_DatastoreTableItem | null): void
278
+ (event: 'change-name', value: [string, UI_I_TreeNode | null]): void
279
+ (event: 'hide'): void
280
+ (event: 'finish'): void
281
+ }>()
282
+
283
+ const localization = computed<UI_I_Localization>(() => useLocal())
284
+
285
+ const texts = computed<UI_I_WizardTexts>(() => ({
286
+ cancel: localization.value.common.cancel,
287
+ back: localization.value.common.backCap,
288
+ processing: localization.value.common.processing,
289
+ next: localization.value.common.next,
290
+ finish: localization.value.common.create,
291
+ incompleteTitle: localization.value.common.incompleteProcess,
292
+ incompleteMessage: localization.value.common.incompleteProcessMessage,
293
+ incompleteCancel: localization.value.common.cancel,
294
+ incompleteLeave: localization.value.common.leave,
295
+ step: localization.value.common.step,
296
+ of: localization.value.common.of2,
297
+ }))
298
+
299
+ const subTitleBlock0 = ref<HTMLElement | null>(null)
300
+ const { height: height0 } = useElementSize(subTitleBlock0)
301
+
302
+ const subTitleBlock2 = ref<HTMLElement | null>(null)
303
+ const { height: height2 } = useElementSize(subTitleBlock2)
304
+
305
+ const subTitleBlock3 = ref<HTMLElement | null>(null)
306
+ const { height: height3 } = useElementSize(subTitleBlock3)
307
+
308
+ const subTitleBlockLast = ref<HTMLElement | null>(null)
309
+ const { height: heightLast } = useElementSize(subTitleBlockLast)
310
+
311
+ const isNameAlertWrapperEmpty = ref<boolean>(false)
312
+ const isStorageAlertWrapperEmpty = ref<boolean>(false)
313
+ </script>
314
+
315
+ <style scoped lang="scss">
316
+ .subtitle-block {
317
+ display: flex;
318
+ flex-direction: column;
319
+ border-bottom: 1px solid var(--wizard-line);
320
+ padding-bottom: 12px;
321
+ }
322
+ .select-block-wrap {
323
+ :deep(.customize-hardware) {
324
+ height: inherit;
325
+ max-height: 100%;
326
+ padding-bottom: 40px;
327
+
328
+ :deep(.tabs-wrapper) {
329
+ overflow-y: auto;
330
+ }
331
+ :deep(.tabs-wrapper),
332
+ :deep(.errors-alert),
333
+ :deep(.action-wrap) {
334
+ margin-right: 32px;
335
+ }
336
+ :deep(.virtual-hardware-content-block),
337
+ :deep(.vm-options) {
338
+ padding-right: 18px;
339
+ }
340
+ }
341
+ :deep(.details-list) {
342
+ margin-top: 0;
343
+ }
344
+ }
345
+ </style>