bfg-common 1.2.189 → 1.2.190

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 (81) hide show
  1. package/assets/localization/local_be.json +2 -3
  2. package/assets/localization/local_en.json +2 -3
  3. package/assets/localization/local_hy.json +2 -3
  4. package/assets/localization/local_kk.json +2 -3
  5. package/assets/localization/local_ru.json +2 -3
  6. package/assets/localization/local_zh.json +2 -3
  7. package/components/atoms/table/simpleTable/SimpleTable.vue +2 -5
  8. package/components/atoms/wizard/Wizard.vue +4 -4
  9. package/components/atoms/wizard/models/interfaces.ts +3 -4
  10. package/components/atoms/wizard/utils/utils.ts +27 -106
  11. package/components/common/addNetworking/AddNetworking.vue +1123 -0
  12. package/components/common/addNetworking/Wizard.vue +286 -0
  13. package/components/common/{wizards/network/add/config/steps.ts → addNetworking/config/addNetworkingSteps.ts} +60 -107
  14. package/components/common/{wizards/network/add → addNetworking}/config/index.ts +16 -2
  15. package/components/common/{wizards/network/add → addNetworking}/config/initialData.ts +19 -4
  16. package/components/common/{wizards/network/add → addNetworking}/config/portPropertiesStep.ts +1 -1
  17. package/components/common/{wizards/network/add → addNetworking}/config/selectSwitch.ts +1 -1
  18. package/components/common/{wizards/network/add → addNetworking}/config/sendData.ts +1 -1
  19. package/components/common/addNetworking/config/temporaryData.ts +8 -0
  20. package/components/common/addNetworking/config/validation.ts +23 -0
  21. package/components/common/{wizards/network/add → addNetworking}/modals/SelectNetwork.vue +2 -2
  22. package/components/common/{wizards/network/add → addNetworking}/modals/SelectStandardSwitch.vue +2 -2
  23. package/components/common/{wizards/network/add → addNetworking}/modals/SelectSwitch.vue +2 -2
  24. package/components/common/addNetworking/models/enums.ts +7 -0
  25. package/components/common/{wizards/network/add → addNetworking}/models/interfaces.ts +37 -30
  26. package/components/common/addNetworking/models/types.ts +13 -0
  27. package/components/common/addNetworking/steps/ConnectionSettings.vue +269 -0
  28. package/components/common/{wizards/network/add → addNetworking}/steps/CreateStandardSwitch.vue +7 -0
  29. package/components/common/addNetworking/steps/Header.vue +53 -0
  30. package/components/common/addNetworking/steps/IpFourSettings.vue +361 -0
  31. package/components/common/{wizards/network/add → addNetworking}/steps/PhysicalAdapter.vue +12 -1
  32. package/components/common/{wizards/network/add → addNetworking}/steps/PortProperties.vue +180 -57
  33. package/components/common/{wizards/network/add → addNetworking}/steps/ReadyComplete.vue +10 -1
  34. package/components/common/{wizards/network/add → addNetworking}/steps/SelectConnectionType.vue +15 -3
  35. package/components/common/{wizards/network/add → addNetworking}/steps/SelectedTargetDevice.vue +212 -106
  36. package/components/common/addNetworking/utils/index.ts +212 -0
  37. package/components/common/diagramMain/DiagramMain.vue +47 -11
  38. package/components/common/diagramMain/modals/MigrateVmkernelAdapter.vue +603 -0
  39. package/components/common/diagramMain/modals/config/index.ts +6 -0
  40. package/components/common/diagramMain/modals/config/migrateVmkernelAdapterSteps.ts +81 -0
  41. package/components/common/diagramMain/modals/config/validation.ts +3 -0
  42. package/components/common/diagramMain/modals/config/vmKernelAdapter.ts +2 -2
  43. package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +1 -1
  44. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +1 -1
  45. package/components/common/diagramMain/modals/steps/ConnectionSettings.vue +221 -0
  46. package/components/common/diagramMain/modals/steps/Header.vue +60 -0
  47. package/components/common/diagramMain/modals/{migrateVmkernelAdapter/steps → steps}/SelectVmkernelAdapter.vue +86 -24
  48. package/components/common/diagramMain/modals/{migrateVmkernelAdapter/steps → steps}/VmkernelAdapterReadyComplete.vue +11 -7
  49. package/components/common/diagramMain/models/enums.ts +7 -6
  50. package/components/common/diagramMain/models/interfaces.ts +29 -28
  51. package/components/common/diagramMain/models/types.ts +1 -0
  52. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +447 -447
  53. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +1 -1
  54. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbController.vue +77 -77
  55. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +1 -1
  56. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCard.vue +177 -177
  57. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptions.vue +1 -1
  58. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptions.vue +181 -181
  59. package/package.json +1 -1
  60. package/components/common/diagramMain/modals/migrateVmkernelAdapter/MigrateVmkernelAdapter.vue +0 -531
  61. package/components/common/diagramMain/modals/migrateVmkernelAdapter/config/steps.ts +0 -114
  62. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/ConnectionSettings.vue +0 -161
  63. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/common.ts +0 -47
  64. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/connectionSettings.ts +0 -146
  65. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/selectVmkernelAdapter.ts +0 -54
  66. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/validations.ts +0 -19
  67. package/components/common/wizards/network/add/Add.vue +0 -874
  68. package/components/common/wizards/network/add/models/enums.ts +0 -17
  69. package/components/common/wizards/network/add/models/types.ts +0 -2
  70. package/components/common/wizards/network/add/steps/ConnectionSettings.vue +0 -148
  71. package/components/common/wizards/network/add/steps/IpFourSettings.vue +0 -245
  72. package/components/common/wizards/network/add/utils/index.ts +0 -4
  73. package/components/common/wizards/network/add/validations/common.ts +0 -58
  74. package/components/common/wizards/network/add/validations/connectionSettings.ts +0 -75
  75. package/components/common/wizards/network/add/validations/createStandardSwitch.ts +0 -58
  76. package/components/common/wizards/network/add/validations/ipFourSettings.ts +0 -188
  77. package/components/common/wizards/network/add/validations/networkValidation.ts +0 -73
  78. package/components/common/wizards/network/add/validations/portProperties.ts +0 -87
  79. package/components/common/wizards/network/add/validations/targetDevice.ts +0 -113
  80. package/components/common/wizards/network/add/validations/validations.ts +0 -43
  81. /package/components/common/{wizards/network/add → addNetworking}/mappers/mappers.ts +0 -0
@@ -1,11 +1,15 @@
1
1
  <template>
2
2
  <div class="wizard-content-container add-networking-step">
3
+ <common-add-networking-steps-header
4
+ :title="props.title"
5
+ :text="props.text"
6
+ />
3
7
  <div class="wizard-content">
4
8
  <atoms-alert
5
- v-if="props.alertMessages.length"
9
+ v-if="hasValidationError"
6
10
  status="alert-danger"
7
- :items="props.alertMessages"
8
- @remove="onHideAlert"
11
+ :items="props.errorMessages"
12
+ @remove="onHideErrorMessageAlert"
9
13
  />
10
14
  <form>
11
15
  <div v-show="props.connectionType === '0'">
@@ -27,42 +31,14 @@
27
31
  }"
28
32
  >
29
33
  <div>
30
- <atoms-tooltip-error
31
- :has-error="
32
- fields.selected === '0' &&
33
- !!props.messagesFields.network.field
34
- "
34
+ <input v-model="fields.network" type="text" disabled />
35
+ <button
36
+ type="button"
37
+ class="btn btn-link"
38
+ @click="onShowModal('select-network')"
35
39
  >
36
- <template #elem>
37
- <fieldset class="fieldset-block">
38
- <div>
39
- <input
40
- v-model="fields.network"
41
- type="text"
42
- disabled
43
- :class="[
44
- 'tooltip-field show-arrow',
45
- {
46
- 'danger-not-valid':
47
- fields.selected === '0' &&
48
- props.messagesFields.network.field,
49
- },
50
- ]"
51
- />
52
- <button
53
- type="button"
54
- class="btn btn-link"
55
- @click="onShowModal('select-network')"
56
- >
57
- {{ localization.browseDoted }}
58
- </button>
59
- </div>
60
- </fieldset>
61
- </template>
62
- <template #content>
63
- {{ props.messagesFields.network.field }}
64
- </template>
65
- </atoms-tooltip-error>
40
+ {{ localization.browseDoted }}
41
+ </button>
66
42
  </div>
67
43
  </fieldset>
68
44
  </div>
@@ -90,7 +66,8 @@
90
66
  <div>
91
67
  <atoms-tooltip-error
92
68
  :has-error="
93
- fields.selected === '1' && !!props.messagesFields.switch.field
69
+ fields.selected === '1' &&
70
+ !!fieldsErrorMessages.standardSwitch
94
71
  "
95
72
  >
96
73
  <template #elem>
@@ -105,7 +82,7 @@
105
82
  {
106
83
  'danger-not-valid':
107
84
  fields.selected === '1' &&
108
- props.messagesFields.switch.field,
85
+ fieldsErrorMessages.standardSwitch,
109
86
  },
110
87
  ]"
111
88
  />
@@ -120,7 +97,7 @@
120
97
  </fieldset>
121
98
  </template>
122
99
  <template #content>
123
- {{ props.messagesFields.switch.field }}
100
+ {{ fieldsErrorMessages.standardSwitch }}
124
101
  </template>
125
102
  </atoms-tooltip-error>
126
103
  </div>
@@ -147,42 +124,14 @@
147
124
  }"
148
125
  >
149
126
  <div>
150
- <atoms-tooltip-error
151
- :has-error="
152
- fields.selected === '2' &&
153
- !!props.messagesFields.switch2.field
154
- "
127
+ <input v-model="fields.switch" type="text" disabled />
128
+ <button
129
+ type="button"
130
+ class="btn btn-link"
131
+ @click="onShowModal('select-switch')"
155
132
  >
156
- <template #elem>
157
- <fieldset class="fieldset-block">
158
- <div>
159
- <input
160
- v-model="fields.switch"
161
- type="text"
162
- disabled
163
- :class="[
164
- 'tooltip-field show-arrow',
165
- {
166
- 'danger-not-valid':
167
- fields.selected === '2' &&
168
- props.messagesFields.switch2.field,
169
- },
170
- ]"
171
- />
172
- <button
173
- type="button"
174
- class="btn btn-link"
175
- @click="onShowModal('select-switch')"
176
- >
177
- {{ localization.browseDoted }}
178
- </button>
179
- </div>
180
- </fieldset>
181
- </template>
182
- <template #content>
183
- {{ props.messagesFields.switch2.field }}
184
- </template>
185
- </atoms-tooltip-error>
133
+ {{ localization.browseDoted }}
134
+ </button>
186
135
  </div>
187
136
  </fieldset>
188
137
  </div>
@@ -213,11 +162,7 @@
213
162
  <div class="margin-left-property-value-group">
214
163
  <div class="property-value-group tooltip-field-container">
215
164
  <fieldset>
216
- <atoms-tooltip-error
217
- :has-error="
218
- !!props.messagesFields['new_switch.mtu'].field
219
- "
220
- >
165
+ <atoms-tooltip-error :has-error="!!fieldsErrorMessages.mtu">
221
166
  <template #elem>
222
167
  <input
223
168
  id="mtu"
@@ -227,15 +172,14 @@
227
172
  :class="[
228
173
  'tooltip-field show-arrow',
229
174
  {
230
- 'danger-not-valid':
231
- props.messagesFields['new_switch.mtu'].field,
175
+ 'danger-not-valid': fieldsErrorMessages.mtu,
232
176
  },
233
177
  ]"
234
178
  @click.stop
235
179
  />
236
180
  </template>
237
181
  <template #content>
238
- {{ props.messagesFields['new_switch.mtu'].field }}
182
+ {{ fieldsErrorMessages.mtu }}
239
183
  </template>
240
184
  </atoms-tooltip-error>
241
185
  </fieldset>
@@ -248,7 +192,7 @@
248
192
  </div>
249
193
  </div>
250
194
  <teleport to="body">
251
- <common-wizards-network-add-modals-select-standard-switch
195
+ <common-add-networking-modals-select-standard-switch
252
196
  modal-name="select-standard-switch-modal"
253
197
  view-name="select-standard-switch"
254
198
  width="576px"
@@ -259,24 +203,24 @@
259
203
  @select-standard-switch="onSelectStandardSwitch"
260
204
  @hide="onHideStandardSwitchModal"
261
205
  />
262
- <common-wizards-network-add-modals-select-switch
206
+ <common-add-networking-modals-select-switch
263
207
  modal-name="select-switch-modal"
264
208
  view-name="select-switch"
265
209
  width="576px"
266
210
  height="468px"
267
211
  :title="localization.selectSwitch"
268
- :data="[]"
212
+ :data="temporarySwitches"
269
213
  :show="isShowSwitchModal"
270
214
  @select-switch="onSelectSwitch"
271
215
  @hide="onHideSwitchModal"
272
216
  />
273
- <common-wizards-network-add-modals-select-network
217
+ <common-add-networking-modals-select-network
274
218
  modal-name="select-network-modal"
275
219
  view-name="select-network"
276
220
  width="576px"
277
221
  height="468px"
278
222
  :title="localization.selectNetwork"
279
- :data="[]"
223
+ :data="temporaryNetworks"
280
224
  :show="isShowNetworkModal"
281
225
  @select-network="onSelectNetwork"
282
226
  @hide="onHideNetworkModal"
@@ -290,42 +234,195 @@ import {
290
234
  UI_I_TargetDevice,
291
235
  UI_I_Switch,
292
236
  UI_I_Network,
293
- } from '~/components/common/wizards/network/add/models/interfaces'
294
- import { UI_I_ErrorFields } from '~/components/atoms/wizard/models/interfaces'
295
- import type Wizard from '~/components/atoms/wizard/utils/utils'
296
- import { validateMtuTargetDeviceLocal } from '~/components/common/wizards/network/add/validations/validations'
237
+ UI_I_TargetDeviceFieldsErrorMessages,
238
+ } from '~/components/common/addNetworking/models/interfaces'
239
+ import {
240
+ temporarySwitches,
241
+ temporaryNetworks,
242
+ targetDeviceFieldsErrorMessages,
243
+ } from '~/components/common/addNetworking/config'
244
+ import { UI_T_TargetDeviceFieldName } from '~/components/common/addNetworking/models/types'
297
245
 
246
+ // Props from up
298
247
  const props = defineProps<{
299
- targetDevice: UI_I_TargetDevice
248
+ title: string
249
+ text: string
250
+ stepId: number
300
251
  connectionType: string
252
+ targetDevice: UI_I_TargetDevice
253
+ isShowErrorMessageAlert: boolean
254
+ errorMessages: string[]
301
255
  standardSwitchesInitial: UI_I_Switch[]
302
- alertMessages: string[]
303
- messagesFields: UI_I_ArbitraryObject<UI_I_ErrorFields>
304
- wizard: Wizard
256
+ error: UI_I_ArbitraryObject<string>
305
257
  }>()
306
258
 
259
+ // UI_I_Localization
307
260
  const localization = computed<UI_I_Localization>(() => useLocal())
308
261
 
262
+ // Define emits for changing data and validation messages
309
263
  const emits = defineEmits<{
310
264
  (event: 'change-target-device', targetDevice: UI_I_TargetDevice): void
311
- (event: 'hide-alert', stepId: 2): void
265
+ (
266
+ event: 'change-error-messages',
267
+ errorMessages: string[],
268
+ stepIndex: number
269
+ ): void
270
+ (event: 'hide-error-message-alert'): void
271
+ (event: 'set-error-empty', fieldName: string): void
312
272
  }>()
313
273
 
314
274
  const isConnectionTypeFirstTwo = computed<boolean>(() =>
315
275
  ['0', '1'].includes(props.connectionType)
316
276
  )
317
277
 
278
+ // Validation error check for this step
279
+ const hasValidationError = computed<boolean>(
280
+ () => props.isShowErrorMessageAlert && !!props.errorMessages.length
281
+ )
282
+
318
283
  const fields = ref<UI_I_TargetDevice>(useDeepCopy(props.targetDevice))
319
284
 
320
- let prevMtu = fields.value.mtu
285
+ const fieldsErrorMessages = ref<UI_I_TargetDeviceFieldsErrorMessages>(
286
+ targetDeviceFieldsErrorMessages
287
+ )
288
+
289
+ const messageTexts = (
290
+ local: UI_I_Localization
291
+ ): UI_I_ArbitraryObject<string> => ({
292
+ network: local.networkInvalidMessage,
293
+ switch: local.switchInvalidMessage,
294
+ standardSwitch: local.standardSwitchInvalidMessage,
295
+ mtu: local.mtuInvalidMessage,
296
+ })
297
+
298
+ const isIntegerNumberInRange = (
299
+ value: number | string | undefined,
300
+ down: number,
301
+ up: number
302
+ ) =>
303
+ isNaN(Number(value)) ||
304
+ Number(value) < down ||
305
+ Number(value) > up ||
306
+ Number(value) !== Math.round(Number(value))
307
+
308
+ const setMessageOnChangedField = (
309
+ selected: string,
310
+ values: UI_I_TargetDevice,
311
+ name: UI_T_TargetDeviceFieldName,
312
+ text: string
313
+ ): void => {
314
+ if (
315
+ selected === '3' &&
316
+ name === 'mtu' &&
317
+ (values.mtu === 0 ? '0' : values.mtu) &&
318
+ isIntegerNumberInRange(values.mtu, 1280, 65535)
319
+ ) {
320
+ fieldsErrorMessages.value[name] = text
321
+ return
322
+ }
323
+ if (selected === '0' && name === 'network' && !values.network) {
324
+ fieldsErrorMessages.value[name] = text
325
+ return
326
+ }
327
+ if (selected === '2' && name === 'switch' && !values.switch) {
328
+ fieldsErrorMessages.value[name] = text
329
+ return
330
+ }
331
+ if (selected === '1' && name === 'standardSwitch' && !values.standardSwitch) {
332
+ fieldsErrorMessages.value[name] = text
333
+ return
334
+ }
335
+ fieldsErrorMessages.value[name] = ''
336
+ }
337
+
338
+ watch(
339
+ () => props.error,
340
+ (newError) => {
341
+ fieldsErrorMessages.value = {
342
+ network: '',
343
+ switch: '',
344
+ standardSwitch: newError.switch,
345
+ mtu: newError['new_switch.mtu'],
346
+ }
347
+
348
+ const fieldsErrorMessagesFiltered = Object.values(
349
+ fieldsErrorMessages.value
350
+ ).filter(
351
+ (errorMessage: string | undefined) =>
352
+ errorMessage !== '' && errorMessage !== undefined
353
+ )
354
+
355
+ emits('change-error-messages', fieldsErrorMessagesFiltered, props.stepId)
356
+ },
357
+ { deep: true, immediate: true }
358
+ )
359
+
360
+ const oldFields = ref<any>(useDeepCopy(fields.value))
361
+
362
+ const cacheOldFields = (newFields: UI_I_TargetDevice): void => {
363
+ oldFields.value = useDeepCopy(newFields)
364
+ }
321
365
 
366
+ const setErrorEmpty = (
367
+ newValue: UI_I_TargetDevice,
368
+ oldValue: UI_I_TargetDevice,
369
+ fieldName: keyof UI_I_TargetDevice,
370
+ errFieldName: string
371
+ ): void => {
372
+ ;(newValue[fieldName] !== oldValue[fieldName] ||
373
+ newValue.selected !== oldValue.selected) &&
374
+ emits('set-error-empty', errFieldName)
375
+ }
376
+
377
+ // Changing data and validate they
322
378
  watch(
323
379
  fields,
324
380
  (newFields: UI_I_TargetDevice) => {
325
- newFields.mtu !== prevMtu &&
326
- validateMtuTargetDeviceLocal(localization.value, newFields, props.wizard)
381
+ fieldsErrorMessages.value = targetDeviceFieldsErrorMessages
382
+
383
+ setErrorEmpty(newFields, oldFields.value, 'standardSwitch', 'switch')
384
+ setErrorEmpty(newFields, oldFields.value, 'network', 'network')
385
+ setErrorEmpty(newFields, oldFields.value, 'switch', 'switch')
386
+ setErrorEmpty(newFields, oldFields.value, 'mtu', 'new_switch.mtu')
387
+
388
+ cacheOldFields(newFields)
389
+
390
+ setMessageOnChangedField(
391
+ newFields.selected,
392
+ newFields,
393
+ 'mtu',
394
+ messageTexts(localization.value).mtu
395
+ )
396
+
397
+ setMessageOnChangedField(
398
+ newFields.selected,
399
+ newFields,
400
+ 'network',
401
+ messageTexts(localization.value).network
402
+ )
327
403
 
328
- prevMtu = newFields.mtu
404
+ setMessageOnChangedField(
405
+ newFields.selected,
406
+ newFields,
407
+ 'switch',
408
+ messageTexts(localization.value).switch
409
+ )
410
+
411
+ setMessageOnChangedField(
412
+ newFields.selected,
413
+ newFields,
414
+ 'standardSwitch',
415
+ messageTexts(localization.value).standardSwitch
416
+ )
417
+
418
+ const fieldsErrorMessagesFiltered = Object.values(
419
+ fieldsErrorMessages.value
420
+ ).filter((errorMessage: string) => errorMessage !== '')
421
+
422
+ fieldsErrorMessagesFiltered.length === 0 &&
423
+ emits('hide-error-message-alert')
424
+
425
+ emits('change-error-messages', fieldsErrorMessagesFiltered, props.stepId)
329
426
 
330
427
  emits('change-target-device', newFields)
331
428
  },
@@ -362,7 +459,9 @@ const onShowModal = (value: string): void => {
362
459
 
363
460
  // Switches selection functionality
364
461
  const onSelectSwitch = (selectedSwitchId: string): void => {
365
- fields.value.switch = ''
462
+ fields.value.switch = temporarySwitches.find(
463
+ (switchData: UI_I_Switch) => switchData.id === selectedSwitchId
464
+ )?.name
366
465
  }
367
466
  const onSelectStandardSwitch = (selectedSwitchId: string): void => {
368
467
  const selectedSwitch = props.standardSwitchesInitial.find(
@@ -371,7 +470,9 @@ const onSelectStandardSwitch = (selectedSwitchId: string): void => {
371
470
  fields.value.standardSwitch = selectedSwitch?.name
372
471
  }
373
472
  const onSelectNetwork = (selectedNetworkId: string): void => {
374
- fields.value.network = ''
473
+ fields.value.network = temporaryNetworks.find(
474
+ (networkData: UI_I_Network) => networkData.id === selectedNetworkId
475
+ )?.name
375
476
  }
376
477
 
377
478
  watch(
@@ -384,9 +485,13 @@ watch(
384
485
  { deep: true, immediate: true }
385
486
  )
386
487
 
387
- const onHideAlert = (): void => {
388
- emits('hide-alert', 1)
488
+ // Validation message show and hide
489
+ const onHideErrorMessageAlert = (): void => {
490
+ emits('hide-error-message-alert')
389
491
  }
492
+ onUnmounted(() => {
493
+ emits('hide-error-message-alert')
494
+ })
390
495
  </script>
391
496
 
392
497
  <style scoped lang="scss">
@@ -406,6 +511,7 @@ const onHideAlert = (): void => {
406
511
  height: auto;
407
512
  width: inherit;
408
513
  margin: 0;
514
+ padding-top: 12px;
409
515
 
410
516
  fieldset {
411
517
  display: flex;
@@ -0,0 +1,212 @@
1
+ import {
2
+ UI_I_NetworkLabelCheckExisting,
3
+ UI_I_Step,
4
+ } from '~/components/common/addNetworking/models/interfaces'
5
+ import { UI_E_StepStatus } from '~/components/common/addNetworking/models/enums'
6
+
7
+ export class Wizard {
8
+ stepsScheme: UI_I_Step[][]
9
+ selectedStepScheme: Ref<number>
10
+ private _selectedStep: Ref<number>
11
+ completedStepsId: Ref<number[]>
12
+ private _waitingStepId: Ref<number>
13
+
14
+ constructor(stepsScheme: UI_I_Step[][]) {
15
+ this.selectedStepScheme = ref<number>(0)
16
+ this._selectedStep = ref<number>(0)
17
+ this.stepsScheme = stepsScheme
18
+ this.completedStepsId = ref<number[]>([])
19
+ this._waitingStepId = ref<number>(0)
20
+ }
21
+
22
+ get selectedScheme(): number {
23
+ return this.selectedStepScheme.value
24
+ }
25
+
26
+ set selectedScheme(stepScheme: number) {
27
+ this.selectedStepScheme.value = stepScheme
28
+ }
29
+
30
+ isSelectedScheme(stepScheme: number): boolean {
31
+ return this.selectedStepScheme.value === stepScheme
32
+ }
33
+
34
+ resetStepsUntilX(x: number): void {
35
+ this.completedStepsId.value.length >= x &&
36
+ (this.completedStepsId.value.length = x - 1)
37
+ }
38
+
39
+ get selectedStep(): number {
40
+ return this._selectedStep.value
41
+ }
42
+
43
+ set selectedStep(step: number) {
44
+ this._selectedStep.value = step
45
+ }
46
+
47
+ get waitingStepId(): number {
48
+ return this._waitingStepId.value
49
+ }
50
+
51
+ set waitingStepId(step: number) {
52
+ this._waitingStepId.value = step
53
+ }
54
+
55
+ isSelectedStep(step: number): boolean {
56
+ return this.selectedStep === step
57
+ }
58
+
59
+ isUpThenSelectedStep(step: number): boolean {
60
+ return this.selectedStep <= step
61
+ }
62
+
63
+ isDownThenSelectedStep(step: number): boolean {
64
+ return this.selectedStep >= step
65
+ }
66
+
67
+ reset(): void {
68
+ this.selectedScheme = 0
69
+ this.selectedStep = 0
70
+ this.resetStepsUntilX(1)
71
+ }
72
+
73
+ goToNextStep(
74
+ cb?: (
75
+ selectedStepIndex: number,
76
+ nextStepId: number,
77
+ ...args: any
78
+ ) => boolean,
79
+ ...args: any
80
+ ): void {
81
+ const selectedStepIndex: number = this.stepsWithStatus().findIndex(
82
+ (step: UI_I_Step) => this.isSelectedStep(step.id)
83
+ )
84
+
85
+ const nextStepId: number = this.stepsWithStatus()[selectedStepIndex + 1].id
86
+
87
+ if (!cb || cb(selectedStepIndex, nextStepId, ...args)) {
88
+ this.selectedStep = this.stepsWithStatus()[selectedStepIndex + 1].id
89
+ }
90
+ }
91
+
92
+ goToSelectedStep(step: number, cb?: (step: number) => boolean): void {
93
+ if (!cb || cb(step)) {
94
+ this.selectedStep = step
95
+ }
96
+ }
97
+
98
+ goToBackStep(): void {
99
+ const selectedStepIndex: number = this.stepsWithStatus().findIndex(
100
+ (step: UI_I_Step) => this.isSelectedStep(step.id)
101
+ )
102
+ this.selectedStep = this.stepsWithStatus()[selectedStepIndex - 1].id
103
+ }
104
+
105
+ isBeforeLastStep(): boolean {
106
+ const selectedScheme: UI_I_Step[] = this.stepsScheme[this.selectedScheme]
107
+
108
+ return selectedScheme[selectedScheme.length - 2].id === this.selectedStep
109
+ }
110
+
111
+ isLastStep(step: number): boolean {
112
+ const selectedScheme: UI_I_Step[] = this.stepsScheme[this.selectedScheme]
113
+
114
+ return selectedScheme[selectedScheme.length - 1].id === step
115
+ }
116
+
117
+ stepsWithStatus(): UI_I_Step[] {
118
+ // let selectedFlag = false
119
+ let lastId = 0
120
+
121
+ return this.stepsScheme[this.selectedScheme].map(
122
+ (step: UI_I_Step): UI_I_Step => {
123
+ if (
124
+ // If a selected step is completed
125
+ step.id === this.selectedStep &&
126
+ this.completedStepsId.value.includes(step.id)
127
+ ) {
128
+ lastId = step.id
129
+ return { ...step, status: UI_E_StepStatus.CompleteSelected }
130
+ } else if (
131
+ // If a step is completed
132
+ step.id < this.selectedStep ||
133
+ this.completedStepsId.value.includes(step.id)
134
+ ) {
135
+ !this.completedStepsId.value.includes(step.id) &&
136
+ this.completedStepsId.value.push(step.id)
137
+ lastId = step.id
138
+ return { ...step, status: UI_E_StepStatus.Complete }
139
+ } else if (
140
+ // If a step is selected, but is not active
141
+ step.id === this.selectedStep
142
+ ) {
143
+ // selectedFlag = true
144
+ lastId = step.id
145
+ return { ...step, status: UI_E_StepStatus.Selected }
146
+ } else if (
147
+ // If a step is active
148
+
149
+ lastId ===
150
+ this.completedStepsId.value[this.completedStepsId.value.length - 1]
151
+ ) {
152
+ // console.log(selectedFlag)
153
+ // selectedFlag = false
154
+ lastId = step.id
155
+ return { ...step, status: UI_E_StepStatus.Active }
156
+ } // If a step is disabled
157
+ else {
158
+ lastId = step.id
159
+ return { ...step, status: UI_E_StepStatus.Disabled }
160
+ }
161
+ }
162
+ )
163
+ }
164
+
165
+ // -----------------
166
+ // Not common-------
167
+
168
+ checkNetworkLabelBeforeGoToNextStep(
169
+ currentStep: number,
170
+ networkLabel: string,
171
+ isNetworkInvalid: UI_I_NetworkLabelCheckExisting | undefined,
172
+ checkNetwork: (networkLabel: string, nextStep?: number) => void
173
+ ): boolean {
174
+ if (
175
+ this.isSelectedStep(currentStep) &&
176
+ (!isNetworkInvalid?.checked ||
177
+ (isNetworkInvalid.checked && !isNetworkInvalid.valid))
178
+ ) {
179
+ checkNetwork(networkLabel)
180
+ return true
181
+ }
182
+ return false
183
+ }
184
+
185
+ checkNetworkLabelBeforeGoToNewStep(
186
+ nextStep: number,
187
+ currentStepScheme: number,
188
+ currentStep: number,
189
+ networkLabel: string,
190
+ isNetworkInvalid: UI_I_NetworkLabelCheckExisting | undefined,
191
+ checkNetwork: (networkLabel: string, nextStep?: number) => void
192
+ ): boolean {
193
+ if (
194
+ this.isSelectedScheme(currentStepScheme) &&
195
+ nextStep > currentStep &&
196
+ (!isNetworkInvalid?.checked ||
197
+ (isNetworkInvalid.checked && !isNetworkInvalid.valid))
198
+ ) {
199
+ checkNetwork(networkLabel, nextStep)
200
+ return true
201
+ }
202
+ return false
203
+ }
204
+
205
+ // Not common-------
206
+ // -----------------
207
+ }
208
+
209
+ export const getVlanId = (vlanId: string): string =>
210
+ (vlanId === 'All (4095)' && '4095') ||
211
+ (vlanId === 'None (0)' && '0') ||
212
+ vlanId