bfg-common 1.5.773 → 1.5.774

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 (154) 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/components/atoms/TheIcon3.vue +50 -50
  7. package/components/atoms/collapse/CollapseNav.vue +170 -170
  8. package/components/atoms/perPage/PerPage.vue +58 -58
  9. package/components/atoms/table/dataGrid/DataGrid.vue +19 -4
  10. package/components/atoms/table/dataGrid/DataGridPagination.vue +97 -97
  11. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  12. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  13. package/components/common/backup/storage/actions/add/lib/utils.ts +51 -51
  14. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  15. package/components/common/configure/advancedSystemSettings/AdvancedSystemSettings.vue +49 -0
  16. package/components/common/configure/advancedSystemSettings/modals/edit/Edit.vue +55 -0
  17. package/components/common/configure/advancedSystemSettings/modals/edit/New.vue +37 -0
  18. package/components/common/configure/advancedSystemSettings/modals/edit/Old.vue +46 -0
  19. package/components/common/configure/advancedSystemSettings/tableView/TableView.vue +30 -0
  20. package/components/common/configure/advancedSystemSettings/tableView/new/New.vue +193 -0
  21. package/components/common/configure/advancedSystemSettings/tableView/new/lib/config/hostTable.ts +308 -0
  22. package/components/common/configure/advancedSystemSettings/tableView/old/Old.vue +128 -0
  23. package/components/common/configure/advancedSystemSettings/tableView/old/lib/config/table.ts +93 -0
  24. package/components/common/configure/advancedSystemSettings/tableView/old/lib/config/tableKeys.ts +9 -0
  25. package/components/common/configure/advancedSystemSettings/tableView/old/lib/models/types.ts +5 -0
  26. package/components/common/configure/advancedSystemSettings/tools/New.vue +5 -0
  27. package/components/common/configure/advancedSystemSettings/tools/Old.vue +28 -0
  28. package/components/common/configure/advancedSystemSettings/tools/Tools.vue +28 -0
  29. package/components/common/configure/securityProfile/SecurityProfile.vue +28 -0
  30. package/components/common/configure/securityProfile/lockdownMode/LockdownMode.vue +112 -0
  31. package/components/common/configure/securityProfile/lockdownMode/lib/utils/constructData.ts +27 -0
  32. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/LockdownModeEdit.vue +61 -0
  33. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/New.vue +5 -0
  34. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/Old.vue +109 -0
  35. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/exceptionUsers/ExceptionUsers.vue +28 -0
  36. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/exceptionUsers/New.vue +5 -0
  37. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/exceptionUsers/old/Old.vue +180 -0
  38. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/exceptionUsers/old/lib/config/table.ts +64 -0
  39. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/exceptionUsers/old/lib/config/tableKeys.ts +6 -0
  40. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/exceptionUsers/old/lib/models/types.ts +1 -0
  41. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/lib/config/tabs.ts +19 -0
  42. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/lockdownMode/LockdownMode.vue +22 -0
  43. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/lockdownMode/New.vue +5 -0
  44. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/lockdownMode/Old.vue +76 -0
  45. package/components/common/configure/securityProfile/lockdownMode/tools/New.vue +5 -0
  46. package/components/common/configure/securityProfile/lockdownMode/tools/Old.vue +30 -0
  47. package/components/common/configure/securityProfile/lockdownMode/tools/Tools.vue +29 -0
  48. package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
  49. package/components/common/diagramMain/port/Port.vue +580 -580
  50. package/components/common/layout/console/Console.vue +70 -70
  51. package/components/common/layout/theHeader/userMenu/modals/preferences/lib/models/types.ts +7 -7
  52. package/components/common/layout/theHeader/userMenu/modals/preferences/view/New.vue +64 -64
  53. package/components/common/pages/backups/DetailView.vue +52 -52
  54. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  55. package/components/common/pages/backups/modals/Modals.vue +243 -243
  56. package/components/common/pages/backups/modals/createBackup/configuration/backupWindow/BackupWindow.vue +29 -29
  57. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/MaxBandwidth.vue +69 -69
  58. package/components/common/pages/backups/modals/createBackup/configuration/strategy/Strategy.vue +38 -38
  59. package/components/common/pages/backups/modals/createBackup/lib/models/interfaces.ts +8 -8
  60. package/components/common/pages/backups/modals/lib/config/restore.ts +116 -116
  61. package/components/common/pages/backups/modals/lib/models/interfaces.ts +187 -187
  62. package/components/common/pages/backups/modals/restore/Restore.vue +302 -302
  63. package/components/common/pages/backups/modals/restore/disks/Disks.vue +50 -50
  64. package/components/common/pages/backups/modals/restore/lib/config/readyToCompleteOptions.ts +94 -94
  65. package/components/common/pages/backups/modals/restore/lib/config/steps.ts +130 -130
  66. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  67. package/components/common/pages/backups/modals/restore/types/New.vue +95 -95
  68. package/components/common/pages/backups/modals/restore/types/Old.vue +62 -62
  69. package/components/common/pages/backups/modals/restore/types/Types.vue +31 -31
  70. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  71. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  72. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  73. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  74. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  75. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  76. package/components/common/pages/scheduledTasks/table/Table.vue +3 -11
  77. package/components/common/pages/scheduledTasks/table/expandDetails/ExpandDetails.vue +30 -0
  78. package/components/common/pages/scheduledTasks/table/expandDetails/New.vue +61 -0
  79. package/components/common/pages/scheduledTasks/table/{detailsList/DetailsList.vue → expandDetails/Old.vue} +7 -4
  80. package/components/common/pages/scheduledTasks/table/{detailsList/Table.vue → expandDetails/historyRun/HistoryRun.vue} +9 -5
  81. package/components/common/pages/scheduledTasks/table/{detailsList → expandDetails/historyRun}/lib/config/historyRunsTable.ts +4 -2
  82. package/components/common/pages/scheduledTasks/table/{detailsList → expandDetails/historyRun}/lib/config/tableKeys.ts +1 -1
  83. package/components/common/pages/scheduledTasks/table/{detailsList/lib/config/tasksRowDetails.ts → expandDetails/lib/config/expandDetails.ts} +3 -1
  84. package/components/common/pages/scheduledTasks/table/lib/config/scheduledTasksTable.ts +3 -0
  85. package/components/common/pages/tasks/Tasks.vue +125 -125
  86. package/components/common/pages/tasks/table/Table.vue +373 -373
  87. package/components/common/pages/tasks/table/lib/config/config.ts +279 -279
  88. package/components/common/pages/tasks/table/lib/models/interfaces.ts +9 -9
  89. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  90. package/components/common/select/radio/RadioGroup.vue +137 -137
  91. package/components/common/spiceConsole/Drawer.vue +420 -420
  92. package/components/common/spiceConsole/SpiceConsole.vue +184 -184
  93. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  94. package/components/common/tools/Actions.vue +207 -207
  95. package/components/common/treeView/TreeView.vue +52 -52
  96. package/components/common/vm/actions/clone/lib/config/steps.ts +295 -295
  97. package/components/common/vm/actions/clone/new/New.vue +438 -438
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +283 -283
  100. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +156 -156
  101. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  102. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  103. package/components/common/vm/actions/common/select/options/New.vue +264 -264
  104. package/components/common/vm/actions/common/select/options/Options.vue +58 -58
  105. package/components/common/vm/actions/common/select/storage/Old.vue +125 -125
  106. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  107. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  108. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  109. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  110. package/components/common/wizards/common/compatibility/Compatibility.vue +35 -35
  111. package/components/common/wizards/common/steps/name/Name.vue +178 -178
  112. package/components/common/wizards/common/steps/name/New.vue +221 -221
  113. package/components/common/wizards/common/steps/name/Old.vue +121 -121
  114. package/components/common/wizards/common/steps/name/lib/models/interfaces.ts +4 -4
  115. package/components/common/wizards/common/steps/name/location/New.vue +40 -40
  116. package/components/common/wizards/datastore/add/Add.vue +227 -227
  117. package/components/common/wizards/datastore/add/lib/utils.ts +85 -85
  118. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  119. package/composables/useAppVersion.ts +21 -21
  120. package/composables/useBrowse.ts +24 -24
  121. package/composables/useLocal.ts +6 -6
  122. package/composables/useLocalCommon.ts +39 -39
  123. package/lib/models/types.ts +59 -59
  124. package/package.json +1 -1
  125. package/plugins/console.ts +21 -21
  126. package/plugins/mouse.ts +21 -21
  127. package/plugins/panelStates.ts +70 -70
  128. package/plugins/text.ts +59 -59
  129. package/public/spice-console/application/clientgui.js +854 -854
  130. package/public/spice-console/application/packetfactory.js +211 -211
  131. package/public/spice-console/application/virtualmouse.js +147 -147
  132. package/public/spice-console/lib/images/bitmap.js +203 -203
  133. package/public/spice-console/network/spicechannel.js +440 -440
  134. package/public/spice-console/process/cursorprocess.js +128 -128
  135. package/public/spice-console/process/inputprocess.js +227 -227
  136. package/public/spice-console/process/mainprocess.js +212 -212
  137. package/public/spice-console/run.js +210 -210
  138. package/store/inventory/modules/configure/advancedSystemSettings/actions.ts +122 -0
  139. package/store/inventory/modules/configure/advancedSystemSettings/getters.ts +9 -0
  140. package/store/inventory/modules/configure/advancedSystemSettings/lib/models/interfaces.ts +11 -0
  141. package/store/inventory/modules/configure/advancedSystemSettings/mutations.ts +12 -0
  142. package/store/inventory/modules/configure/advancedSystemSettings/state.ts +9 -0
  143. package/store/inventory/modules/configure/advancedSystemSettings/store.ts +12 -0
  144. package/store/inventory/modules/configure/securityProfile/actions.ts +58 -0
  145. package/store/inventory/modules/configure/securityProfile/getters.ts +10 -0
  146. package/store/inventory/modules/configure/securityProfile/lib/models/interfaces.ts +16 -0
  147. package/store/inventory/modules/configure/securityProfile/mutations.ts +13 -0
  148. package/store/inventory/modules/configure/securityProfile/state.ts +7 -0
  149. package/store/inventory/modules/configure/securityProfile/store.ts +12 -0
  150. package/store/main/mutations.ts +7 -7
  151. package/store/main/state.ts +7 -7
  152. package/store/tasks/mappers/recentTasks.ts +123 -123
  153. package/store/tasks/mutations.ts +82 -82
  154. /package/components/common/pages/scheduledTasks/table/{detailsList → expandDetails/historyRun}/lib/models/types.ts +0 -0
@@ -1,438 +1,438 @@
1
- <template>
2
- <ui-wizard
3
- :steps="props.wizard.steps"
4
- :selected-scheme="props.selectedScheme"
5
- :is-loading="props.wizard.wizardLoader.status"
6
- :title="props.title"
7
- :texts="texts"
8
- test-id="clone-exist-vm"
9
- show
10
- @change-steps="onChangeSteps"
11
- @hide="onHideModal"
12
- @submit="onClone"
13
- >
14
- <template #content="{ selectedStep }">
15
- <ui-wizard-block
16
- v-if="selectedStep.id === props.dynamicSteps.scheduledTasks"
17
- :sub-title-height="height0"
18
- >
19
- <template #subTitle>
20
- <div ref="subTitleBlock0">
21
- <div class="subtitle-block flex flex-col">
22
- <ui-wizard-subtitle :sub-title="selectedStep.subTitle" />
23
- </div>
24
- </div>
25
- </template>
26
- <template #content>
27
- <common-pages-scheduled-tasks-modals-common-new-task-form
28
- v-model="schedulerTaskForm"
29
- :target="props.selectedVirtualMachine"
30
- class="new-task-form"
31
- />
32
- </template>
33
- </ui-wizard-block>
34
-
35
- <ui-wizard-block
36
- v-if="
37
- selectedStep.id === props.dynamicSteps.selectName ||
38
- selectedStep.id === props.dynamicSteps.selectNameFolder
39
- "
40
- :sub-title-height="height1"
41
- >
42
- <template #subTitle>
43
- <div ref="subTitleBlock1">
44
- <div class="subtitle-block flex flex-col">
45
- <div
46
- id="name-alert-wrapper"
47
- :class="[{ 'mb-4': !isNameAlertWrapperEmpty }]"
48
- ></div>
49
- <ui-wizard-subtitle :sub-title="selectNameStepSubtitle" />
50
- </div>
51
- </div>
52
- </template>
53
- <template #content>
54
- <common-wizards-common-steps-name
55
- v-model:name="model.name"
56
- v-model:location="location"
57
- :show="
58
- selectedStep.id === props.dynamicSteps.selectName ||
59
- selectedStep.id === props.dynamicSteps.selectNameFolder
60
- "
61
- :name-form-submit="props.nameFormSubmit"
62
- :name-request-url="props.nameRequestUrl"
63
- :has-location="props.project === 'sphere'"
64
- :location-nodes="props.locationNodes"
65
- :allowed-location-kinds="props.allowedLocationKinds"
66
- :location-description="props.locationDescription"
67
- :validation-description="
68
- localization.common.enterValidLocationVirtualMachine
69
- "
70
- :name-exist-validation-description="
71
- localization.common.vmNameExistInSelectedLocation
72
- "
73
- :test-ids="props.nameTestIds"
74
- @submit="emits('change-name', $event)"
75
- @has-errors="isNameAlertWrapperEmpty = $event"
76
- />
77
- </template>
78
- </ui-wizard-block>
79
-
80
- <ui-wizard-block
81
- v-if="selectedStep.id === props.dynamicSteps.selectStorage"
82
- :sub-title-height="height2"
83
- >
84
- <template #subTitle>
85
- <div ref="subTitleBlock2">
86
- <div class="subtitle-block flex flex-col">
87
- <ui-wizard-subtitle
88
- :sub-title="
89
- localization.common.selectStorageConfigurationDiskFiles2
90
- "
91
- />
92
- </div>
93
- </div>
94
- </template>
95
- <template #content>
96
- <common-vm-actions-common-select-storage
97
- :storage-submit="props.storageSubmit"
98
- :datastore="props.datastore"
99
- :is-datastore-loading="props.isDatastoreLoading"
100
- :storage="model.storage"
101
- :get-datastore-table-func="props.getDatastoreTableFunc"
102
- hide-alert
103
- @change-storage="emits('change-storage', $event)"
104
- />
105
- </template>
106
- </ui-wizard-block>
107
-
108
- <ui-wizard-block
109
- v-if="selectedStep.id === props.dynamicSteps.selectOptions"
110
- :sub-title-height="height3"
111
- >
112
- <template #subTitle>
113
- <div ref="subTitleBlock3">
114
- <div class="subtitle-block flex flex-col">
115
- <ui-wizard-subtitle
116
- :sub-title="localization.vmWizard.selectAdvancedOptionsCloning"
117
- />
118
- </div>
119
- </div>
120
- </template>
121
- <template #content>
122
- <common-vm-actions-common-select-options
123
- :is-new-vm-from-template="props.isNewVmFromTemplate"
124
- :project="props.project"
125
- @change="emits('change-select-options', $event)"
126
- @change-count="emits('change-clone-count', $event)"
127
- />
128
- </template>
129
- </ui-wizard-block>
130
-
131
- <ui-wizard-block
132
- v-if="selectedStep.id === props.dynamicSteps.selectGuestOSMachineType"
133
- :sub-title-height="height4"
134
- >
135
- <template #subTitle>
136
- <div ref="subTitleBlock4">
137
- <div class="subtitle-block flex flex-col">
138
- <ui-wizard-subtitle
139
- :sub-title="
140
- localization.common
141
- .chooseGuestOSInstalledVmAndMachineTypeUsedCreateVm
142
- "
143
- />
144
- </div>
145
- </div>
146
- </template>
147
- <template #content>
148
- <common-vm-actions-common-select-os
149
- v-model:guest-os-family="model.guest_os_family"
150
- v-model:guest-os-version="model.guest_os_version"
151
- v-model:machine-type="model.machine_type"
152
- :families-options="props.guestOsFamilies"
153
- :versions-options="props.guestOsVersions"
154
- :machine-types-options="props.machineTypes"
155
- :error-validation-fields="props.errorValidationFields"
156
- @remove-error-by-title="emits('remove-error-by-title', $event)"
157
- />
158
- </template>
159
- </ui-wizard-block>
160
-
161
- <ui-wizard-block
162
- v-if="selectedStep.id === props.dynamicSteps.customizeHardware"
163
- >
164
- <template #content>
165
- <common-vm-actions-common-customize-hardware
166
- v-model="model"
167
- :storage="model.storage"
168
- :customize-hardware-submit="props.customizeHardwareSubmit"
169
- :max-memory="props.maxMemory"
170
- :cpu-models="props.cpuModels"
171
- :selected-nav-item="props.selectedNavItem"
172
- :nodes="props.nodes"
173
- :files="props.files"
174
- :networks-table="props.networksTable"
175
- :error-validation-fields="props.errorValidationFields"
176
- :vm-cpu-help-text-second="props.vmCpuHelpTextSecond"
177
- :passthrough-devices="props.passthroughDevices"
178
- :mediated-devices="props.mediatedDevices"
179
- :get-datastore-table-func="props.getDatastoreTableFunc"
180
- :datastore="props.datastore"
181
- :is-datastore-loading="props.isDatastoreLoading"
182
- :project="props.project"
183
- is-clone
184
- @get-storage="emits('get-storage', $event)"
185
- @get-folders-or-files="emits('get-folders-or-files', $event)"
186
- @get-active-device-child="emits('get-active-device-child', $event)"
187
- @show-datastore-child="emits('show-datastore-child', $event)"
188
- @get-networks-table="emits('get-networks-table', $event)"
189
- @get-pci-devices="emits('get-pci-devices')"
190
- />
191
- </template>
192
- </ui-wizard-block>
193
-
194
- <ui-wizard-block
195
- v-if="selectedStep.id === props.dynamicSteps.selectComputeResource"
196
- :sub-title-height="height5"
197
- >
198
- <template #subTitle>
199
- <div ref="subTitleBlock5">
200
- <div class="subtitle-block">
201
- <ui-alert
202
- v-if="props.computeResourceAlert.length"
203
- :messages="props.computeResourceAlert"
204
- test-id="computed-resource-alert"
205
- type="error"
206
- size="md"
207
- class="subtitle-block__alert"
208
- />
209
- <ui-wizard-subtitle
210
- :sub-title="
211
- localization.vmWizard
212
- .selectDestinationComputeResourceForThisOperation
213
- "
214
- />
215
- </div>
216
- </div>
217
- </template>
218
- <template #content>
219
- <common-wizards-common-steps-compute-resource
220
- v-if="props.isSphere"
221
- v-show="
222
- selectedStep.id === props.dynamicSteps.selectComputeResource
223
- "
224
- v-model="computeResource"
225
- :nodes="computeResourceTreeLocal"
226
- :alert-messages="props.computeResourceAlert"
227
- :is-loading="props.isLoadingComputeTree"
228
- :compatibility-text="props.compatibilityText"
229
- />
230
- </template>
231
- </ui-wizard-block>
232
-
233
- <ui-wizard-block
234
- v-if="selectedStep.id === props.dynamicSteps.readyComplete"
235
- :sub-title-height="heightReadyComplete"
236
- >
237
- <template #subTitle>
238
- <div ref="subTitleBlockReadyComplete">
239
- <div class="subtitle-block">
240
- <ui-wizard-subtitle
241
- :sub-title="localization.vmWizard.lastCreateSubtitle"
242
- />
243
- </div>
244
- </div>
245
- </template>
246
- <template #content>
247
- <div class="select-block-wrap h-full flex flex-col mt-3">
248
- <common-ready-to-complete :data="props.readyCompleteTableInfo" />
249
- <div
250
- class="vm-hardware-version-wrap justify-end flex flex-1 mt-4 pb-4"
251
- >
252
- <span class="vm-hardware-version">{{
253
- props.compatibilityInfo
254
- }}</span>
255
- </div>
256
- </div>
257
- </template>
258
- </ui-wizard-block>
259
- </template>
260
- </ui-wizard>
261
- </template>
262
-
263
- <script setup lang="ts">
264
- import { useElementSize } from '@vueuse/core'
265
- import type {
266
- UI_I_WizardStep,
267
- UI_I_WizardTexts,
268
- } from '~/node_modules/bfg-uikit/components/ui/wizard/lib/models/interfaces'
269
- import type Wizard from '~/node_modules/bfg-uikit/components/ui/wizard/lib/utils/utils'
270
- import type {
271
- UI_I_ArbitraryObject,
272
- UI_I_Localization,
273
- } from '~/lib/models/interfaces'
274
- import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
275
- import type { UI_I_ScheduleNewTasksForm } from '~/components/common/pages/scheduledTasks/modals/lib/models/interfaces'
276
- import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
277
- import type { UI_I_NameTestIds } from '~/components/common/wizards/common/steps/name/lib/models/interfaces'
278
- import type { UI_T_Project } from '~/lib/models/types'
279
- import type { UI_I_CreateVmData } from '~/components/common/vm/actions/common/lib/models/interfaces'
280
- import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
281
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
282
- import type { UI_T_SelectedNavItem } from '~/components/common/vm/actions/common/lib/models/types'
283
- import type { UI_I_FileTreeNode } from '~/components/lib/models/interfaces'
284
- import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
285
- import type {
286
- UI_I_MediatedDevice,
287
- UI_I_PciDevice,
288
- } from '~/lib/models/store/vm/interfaces'
289
- import type {
290
- UI_I_DatastoreTableItem,
291
- UI_I_FolderOrFileTreePayload,
292
- } from '~/lib/models/store/storage/interfaces'
293
- import type { UI_I_TableInfoItem } from '~/components/atoms/table/info/lib/models/interfaces'
294
- import type { UI_T_CompatibilityStatus } from '~/components/common/wizards/common/compatibility/lib/models/types'
295
-
296
- const model = defineModel<UI_I_CreateVmData>({ required: true })
297
-
298
- const schedulerTaskForm = defineModel<UI_I_ScheduleNewTasksForm>(
299
- 'scheduler-task-form'
300
- )
301
- const computeResource = defineModel<UI_I_TreeNode | undefined>(
302
- 'compute-resource'
303
- )
304
- const location = defineModel<UI_I_TreeNode | null>('location')
305
- const props = withDefaults(
306
- defineProps<{
307
- project: UI_T_Project
308
- nodes: UI_I_FileTreeNode[]
309
- files: UI_I_FileTreeNode[]
310
- networksTable: UI_I_NetworkTableItem[]
311
- datastore: UI_I_DatastoreTableItem[]
312
- isDatastoreLoading: boolean
313
- errorValidationFields: UI_I_ErrorValidationField[]
314
- readyCompleteTableInfo: UI_I_TableInfoItem[]
315
- vmCpuHelpTextSecond: string
316
- getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
317
- passthroughDevices: UI_I_PciDevice[]
318
- mediatedDevices: UI_I_MediatedDevice[]
319
- nameRequestUrl: string
320
- wizard: Wizard
321
- selectedScheme: number[]
322
- selectedVirtualMachine: string
323
- isNewVmFromTemplate: boolean | undefined
324
- computeResourceTree: UI_I_TreeNode[] | undefined // для сферы
325
- locationNodes: UI_I_TreeNode[] | undefined // для сферы
326
- title: string
327
- nameFormSubmit: null | Function
328
- storageSubmit: null | Function
329
- customizeHardwareSubmit: null | Function
330
- selectedNavItem: UI_T_SelectedNavItem
331
- allowedLocationKinds: number[]
332
- isSphere: boolean
333
- locationDescription: string
334
- nameTestIds: UI_I_NameTestIds
335
- guestOsFamilies: UI_I_OptionItem[]
336
- guestOsVersions: UI_I_ArbitraryObject<UI_I_OptionItem[]>
337
- machineTypes: UI_I_OptionItem[]
338
- maxMemory: number
339
- cpuModels: UI_I_OptionItem[]
340
- dynamicSteps: UI_I_ArbitraryObject<number>
341
- isLoadingComputeTree?: boolean // для сферы
342
- computeResourceAlert?: string[] // для сферы
343
- compatibilityText?: [UI_T_CompatibilityStatus, string] // для сферы
344
- }>(),
345
- {
346
- isLoadingComputeTree: false,
347
- computeResourceAlert: () => [],
348
- compatibilityText: () => ['none', ''],
349
- }
350
- )
351
-
352
- const emits = defineEmits<{
353
- (event: 'get-storage', value: UI_I_TablePayload): void
354
- (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
355
- (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
356
- (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
357
- (event: 'remove-error-by-title', value: string): void
358
- (event: 'get-networks-table', value: UI_I_TablePayload): void
359
- (event: 'get-pci-devices'): void
360
- (event: 'change-steps', value: UI_I_WizardStep[]): void
361
- (event: 'change-name', value: [string, UI_I_TreeNode | null]): void
362
- (event: 'change-storage', value: UI_I_DatastoreTableItem | null): void
363
- (event: 'change-select-options', value: string[]): void
364
- (event: 'change-clone-count', value: number): void
365
- (event: 'hide'): void
366
- (event: 'finish'): void
367
- }>()
368
-
369
- const localization = computed<UI_I_Localization>(() => useLocal())
370
-
371
- const computeResourceTreeLocal = computed<UI_I_TreeNode[]>(() => {
372
- // для сферы
373
- return props.computeResourceTree || []
374
- })
375
-
376
- const texts = computed<UI_I_WizardTexts>(() => ({
377
- cancel: localization.value.common.cancel,
378
- back: localization.value.common.backCap,
379
- processing: localization.value.common.processing,
380
- next: localization.value.common.next,
381
- finish: props.isNewVmFromTemplate
382
- ? localization.value.common.create
383
- : localization.value.common.clone,
384
- incompleteTitle: localization.value.common.incompleteProcess,
385
- incompleteMessage: localization.value.common.incompleteProcessMessage,
386
- incompleteCancel: localization.value.common.cancel,
387
- incompleteLeave: localization.value.common.leave,
388
- step: localization.value.common.step,
389
- of: localization.value.common.of2,
390
- }))
391
-
392
- const subTitleBlock0 = ref<HTMLElement | null>(null)
393
- const { height: height0 } = useElementSize(subTitleBlock0)
394
-
395
- const subTitleBlock1 = ref<HTMLElement | null>(null)
396
- const { height: height1 } = useElementSize(subTitleBlock1)
397
-
398
- const subTitleBlock2 = ref<HTMLElement | null>(null)
399
- const { height: height2 } = useElementSize(subTitleBlock2)
400
-
401
- const subTitleBlock3 = ref<HTMLElement | null>(null)
402
- const { height: height3 } = useElementSize(subTitleBlock3)
403
-
404
- const subTitleBlock4 = ref<HTMLElement | null>(null)
405
- const { height: height4 } = useElementSize(subTitleBlock4)
406
-
407
- const subTitleBlock5 = ref<HTMLElement | null>(null)
408
- const { height: height5 } = useElementSize(subTitleBlock5)
409
-
410
- const subTitleBlockReadyComplete = ref<HTMLElement | null>(null)
411
- const { height: heightReadyComplete } = useElementSize(
412
- subTitleBlockReadyComplete
413
- )
414
-
415
- const isNameAlertWrapperEmpty = ref<boolean>(false)
416
-
417
- const selectNameStepSubtitle = computed<string>(() =>
418
- props.project === 'sphere'
419
- ? localization.value.vmWizard.specifyUniqueNameAndTargetLocationForVm
420
- : localization.value.common.specifyUniqueNameForVm
421
- )
422
-
423
- const onChangeSteps = async (value: UI_I_WizardStep[]): Promise<void> =>
424
- emits('change-steps', value)
425
-
426
- const onHideModal = (): void => emits('hide')
427
- const onClone = (): void => emits('finish')
428
- </script>
429
-
430
- <style scoped lang="scss">
431
- .subtitle-block {
432
- display: flex;
433
- flex-direction: column;
434
- row-gap: 16px;
435
- border-bottom: 1px solid var(--wizard-line);
436
- padding-bottom: 12px;
437
- }
438
- </style>
1
+ <template>
2
+ <ui-wizard
3
+ :steps="props.wizard.steps"
4
+ :selected-scheme="props.selectedScheme"
5
+ :is-loading="props.wizard.wizardLoader.status"
6
+ :title="props.title"
7
+ :texts="texts"
8
+ test-id="clone-exist-vm"
9
+ show
10
+ @change-steps="onChangeSteps"
11
+ @hide="onHideModal"
12
+ @submit="onClone"
13
+ >
14
+ <template #content="{ selectedStep }">
15
+ <ui-wizard-block
16
+ v-if="selectedStep.id === props.dynamicSteps.scheduledTasks"
17
+ :sub-title-height="height0"
18
+ >
19
+ <template #subTitle>
20
+ <div ref="subTitleBlock0">
21
+ <div class="subtitle-block flex flex-col">
22
+ <ui-wizard-subtitle :sub-title="selectedStep.subTitle" />
23
+ </div>
24
+ </div>
25
+ </template>
26
+ <template #content>
27
+ <common-pages-scheduled-tasks-modals-common-new-task-form
28
+ v-model="schedulerTaskForm"
29
+ :target="props.selectedVirtualMachine"
30
+ class="new-task-form"
31
+ />
32
+ </template>
33
+ </ui-wizard-block>
34
+
35
+ <ui-wizard-block
36
+ v-if="
37
+ selectedStep.id === props.dynamicSteps.selectName ||
38
+ selectedStep.id === props.dynamicSteps.selectNameFolder
39
+ "
40
+ :sub-title-height="height1"
41
+ >
42
+ <template #subTitle>
43
+ <div ref="subTitleBlock1">
44
+ <div class="subtitle-block flex flex-col">
45
+ <div
46
+ id="name-alert-wrapper"
47
+ :class="[{ 'mb-4': !isNameAlertWrapperEmpty }]"
48
+ ></div>
49
+ <ui-wizard-subtitle :sub-title="selectNameStepSubtitle" />
50
+ </div>
51
+ </div>
52
+ </template>
53
+ <template #content>
54
+ <common-wizards-common-steps-name
55
+ v-model:name="model.name"
56
+ v-model:location="location"
57
+ :show="
58
+ selectedStep.id === props.dynamicSteps.selectName ||
59
+ selectedStep.id === props.dynamicSteps.selectNameFolder
60
+ "
61
+ :name-form-submit="props.nameFormSubmit"
62
+ :name-request-url="props.nameRequestUrl"
63
+ :has-location="props.project === 'sphere'"
64
+ :location-nodes="props.locationNodes"
65
+ :allowed-location-kinds="props.allowedLocationKinds"
66
+ :location-description="props.locationDescription"
67
+ :validation-description="
68
+ localization.common.enterValidLocationVirtualMachine
69
+ "
70
+ :name-exist-validation-description="
71
+ localization.common.vmNameExistInSelectedLocation
72
+ "
73
+ :test-ids="props.nameTestIds"
74
+ @submit="emits('change-name', $event)"
75
+ @has-errors="isNameAlertWrapperEmpty = $event"
76
+ />
77
+ </template>
78
+ </ui-wizard-block>
79
+
80
+ <ui-wizard-block
81
+ v-if="selectedStep.id === props.dynamicSteps.selectStorage"
82
+ :sub-title-height="height2"
83
+ >
84
+ <template #subTitle>
85
+ <div ref="subTitleBlock2">
86
+ <div class="subtitle-block flex flex-col">
87
+ <ui-wizard-subtitle
88
+ :sub-title="
89
+ localization.common.selectStorageConfigurationDiskFiles2
90
+ "
91
+ />
92
+ </div>
93
+ </div>
94
+ </template>
95
+ <template #content>
96
+ <common-vm-actions-common-select-storage
97
+ :storage-submit="props.storageSubmit"
98
+ :datastore="props.datastore"
99
+ :is-datastore-loading="props.isDatastoreLoading"
100
+ :storage="model.storage"
101
+ :get-datastore-table-func="props.getDatastoreTableFunc"
102
+ hide-alert
103
+ @change-storage="emits('change-storage', $event)"
104
+ />
105
+ </template>
106
+ </ui-wizard-block>
107
+
108
+ <ui-wizard-block
109
+ v-if="selectedStep.id === props.dynamicSteps.selectOptions"
110
+ :sub-title-height="height3"
111
+ >
112
+ <template #subTitle>
113
+ <div ref="subTitleBlock3">
114
+ <div class="subtitle-block flex flex-col">
115
+ <ui-wizard-subtitle
116
+ :sub-title="localization.vmWizard.selectAdvancedOptionsCloning"
117
+ />
118
+ </div>
119
+ </div>
120
+ </template>
121
+ <template #content>
122
+ <common-vm-actions-common-select-options
123
+ :is-new-vm-from-template="props.isNewVmFromTemplate"
124
+ :project="props.project"
125
+ @change="emits('change-select-options', $event)"
126
+ @change-count="emits('change-clone-count', $event)"
127
+ />
128
+ </template>
129
+ </ui-wizard-block>
130
+
131
+ <ui-wizard-block
132
+ v-if="selectedStep.id === props.dynamicSteps.selectGuestOSMachineType"
133
+ :sub-title-height="height4"
134
+ >
135
+ <template #subTitle>
136
+ <div ref="subTitleBlock4">
137
+ <div class="subtitle-block flex flex-col">
138
+ <ui-wizard-subtitle
139
+ :sub-title="
140
+ localization.common
141
+ .chooseGuestOSInstalledVmAndMachineTypeUsedCreateVm
142
+ "
143
+ />
144
+ </div>
145
+ </div>
146
+ </template>
147
+ <template #content>
148
+ <common-vm-actions-common-select-os
149
+ v-model:guest-os-family="model.guest_os_family"
150
+ v-model:guest-os-version="model.guest_os_version"
151
+ v-model:machine-type="model.machine_type"
152
+ :families-options="props.guestOsFamilies"
153
+ :versions-options="props.guestOsVersions"
154
+ :machine-types-options="props.machineTypes"
155
+ :error-validation-fields="props.errorValidationFields"
156
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
157
+ />
158
+ </template>
159
+ </ui-wizard-block>
160
+
161
+ <ui-wizard-block
162
+ v-if="selectedStep.id === props.dynamicSteps.customizeHardware"
163
+ >
164
+ <template #content>
165
+ <common-vm-actions-common-customize-hardware
166
+ v-model="model"
167
+ :storage="model.storage"
168
+ :customize-hardware-submit="props.customizeHardwareSubmit"
169
+ :max-memory="props.maxMemory"
170
+ :cpu-models="props.cpuModels"
171
+ :selected-nav-item="props.selectedNavItem"
172
+ :nodes="props.nodes"
173
+ :files="props.files"
174
+ :networks-table="props.networksTable"
175
+ :error-validation-fields="props.errorValidationFields"
176
+ :vm-cpu-help-text-second="props.vmCpuHelpTextSecond"
177
+ :passthrough-devices="props.passthroughDevices"
178
+ :mediated-devices="props.mediatedDevices"
179
+ :get-datastore-table-func="props.getDatastoreTableFunc"
180
+ :datastore="props.datastore"
181
+ :is-datastore-loading="props.isDatastoreLoading"
182
+ :project="props.project"
183
+ is-clone
184
+ @get-storage="emits('get-storage', $event)"
185
+ @get-folders-or-files="emits('get-folders-or-files', $event)"
186
+ @get-active-device-child="emits('get-active-device-child', $event)"
187
+ @show-datastore-child="emits('show-datastore-child', $event)"
188
+ @get-networks-table="emits('get-networks-table', $event)"
189
+ @get-pci-devices="emits('get-pci-devices')"
190
+ />
191
+ </template>
192
+ </ui-wizard-block>
193
+
194
+ <ui-wizard-block
195
+ v-if="selectedStep.id === props.dynamicSteps.selectComputeResource"
196
+ :sub-title-height="height5"
197
+ >
198
+ <template #subTitle>
199
+ <div ref="subTitleBlock5">
200
+ <div class="subtitle-block">
201
+ <ui-alert
202
+ v-if="props.computeResourceAlert.length"
203
+ :messages="props.computeResourceAlert"
204
+ test-id="computed-resource-alert"
205
+ type="error"
206
+ size="md"
207
+ class="subtitle-block__alert"
208
+ />
209
+ <ui-wizard-subtitle
210
+ :sub-title="
211
+ localization.vmWizard
212
+ .selectDestinationComputeResourceForThisOperation
213
+ "
214
+ />
215
+ </div>
216
+ </div>
217
+ </template>
218
+ <template #content>
219
+ <common-wizards-common-steps-compute-resource
220
+ v-if="props.isSphere"
221
+ v-show="
222
+ selectedStep.id === props.dynamicSteps.selectComputeResource
223
+ "
224
+ v-model="computeResource"
225
+ :nodes="computeResourceTreeLocal"
226
+ :alert-messages="props.computeResourceAlert"
227
+ :is-loading="props.isLoadingComputeTree"
228
+ :compatibility-text="props.compatibilityText"
229
+ />
230
+ </template>
231
+ </ui-wizard-block>
232
+
233
+ <ui-wizard-block
234
+ v-if="selectedStep.id === props.dynamicSteps.readyComplete"
235
+ :sub-title-height="heightReadyComplete"
236
+ >
237
+ <template #subTitle>
238
+ <div ref="subTitleBlockReadyComplete">
239
+ <div class="subtitle-block">
240
+ <ui-wizard-subtitle
241
+ :sub-title="localization.vmWizard.lastCreateSubtitle"
242
+ />
243
+ </div>
244
+ </div>
245
+ </template>
246
+ <template #content>
247
+ <div class="select-block-wrap h-full flex flex-col mt-3">
248
+ <common-ready-to-complete :data="props.readyCompleteTableInfo" />
249
+ <div
250
+ class="vm-hardware-version-wrap justify-end flex flex-1 mt-4 pb-4"
251
+ >
252
+ <span class="vm-hardware-version">{{
253
+ props.compatibilityInfo
254
+ }}</span>
255
+ </div>
256
+ </div>
257
+ </template>
258
+ </ui-wizard-block>
259
+ </template>
260
+ </ui-wizard>
261
+ </template>
262
+
263
+ <script setup lang="ts">
264
+ import { useElementSize } from '@vueuse/core'
265
+ import type {
266
+ UI_I_WizardStep,
267
+ UI_I_WizardTexts,
268
+ } from '~/node_modules/bfg-uikit/components/ui/wizard/lib/models/interfaces'
269
+ import type Wizard from '~/node_modules/bfg-uikit/components/ui/wizard/lib/utils/utils'
270
+ import type {
271
+ UI_I_ArbitraryObject,
272
+ UI_I_Localization,
273
+ } from '~/lib/models/interfaces'
274
+ import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
275
+ import type { UI_I_ScheduleNewTasksForm } from '~/components/common/pages/scheduledTasks/modals/lib/models/interfaces'
276
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
277
+ import type { UI_I_NameTestIds } from '~/components/common/wizards/common/steps/name/lib/models/interfaces'
278
+ import type { UI_T_Project } from '~/lib/models/types'
279
+ import type { UI_I_CreateVmData } from '~/components/common/vm/actions/common/lib/models/interfaces'
280
+ import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
281
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
282
+ import type { UI_T_SelectedNavItem } from '~/components/common/vm/actions/common/lib/models/types'
283
+ import type { UI_I_FileTreeNode } from '~/components/lib/models/interfaces'
284
+ import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
285
+ import type {
286
+ UI_I_MediatedDevice,
287
+ UI_I_PciDevice,
288
+ } from '~/lib/models/store/vm/interfaces'
289
+ import type {
290
+ UI_I_DatastoreTableItem,
291
+ UI_I_FolderOrFileTreePayload,
292
+ } from '~/lib/models/store/storage/interfaces'
293
+ import type { UI_I_TableInfoItem } from '~/components/atoms/table/info/lib/models/interfaces'
294
+ import type { UI_T_CompatibilityStatus } from '~/components/common/wizards/common/compatibility/lib/models/types'
295
+
296
+ const model = defineModel<UI_I_CreateVmData>({ required: true })
297
+
298
+ const schedulerTaskForm = defineModel<UI_I_ScheduleNewTasksForm>(
299
+ 'scheduler-task-form'
300
+ )
301
+ const computeResource = defineModel<UI_I_TreeNode | undefined>(
302
+ 'compute-resource'
303
+ )
304
+ const location = defineModel<UI_I_TreeNode | null>('location')
305
+ const props = withDefaults(
306
+ defineProps<{
307
+ project: UI_T_Project
308
+ nodes: UI_I_FileTreeNode[]
309
+ files: UI_I_FileTreeNode[]
310
+ networksTable: UI_I_NetworkTableItem[]
311
+ datastore: UI_I_DatastoreTableItem[]
312
+ isDatastoreLoading: boolean
313
+ errorValidationFields: UI_I_ErrorValidationField[]
314
+ readyCompleteTableInfo: UI_I_TableInfoItem[]
315
+ vmCpuHelpTextSecond: string
316
+ getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
317
+ passthroughDevices: UI_I_PciDevice[]
318
+ mediatedDevices: UI_I_MediatedDevice[]
319
+ nameRequestUrl: string
320
+ wizard: Wizard
321
+ selectedScheme: number[]
322
+ selectedVirtualMachine: string
323
+ isNewVmFromTemplate: boolean | undefined
324
+ computeResourceTree: UI_I_TreeNode[] | undefined // для сферы
325
+ locationNodes: UI_I_TreeNode[] | undefined // для сферы
326
+ title: string
327
+ nameFormSubmit: null | Function
328
+ storageSubmit: null | Function
329
+ customizeHardwareSubmit: null | Function
330
+ selectedNavItem: UI_T_SelectedNavItem
331
+ allowedLocationKinds: number[]
332
+ isSphere: boolean
333
+ locationDescription: string
334
+ nameTestIds: UI_I_NameTestIds
335
+ guestOsFamilies: UI_I_OptionItem[]
336
+ guestOsVersions: UI_I_ArbitraryObject<UI_I_OptionItem[]>
337
+ machineTypes: UI_I_OptionItem[]
338
+ maxMemory: number
339
+ cpuModels: UI_I_OptionItem[]
340
+ dynamicSteps: UI_I_ArbitraryObject<number>
341
+ isLoadingComputeTree?: boolean // для сферы
342
+ computeResourceAlert?: string[] // для сферы
343
+ compatibilityText?: [UI_T_CompatibilityStatus, string] // для сферы
344
+ }>(),
345
+ {
346
+ isLoadingComputeTree: false,
347
+ computeResourceAlert: () => [],
348
+ compatibilityText: () => ['none', ''],
349
+ }
350
+ )
351
+
352
+ const emits = defineEmits<{
353
+ (event: 'get-storage', value: UI_I_TablePayload): void
354
+ (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
355
+ (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
356
+ (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
357
+ (event: 'remove-error-by-title', value: string): void
358
+ (event: 'get-networks-table', value: UI_I_TablePayload): void
359
+ (event: 'get-pci-devices'): void
360
+ (event: 'change-steps', value: UI_I_WizardStep[]): void
361
+ (event: 'change-name', value: [string, UI_I_TreeNode | null]): void
362
+ (event: 'change-storage', value: UI_I_DatastoreTableItem | null): void
363
+ (event: 'change-select-options', value: string[]): void
364
+ (event: 'change-clone-count', value: number): void
365
+ (event: 'hide'): void
366
+ (event: 'finish'): void
367
+ }>()
368
+
369
+ const localization = computed<UI_I_Localization>(() => useLocal())
370
+
371
+ const computeResourceTreeLocal = computed<UI_I_TreeNode[]>(() => {
372
+ // для сферы
373
+ return props.computeResourceTree || []
374
+ })
375
+
376
+ const texts = computed<UI_I_WizardTexts>(() => ({
377
+ cancel: localization.value.common.cancel,
378
+ back: localization.value.common.backCap,
379
+ processing: localization.value.common.processing,
380
+ next: localization.value.common.next,
381
+ finish: props.isNewVmFromTemplate
382
+ ? localization.value.common.create
383
+ : localization.value.common.clone,
384
+ incompleteTitle: localization.value.common.incompleteProcess,
385
+ incompleteMessage: localization.value.common.incompleteProcessMessage,
386
+ incompleteCancel: localization.value.common.cancel,
387
+ incompleteLeave: localization.value.common.leave,
388
+ step: localization.value.common.step,
389
+ of: localization.value.common.of2,
390
+ }))
391
+
392
+ const subTitleBlock0 = ref<HTMLElement | null>(null)
393
+ const { height: height0 } = useElementSize(subTitleBlock0)
394
+
395
+ const subTitleBlock1 = ref<HTMLElement | null>(null)
396
+ const { height: height1 } = useElementSize(subTitleBlock1)
397
+
398
+ const subTitleBlock2 = ref<HTMLElement | null>(null)
399
+ const { height: height2 } = useElementSize(subTitleBlock2)
400
+
401
+ const subTitleBlock3 = ref<HTMLElement | null>(null)
402
+ const { height: height3 } = useElementSize(subTitleBlock3)
403
+
404
+ const subTitleBlock4 = ref<HTMLElement | null>(null)
405
+ const { height: height4 } = useElementSize(subTitleBlock4)
406
+
407
+ const subTitleBlock5 = ref<HTMLElement | null>(null)
408
+ const { height: height5 } = useElementSize(subTitleBlock5)
409
+
410
+ const subTitleBlockReadyComplete = ref<HTMLElement | null>(null)
411
+ const { height: heightReadyComplete } = useElementSize(
412
+ subTitleBlockReadyComplete
413
+ )
414
+
415
+ const isNameAlertWrapperEmpty = ref<boolean>(false)
416
+
417
+ const selectNameStepSubtitle = computed<string>(() =>
418
+ props.project === 'sphere'
419
+ ? localization.value.vmWizard.specifyUniqueNameAndTargetLocationForVm
420
+ : localization.value.common.specifyUniqueNameForVm
421
+ )
422
+
423
+ const onChangeSteps = async (value: UI_I_WizardStep[]): Promise<void> =>
424
+ emits('change-steps', value)
425
+
426
+ const onHideModal = (): void => emits('hide')
427
+ const onClone = (): void => emits('finish')
428
+ </script>
429
+
430
+ <style scoped lang="scss">
431
+ .subtitle-block {
432
+ display: flex;
433
+ flex-direction: column;
434
+ row-gap: 16px;
435
+ border-bottom: 1px solid var(--wizard-line);
436
+ padding-bottom: 12px;
437
+ }
438
+ </style>