bfg-common 1.2.200 → 1.2.201

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 (62) hide show
  1. package/assets/localization/local_be.json +1 -3
  2. package/assets/localization/local_en.json +1 -3
  3. package/assets/localization/local_hy.json +1 -3
  4. package/assets/localization/local_kk.json +1 -3
  5. package/assets/localization/local_ru.json +1 -3
  6. package/assets/localization/local_zh.json +1 -3
  7. package/assets/scss/common/icons/icons-2.scss +222 -222
  8. package/components/atoms/switch/Switch.vue +107 -107
  9. package/components/atoms/wizard/Wizard.vue +1 -0
  10. package/components/atoms/wizard/utils/utils.ts +486 -538
  11. package/components/common/BadBrowser.vue +114 -114
  12. package/components/common/adapterManager/AddAdapterWarningModal.vue +82 -82
  13. package/components/common/adapterManager/NoActiveAdaptersModal.vue +62 -62
  14. package/components/common/adapterManager/NoConnectedActiveAdaptersModal.vue +62 -62
  15. package/components/common/browse/blocks/Title.vue +66 -66
  16. package/components/common/diagramMain/modals/editSettings/tabs/port/PortProperties.vue +202 -202
  17. package/components/common/diagramMain/modals/remove/RemoveModal.vue +226 -226
  18. package/components/common/feedback/Feedback.vue +261 -261
  19. package/components/common/feedback/VisitPortal.vue +53 -53
  20. package/components/common/help/navbar/left/utils/constructAccordion.ts +27 -27
  21. package/components/common/recursionTree/RecursionTree.vue +201 -201
  22. package/components/common/vm/actions/add/Add.vue +568 -687
  23. package/components/common/vm/actions/add/utils.ts +238 -118
  24. package/components/common/vm/actions/addOld/Add.vue +690 -0
  25. package/components/common/vm/actions/addOld/FolderTreeView.vue +83 -0
  26. package/components/common/vm/actions/addOld/utils.ts +118 -0
  27. package/components/common/vm/actions/clone/Clone.vue +545 -545
  28. package/components/common/vm/actions/clone/select/options/Options.vue +65 -65
  29. package/components/common/vm/actions/clone/utils.ts +43 -43
  30. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +9 -6
  31. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +267 -0
  32. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/CoresPerSocket.vue +109 -109
  33. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +234 -234
  34. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/config/options.ts +28 -28
  35. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +316 -316
  36. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/config/memoryOptions.ts +35 -35
  37. package/components/common/vm/actions/common/customizeHardware/virtualHardware/reservation/Reservation.vue +235 -235
  38. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +197 -197
  39. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/CopyPaste.vue +51 -51
  40. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/RemoteConsoleOptions.vue +253 -253
  41. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +55 -55
  42. package/components/common/vm/actions/common/select/name/Name.vue +10 -5
  43. package/components/common/vm/actions/common/select/name/NameOld.vue +215 -0
  44. package/components/common/vm/actions/common/select/storage/Storage.vue +6 -4
  45. package/components/common/vm/actions/common/select/storage/StorageOld.vue +194 -0
  46. package/components/common/vm/actions/common/select/storage/config/config.ts +154 -154
  47. package/components/common/vm/utils/powerActions.ts +55 -55
  48. package/components/common/wizards/datastore/add/nfs/kerberosAuthentication/KerberosAuthentication.vue +54 -54
  49. package/components/layout/theHeader/utils/localization.ts +32 -32
  50. package/composables/useLocal.ts +38 -38
  51. package/minify.js +146 -146
  52. package/models/interfaces.ts +49 -49
  53. package/models/store/interfaces.ts +37 -37
  54. package/models/store/storage/interfaces.ts +32 -32
  55. package/models/store/types.ts +43 -43
  56. package/modules/fixContentBuild/utils/methods.ts +114 -114
  57. package/package.json +1 -1
  58. package/public/spice-console/application/codec.js +257 -257
  59. package/public/spice-console/lib/rasterEngine.js +907 -907
  60. package/public/spice-console/network/spicechannel.js +369 -369
  61. package/utils/contentBuild.ts +34 -34
  62. package/utils/sendTask.ts +77 -77
@@ -1,65 +1,65 @@
1
- <template>
2
- <div class="select-options">
3
- <div class="checkbox">
4
- <input
5
- id="customize-os"
6
- v-model="selectedOptions"
7
- type="checkbox"
8
- value="customize-os"
9
- />
10
- <label for="customize-os">{{
11
- localization.customizeTheOperatingSystem
12
- }}</label>
13
- </div>
14
- <div class="checkbox">
15
- <input
16
- id="customize-hardware"
17
- v-model="selectedOptions"
18
- type="checkbox"
19
- value="customize-hardware"
20
- />
21
- <label for="customize-hardware">{{
22
- localization.customizeThisVirtualMachineHardware
23
- }}</label>
24
- </div>
25
- <div class="checkbox">
26
- <input
27
- id="power-on"
28
- v-model="selectedOptions"
29
- type="checkbox"
30
- value="power-on"
31
- />
32
- <label for="power-on">{{
33
- localization.powerOnVirtualMachineAfterCreation
34
- }}</label>
35
- </div>
36
- </div>
37
- </template>
38
-
39
- <script setup lang="ts">
40
- import type { UI_I_Localization } from '~/models/interfaces'
41
-
42
- const props = defineProps<{
43
- selectOptionsSubmit: number
44
- }>()
45
-
46
- const emits = defineEmits<{
47
- (event: 'submit', value: string[]): void
48
- }>()
49
- const localization = computed<UI_I_Localization>(() => useLocal())
50
-
51
- const selectedOptions = ref<string[]>([])
52
- watch(() => props.selectOptionsSubmit, () => {
53
- emits('submit', selectedOptions.value)
54
- })
55
- </script>
56
-
57
- <style scoped lang="scss">
58
- .select-options {
59
- padding: 12px 0 0;
60
-
61
- .checkbox {
62
- margin: 6px 0;
63
- }
64
- }
65
- </style>
1
+ <template>
2
+ <div class="select-options">
3
+ <div class="checkbox">
4
+ <input
5
+ id="customize-os"
6
+ v-model="selectedOptions"
7
+ type="checkbox"
8
+ value="customize-os"
9
+ />
10
+ <label for="customize-os">{{
11
+ localization.customizeTheOperatingSystem
12
+ }}</label>
13
+ </div>
14
+ <div class="checkbox">
15
+ <input
16
+ id="customize-hardware"
17
+ v-model="selectedOptions"
18
+ type="checkbox"
19
+ value="customize-hardware"
20
+ />
21
+ <label for="customize-hardware">{{
22
+ localization.customizeThisVirtualMachineHardware
23
+ }}</label>
24
+ </div>
25
+ <div class="checkbox">
26
+ <input
27
+ id="power-on"
28
+ v-model="selectedOptions"
29
+ type="checkbox"
30
+ value="power-on"
31
+ />
32
+ <label for="power-on">{{
33
+ localization.powerOnVirtualMachineAfterCreation
34
+ }}</label>
35
+ </div>
36
+ </div>
37
+ </template>
38
+
39
+ <script setup lang="ts">
40
+ import type { UI_I_Localization } from '~/models/interfaces'
41
+
42
+ const props = defineProps<{
43
+ selectOptionsSubmit: number
44
+ }>()
45
+
46
+ const emits = defineEmits<{
47
+ (event: 'submit', value: string[]): void
48
+ }>()
49
+ const localization = computed<UI_I_Localization>(() => useLocal())
50
+
51
+ const selectedOptions = ref<string[]>([])
52
+ watch(() => props.selectOptionsSubmit, () => {
53
+ emits('submit', selectedOptions.value)
54
+ })
55
+ </script>
56
+
57
+ <style scoped lang="scss">
58
+ .select-options {
59
+ padding: 12px 0 0;
60
+
61
+ .checkbox {
62
+ margin: 6px 0;
63
+ }
64
+ }
65
+ </style>
@@ -1,43 +1,43 @@
1
- import { UI_I_Localization } from '~/models/interfaces'
2
- import { UI_I_VerticalStepItem } from '~/components/atoms/models/interfaces'
3
- import { UI_T_Project } from '~/models/types'
4
-
5
- export const stepItemsFunc = (
6
- localization: UI_I_Localization,
7
- project: UI_T_Project
8
- ): UI_I_VerticalStepItem[] => {
9
- if (project === 'sphere') {
10
- return []
11
- }
12
- return [
13
- {
14
- text: localization.selectName,
15
- disabled: false,
16
- complete: false,
17
- },
18
- { text: localization.selectStorage, disabled: true, complete: false },
19
- { text: localization.selectCloneOptions, disabled: true, complete: false },
20
- {
21
- text: localization.customizeHardware,
22
- disabled: true,
23
- complete: false,
24
- },
25
- { text: localization.readyComplete, disabled: true, complete: false },
26
- ]
27
- }
28
-
29
- export const subTitleFunc = (
30
- localization: UI_I_Localization,
31
- project: UI_T_Project
32
- ): string[] => {
33
- if (project === 'sphere') {
34
- return []
35
- }
36
- return [
37
- localization.specifyUniqueName,
38
- localization.selectStorageConfigurationDiskFiles,
39
- localization.chooseGuestOSInstalledVmAndMachineTypeUsedCreateVm,
40
- localization.selectFurtherCloneOptions,
41
- localization.clickFinishStartCreation,
42
- ]
43
- }
1
+ import { UI_I_Localization } from '~/models/interfaces'
2
+ import { UI_I_VerticalStepItem } from '~/components/atoms/models/interfaces'
3
+ import { UI_T_Project } from '~/models/types'
4
+
5
+ export const stepItemsFunc = (
6
+ localization: UI_I_Localization,
7
+ project: UI_T_Project
8
+ ): UI_I_VerticalStepItem[] => {
9
+ if (project === 'sphere') {
10
+ return []
11
+ }
12
+ return [
13
+ {
14
+ text: localization.selectName,
15
+ disabled: false,
16
+ complete: false,
17
+ },
18
+ { text: localization.selectStorage, disabled: true, complete: false },
19
+ { text: localization.selectCloneOptions, disabled: true, complete: false },
20
+ {
21
+ text: localization.customizeHardware,
22
+ disabled: true,
23
+ complete: false,
24
+ },
25
+ { text: localization.readyComplete, disabled: true, complete: false },
26
+ ]
27
+ }
28
+
29
+ export const subTitleFunc = (
30
+ localization: UI_I_Localization,
31
+ project: UI_T_Project
32
+ ): string[] => {
33
+ if (project === 'sphere') {
34
+ return []
35
+ }
36
+ return [
37
+ localization.specifyUniqueName,
38
+ localization.selectStorageConfigurationDiskFiles,
39
+ localization.chooseGuestOSInstalledVmAndMachineTypeUsedCreateVm,
40
+ localization.selectFurtherCloneOptions,
41
+ localization.clickFinishStartCreation,
42
+ ]
43
+ }
@@ -108,7 +108,7 @@ const props = defineProps<{
108
108
  hardDisksForBootOptions: UI_I_SendDataNewHardDisk[] | null
109
109
  cdDvdDrivesForBootOptions: UI_I_SendDataNewCdDvdDrive[] | null
110
110
  networksForBootOptions: UI_I_SendDataNewNetwork[] | null
111
- customizeHardwareSubmit: number
111
+ customizeHardwareSubmit: null | Function
112
112
  maxCpus: number
113
113
  maxMemory: number
114
114
  selectedNavItem: UI_T_SelectedNavItem
@@ -227,19 +227,20 @@ const onChangeBootOrder = (data: UI_T_ChangeBootOrder): void => {
227
227
 
228
228
  watch(
229
229
  () => props.customizeHardwareSubmit,
230
- () => {
231
- submit()
232
- }
230
+ (newValue) => {
231
+ newValue && submit(newValue)
232
+ }
233
233
  )
234
234
  const virtualHardwareInvalid = ref<string[]>([])
235
235
  const vmOptionsInvalid = ref<string[]>([])
236
- const submit = (): void => {
236
+ const submit = (cb: Function): void => {
237
237
  const invalidDevices = [
238
238
  ...virtualHardwareInvalid.value,
239
239
  ...vmOptionsInvalid.value,
240
240
  ]
241
241
  .filter((item: string) => !!item)
242
242
  .join(', ')
243
+ console.log(invalidDevices, 111, virtualHardwareInvalid.value);
243
244
 
244
245
  if (invalidDevices) {
245
246
  showValidationErrors([
@@ -248,11 +249,13 @@ const submit = (): void => {
248
249
  invalidDevices
249
250
  ),
250
251
  ])
252
+ cb(false)
251
253
  return
252
254
  }
253
255
  onRemoveValidationErrors()
254
256
 
255
- emits('next')
257
+ // emits('next')
258
+ cb(true)
256
259
  }
257
260
 
258
261
  const errors = ref<string[]>([])
@@ -0,0 +1,267 @@
1
+ <template>
2
+ <div class="customize-hardware">
3
+ <atoms-nav-bar v-model="selectedNavItem" :items="navItems" />
4
+ <atoms-alert
5
+ v-show="errors.length"
6
+ status="alert-danger"
7
+ :items="errors"
8
+ @remove="onRemoveValidationErrors"
9
+ />
10
+
11
+ <div v-show="selectedNavItem === 0">
12
+ <common-vm-actions-common-customize-hardware-virtual-hardware
13
+ :vm-name="vmNameLocal"
14
+ :storage="props.storage"
15
+ :max-cpus="props.maxCpus"
16
+ :max-memory="props.maxMemory"
17
+ :cpu-models="props.cpuModels"
18
+ :cpu="props.cpu"
19
+ :memory="props.memory"
20
+ :is-edit="props.isEdit"
21
+ :is-clone="props.isClone"
22
+ :state="props.state"
23
+ :hard-disks="props.hardDisks"
24
+ :cd-dvd-drives="props.cdDvdDrives"
25
+ :networks="props.networks"
26
+ :networks-table="props.networksTable"
27
+ :video-card="props.videoCard"
28
+ :usb-controller="props.usbController"
29
+ :pci-devices="props.pciDevices"
30
+ :nodes="props.nodes"
31
+ :files="props.files"
32
+ :error-validation-fields="props.errorValidationFields"
33
+ :get-datastore-table-func="props.getDatastoreTableFunc"
34
+ :datastore="props.datastore"
35
+ :vm-cpu-help-text-second="props.vmCpuHelpTextSecond"
36
+ :passthrough-devices="props.passthroughDevices"
37
+ @send-data="onSendDataVirtualHardwareMethod"
38
+ @get-storage="emits('get-storage', $event)"
39
+ @get-folders-or-files="emits('get-folders-or-files', $event)"
40
+ @get-active-device-child="emits('get-active-device-child', $event)"
41
+ @show-datastore-child="emits('show-datastore-child', $event)"
42
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
43
+ @invalid="virtualHardwareInvalid = $event"
44
+ @get-networks-table="emits('get-networks-table', $event)"
45
+ @get-pci-devices="emits('get-pci-devices')"
46
+ />
47
+ </div>
48
+ <div v-show="selectedNavItem === 1">
49
+ <common-vm-actions-common-customize-hardware-vmoptions
50
+ v-model:vm-name="vmNameLocal"
51
+ v-model:guest-machine-type="guestMachineTypeLocal"
52
+ v-model:guest-os-family="guestOsFamilyLocal"
53
+ v-model:guest-os-version="guestOsVersionLocal"
54
+ :hard-disks="props.hardDisksForBootOptions"
55
+ :cd-dvd-drives="props.cdDvdDrivesForBootOptions"
56
+ :networks="props.networksForBootOptions"
57
+ :options="props.options"
58
+ :is-edit="props.isEdit"
59
+ :is-clone="props.isClone"
60
+ :error-validation-fields="props.errorValidationFields"
61
+ :state="props.state"
62
+ @change-boot-order="onChangeBootOrder"
63
+ @send-data="onSendDataVmOptionsMethod"
64
+ @invalid="vmOptionsInvalid = $event"
65
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
66
+ />
67
+ </div>
68
+ </div>
69
+ </template>
70
+
71
+ <script setup lang="ts">
72
+ import { UI_I_DatastoreTableItem } from '~/models/store/storage/interfaces'
73
+ import { UI_I_NetworkTableItem } from '~/models/store/network/interfaces'
74
+ import { UI_I_TablePayload } from '~/models/store/interfaces'
75
+ import { UI_I_FolderOrFileTreePayload } from '~/models/store/storage/interfaces'
76
+ import { UI_I_FileTreeNode } from '~/components/models/interfaces'
77
+ import {
78
+ UI_I_PciDevice,
79
+ UI_I_SendDataNewCdDvdDrive,
80
+ UI_I_SendDataNewHardDisk,
81
+ UI_I_SendDataNewNetwork,
82
+ UI_I_SendDataVideoCard,
83
+ UI_I_SendDataVirtualHardware,
84
+ } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/models/interfaces'
85
+ import { UI_I_SendDataCustomizeHardware } from '~/components/common/vm/actions/common/customizeHardware/models/interfaces'
86
+ import { UI_I_SendDataVmoptions } from '~/components/common/vm/actions/common/customizeHardware/vmoptions/models/interfaces'
87
+ import { UI_T_SelectedNavItem } from '~/components/common/vm/actions/common/models/types'
88
+ import { UI_I_ErrorValidationField } from '~/models/store/interfaces'
89
+ import { UI_I_Localization } from '~/models/interfaces'
90
+ import { UI_I_OptionItem } from '~/components/atoms/models/interfaces'
91
+ import { UI_I_CollapseNavItem } from '~/components/atoms/collapse/models/interfaces'
92
+ import { UI_I_ConfigurePciDevicesTable } from '~/models/store/host/interfaces'
93
+ import { UI_T_ChangeBootOrder } from '~/components/common/vm/actions/models/types'
94
+ import {
95
+ API_UI_I_VmEditCpu,
96
+ API_UI_I_VmEditMemory,
97
+ } from '~/models/store/vm/interfaces'
98
+ import { navItemsFunc } from '~/components/common/vm/actions/common/customizeHardware/config/navItems'
99
+
100
+ const props = defineProps<{
101
+ vmName: string
102
+ errorValidationFields: UI_I_ErrorValidationField[]
103
+ storage: UI_I_DatastoreTableItem | null
104
+ guestMachineType: UI_I_OptionItem | null
105
+ guestOsFamily: UI_I_OptionItem | null
106
+ guestOsVersion: UI_I_OptionItem | null
107
+ cpuModels: UI_I_OptionItem[]
108
+ hardDisksForBootOptions: UI_I_SendDataNewHardDisk[] | null
109
+ cdDvdDrivesForBootOptions: UI_I_SendDataNewCdDvdDrive[] | null
110
+ networksForBootOptions: UI_I_SendDataNewNetwork[] | null
111
+ customizeHardwareSubmit: number
112
+ maxCpus: number
113
+ maxMemory: number
114
+ selectedNavItem: UI_T_SelectedNavItem
115
+ nodes: UI_I_FileTreeNode[]
116
+ files: UI_I_FileTreeNode[]
117
+ networksTable: UI_I_NetworkTableItem[]
118
+ cpu?: API_UI_I_VmEditCpu
119
+ memory?: API_UI_I_VmEditMemory
120
+ vmCpuHelpTextSecond?: string
121
+ getDatastoreTableFunc?: (payload: UI_I_TablePayload) => Promise<void>
122
+ datastore: UI_I_DatastoreTableItem[]
123
+ hardDisks?: UI_I_SendDataNewHardDisk[] | null
124
+ cdDvdDrives?: UI_I_SendDataNewCdDvdDrive[] | null
125
+ networks?: UI_I_SendDataNewNetwork[] | null
126
+ videoCard?: UI_I_SendDataVideoCard
127
+ pciDevices?: UI_I_PciDevice[]
128
+ usbController?: string
129
+ options?: UI_I_SendDataVmoptions
130
+ isEdit?: boolean
131
+ isClone?: boolean
132
+ state?: string | number
133
+ passthroughDevices?: UI_I_ConfigurePciDevicesTable | null
134
+ }>()
135
+ const emits = defineEmits<{
136
+ (
137
+ event: 'change-boot-order',
138
+ value: [
139
+ UI_I_SendDataNewHardDisk[],
140
+ UI_I_SendDataNewCdDvdDrive[],
141
+ UI_I_SendDataNewNetwork[]
142
+ ]
143
+ ): void
144
+ (event: 'send-data', value: UI_I_SendDataCustomizeHardware): void
145
+ (event: 'next'): void
146
+ (event: 'update:vm-name', value: string): void
147
+ (event: 'update:guest-machine-type', value: UI_I_OptionItem | null): void
148
+ (event: 'update:guest-os-family', value: UI_I_OptionItem | null): void
149
+ (event: 'update:guest-os-version', value: UI_I_OptionItem | null): void
150
+ (event: 'get-storage', value: UI_I_TablePayload): void
151
+ (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
152
+ (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
153
+ (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
154
+ (event: 'remove-error-by-title', value: string): void
155
+ (event: 'get-networks-table', value: UI_I_TablePayload): void
156
+ (event: 'get-pci-devices'): void
157
+ }>()
158
+
159
+ const vmNameLocal = computed<string>({
160
+ get() {
161
+ return props.vmName
162
+ },
163
+ set(newValue) {
164
+ emits('update:vm-name', newValue)
165
+ },
166
+ })
167
+ const guestMachineTypeLocal = computed<UI_I_OptionItem | null>({
168
+ get() {
169
+ return props.guestMachineType
170
+ },
171
+ set(newValue) {
172
+ emits('update:guest-machine-type', newValue)
173
+ },
174
+ })
175
+ const guestOsFamilyLocal = computed<UI_I_OptionItem | null>({
176
+ get() {
177
+ return props.guestOsFamily
178
+ },
179
+ set(newValue) {
180
+ emits('update:guest-os-family', newValue)
181
+ },
182
+ })
183
+ const guestOsVersionLocal = computed<UI_I_OptionItem | null>({
184
+ get() {
185
+ return props.guestOsVersion
186
+ },
187
+ set(newValue) {
188
+ emits('update:guest-os-version', newValue)
189
+ },
190
+ })
191
+
192
+ const localization = computed<UI_I_Localization>(() => useLocal())
193
+
194
+ const navItems = computed<UI_I_CollapseNavItem[]>(() =>
195
+ navItemsFunc(localization.value)
196
+ )
197
+ const selectedNavItem = ref<number>(0)
198
+ watch(
199
+ () => props.selectedNavItem,
200
+ (n) => {
201
+ selectedNavItem.value = n
202
+ }
203
+ )
204
+
205
+ const sendDataVirtualHardware = ref<UI_I_SendDataVirtualHardware | null>(null)
206
+ const onSendDataVirtualHardwareMethod = (
207
+ data: UI_I_SendDataVirtualHardware
208
+ ): void => {
209
+ sendDataVirtualHardware.value = data
210
+ sendData()
211
+ }
212
+ const sendDataVmOptions = ref<UI_I_SendDataVmoptions | null>(null)
213
+ const onSendDataVmOptionsMethod = (data: UI_I_SendDataVmoptions): void => {
214
+ sendDataVmOptions.value = data
215
+ sendData()
216
+ }
217
+ const sendData = (): void => {
218
+ emits('send-data', {
219
+ virtualHardware: sendDataVirtualHardware.value,
220
+ vmOptions: sendDataVmOptions.value,
221
+ })
222
+ }
223
+
224
+ const onChangeBootOrder = (data: UI_T_ChangeBootOrder): void => {
225
+ emits('change-boot-order', data)
226
+ }
227
+
228
+ watch(
229
+ () => props.customizeHardwareSubmit,
230
+ () => {
231
+ submit()
232
+ }
233
+ )
234
+ const virtualHardwareInvalid = ref<string[]>([])
235
+ const vmOptionsInvalid = ref<string[]>([])
236
+ const submit = (): void => {
237
+ const invalidDevices = [
238
+ ...virtualHardwareInvalid.value,
239
+ ...vmOptionsInvalid.value,
240
+ ]
241
+ .filter((item: string) => !!item)
242
+ .join(', ')
243
+
244
+ if (invalidDevices) {
245
+ showValidationErrors([
246
+ localization.value.thereErrorsFollowingFields.replace(
247
+ '{0}',
248
+ invalidDevices
249
+ ),
250
+ ])
251
+ return
252
+ }
253
+ onRemoveValidationErrors()
254
+
255
+ emits('next')
256
+ }
257
+
258
+ const errors = ref<string[]>([])
259
+ const showValidationErrors = (arr: string[]): void => {
260
+ errors.value = arr
261
+ }
262
+ const onRemoveValidationErrors = (): void => {
263
+ errors.value = []
264
+ }
265
+ </script>
266
+
267
+ <style scoped lang="scss"></style>