bfg-common 1.2.186 → 1.2.187

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 (77) hide show
  1. package/assets/localization/local_be.json +9 -2
  2. package/assets/localization/local_en.json +9 -2
  3. package/assets/localization/local_hy.json +9 -2
  4. package/assets/localization/local_kk.json +9 -2
  5. package/assets/localization/local_ru.json +9 -2
  6. package/assets/localization/local_zh.json +9 -2
  7. package/assets/scss/common/theme.scss +27 -25
  8. package/components/atoms/table/simpleTable/SimpleTable.vue +5 -2
  9. package/components/atoms/wizard/Wizard.vue +4 -4
  10. package/components/atoms/wizard/models/interfaces.ts +4 -3
  11. package/components/atoms/wizard/utils/utils.ts +106 -27
  12. package/components/common/diagramMain/DiagramMain.vue +10 -46
  13. package/components/common/diagramMain/modals/config/index.ts +0 -6
  14. package/components/common/diagramMain/modals/config/vmKernelAdapter.ts +2 -2
  15. package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +1 -1
  16. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +339 -339
  17. package/components/common/diagramMain/modals/migrateVmkernelAdapter/MigrateVmkernelAdapter.vue +531 -0
  18. package/components/common/diagramMain/modals/migrateVmkernelAdapter/config/steps.ts +114 -0
  19. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/ConnectionSettings.vue +161 -0
  20. package/components/common/diagramMain/modals/{steps → migrateVmkernelAdapter/steps}/SelectVmkernelAdapter.vue +24 -86
  21. package/components/common/diagramMain/modals/{steps → migrateVmkernelAdapter/steps}/VmkernelAdapterReadyComplete.vue +7 -11
  22. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/common.ts +47 -0
  23. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/connectionSettings.ts +146 -0
  24. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/selectVmkernelAdapter.ts +54 -0
  25. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/validations.ts +19 -0
  26. package/components/common/diagramMain/models/enums.ts +6 -7
  27. package/components/common/diagramMain/models/interfaces.ts +28 -29
  28. package/components/common/diagramMain/models/types.ts +0 -1
  29. package/components/common/monitor/advanced/Advanced.vue +5 -4
  30. package/components/common/wizards/network/add/Add.vue +874 -0
  31. package/components/common/{addNetworking → wizards/network/add}/config/index.ts +2 -16
  32. package/components/common/{addNetworking → wizards/network/add}/config/initialData.ts +4 -19
  33. package/components/common/{addNetworking → wizards/network/add}/config/portPropertiesStep.ts +1 -1
  34. package/components/common/{addNetworking → wizards/network/add}/config/selectSwitch.ts +1 -1
  35. package/components/common/{addNetworking → wizards/network/add}/config/sendData.ts +1 -1
  36. package/components/common/{addNetworking/config/addNetworkingSteps.ts → wizards/network/add/config/steps.ts} +107 -60
  37. package/components/common/{addNetworking → wizards/network/add}/modals/SelectNetwork.vue +2 -2
  38. package/components/common/{addNetworking → wizards/network/add}/modals/SelectStandardSwitch.vue +2 -2
  39. package/components/common/{addNetworking → wizards/network/add}/modals/SelectSwitch.vue +2 -2
  40. package/components/common/wizards/network/add/models/enums.ts +17 -0
  41. package/components/common/{addNetworking → wizards/network/add}/models/interfaces.ts +30 -37
  42. package/components/common/wizards/network/add/models/types.ts +2 -0
  43. package/components/common/wizards/network/add/steps/ConnectionSettings.vue +148 -0
  44. package/components/common/{addNetworking → wizards/network/add}/steps/CreateStandardSwitch.vue +0 -7
  45. package/components/common/wizards/network/add/steps/IpFourSettings.vue +245 -0
  46. package/components/common/{addNetworking → wizards/network/add}/steps/PhysicalAdapter.vue +1 -12
  47. package/components/common/{addNetworking → wizards/network/add}/steps/PortProperties.vue +57 -180
  48. package/components/common/{addNetworking → wizards/network/add}/steps/ReadyComplete.vue +1 -10
  49. package/components/common/{addNetworking → wizards/network/add}/steps/SelectConnectionType.vue +3 -15
  50. package/components/common/{addNetworking → wizards/network/add}/steps/SelectedTargetDevice.vue +103 -209
  51. package/components/common/wizards/network/add/utils/index.ts +4 -0
  52. package/components/common/wizards/network/add/validations/common.ts +58 -0
  53. package/components/common/wizards/network/add/validations/connectionSettings.ts +75 -0
  54. package/components/common/wizards/network/add/validations/createStandardSwitch.ts +58 -0
  55. package/components/common/wizards/network/add/validations/ipFourSettings.ts +188 -0
  56. package/components/common/wizards/network/add/validations/networkValidation.ts +73 -0
  57. package/components/common/wizards/network/add/validations/portProperties.ts +87 -0
  58. package/components/common/wizards/network/add/validations/targetDevice.ts +113 -0
  59. package/components/common/wizards/network/add/validations/validations.ts +43 -0
  60. package/components/common/wizards/vm/migrate/select/computeResource/ComputeResource.vue +2 -0
  61. package/package.json +1 -1
  62. package/components/common/addNetworking/AddNetworking.vue +0 -1123
  63. package/components/common/addNetworking/Wizard.vue +0 -286
  64. package/components/common/addNetworking/config/temporaryData.ts +0 -8
  65. package/components/common/addNetworking/config/validation.ts +0 -23
  66. package/components/common/addNetworking/models/enums.ts +0 -7
  67. package/components/common/addNetworking/models/types.ts +0 -13
  68. package/components/common/addNetworking/steps/ConnectionSettings.vue +0 -269
  69. package/components/common/addNetworking/steps/Header.vue +0 -53
  70. package/components/common/addNetworking/steps/IpFourSettings.vue +0 -361
  71. package/components/common/addNetworking/utils/index.ts +0 -212
  72. package/components/common/diagramMain/modals/MigrateVmkernelAdapter.vue +0 -603
  73. package/components/common/diagramMain/modals/config/migrateVmkernelAdapterSteps.ts +0 -81
  74. package/components/common/diagramMain/modals/config/validation.ts +0 -3
  75. package/components/common/diagramMain/modals/steps/ConnectionSettings.vue +0 -221
  76. package/components/common/diagramMain/modals/steps/Header.vue +0 -60
  77. /package/components/common/{addNetworking → wizards/network/add}/mappers/mappers.ts +0 -0
@@ -0,0 +1,874 @@
1
+ <template>
2
+ <atoms-wizard
3
+ v-model:show="props.show"
4
+ :steps="wizard.steps"
5
+ :selected-scheme="selectedScheme"
6
+ :is-loading="wizard.wizardLoader.status"
7
+ :loader-messages="wizard.wizardLoader.messages"
8
+ :title="title"
9
+ :was-completed="wasCompleted"
10
+ :localization="localization"
11
+ :class="[
12
+ 'add-networking-wizard',
13
+ {
14
+ 'is-dark': props.isDarkMode,
15
+ },
16
+ ]"
17
+ @change-steps="onChangeSteps"
18
+ @hide="onHideAddNetworkingModal"
19
+ @submit="onSubmit"
20
+ >
21
+ <template #modalBody="{ selectedStep }">
22
+ <common-add-networking-steps-select-connection-type
23
+ v-if="selectedStep.id === 0"
24
+ :connection-type="connectionType"
25
+ @change-connection-type="onChangeConnectionType"
26
+ />
27
+ <common-add-networking-steps-selected-target-device
28
+ v-if="selectedStep.id === 1"
29
+ :wizard="wizard"
30
+ :target-device="targetDevice"
31
+ :connection-type="connectionType"
32
+ :standard-switches-initial="props.standardSwitchesInitial"
33
+ :messages-fields="selectedStep.fields"
34
+ :alert-messages="alertMessages[1]"
35
+ @hide-alert="onHideAlert"
36
+ @change-target-device="onChangeTargetDevice"
37
+ />
38
+ <common-add-networking-steps-create-standard-switch
39
+ v-if="selectedStep.id === 2"
40
+ :free-adapters="props.freeAdapters"
41
+ :added-adapters="addedAdapters"
42
+ :adapter-status="adapterStatus"
43
+ :adapters="props.adapters"
44
+ :is-show-no-connected-active-adapters-modal="
45
+ isShowNoConnectedActiveAdaptersModal
46
+ "
47
+ :is-show-no-active-adapters-modal="isShowNoActiveAdaptersModal"
48
+ @get-free-adapters="onGetFreeAdapters"
49
+ @change-added-adapters="onChangeAddedAdapters"
50
+ @change-adapter-status="onChangeAdapterStatus"
51
+ @confirm-no-active-adapters-modal="onConfirmNoActiveAdaptersModal"
52
+ @hide-no-connected-active-adapters-modal="
53
+ onHideNoConnectedActiveAdaptersModal
54
+ "
55
+ @hide-no-active-adapters-modal="onHideNoActiveAdaptersModal"
56
+ />
57
+ <common-add-networking-steps-port-properties
58
+ v-if="selectedStep.id === 3"
59
+ :wizard="wizard"
60
+ :port-properties="portProperties"
61
+ :mtu-from-switch="mtuFromSwitch"
62
+ :project="props.project"
63
+ :messages-fields="selectedStep.fields"
64
+ :alert-messages="alertMessages[3]"
65
+ @change-port-properties="onChangePortProperties"
66
+ @hide-alert="onHideAlert"
67
+ />
68
+ <common-add-networking-steps-ip-four-settings
69
+ v-if="selectedStep.id === 4"
70
+ :wizard="wizard"
71
+ :ip-four-settings="ipFourSettings"
72
+ :messages-fields="selectedStep.fields"
73
+ :alert-messages="alertMessages[4]"
74
+ @change-ip-four-settings="onChangeIpFourSettings"
75
+ @hide-alert="onHideAlert"
76
+ />
77
+ <common-add-networking-steps-connection-settings
78
+ v-if="selectedStep.id === 5"
79
+ :wizard="wizard"
80
+ :connection-settings="connectionSettings"
81
+ :messages-fields="selectedStep.fields"
82
+ :alert-messages="alertMessages[5]"
83
+ @change-connection-settings="onChangeConnectionSettings"
84
+ @hide-alert="onHideAlert"
85
+ />
86
+ <common-add-networking-steps-physical-adapter
87
+ v-if="selectedStep.id === 6"
88
+ />
89
+ <common-add-networking-steps-ready-complete
90
+ v-if="selectedStep.id === 7"
91
+ :ready-complete-fields="readyCompleteFields"
92
+ />
93
+ </template>
94
+ </atoms-wizard>
95
+ </template>
96
+
97
+ <script setup lang="ts">
98
+ import { UI_I_ArbitraryObject, UI_I_Localization } from '~/models/interfaces'
99
+ import { UI_T_Project } from '~/models/types'
100
+ import {
101
+ UI_I_PortProperties,
102
+ UI_I_IpFourSettings,
103
+ UI_I_ConnectionSettings,
104
+ UI_I_TargetDevice,
105
+ UI_I_Switch,
106
+ UI_I_ReadyCompleteFields,
107
+ UI_I_AddNetworkingSecondOrThirdSchemeDataSend,
108
+ UI_I_AddNetworkingZeroOrFirstSchemeDataSend,
109
+ UI_I_AddNetworkingEmits,
110
+ } from '~/components/common/wizards/network/add/models/interfaces'
111
+ import {
112
+ UI_I_Adapter,
113
+ UI_I_AdapterStatus,
114
+ UI_I_SwitchAdapters,
115
+ } from '~/components/common/diagramMain/models/interfaces'
116
+ import {
117
+ UI_I_ValidationReturn,
118
+ UI_I_WizardStep,
119
+ } from '~/components/atoms/wizard/models/interfaces'
120
+ import { UI_E_ValidationFields } from '~/components/common/wizards/network/add/models/enums'
121
+ import { getVlanId } from '~/components/common/wizards/network/add/utils'
122
+ import Wizard from '~/components/atoms/wizard/utils/utils'
123
+ import {
124
+ createZeroSchemeReadyCompleteFunc,
125
+ createFirstSchemeReadyCompleteFunc,
126
+ createSecondSchemeReadyCompleteFunc,
127
+ createThirdSchemeReadyCompleteFunc,
128
+ stepsSchemeInitial,
129
+ stepsFunc,
130
+ connectionSettingsInitial,
131
+ portPropertiesInitial,
132
+ ipFourSettingsInitial,
133
+ targetDeviceInitial,
134
+ addNetworkingZeroOrFirstSchemeDataFunc,
135
+ addNetworkingSecondOrThirdSchemeDataFunc,
136
+ } from '~/components/common/wizards/network/add/config'
137
+
138
+ import {
139
+ checkTargetDeviceSync,
140
+ checkAdaptersSync,
141
+ checkPortPropertiesSync,
142
+ checkIpFourSettingsSync,
143
+ checkConnectionSettingsSync,
144
+ checkNetworkAsync,
145
+ } from '~/components/common/wizards/network/add/validations/validations'
146
+
147
+ const props = withDefaults(
148
+ defineProps<{
149
+ show: boolean
150
+ adapters: UI_I_SwitchAdapters
151
+ standardSwitchesInitial: UI_I_Switch[]
152
+ freeAdapters: UI_I_Adapter[]
153
+ project?: UI_T_Project
154
+ isDarkMode: boolean
155
+ }>(),
156
+ {
157
+ standardSwitchesInitial: () => [],
158
+ freeAdapters: () => [],
159
+ project: 'procurator',
160
+ }
161
+ )
162
+
163
+ const emits = defineEmits<UI_I_AddNetworkingEmits>()
164
+
165
+ const localization = computed<UI_I_Localization>(() => useLocal())
166
+
167
+ const hostname = ref<string>('')
168
+ const title = computed<string>(
169
+ () => `${hostname.value} - ${localization.value.addNetworking}`
170
+ )
171
+
172
+ const wizard: Wizard = new Wizard(
173
+ stepsFunc(localization.value),
174
+ stepsSchemeInitial
175
+ )
176
+ const wasCompleted = computed<boolean>(() => wizard.wasCompleted())
177
+ const selectedScheme = computed<number[]>(() => wizard.selectedScheme.value)
178
+ const alertMessages = computed<string[][]>(() => wizard.alertMessages.value)
179
+
180
+ const readyCompleteFields = ref<UI_I_ReadyCompleteFields[]>([])
181
+
182
+ // Step's content data (connectionType)
183
+ const connectionType = ref<string>('0')
184
+
185
+ const onChangeConnectionType = (newConnectionType: string): void => {
186
+ wizard.resetAfterSelected()
187
+ connectionType.value = newConnectionType
188
+ targetDevice.value.standardSwitch =
189
+ props.standardSwitchesInitial?.[0]?.name || ''
190
+ }
191
+
192
+ // Step's content data (createStandardSwitch)
193
+ const addedAdapters = ref<string[]>([])
194
+
195
+ const onChangeAddedAdapters = (addedAdaptersNew: string[]): void => {
196
+ addedAdapters.value = addedAdaptersNew
197
+ }
198
+
199
+ const adapterStatus = ref<UI_I_AdapterStatus>({
200
+ active: [],
201
+ standby: [],
202
+ unused: [],
203
+ })
204
+ const onChangeAdapterStatus = (adapterStatusNew: UI_I_AdapterStatus): void => {
205
+ adapterStatus.value = adapterStatusNew
206
+ }
207
+
208
+ // Step's content data and changers (targetDevice)
209
+ const targetDevice = ref<UI_I_TargetDevice>(useDeepCopy(targetDeviceInitial))
210
+ const mtuFromSwitch = ref<number>(1500)
211
+
212
+ const onChangeTargetDevice = (newTargetDevice: UI_I_TargetDevice): void => {
213
+ const oldTargetDeviceSelected = useDeepCopy(targetDevice.value).selected
214
+ const newTargetDeviceSelected = newTargetDevice.selected
215
+
216
+ if (oldTargetDeviceSelected !== newTargetDeviceSelected) {
217
+ wizard.resetAfterSelected()
218
+ }
219
+
220
+ const selectedSwitch = props.standardSwitchesInitial.find(
221
+ (sw) => newTargetDevice.standardSwitch === sw.name
222
+ )
223
+
224
+ if (newTargetDeviceSelected === '1' && selectedSwitch) {
225
+ mtuFromSwitch.value = selectedSwitch?.mtu || 1500
226
+ }
227
+ if (newTargetDeviceSelected === '3') {
228
+ mtuFromSwitch.value = newTargetDevice.mtu || 1500
229
+ }
230
+
231
+ targetDevice.value = useDeepCopy(newTargetDevice)
232
+ }
233
+
234
+ // Step's content data and changers (portProperties)
235
+ const portProperties = ref<UI_I_PortProperties>(
236
+ useDeepCopy(portPropertiesInitial)
237
+ )
238
+ const onChangePortProperties = (newFields: UI_I_PortProperties): void => {
239
+ portProperties.value = newFields
240
+ }
241
+
242
+ // Step's content data and changers (ipFourSettings)
243
+ const ipFourSettings = ref<UI_I_IpFourSettings>(ipFourSettingsInitial)
244
+ const onChangeIpFourSettings = (newFields: UI_I_IpFourSettings): void => {
245
+ ipFourSettings.value = newFields
246
+ }
247
+
248
+ // Step's content data and changers (connectionSettings)
249
+ const connectionSettings = ref<UI_I_ConnectionSettings>(
250
+ connectionSettingsInitial
251
+ )
252
+ const onChangeConnectionSettings = (
253
+ newFields: UI_I_ConnectionSettings
254
+ ): void => {
255
+ connectionSettings.value = newFields
256
+ }
257
+
258
+ const onHideAlert = (stepId: number): void => {
259
+ wizard.hideAlertMessagesByStepId(stepId)
260
+ }
261
+
262
+ // Choosing Scheme
263
+ watch(
264
+ [connectionType, targetDevice],
265
+ (newValues, oldValue) => {
266
+ const newCT = newValues[0] // -> newConnectionType
267
+ const oldCT = oldValue[0] // -> oldConnectionType
268
+ const newTD = newValues[1] // -> newTargetDevice
269
+
270
+ if (newCT !== oldCT) {
271
+ newCT === '0' && (targetDevice.value.selected = '1')
272
+ newCT === '1' && (targetDevice.value.selected = '1')
273
+ newCT === '2' && (targetDevice.value.selected = '2')
274
+ }
275
+ if (newCT === '0') {
276
+ ;(newTD.selected === '0' || newTD.selected === '1') &&
277
+ wizard.changeScheme(0)
278
+ newTD.selected === '3' && wizard.changeScheme(1)
279
+ }
280
+ if (newCT === '1') {
281
+ newTD.selected === '1' && wizard.changeScheme(2)
282
+ newTD.selected === '3' && wizard.changeScheme(3)
283
+ }
284
+ if (newCT === '2') {
285
+ newTD.selected === '2' && wizard.changeScheme(4)
286
+ newTD.selected === '3' && wizard.changeScheme(5)
287
+ }
288
+ },
289
+ { deep: true, immediate: true }
290
+ )
291
+
292
+ const onGetExistingStandardSwitches = (): void => {
293
+ wizard.setLoader(true)
294
+ emits('get-existing-standard-switches', () => wizard.setLoader(false))
295
+ }
296
+
297
+ watch(
298
+ () => wizard.selectedStepId,
299
+ (newSelectedStep: number) => {
300
+ if (
301
+ newSelectedStep === 1 &&
302
+ targetDevice.value.selected === '1' &&
303
+ !targetDevice.value.standardSwitch
304
+ )
305
+ onGetExistingStandardSwitches()
306
+
307
+ if (newSelectedStep !== 7) return // If last step
308
+ if (wizard.isSelectedScheme(0)) {
309
+ readyCompleteFields.value = createZeroSchemeReadyCompleteFunc(
310
+ targetDevice.value,
311
+ portProperties.value,
312
+ ipFourSettings.value,
313
+ localization.value
314
+ )
315
+ return
316
+ }
317
+
318
+ if (wizard.isSelectedScheme(1)) {
319
+ readyCompleteFields.value = createFirstSchemeReadyCompleteFunc(
320
+ targetDevice.value,
321
+ portProperties.value,
322
+ ipFourSettings.value,
323
+ addedAdapters.value,
324
+ localization.value
325
+ )
326
+ return
327
+ }
328
+ if (wizard.isSelectedScheme(2)) {
329
+ readyCompleteFields.value = createSecondSchemeReadyCompleteFunc(
330
+ connectionSettings.value,
331
+ targetDevice.value,
332
+ localization.value
333
+ )
334
+ return
335
+ }
336
+ if (wizard.isSelectedScheme(3)) {
337
+ readyCompleteFields.value = createThirdSchemeReadyCompleteFunc(
338
+ connectionSettings.value,
339
+ targetDevice.value,
340
+ addedAdapters.value,
341
+ localization.value
342
+ )
343
+ }
344
+ }
345
+ )
346
+
347
+ // Reset data
348
+ const reset = (): void => {
349
+ wizard.reset()
350
+ connectionType.value = '0'
351
+ targetDevice.value = useDeepCopy(targetDeviceInitial)
352
+ connectionSettings.value = useDeepCopy(connectionSettingsInitial)
353
+ portProperties.value = useDeepCopy(portPropertiesInitial)
354
+ ipFourSettings.value = useDeepCopy(ipFourSettingsInitial)
355
+ addedAdapters.value = []
356
+ adapterStatus.value = {
357
+ active: [],
358
+ standby: [],
359
+ unused: [],
360
+ }
361
+ }
362
+
363
+ const isShowNoConnectedActiveAdaptersModal = ref(false)
364
+ const isShowNoActiveAdaptersModal = ref(false)
365
+
366
+ const showNoConnectedActiveAdaptersModal = (): void => {
367
+ isShowNoConnectedActiveAdaptersModal.value = true
368
+ }
369
+ const onHideNoConnectedActiveAdaptersModal = (): void => {
370
+ isShowNoConnectedActiveAdaptersModal.value = false
371
+ }
372
+ const showNoActiveAdaptersModal = (): void => {
373
+ isShowNoActiveAdaptersModal.value = true
374
+ }
375
+ const onHideNoActiveAdaptersModal = (): void => {
376
+ isShowNoActiveAdaptersModal.value = false
377
+ }
378
+
379
+ const onConfirmNoActiveAdaptersModal = (): void => {
380
+ onHideNoConnectedActiveAdaptersModal()
381
+ onHideNoActiveAdaptersModal()
382
+ wizard.selectStepHard(wizard.waitingStepId)
383
+ }
384
+
385
+ const onGetFreeAdapters = (showAddAdapterModal: () => void): void => {
386
+ wizard.setLoader(true)
387
+ emits('get-free-adapters', () => {
388
+ wizard.setLoader(false)
389
+ showAddAdapterModal()
390
+ })
391
+ }
392
+
393
+ const checkFinal = async (): Promise<UI_I_ArbitraryObject<string>> => {
394
+ let sendData:
395
+ | UI_I_AddNetworkingZeroOrFirstSchemeDataSend
396
+ | UI_I_AddNetworkingSecondOrThirdSchemeDataSend
397
+
398
+ let type: 'network' | 'vmkernel'
399
+
400
+ if (wizard.isSelectedScheme(0) || wizard.isSelectedScheme(1)) {
401
+ const vlan = getVlanId(portProperties.value.vlanId)
402
+
403
+ sendData = addNetworkingZeroOrFirstSchemeDataFunc(
404
+ targetDevice.value,
405
+ Number(vlan),
406
+ portProperties.value,
407
+ ipFourSettings.value,
408
+ wizard.isSelectedScheme(1),
409
+ adapterStatus.value
410
+ )
411
+
412
+ type = 'vmkernel'
413
+ }
414
+
415
+ if (wizard.isSelectedScheme(2) || wizard.isSelectedScheme(3)) {
416
+ const vlan = getVlanId(connectionSettings.value.vlanId)
417
+
418
+ sendData = addNetworkingSecondOrThirdSchemeDataFunc(
419
+ connectionSettings.value,
420
+ targetDevice.value,
421
+ Number(vlan),
422
+ wizard.isSelectedScheme(2),
423
+ adapterStatus.value
424
+ )
425
+
426
+ type = 'network'
427
+ }
428
+
429
+ return new Promise((resolve, _reject) =>
430
+ emits(
431
+ 'add-networking-data-validate',
432
+ sendData,
433
+ type,
434
+ (err_arg: UI_I_ArbitraryObject<string>): void => {
435
+ resolve(err_arg)
436
+ }
437
+ )
438
+ )
439
+ }
440
+
441
+ const finalValidationFunc = async (
442
+ value: UI_I_WizardStep[]
443
+ ): Promise<UI_I_ValidationReturn> => {
444
+ let stepHasError = false
445
+
446
+ wizard.setLoader(true)
447
+
448
+ const validationFields: {
449
+ [key: string]: string
450
+ } = await checkFinal()
451
+
452
+ wizard.setLoader(false)
453
+
454
+ for (const fieldName in validationFields) {
455
+ const stepId = wizard.getStepIdByFieldName(fieldName)
456
+
457
+ if (stepId !== -1) {
458
+ stepHasError = wizard.setValidation(stepId, fieldName, {
459
+ fieldMessage: validationFields[fieldName],
460
+ alertMessage: validationFields[fieldName],
461
+ })
462
+ }
463
+ }
464
+
465
+ return {
466
+ stepHasError,
467
+ newValue: value,
468
+ }
469
+ }
470
+
471
+ const validationFunc = async (
472
+ value: UI_I_WizardStep[],
473
+ currentStep: UI_I_WizardStep,
474
+ nextStep: UI_I_WizardStep
475
+ ): Promise<UI_I_ValidationReturn> => {
476
+ let stepHasError = false
477
+ let stepShouldStop = {
478
+ ifOnCurrentStep: false,
479
+ ifFromAnyStep: false,
480
+ stoppageStepId: -1,
481
+ }
482
+
483
+ if (wizard.isValidateForStep(1, currentStep.id, nextStep.id)) {
484
+ const targetDeviceValidation = checkTargetDeviceSync(
485
+ localization.value,
486
+ targetDevice.value,
487
+ wizard,
488
+ value
489
+ )
490
+
491
+ value = targetDeviceValidation.newValue
492
+
493
+ stepHasError = stepHasError || targetDeviceValidation.stepHasError
494
+ }
495
+
496
+ if (wizard.isValidateForStep(2, currentStep.id, nextStep.id)) {
497
+ wizard.waitingStepId = nextStep.id
498
+
499
+ const adapterValidation = checkAdaptersSync(
500
+ localization.value,
501
+ adapterStatus.value,
502
+ value,
503
+ currentStep.id,
504
+ nextStep.id,
505
+ props.freeAdapters,
506
+ showNoActiveAdaptersModal,
507
+ showNoConnectedActiveAdaptersModal
508
+ )
509
+
510
+ value = adapterValidation.newValue
511
+
512
+ stepShouldStop = adapterValidation.stepShouldStop || stepShouldStop
513
+
514
+ stepHasError = stepHasError || adapterValidation.stepHasError
515
+ }
516
+
517
+ if (wizard.isValidateForStep(3, currentStep.id, nextStep.id)) {
518
+ const labelValidation = await checkNetworkAsync(
519
+ value,
520
+ portProperties.value.networkLabel,
521
+ 3,
522
+ UI_E_ValidationFields.PORT_PROPERTIES_NETWORK,
523
+ emits,
524
+ localization.value,
525
+ wizard
526
+ )
527
+
528
+ value = labelValidation.newValue
529
+
530
+ const portPropertiesValidation = checkPortPropertiesSync(
531
+ localization.value,
532
+ portProperties.value,
533
+ wizard,
534
+ value
535
+ )
536
+
537
+ value = portPropertiesValidation.newValue
538
+
539
+ stepHasError =
540
+ stepHasError ||
541
+ labelValidation.stepHasError ||
542
+ portPropertiesValidation.stepHasError
543
+ }
544
+
545
+ if (wizard.isValidateForStep(4, currentStep.id, nextStep.id)) {
546
+ const ipValidation = checkIpFourSettingsSync(
547
+ localization.value,
548
+ ipFourSettings.value,
549
+ wizard,
550
+ value
551
+ )
552
+
553
+ value = ipValidation.newValue
554
+
555
+ stepHasError = stepHasError || ipValidation.stepHasError
556
+ }
557
+
558
+ if (wizard.isValidateForStep(5, currentStep.id, nextStep.id)) {
559
+ const labelValidation = await checkNetworkAsync(
560
+ value,
561
+ connectionSettings.value.networkLabel,
562
+ 5,
563
+ UI_E_ValidationFields.CONNECTION_SETTINGS_NETWORK,
564
+ emits,
565
+ localization.value,
566
+ wizard
567
+ )
568
+
569
+ value = labelValidation.newValue
570
+
571
+ const connectionSettingsValidation = checkConnectionSettingsSync(
572
+ localization.value,
573
+ connectionSettings.value,
574
+ wizard,
575
+ value
576
+ )
577
+
578
+ value = connectionSettingsValidation.newValue
579
+
580
+ stepHasError =
581
+ stepHasError ||
582
+ labelValidation.stepHasError ||
583
+ connectionSettingsValidation.stepHasError
584
+ }
585
+
586
+ return {
587
+ newValue: value,
588
+ stepHasError,
589
+ stepShouldStop,
590
+ }
591
+ }
592
+
593
+ const onChangeSteps = async (value: UI_I_WizardStep[]): Promise<void> =>
594
+ wizard.changeSteps(value, validationFunc, finalValidationFunc)
595
+
596
+ const onHideAddNetworkingModal = (): void => {
597
+ emits('hide')
598
+ reset()
599
+ }
600
+
601
+ const onSubmit = async (): Promise<void> => {
602
+ wizard.setLoader(true)
603
+ let sendData:
604
+ | UI_I_AddNetworkingZeroOrFirstSchemeDataSend
605
+ | UI_I_AddNetworkingSecondOrThirdSchemeDataSend
606
+ let type: 'network' | 'vmkernel' = 'network'
607
+
608
+ if (wizard.isSelectedScheme(0) || wizard.isSelectedScheme(1)) {
609
+ const vlan = getVlanId(portProperties.value.vlanId)
610
+ type = 'vmkernel'
611
+ sendData = addNetworkingZeroOrFirstSchemeDataFunc(
612
+ targetDevice.value,
613
+ Number(vlan),
614
+ portProperties.value,
615
+ ipFourSettings.value,
616
+ wizard.isSelectedScheme(1),
617
+ adapterStatus.value
618
+ )
619
+ }
620
+
621
+ if (wizard.isSelectedScheme(2) || wizard.isSelectedScheme(3)) {
622
+ const vlan = getVlanId(connectionSettings.value.vlanId)
623
+ type = 'network'
624
+ sendData = addNetworkingSecondOrThirdSchemeDataFunc(
625
+ connectionSettings.value,
626
+ targetDevice.value,
627
+ Number(vlan),
628
+ wizard.isSelectedScheme(2),
629
+ adapterStatus.value
630
+ )
631
+ }
632
+
633
+ emits(
634
+ 'send-add-networking-data',
635
+ sendData,
636
+ type,
637
+ () => wizard.setLoader(false),
638
+ onHideAddNetworkingModal
639
+ )
640
+ }
641
+
642
+ onMounted(() => {
643
+ hostname.value = location.hostname
644
+ })
645
+ </script>
646
+
647
+ <style scoped lang="scss">
648
+ :deep(.modal) {
649
+ & > .modal-dialog > .modal-content > .modal-body {
650
+ height: calc(100% - 110px);
651
+ .disabled-on-time {
652
+ opacity: 0.4;
653
+ pointer-events: none;
654
+ }
655
+ }
656
+ }
657
+ :deep(.disabled-on-time) {
658
+ opacity: 0.4;
659
+ pointer-events: none;
660
+ }
661
+ :deep(.wizard-content-container.add-networking-step) {
662
+ padding: 0px 15px 10px 10px;
663
+
664
+ .danger-not-valid {
665
+ border: 2px solid red;
666
+ border-bottom: 1px solid #db2100;
667
+ }
668
+ .tooltip-field {
669
+ margin-right: 12px;
670
+ }
671
+
672
+ .horizontal-flex-container {
673
+ margin-bottom: 5px;
674
+ min-height: 36px;
675
+ display: flex;
676
+ flex-direction: row;
677
+ }
678
+ .property-label-group {
679
+ width: 140px;
680
+ }
681
+ .disabled {
682
+ opacity: 0.4;
683
+ pointer-events: none;
684
+ }
685
+ .wizard-content-port {
686
+ .margin-left-property-value-group {
687
+ margin-left: 10px;
688
+ }
689
+
690
+ .property-value-group {
691
+ padding-left: 23px;
692
+ }
693
+ .horizontal-flex-container {
694
+ min-height: 24px;
695
+ margin-bottom: 0;
696
+ }
697
+ .radio {
698
+ min-height: 39px;
699
+ margin: 10px 0;
700
+ }
701
+ .form-block {
702
+ margin: 12px 0 24px 0;
703
+ padding-left: 23px;
704
+
705
+ &.form-block-ipv {
706
+ input[type='text'] {
707
+ width: 143px;
708
+ }
709
+ .horizontal-flex-container > label {
710
+ margin-right: 50px;
711
+ }
712
+ }
713
+ }
714
+ .edit-vmkernel-adapter-section {
715
+ padding-top: 12px;
716
+
717
+ label {
718
+ input[type='checkbox'] {
719
+ margin-right: 4px;
720
+ transform: translateY(1px);
721
+ }
722
+ }
723
+ .horizontal-flex-container {
724
+ margin-bottom: 5px;
725
+ }
726
+ }
727
+ .port-properties-network-label {
728
+ width: 280px;
729
+ }
730
+ .port-properties-padding {
731
+ padding-top: 8px;
732
+ }
733
+ .port-properties-mtu-selector {
734
+ margin-right: 12px;
735
+ }
736
+ .port-properties-mtu-container {
737
+ display: flex;
738
+ }
739
+ select {
740
+ height: 24px;
741
+ }
742
+ }
743
+ .nw-property-value-group {
744
+ display: inline;
745
+ }
746
+ }
747
+
748
+ :deep(.modal-body-content.modal-body-content__confirmation) {
749
+ display: flex;
750
+ .confirm-icon-container {
751
+ margin-right: 20px;
752
+ }
753
+ .preserve-newlines {
754
+ white-space: pre-line;
755
+ font-size: 15px;
756
+ }
757
+ }
758
+
759
+ .add-networking-wizard.is-dark {
760
+ :deep(.wizard-content-container.add-networking-step) {
761
+ .ready-complete-container {
762
+ background-color: var(--pannel-bg-color);
763
+ margin-top: 12px;
764
+
765
+ span {
766
+ color: var(--description-color);
767
+ }
768
+ }
769
+
770
+ .add-networking-radio-button-description {
771
+ color: var(--description-color);
772
+ }
773
+
774
+ .property-label-group {
775
+ color: var(--main-color-mode2);
776
+ }
777
+ .flex-property-label-group {
778
+ color: var(--main-color-mode2);
779
+ }
780
+ .flex-property-value-group {
781
+ select {
782
+ color: #fff;
783
+ }
784
+ }
785
+ .failover-order-master {
786
+ .secondary-title label {
787
+ color: #fff;
788
+ }
789
+ }
790
+ .k-grid-content {
791
+ background-color: var(--modal-bg-color);
792
+ }
793
+ .vui-action-bar {
794
+ background-color: var(--pannel-bg-color);
795
+ color: var(--title-color);
796
+ padding: 8px 0 3px;
797
+
798
+ .action-link-container:not(.disabled) {
799
+ &:hover {
800
+ background-color: #29414e;
801
+ border: 1px solid #c7e9ff;
802
+ }
803
+ }
804
+
805
+ svg {
806
+ fill: #fff;
807
+ }
808
+ }
809
+
810
+ .k-grid.k-widget .k-grid-content {
811
+ border-left: 1px solid #485764;
812
+ border-right: 1px solid #485764;
813
+ border-top: 1px solid #ddd;
814
+ border-bottom: 1px solid #ddd;
815
+
816
+ tbody tr {
817
+ background-color: var(--modal-bg-color);
818
+
819
+ td {
820
+ border-bottom: 1px solid #666666;
821
+ border-color: #666666;
822
+ }
823
+
824
+ &:hover {
825
+ background-color: #324f61;
826
+ color: var(--title-color);
827
+
828
+ td {
829
+ border-bottom: 1px solid #ffffff;
830
+ }
831
+ }
832
+
833
+ &.k-state-selected {
834
+ background-color: #d8e3e9;
835
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset;
836
+
837
+ td span {
838
+ color: #000;
839
+ }
840
+ }
841
+ }
842
+ }
843
+
844
+ .failover-order-details {
845
+ &.relative-container .absolute-container {
846
+ background-color: var(--pannel-bg-color);
847
+ color: var(--main-color-mode2);
848
+
849
+ &:has(.no-items-selected-container) {
850
+ background-color: transparent;
851
+ }
852
+ }
853
+
854
+ td span {
855
+ color: var(--main-color-mode2);
856
+ }
857
+ button span {
858
+ color: var(--main-color-mode2);
859
+
860
+ &:hover:not(.disabled) {
861
+ background-color: transparent;
862
+ }
863
+ }
864
+ button.active span {
865
+ color: #fff;
866
+ }
867
+ }
868
+ }
869
+
870
+ .select-adapter-info span {
871
+ color: var(--main-color-mode2);
872
+ }
873
+ }
874
+ </style>