bfg-common 1.3.347 → 1.3.349

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 (48) hide show
  1. package/components/atoms/TheIcon.vue +1646 -1125
  2. package/components/atoms/TheIconOld.vue +2444 -0
  3. package/components/atoms/switch/Switch.vue +111 -111
  4. package/components/atoms/table/compact/Compact.vue +526 -526
  5. package/components/common/adapterManager/ui/table/Header.vue +93 -93
  6. package/components/common/adapterManager/ui/table/Table.vue +162 -162
  7. package/components/common/context/Context.vue +99 -99
  8. package/components/common/lib/config/states.ts +126 -126
  9. package/components/common/resource/progressBlock/ProgressBlock.vue +142 -142
  10. package/components/common/vm/actions/add/Add.vue +602 -602
  11. package/components/common/vm/actions/clone/Clone.vue +518 -518
  12. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +273 -273
  13. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +697 -697
  14. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +299 -299
  15. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +165 -165
  16. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +164 -164
  17. package/components/common/vm/actions/common/select/name/Name.vue +235 -235
  18. package/components/common/vm/actions/common/select/storage/Storage.vue +198 -198
  19. package/components/common/vm/actions/editSettings/EditSettings.vue +313 -313
  20. package/components/common/weekSelect/lib/config/options.ts +10 -10
  21. package/components/common/wizards/datastore/add/Add.vue +434 -434
  22. package/components/common/wizards/datastore/add/lib/config/stepItems.ts +191 -191
  23. package/components/common/wizards/datastore/add/lib/models/interfaces.ts +38 -38
  24. package/components/common/wizards/datastore/add/lib/utils.ts +70 -70
  25. package/components/common/wizards/datastore/add/local/createName/CreateName.vue +160 -160
  26. package/components/common/wizards/datastore/add/nfs/Nfs.vue +112 -112
  27. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +104 -104
  28. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/lib/config/compatibleTable.ts +62 -62
  29. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/lib/config/hostsTableItems.ts +53 -53
  30. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +86 -86
  31. package/components/common/wizards/datastore/add/readyComplete/lib/config/propertiesDetails.ts +184 -184
  32. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/DeviceSelection.vue +452 -452
  33. package/components/common/wizards/datastore/add/types/Types.vue +80 -80
  34. package/components/common/wizards/datastore/add/types/lib/config/typeOptions.ts +49 -49
  35. package/composables/useAppVersion.ts +21 -21
  36. package/composables/useEnvLanguage.ts +20 -20
  37. package/lib/utils/sendTask.ts +72 -72
  38. package/minify.js +146 -146
  39. package/package.json +1 -1
  40. package/public/spice-console/application/codec.js +257 -257
  41. package/public/spice-console/lib/rasterEngine.js +907 -907
  42. package/public/spice-console/network/spicechannel.js +369 -369
  43. package/store/main/lib/interfaces.ts +9 -9
  44. package/store/tasks/actions.ts +133 -133
  45. package/store/tasks/getters.ts +25 -25
  46. package/store/tasks/lib/models/interfaces.ts +18 -18
  47. package/store/tasks/mutations.ts +58 -58
  48. package/store/tasks/state.ts +16 -16
@@ -1,434 +1,434 @@
1
- <template>
2
- <div class="new-datastore">
3
- <atoms-modal-by-steps
4
- test-id="add-datastore-wizard"
5
- :show="true"
6
- :title="localization.newDatastore"
7
- :step-items="stepItems"
8
- :step-position="stepPosition"
9
- :loading="loading"
10
- @finish="onAddDatastore"
11
- @next="onNextStep"
12
- @back="back"
13
- @change-step="onChangeStep"
14
- @hide="onHideModal"
15
- >
16
- <template #modalBody>
17
- <div class="new-datastore__body">
18
- <common-wizards-datastore-add-types
19
- v-show="stepPosition === 0"
20
- v-model:type="datastoreType"
21
- :project="props.mode"
22
- />
23
-
24
- <common-wizards-datastore-add-local
25
- v-show="datastoreType === 'local' && !isShowCompleteBlock"
26
- :mode="props.mode"
27
- :step-position="stepPosition"
28
- :datastore-type="datastoreType"
29
- :local-create-name-submit="localCreateNameSubmit"
30
- :datacenter-hosts="props.datacenterHosts"
31
- :is-main-filter="props.isMainFilter"
32
- @loading="(e) => (loading = e)"
33
- @submit="onSaveNameAndNextLocal"
34
- @main-filter="emits('main-filter', $event)"
35
- />
36
-
37
- <common-wizards-datastore-add-shared-storm
38
- v-show="datastoreType === 'shared-storm' && !isShowCompleteBlock"
39
- :mode="props.mode"
40
- :step-position="stepPosition"
41
- :datastore-type="datastoreType"
42
- :device-selection-submit="deviceSelectionSubmit"
43
- :datacenter-hosts="props.datacenterHosts"
44
- :is-main-filter="props.isMainFilter"
45
- @loading="(e) => (loading = e)"
46
- @submit="onSaveAndNextSharedStorm"
47
- @main-filter="emits('main-filter', $event)"
48
- />
49
-
50
- <common-wizards-datastore-add-nfs
51
- v-show="datastoreType === 'nfs' && !isShowCompleteBlock"
52
- :mode="props.mode"
53
- :step-position="stepPosition"
54
- :datastore-type="datastoreType"
55
- :nfs-configuration-submit="nfsConfigurationSubmit"
56
- :host-accessibility-submit="hostAccessibilitySubmit"
57
- :hosts="props.nfsHosts"
58
- @loading="(e) => (loading = e)"
59
- @change-nfs-version="updateNfsVersion"
60
- @submit="saveChangesAndNextNfs"
61
- />
62
-
63
- <common-wizards-datastore-add-ready-complete
64
- v-show="isShowCompleteBlock"
65
- :data-ready-view="dataReadyView"
66
- />
67
- </div>
68
- </template>
69
- </atoms-modal-by-steps>
70
- </div>
71
- </template>
72
-
73
- <script setup lang="ts">
74
- import { UI_I_Localization } from '~/lib/models/interfaces'
75
- import { UI_I_VerticalStepItem } from '~/components/atoms/lib/models/interfaces'
76
- import {
77
- UI_T_DatastoreType,
78
- UI_T_NfsType,
79
- UI_T_WizardDatastoreMode,
80
- } from '~/components/common/wizards/datastore/add/lib/models/types'
81
- import { UI_I_CreateDatastoreForm } from '~/components/common/wizards/datastore/add/lib/models/interfaces'
82
- import {
83
- UI_I_LunDisk,
84
- UI_I_SelectHostOptions,
85
- } from '~/components/common/wizards/datastore/add/sharedStorm/deviceSelection/lib/models/interfaces'
86
- import { stepItemsFunc } from '~/components/common/wizards/datastore/add/lib/config/stepItems'
87
- import { constructDataReadyViewFunc } from '~/components/common/wizards/datastore/add/readyComplete/lib/config/propertiesDetails'
88
-
89
- const props = defineProps<{
90
- // TODO refactoring to project
91
- mode: UI_T_WizardDatastoreMode
92
- finishFunc: (
93
- datastoreForm: UI_I_CreateDatastoreForm,
94
- datastoreType: UI_T_DatastoreType,
95
- version: UI_T_NfsType
96
- ) => Promise<void>
97
- datacenterHosts?: UI_I_SelectHostOptions[]
98
- nfsHosts?: any
99
- isMainFilter?: boolean
100
- }>()
101
- const emits = defineEmits<{
102
- (event: 'hide'): void
103
- (event: 'global-refresh'): void
104
- (event: 'main-filter', value: string): void
105
- }>()
106
-
107
- const localization = computed<UI_I_Localization>(() => useLocal())
108
-
109
- const loading = ref<boolean>(false)
110
- const datastoreType = ref<UI_T_DatastoreType>(
111
- props.mode === 'procurator' ? 'local' : 'shared-storm'
112
- )
113
- const nfsVersion = ref<UI_T_NfsType>('nfs-3')
114
-
115
- const stepPosition = ref<number>(0)
116
- const dataReadyView = ref<any>([])
117
-
118
- const datastoreForm = ref<UI_I_CreateDatastoreForm>({
119
- local: {
120
- name: '',
121
- hosts: [],
122
- type_code: 1,
123
- },
124
- sharedStorm: {
125
- name: '',
126
- dev_names: [],
127
- hosts: [],
128
- pool_name: '',
129
- type_code: 2,
130
- },
131
- nfs: {
132
- name: '',
133
- server: '',
134
- folder: '',
135
- readonly: false,
136
- version: nfsVersion.value,
137
- type_code: 4,
138
- hosts: [],
139
- },
140
- })
141
-
142
- const stepItems = computed<UI_I_VerticalStepItem[]>(() =>
143
- stepItemsFunc(localization.value, datastoreType.value, props.mode)
144
- )
145
-
146
- let cashStep = -1
147
- const onNextStep = (force = false): void => {
148
- const isValid = checkSubmit(force)
149
-
150
- if (!isValid) {
151
- return
152
- }
153
-
154
- const isDisabled = stepItems.value[cashStep]?.disabled
155
- if (cashStep !== -1 && !isDisabled) {
156
- stepPosition.value = cashStep
157
- cashStep = -1
158
- return
159
- }
160
-
161
- stepItems.value[stepPosition.value].complete = true
162
- stepItems.value[stepPosition.value + 1].disabled = false
163
- stepPosition.value++
164
- }
165
-
166
- const back = (): void => {
167
- stepPosition.value--
168
- }
169
-
170
- const onChangeStep = (key: number): void => {
171
- if (key < stepPosition.value) {
172
- stepPosition.value = key
173
- return
174
- }
175
-
176
- const isValid = checkSubmit()
177
-
178
- if (!isValid) {
179
- cashStep = key
180
- return
181
- }
182
-
183
- stepPosition.value = key
184
- }
185
- const onHideModal = (): void => {
186
- emits('hide')
187
- }
188
-
189
- const updateNfsVersion = (event: UI_T_NfsType): void => {
190
- nfsVersion.value = event
191
- const { name, server, folder, hosts } = datastoreForm.value.nfs
192
- saveChangesAndNextNfs({ name, server, folder, hosts }, false)
193
- }
194
-
195
- const localCreateNameSubmit = ref<number>(0)
196
-
197
- const nfsConfigurationSubmit = ref<number>(0)
198
- const hostAccessibilitySubmit = ref<number>(0)
199
-
200
- const deviceSelectionSubmit = ref<number>(0)
201
-
202
- const checkSubmit = (force = false): boolean => {
203
- if (datastoreType.value === 'local') {
204
- if (stepPosition.value === 1 && !force) {
205
- localCreateNameSubmit.value++
206
- return false
207
- }
208
- }
209
-
210
- if (datastoreType.value === 'shared-storm') {
211
- if (stepPosition.value === 1 && !force) {
212
- deviceSelectionSubmit.value++
213
- return false
214
- }
215
- }
216
-
217
- if (datastoreType.value === 'nfs') {
218
- if (stepPosition.value === 2 && !force) {
219
- nfsConfigurationSubmit.value++
220
- return false
221
- }
222
-
223
- if (props.mode === 'sphere' && stepPosition.value === 3 && !force) {
224
- hostAccessibilitySubmit.value++
225
- return false
226
- }
227
- // if (
228
- // ((stepPosition.value === 4 && nfsVersion.value === 'nfs-4.1') ||
229
- // (stepPosition.value === 3 && nfsVersion.value === 'nfs-3')) &&
230
- // !force
231
- // ) {
232
- // hostAccessibilitySubmit.value++
233
- // return false
234
- // }
235
- }
236
-
237
- return true
238
- }
239
-
240
- const isWizardModeForSphere = computed<boolean>(() => props.mode === 'sphere')
241
-
242
- const onSaveNameAndNextLocal = (event: any): void => {
243
- const { local } = datastoreForm.value
244
-
245
- if (isWizardModeForSphere.value) {
246
- local.name = event.name
247
- local.hosts.push(event.host)
248
- }
249
-
250
- if (!isWizardModeForSphere.value) {
251
- local.name = event
252
- }
253
-
254
- dataReadyView.value = constructDataReadyViewFunc(
255
- localization.value,
256
- 'local',
257
- event,
258
- isWizardModeForSphere.value
259
- )
260
-
261
- onNextStep(true)
262
- }
263
-
264
- const onSaveAndNextSharedStorm = (event: any): void => {
265
- const { sharedStorm } = datastoreForm.value
266
- sharedStorm.name = event.name
267
- sharedStorm.dev_names = event.lunDisk.map((lun: UI_I_LunDisk) => lun.name)
268
- sharedStorm.hosts = [event.host]
269
-
270
- dataReadyView.value = constructDataReadyViewFunc(
271
- localization.value,
272
- 'shared-storm',
273
- event,
274
- isWizardModeForSphere.value
275
- )
276
-
277
- onNextStep(true)
278
- }
279
- const saveChangesAndNextNfs = (event: any, next = true): void => {
280
- const { nfs } = datastoreForm.value
281
- nfs.name = event.name
282
- nfs.folder = event.folder
283
- nfs.server = event.server
284
- nfs.hosts = event.hosts
285
-
286
- // TODO refactoring
287
- const hostsNames = props.nfsHosts
288
- ? props.nfsHosts.items
289
- .filter((host) => event.hosts.includes(host.id))
290
- .map((host) => host.host)
291
- : []
292
-
293
- dataReadyView.value = constructDataReadyViewFunc(
294
- localization.value,
295
- 'nfs',
296
- {
297
- ...event,
298
- hosts: hostsNames,
299
- version: nfsVersion.value,
300
- },
301
- isWizardModeForSphere.value
302
- )
303
-
304
- next && onNextStep(true)
305
- }
306
-
307
- const isShowCompleteBlock = computed<boolean>(() => {
308
- // TODO refactoring
309
- const localStep = datastoreType.value === 'local' && stepPosition.value === 2
310
-
311
- const sharesStep =
312
- datastoreType.value === 'shared-storm' &&
313
- (props.mode === 'procurator'
314
- ? stepPosition.value === 3
315
- : stepPosition.value === 2)
316
-
317
- let nfsFirst
318
- if (props.mode === 'procurator') {
319
- nfsFirst =
320
- datastoreType.value === 'nfs' &&
321
- nfsVersion.value === 'nfs-3' &&
322
- stepPosition.value === 3
323
- } else {
324
- nfsFirst =
325
- datastoreType.value === 'nfs' &&
326
- nfsVersion.value === 'nfs-3' &&
327
- stepPosition.value === 4
328
- }
329
-
330
- let nfsSecond
331
- if (props.mode === 'procurator') {
332
- nfsSecond =
333
- datastoreType.value === 'nfs' &&
334
- nfsVersion.value === 'nfs-4.1' &&
335
- stepPosition.value === 3
336
- } else {
337
- nfsSecond =
338
- datastoreType.value === 'nfs' &&
339
- nfsVersion.value === 'nfs-4.1' &&
340
- stepPosition.value === 4
341
- }
342
-
343
- return localStep || sharesStep || nfsFirst || nfsSecond
344
- })
345
-
346
- const onAddDatastore = async (): Promise<void> => {
347
- loading.value = true
348
-
349
- props
350
- .finishFunc(datastoreForm.value, datastoreType.value, nfsVersion.value)
351
- .then(() => {
352
- emits('global-refresh')
353
- loading.value = false
354
- onHideModal()
355
- })
356
- }
357
-
358
- // const createDatastoreFromLocal = async (): Promise<API_UI_I_Error> => {
359
- // const { local } = datastoreForm.value
360
- //
361
- // return await createDatastore<Omit<UI_I_CreateDatastoreBodyRequest, 'pool_name'>>(
362
- // local
363
- // )
364
- // }
365
- // const createDatastoreFromSharedStorm = async (): Promise<API_UI_I_Error> => {
366
- // const {
367
- // sharedStorm: { dev_names: disks, ...sendData },
368
- // } = datastoreForm.value
369
- //
370
- // const { data, msg } = await getStoragePoolName<{ dev_names: string[] }>(
371
- // '/psm/api/v1/storage/lvm/create',
372
- // { dev_names: disks }
373
- // )
374
- //
375
- // if (!data && msg) return msg
376
- //
377
- // sendData.pool_name = data?.pool_name || ''
378
- //
379
- // return await createDatastore(sendData)
380
- // }
381
-
382
- // const createDatastoreFromNfs = async (): Promise<API_UI_I_Error> => {
383
- // const {
384
- // nfs: { server, folder, readonly, name, type_code: type },
385
- // } = datastoreForm.value
386
- //
387
- // const sendDataOne = {
388
- // server,
389
- // folder,
390
- // readonly,
391
- // version: nfsVersion.value === 'nfs-4.1' ? 4.1 : 3.0,
392
- // }
393
- //
394
- // const { data, msg } = await getStoragePoolName<UI_I_NfsPoolNameForm>(
395
- // '/psm/api/v1/storage/cnfs',
396
- // sendDataOne
397
- // )
398
- //
399
- // if (!data && msg) return msg
400
- //
401
- // const sendDataTwo = {
402
- // name,
403
- // type_code: type,
404
- // pool_name: data?.pool_name || '',
405
- // }
406
- //
407
- // return await createDatastore(sendDataTwo)
408
- // }
409
- </script>
410
-
411
- <style scoped lang="scss">
412
- @import '~/assets/scss/common/mixins.scss';
413
-
414
- .new-datastore {
415
- &__body {
416
- @include flex($dir: column);
417
- height: 100%;
418
- padding-left: 24px;
419
- }
420
- }
421
-
422
- .finish-block {
423
- padding: 18px 24px 24px 24px;
424
-
425
- .add-hosts-ready-to-complete-mt-12 {
426
- margin-top: 12px;
427
-
428
- .add-hosts-ready-to-complete-bold {
429
- line-height: 18px;
430
- font-weight: 700;
431
- }
432
- }
433
- }
434
- </style>
1
+ <template>
2
+ <div class="new-datastore">
3
+ <atoms-modal-by-steps
4
+ test-id="add-datastore-wizard"
5
+ :show="true"
6
+ :title="localization.newDatastore"
7
+ :step-items="stepItems"
8
+ :step-position="stepPosition"
9
+ :loading="loading"
10
+ @finish="onAddDatastore"
11
+ @next="onNextStep"
12
+ @back="back"
13
+ @change-step="onChangeStep"
14
+ @hide="onHideModal"
15
+ >
16
+ <template #modalBody>
17
+ <div class="new-datastore__body">
18
+ <common-wizards-datastore-add-types
19
+ v-show="stepPosition === 0"
20
+ v-model:type="datastoreType"
21
+ :project="props.mode"
22
+ />
23
+
24
+ <common-wizards-datastore-add-local
25
+ v-show="datastoreType === 'local' && !isShowCompleteBlock"
26
+ :mode="props.mode"
27
+ :step-position="stepPosition"
28
+ :datastore-type="datastoreType"
29
+ :local-create-name-submit="localCreateNameSubmit"
30
+ :datacenter-hosts="props.datacenterHosts"
31
+ :is-main-filter="props.isMainFilter"
32
+ @loading="(e) => (loading = e)"
33
+ @submit="onSaveNameAndNextLocal"
34
+ @main-filter="emits('main-filter', $event)"
35
+ />
36
+
37
+ <common-wizards-datastore-add-shared-storm
38
+ v-show="datastoreType === 'shared-storm' && !isShowCompleteBlock"
39
+ :mode="props.mode"
40
+ :step-position="stepPosition"
41
+ :datastore-type="datastoreType"
42
+ :device-selection-submit="deviceSelectionSubmit"
43
+ :datacenter-hosts="props.datacenterHosts"
44
+ :is-main-filter="props.isMainFilter"
45
+ @loading="(e) => (loading = e)"
46
+ @submit="onSaveAndNextSharedStorm"
47
+ @main-filter="emits('main-filter', $event)"
48
+ />
49
+
50
+ <common-wizards-datastore-add-nfs
51
+ v-show="datastoreType === 'nfs' && !isShowCompleteBlock"
52
+ :mode="props.mode"
53
+ :step-position="stepPosition"
54
+ :datastore-type="datastoreType"
55
+ :nfs-configuration-submit="nfsConfigurationSubmit"
56
+ :host-accessibility-submit="hostAccessibilitySubmit"
57
+ :hosts="props.nfsHosts"
58
+ @loading="(e) => (loading = e)"
59
+ @change-nfs-version="updateNfsVersion"
60
+ @submit="saveChangesAndNextNfs"
61
+ />
62
+
63
+ <common-wizards-datastore-add-ready-complete
64
+ v-show="isShowCompleteBlock"
65
+ :data-ready-view="dataReadyView"
66
+ />
67
+ </div>
68
+ </template>
69
+ </atoms-modal-by-steps>
70
+ </div>
71
+ </template>
72
+
73
+ <script setup lang="ts">
74
+ import { UI_I_Localization } from '~/lib/models/interfaces'
75
+ import { UI_I_VerticalStepItem } from '~/components/atoms/lib/models/interfaces'
76
+ import {
77
+ UI_T_DatastoreType,
78
+ UI_T_NfsType,
79
+ UI_T_WizardDatastoreMode,
80
+ } from '~/components/common/wizards/datastore/add/lib/models/types'
81
+ import { UI_I_CreateDatastoreForm } from '~/components/common/wizards/datastore/add/lib/models/interfaces'
82
+ import {
83
+ UI_I_LunDisk,
84
+ UI_I_SelectHostOptions,
85
+ } from '~/components/common/wizards/datastore/add/sharedStorm/deviceSelection/lib/models/interfaces'
86
+ import { stepItemsFunc } from '~/components/common/wizards/datastore/add/lib/config/stepItems'
87
+ import { constructDataReadyViewFunc } from '~/components/common/wizards/datastore/add/readyComplete/lib/config/propertiesDetails'
88
+
89
+ const props = defineProps<{
90
+ // TODO refactoring to project
91
+ mode: UI_T_WizardDatastoreMode
92
+ finishFunc: (
93
+ datastoreForm: UI_I_CreateDatastoreForm,
94
+ datastoreType: UI_T_DatastoreType,
95
+ version: UI_T_NfsType
96
+ ) => Promise<void>
97
+ datacenterHosts?: UI_I_SelectHostOptions[]
98
+ nfsHosts?: any
99
+ isMainFilter?: boolean
100
+ }>()
101
+ const emits = defineEmits<{
102
+ (event: 'hide'): void
103
+ (event: 'global-refresh'): void
104
+ (event: 'main-filter', value: string): void
105
+ }>()
106
+
107
+ const localization = computed<UI_I_Localization>(() => useLocal())
108
+
109
+ const loading = ref<boolean>(false)
110
+ const datastoreType = ref<UI_T_DatastoreType>(
111
+ props.mode === 'procurator' ? 'local' : 'shared-storm'
112
+ )
113
+ const nfsVersion = ref<UI_T_NfsType>('nfs-3')
114
+
115
+ const stepPosition = ref<number>(0)
116
+ const dataReadyView = ref<any>([])
117
+
118
+ const datastoreForm = ref<UI_I_CreateDatastoreForm>({
119
+ local: {
120
+ name: '',
121
+ hosts: [],
122
+ type_code: 1,
123
+ },
124
+ sharedStorm: {
125
+ name: '',
126
+ dev_names: [],
127
+ hosts: [],
128
+ pool_name: '',
129
+ type_code: 2,
130
+ },
131
+ nfs: {
132
+ name: '',
133
+ server: '',
134
+ folder: '',
135
+ readonly: false,
136
+ version: nfsVersion.value,
137
+ type_code: 4,
138
+ hosts: [],
139
+ },
140
+ })
141
+
142
+ const stepItems = computed<UI_I_VerticalStepItem[]>(() =>
143
+ stepItemsFunc(localization.value, datastoreType.value, props.mode)
144
+ )
145
+
146
+ let cashStep = -1
147
+ const onNextStep = (force = false): void => {
148
+ const isValid = checkSubmit(force)
149
+
150
+ if (!isValid) {
151
+ return
152
+ }
153
+
154
+ const isDisabled = stepItems.value[cashStep]?.disabled
155
+ if (cashStep !== -1 && !isDisabled) {
156
+ stepPosition.value = cashStep
157
+ cashStep = -1
158
+ return
159
+ }
160
+
161
+ stepItems.value[stepPosition.value].complete = true
162
+ stepItems.value[stepPosition.value + 1].disabled = false
163
+ stepPosition.value++
164
+ }
165
+
166
+ const back = (): void => {
167
+ stepPosition.value--
168
+ }
169
+
170
+ const onChangeStep = (key: number): void => {
171
+ if (key < stepPosition.value) {
172
+ stepPosition.value = key
173
+ return
174
+ }
175
+
176
+ const isValid = checkSubmit()
177
+
178
+ if (!isValid) {
179
+ cashStep = key
180
+ return
181
+ }
182
+
183
+ stepPosition.value = key
184
+ }
185
+ const onHideModal = (): void => {
186
+ emits('hide')
187
+ }
188
+
189
+ const updateNfsVersion = (event: UI_T_NfsType): void => {
190
+ nfsVersion.value = event
191
+ const { name, server, folder, hosts } = datastoreForm.value.nfs
192
+ saveChangesAndNextNfs({ name, server, folder, hosts }, false)
193
+ }
194
+
195
+ const localCreateNameSubmit = ref<number>(0)
196
+
197
+ const nfsConfigurationSubmit = ref<number>(0)
198
+ const hostAccessibilitySubmit = ref<number>(0)
199
+
200
+ const deviceSelectionSubmit = ref<number>(0)
201
+
202
+ const checkSubmit = (force = false): boolean => {
203
+ if (datastoreType.value === 'local') {
204
+ if (stepPosition.value === 1 && !force) {
205
+ localCreateNameSubmit.value++
206
+ return false
207
+ }
208
+ }
209
+
210
+ if (datastoreType.value === 'shared-storm') {
211
+ if (stepPosition.value === 1 && !force) {
212
+ deviceSelectionSubmit.value++
213
+ return false
214
+ }
215
+ }
216
+
217
+ if (datastoreType.value === 'nfs') {
218
+ if (stepPosition.value === 2 && !force) {
219
+ nfsConfigurationSubmit.value++
220
+ return false
221
+ }
222
+
223
+ if (props.mode === 'sphere' && stepPosition.value === 3 && !force) {
224
+ hostAccessibilitySubmit.value++
225
+ return false
226
+ }
227
+ // if (
228
+ // ((stepPosition.value === 4 && nfsVersion.value === 'nfs-4.1') ||
229
+ // (stepPosition.value === 3 && nfsVersion.value === 'nfs-3')) &&
230
+ // !force
231
+ // ) {
232
+ // hostAccessibilitySubmit.value++
233
+ // return false
234
+ // }
235
+ }
236
+
237
+ return true
238
+ }
239
+
240
+ const isWizardModeForSphere = computed<boolean>(() => props.mode === 'sphere')
241
+
242
+ const onSaveNameAndNextLocal = (event: any): void => {
243
+ const { local } = datastoreForm.value
244
+
245
+ if (isWizardModeForSphere.value) {
246
+ local.name = event.name
247
+ local.hosts.push(event.host)
248
+ }
249
+
250
+ if (!isWizardModeForSphere.value) {
251
+ local.name = event
252
+ }
253
+
254
+ dataReadyView.value = constructDataReadyViewFunc(
255
+ localization.value,
256
+ 'local',
257
+ event,
258
+ isWizardModeForSphere.value
259
+ )
260
+
261
+ onNextStep(true)
262
+ }
263
+
264
+ const onSaveAndNextSharedStorm = (event: any): void => {
265
+ const { sharedStorm } = datastoreForm.value
266
+ sharedStorm.name = event.name
267
+ sharedStorm.dev_names = event.lunDisk.map((lun: UI_I_LunDisk) => lun.name)
268
+ sharedStorm.hosts = [event.host]
269
+
270
+ dataReadyView.value = constructDataReadyViewFunc(
271
+ localization.value,
272
+ 'shared-storm',
273
+ event,
274
+ isWizardModeForSphere.value
275
+ )
276
+
277
+ onNextStep(true)
278
+ }
279
+ const saveChangesAndNextNfs = (event: any, next = true): void => {
280
+ const { nfs } = datastoreForm.value
281
+ nfs.name = event.name
282
+ nfs.folder = event.folder
283
+ nfs.server = event.server
284
+ nfs.hosts = event.hosts
285
+
286
+ // TODO refactoring
287
+ const hostsNames = props.nfsHosts
288
+ ? props.nfsHosts.items
289
+ .filter((host) => event.hosts.includes(host.id))
290
+ .map((host) => host.host)
291
+ : []
292
+
293
+ dataReadyView.value = constructDataReadyViewFunc(
294
+ localization.value,
295
+ 'nfs',
296
+ {
297
+ ...event,
298
+ hosts: hostsNames,
299
+ version: nfsVersion.value,
300
+ },
301
+ isWizardModeForSphere.value
302
+ )
303
+
304
+ next && onNextStep(true)
305
+ }
306
+
307
+ const isShowCompleteBlock = computed<boolean>(() => {
308
+ // TODO refactoring
309
+ const localStep = datastoreType.value === 'local' && stepPosition.value === 2
310
+
311
+ const sharesStep =
312
+ datastoreType.value === 'shared-storm' &&
313
+ (props.mode === 'procurator'
314
+ ? stepPosition.value === 3
315
+ : stepPosition.value === 2)
316
+
317
+ let nfsFirst
318
+ if (props.mode === 'procurator') {
319
+ nfsFirst =
320
+ datastoreType.value === 'nfs' &&
321
+ nfsVersion.value === 'nfs-3' &&
322
+ stepPosition.value === 3
323
+ } else {
324
+ nfsFirst =
325
+ datastoreType.value === 'nfs' &&
326
+ nfsVersion.value === 'nfs-3' &&
327
+ stepPosition.value === 4
328
+ }
329
+
330
+ let nfsSecond
331
+ if (props.mode === 'procurator') {
332
+ nfsSecond =
333
+ datastoreType.value === 'nfs' &&
334
+ nfsVersion.value === 'nfs-4.1' &&
335
+ stepPosition.value === 3
336
+ } else {
337
+ nfsSecond =
338
+ datastoreType.value === 'nfs' &&
339
+ nfsVersion.value === 'nfs-4.1' &&
340
+ stepPosition.value === 4
341
+ }
342
+
343
+ return localStep || sharesStep || nfsFirst || nfsSecond
344
+ })
345
+
346
+ const onAddDatastore = async (): Promise<void> => {
347
+ loading.value = true
348
+
349
+ props
350
+ .finishFunc(datastoreForm.value, datastoreType.value, nfsVersion.value)
351
+ .then(() => {
352
+ emits('global-refresh')
353
+ loading.value = false
354
+ onHideModal()
355
+ })
356
+ }
357
+
358
+ // const createDatastoreFromLocal = async (): Promise<API_UI_I_Error> => {
359
+ // const { local } = datastoreForm.value
360
+ //
361
+ // return await createDatastore<Omit<UI_I_CreateDatastoreBodyRequest, 'pool_name'>>(
362
+ // local
363
+ // )
364
+ // }
365
+ // const createDatastoreFromSharedStorm = async (): Promise<API_UI_I_Error> => {
366
+ // const {
367
+ // sharedStorm: { dev_names: disks, ...sendData },
368
+ // } = datastoreForm.value
369
+ //
370
+ // const { data, msg } = await getStoragePoolName<{ dev_names: string[] }>(
371
+ // '/psm/api/v1/storage/lvm/create',
372
+ // { dev_names: disks }
373
+ // )
374
+ //
375
+ // if (!data && msg) return msg
376
+ //
377
+ // sendData.pool_name = data?.pool_name || ''
378
+ //
379
+ // return await createDatastore(sendData)
380
+ // }
381
+
382
+ // const createDatastoreFromNfs = async (): Promise<API_UI_I_Error> => {
383
+ // const {
384
+ // nfs: { server, folder, readonly, name, type_code: type },
385
+ // } = datastoreForm.value
386
+ //
387
+ // const sendDataOne = {
388
+ // server,
389
+ // folder,
390
+ // readonly,
391
+ // version: nfsVersion.value === 'nfs-4.1' ? 4.1 : 3.0,
392
+ // }
393
+ //
394
+ // const { data, msg } = await getStoragePoolName<UI_I_NfsPoolNameForm>(
395
+ // '/psm/api/v1/storage/cnfs',
396
+ // sendDataOne
397
+ // )
398
+ //
399
+ // if (!data && msg) return msg
400
+ //
401
+ // const sendDataTwo = {
402
+ // name,
403
+ // type_code: type,
404
+ // pool_name: data?.pool_name || '',
405
+ // }
406
+ //
407
+ // return await createDatastore(sendDataTwo)
408
+ // }
409
+ </script>
410
+
411
+ <style scoped lang="scss">
412
+ @import '~/assets/scss/common/mixins.scss';
413
+
414
+ .new-datastore {
415
+ &__body {
416
+ @include flex($dir: column);
417
+ height: 100%;
418
+ padding-left: 24px;
419
+ }
420
+ }
421
+
422
+ .finish-block {
423
+ padding: 18px 24px 24px 24px;
424
+
425
+ .add-hosts-ready-to-complete-mt-12 {
426
+ margin-top: 12px;
427
+
428
+ .add-hosts-ready-to-complete-bold {
429
+ line-height: 18px;
430
+ font-weight: 700;
431
+ }
432
+ }
433
+ }
434
+ </style>