bfg-common 1.4.157 → 1.4.159

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 (58) hide show
  1. package/assets/localization/local_be.json +0 -1
  2. package/assets/localization/local_en.json +0 -1
  3. package/assets/localization/local_hy.json +0 -1
  4. package/assets/localization/local_kk.json +0 -1
  5. package/assets/localization/local_ru.json +0 -1
  6. package/assets/localization/local_zh.json +0 -1
  7. package/components/common/layout/theHeader/TheHeaderNew.vue +1 -2
  8. package/components/common/layout/theHeader/helpMenu/helpMenuNew/HelpMenuNew.vue +0 -14
  9. package/components/common/layout/theHeader/userMenu/userMenuNew/UserMenuNew.vue +0 -14
  10. package/components/common/mainNavigationPanel/MainNavigationPanelNew.vue +53 -89
  11. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/Object.vue +1 -4
  12. package/components/common/select/input/lib/models/interfaces.ts +1 -0
  13. package/components/common/split/horizontal/HorizontalNew.vue +0 -1
  14. package/components/common/wizards/vm/common/computeResource/TreeView.vue +3 -6
  15. package/components/common/wizards/vm/common/tooltip/Tooltip.vue +5 -5
  16. package/components/common/wizards/vm/migrate/Migrate.vue +161 -188
  17. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +166 -53
  18. package/components/common/wizards/vm/migrate/lib/config/steps.ts +93 -0
  19. package/components/common/wizards/vm/migrate/lib/models/interfaces.ts +26 -19
  20. package/components/common/wizards/vm/migrate/lib/utils.ts +0 -80
  21. package/components/common/wizards/vm/migrate/lib/validations.ts +57 -0
  22. package/components/common/wizards/vm/migrate/select/computeResource/ComputeResource.vue +18 -52
  23. package/components/common/wizards/vm/migrate/select/computeResource/lib/config/tabsPannel.ts +1 -1
  24. package/components/common/wizards/vm/migrate/select/computeResource/lib/models/interfaces.ts +2 -1
  25. package/components/common/wizards/vm/migrate/select/computeResource/tableView/TableView.vue +9 -18
  26. package/components/common/wizards/vm/migrate/select/computeResource/tableView/lib/config/clusterTable.ts +1 -1
  27. package/components/common/wizards/vm/migrate/select/computeResource/tableView/lib/config/resourcePoolTable.ts +1 -1
  28. package/components/common/wizards/vm/migrate/select/computeResource/tableView/lib/config/vappsTable.ts +20 -18
  29. package/components/common/wizards/vm/migrate/select/network/Network.vue +16 -11
  30. package/components/common/wizards/vm/migrate/select/network/lib/models/interfaces.ts +4 -0
  31. package/components/common/wizards/vm/migrate/select/network/table/network/Network.vue +16 -17
  32. package/components/common/wizards/vm/migrate/select/priority/Priority.vue +2 -16
  33. package/components/common/wizards/vm/migrate/select/storage/Storage.vue +29 -61
  34. package/components/common/wizards/vm/migrate/select/storage/configure/batch/Batch.vue +28 -33
  35. package/components/common/wizards/vm/migrate/select/storage/configure/batch/config/virtualDiskFormat.ts +30 -0
  36. package/components/common/wizards/vm/migrate/select/storage/{table/datastore/Datastore.vue → configure/batch/table/Table.vue} +48 -34
  37. package/components/common/wizards/vm/migrate/select/storage/configure/batch/table/lib/config/datastoreTable.ts +177 -0
  38. package/components/common/wizards/vm/migrate/select/storage/{table/datastore → configure/batch/table}/lib/models/types.ts +2 -2
  39. package/components/common/wizards/vm/migrate/select/storage/configure/disk/Disk.vue +11 -30
  40. package/components/common/wizards/vm/migrate/select/storage/{table/disk/Disk.vue → configure/disk/table/Table.vue} +5 -17
  41. package/components/common/wizards/vm/migrate/select/storage/{table/disk/lib/config/config.ts → configure/disk/table/lib/config/diskTable.ts} +36 -23
  42. package/components/common/wizards/vm/migrate/select/storage/{table/disk → configure/disk/table}/lib/config/tableKeys.ts +1 -1
  43. package/components/common/wizards/vm/migrate/select/storage/{table/disk → configure/disk/table}/lib/models/interfaces.ts +5 -0
  44. package/components/common/wizards/vm/migrate/select/storage/lib/models/interfaces.ts +0 -14
  45. package/components/common/wizards/vm/migrate/select/storage/selectedPerDisk/SelectedPerDisk.vue +14 -22
  46. package/components/common/wizards/vm/migrate/select/targetServer/new/New.vue +111 -144
  47. package/components/common/wizards/vm/migrate/select/targetServer/new/lib/models/interfaces.ts +8 -10
  48. package/components/common/wizards/vm/migrate/select/targetServer/targetServer.vue +11 -1
  49. package/components/common/wizards/vm/migrate/select/type/Type.vue +8 -19
  50. package/package.json +2 -2
  51. package/components/common/wizards/vm/migrate/contentHeading/ContentHeading.vue +0 -106
  52. package/components/common/wizards/vm/migrate/contentHeading/lib/models/interfaces.ts +0 -7
  53. package/components/common/wizards/vm/migrate/select/storage/diskFormat/DiskFormat.vue +0 -69
  54. package/components/common/wizards/vm/migrate/select/storage/diskFormat/lib/config/formatOptions.ts +0 -26
  55. package/components/common/wizards/vm/migrate/select/storage/table/datastore/lib/config/config.ts +0 -179
  56. package/components/common/wizards/vm/migrate/select/targetServer/new/lib/config/defaultForm.ts +0 -36
  57. /package/components/common/wizards/vm/migrate/select/storage/{table/disk → configure/disk/table}/lib/models/types.ts +0 -0
  58. /package/components/common/wizards/vm/migrate/{lib → select/type/lib}/models/types.ts +0 -0
@@ -1,96 +1,96 @@
1
1
  <template>
2
- <atoms-modal-by-steps
3
- test-id="clone-vm-wizard"
4
- :show="true"
5
- :title="localization.migrate"
6
- :step-items="stepItems"
7
- :step-position="stepPosition"
8
- :loading="loading"
9
- class="migrate-vm"
10
- @next="onNextStep"
11
- @back="onBack"
12
- @change-step="onChangeStep"
13
- @finish="onFinish"
14
- @hide="onHideModal"
15
- >
16
- <template #contentHeading><span /></template>
17
- <template #modalBody="{ title, description }">
18
- <div class="migrate-vm__wrapper">
19
- <common-wizards-vm-migrate-content-heading
20
- :title="title"
21
- :description="description"
22
- />
23
-
24
- <div class="migrate-vm__headline"></div>
2
+ <div class="migrate-vm">
3
+ <atoms-wizard
4
+ show
5
+ :wizard="wizard"
6
+ :selected-scheme="selectedScheme"
7
+ :title="localization.common.migrate"
8
+ :localization="localization"
9
+ class="migrate-vm-wizard"
10
+ test-id="migrate-vm-wizard"
11
+ @change-steps="onChangeSteps"
12
+ @hide="onHideModal"
13
+ @submit="onFinish"
14
+ >
15
+ <template #modalBody="{ selectedStep }">
25
16
  <common-wizards-vm-migrate-select-type
26
- v-show="currentBlockId === 'select-migration-type'"
27
- v-model="vmMigrateType"
17
+ v-if="selectedStep.id === 0"
18
+ v-model="form.migrate_type"
28
19
  :project="props.project"
29
20
  />
30
21
 
31
22
  <common-wizards-vm-migrate-select-target-server
32
- v-show="currentBlockId === 'select-target-center'"
23
+ v-if="selectedStep.id === 1"
24
+ v-model="form.target_server"
25
+ v-model:connect-server="isConnectSourceServer"
26
+ :wizard="wizard"
33
27
  />
34
28
 
35
29
  <common-wizards-vm-migrate-select-compute-resource
36
- v-show="currentBlockId === 'select-compute-resource'"
37
- :submit="selectComputeResourceSubmit"
30
+ v-show="selectedStep.id === 2"
31
+ v-model="form"
32
+ :alert-messages="alertMessages[2]"
38
33
  :get-compute-resource-data="props.getComputeResourceData"
39
- :migrate-type="vmMigrateType"
40
34
  :compute-resource-data="props.computeResourceTableData"
41
35
  :compute-resource-tree="props.computeResourceTree"
42
- @next-step="onSelectComputeResourceAndNext"
36
+ @hide-alert="onHideAlert"
43
37
  />
44
38
 
45
39
  <common-wizards-vm-migrate-select-storage
46
- v-show="currentBlockId === 'select-storage'"
47
- :submit="selectStorageSubmit"
40
+ v-show="selectedStep.id === 3"
41
+ v-model="form"
42
+ :alert-messages="alertMessages[3]"
48
43
  :get-datastore-table-func="props.getDatastoreTableFunc"
49
44
  :datastore="props.datastore"
50
45
  :connected-storage-id-default="connectedStorageIdOnVm"
51
46
  :configure-per-disks="props.configurePerDisks"
52
- @next-step="onSelectStorageAndNext"
47
+ @hide-alert="onHideAlert"
53
48
  />
54
49
 
55
50
  <common-wizards-vm-migrate-select-network
56
- v-if="currentBlockId === 'select-networks'"
57
- v-model:is-basic-network-mode="
58
- dataFormLocal.selectNetwork.isShowNetworkBasic
59
- "
60
- v-model:network-data="dataFormLocal.selectNetwork.data"
51
+ v-show="selectedStep.id === 4"
52
+ v-model="form.network"
61
53
  />
62
54
 
63
55
  <common-wizards-vm-migrate-select-priority
64
- v-show="currentBlockId === 'select-motion-priority'"
65
- v-model="selectedVMotionPriority"
56
+ v-if="selectedStep.id === 5"
57
+ v-model="form.vMotion_priority"
66
58
  />
67
59
 
68
- <common-wizards-vm-common-ready-complete
69
- v-if="currentBlockId === 'ready-complete'"
70
- :ready-complete-table-info="dataReadyView"
60
+ <common-ready-to-complete
61
+ v-if="selectedStep.id === 6"
62
+ :data="dataReadyView"
71
63
  />
72
- </div>
73
- </template>
74
- </atoms-modal-by-steps>
64
+ </template>
65
+ </atoms-wizard>
66
+ </div>
75
67
  </template>
76
68
 
77
69
  <script setup lang="ts">
70
+ import type {
71
+ UI_I_WizardStep,
72
+ UI_I_ValidationReturn,
73
+ } from '~/components/atoms/wizard/lib/models/interfaces'
74
+ import Wizard from '~/components/atoms/wizard/lib/utils/utils'
75
+ import {
76
+ stepsFunc,
77
+ stepsSchemeInitial,
78
+ } from '~/components/common/wizards/vm/migrate/lib/config/steps'
78
79
  import type { UI_I_Localization } from '~/lib/models/interfaces'
79
80
  import type { UI_T_Project } from '~/lib/models/types'
81
+ import type {
82
+ UI_I_MigrateFormLocal,
83
+ UI_I_ChangeStepsSchemes,
84
+ } from '~/components/common/wizards/vm/migrate/lib/models/interfaces'
85
+ import type { UI_T_VmMigrateType } from '~/components/common/wizards/vm/migrate/select/type/lib/models/types'
80
86
  import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
81
87
  import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
82
88
  import type { UI_I_VmSettings } from '~/lib/models/store/vm/interfaces'
83
- import type { UI_T_VmMigrateType } from '~/components/common/wizards/vm/migrate/lib/models/types'
84
89
  import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
85
- import type { UI_I_StorageConfigurePerDiskItem } from '~/components/common/wizards/vm/migrate/select/storage/table/disk/lib/models/interfaces'
90
+ import type { UI_I_StorageConfigurePerDiskItem } from '~/components/common/wizards/vm/migrate/select/storage/configure/disk/table/lib/models/interfaces'
86
91
  import type { UI_I_TableInfoItem } from '~/components/atoms/table/info/lib/models/interfaces'
87
- import type { UI_I_SelectStorageReadyData } from '~/components/common/wizards/vm/migrate/select/storage/lib/models/interfaces'
88
- import type { UI_I_MigrateVerticalStepItem } from '~/components/common/wizards/vm/migrate/lib/models/interfaces'
89
- import type { UI_T_SelectVMotionPriority } from '~/components/common/wizards/vm/migrate/select/priority/lib/models/types'
90
- import type { UI_I_CollectedDataFormLocal } from '~/components/common/wizards/vm/migrate/lib/models/interfaces'
91
- import type { UI_I_ComputeResourceDataLocal } from '~/components/common/wizards/vm/migrate/select/computeResource/lib/models/interfaces'
92
- import { stepItemsFunc } from '~/components/common/wizards/vm/migrate/lib/utils'
93
92
  import { constructDataReadyViewFunc } from '~/components/common/wizards/vm/migrate/lib/config/constructDataReady'
93
+ import * as validation from '~/components/common/wizards/vm/migrate/lib/validations'
94
94
 
95
95
  const props = defineProps<{
96
96
  project: UI_T_Project
@@ -102,177 +102,150 @@ const props = defineProps<{
102
102
  configurePerDisks: UI_I_StorageConfigurePerDiskItem[]
103
103
  computeResourceTableData?: any
104
104
  computeResourceTree?: UI_I_TreeNode
105
- readyCompleteTableInfo?: any // пока так потом если будет нужен изменит или удалить
106
- finishFunc: any
107
105
  }>()
108
-
109
106
  const emits = defineEmits<{
110
107
  (event: 'hide'): void
108
+ (event: 'finish', value: UI_I_MigrateFormLocal): void
111
109
  }>()
112
110
 
113
111
  const localization = computed<UI_I_Localization>(() => useLocal())
114
112
 
115
- const stepPosition = ref<number>(0)
116
- const loading = ref<boolean>(false)
117
-
118
- const selectStorageSubmit = ref<number>(0)
119
- const selectComputeResourceSubmit = ref<number>(0)
120
-
121
- const selectedVMotionPriority = ref<UI_T_SelectVMotionPriority>('high')
122
-
123
- const vmMigrateType = ref<UI_T_VmMigrateType>(
124
- props.project === 'procurator' ? 'storage' : 'resource'
125
- )
126
- const dataReadyView = ref<UI_I_TableInfoItem[]>([])
127
-
128
- const stepItems = computed<UI_I_MigrateVerticalStepItem[]>(() =>
129
- stepItemsFunc(localization.value, vmMigrateType.value, props.project)
130
- )
131
- const currentBlockId = computed<string>(
132
- () => stepItems.value[stepPosition.value].id
133
- )
134
-
135
- const connectedStorageIdOnVm = computed<string>(
136
- () => props.vmSettings?.storage.id || ''
113
+ const wizard: Wizard = new Wizard(
114
+ stepsFunc(localization.value),
115
+ stepsSchemeInitial
137
116
  )
138
117
 
139
- const dataFormLocal = ref<UI_I_CollectedDataFormLocal>({
140
- selectedComputeResource: null,
141
- selectStorage: null,
142
- selectNetwork: {
143
- isShowNetworkBasic: true,
118
+ const selectedScheme = computed<number[]>(() => wizard.selectedScheme.value)
119
+ const alertMessages = computed<string[][]>(() => wizard.alertMessages.value)
120
+
121
+ const isConnectSourceServer = ref<boolean>(false)
122
+ const form = ref<UI_I_MigrateFormLocal>({
123
+ migrate_type: props.project === 'procurator' ? 'storage' : 'resource',
124
+ disk_format: 0,
125
+ storage: null,
126
+ configure: {
127
+ type: 'batch-configure',
128
+ disks: [],
129
+ },
130
+ target_server: {
131
+ fqdn: '',
132
+ user: '',
133
+ password: '',
134
+ },
135
+ network: {
136
+ isBasicNetworkMode: true,
144
137
  data: null,
145
138
  },
146
- selectedVMotionPriority: 'high',
139
+ resource: {
140
+ selectedNode: null,
141
+ host: null,
142
+ cluster: null,
143
+ resourcePool: null,
144
+ vApps: null,
145
+ },
146
+ vMotion_priority: 'high',
147
147
  })
148
148
 
149
- const onSelectComputeResourceAndNext = (
150
- event: UI_I_ComputeResourceDataLocal
151
- ): void => {
152
- dataFormLocal.value.selectedComputeResource = event
153
-
154
- onNextStep(true)
155
- }
156
- const onSelectStorageAndNext = (event: UI_I_SelectStorageReadyData): void => {
157
- dataFormLocal.value.selectStorage = event
158
- // dataReadyView.value = constructDataReadyViewFunc<UI_I_SelectStorageReadyData>(
159
- // vmMigrateType.value,
160
- // props.vmName,
161
- // event
162
- // )
149
+ const validationFunc = async (
150
+ value: UI_I_WizardStep[],
151
+ currentStep: UI_I_WizardStep,
152
+ nextStep: UI_I_WizardStep
153
+ ): Promise<UI_I_ValidationReturn> => {
154
+ let stepHasError = false
155
+
156
+ if (wizard.isValidateForStep(2, currentStep.id, nextStep.id)) {
157
+ const nameValidation = await validation.checkSelectedResourceSync(
158
+ localization.value,
159
+ form.value.resource,
160
+ wizard,
161
+ value
162
+ )
163
163
 
164
- onNextStep(true)
165
- }
164
+ value = nameValidation.newValue
166
165
 
167
- watch(
168
- currentBlockId,
169
- (newValue: string) => {
170
- if (newValue !== 'ready-complete') return
166
+ stepHasError = nameValidation.stepHasError
167
+ }
171
168
 
172
- dataReadyView.value = constructDataReadyViewFunc<any>(
173
- vmMigrateType.value,
174
- props.vmName,
175
- dataFormLocal.value
169
+ if (wizard.isValidateForStep(3, currentStep.id, nextStep.id)) {
170
+ const nameValidation = await validation.checkSelectedDatastoreSync(
171
+ localization.value,
172
+ form.value.storage,
173
+ wizard,
174
+ value
176
175
  )
177
- },
178
- { deep: true, immediate: true }
179
- )
180
- const onFinish = (): void => {
181
- loading.value = true
182
- props.finishFunc().then(() => {
183
- onHideModal()
184
- loading.value = false
185
- })
186
- }
187
176
 
188
- let cashStep = -1
189
- const onNextStep = (force = false): void => {
190
- const isValid = checkSubmit(force)
191
- if (!isValid) return
177
+ value = nameValidation.newValue
192
178
 
193
- const isDisabled = stepItems.value[cashStep]?.disabled
194
- if (cashStep !== -1 && !isDisabled) {
195
- stepPosition.value = cashStep
196
- cashStep = -1
197
- return
179
+ stepHasError = nameValidation.stepHasError
198
180
  }
199
181
 
200
- stepItems.value[stepPosition.value].complete = true
201
- stepItems.value[stepPosition.value + 1].disabled = false
202
- stepPosition.value++
203
- }
204
- const checkSubmit = (force = false): boolean => {
205
- if (currentBlockId.value === 'select-storage' && !force) {
206
- selectStorageSubmit.value++
207
- return false
182
+ return {
183
+ newValue: value,
184
+ stepHasError,
208
185
  }
186
+ }
187
+ const onChangeSteps = async (value: UI_I_WizardStep[]): Promise<void> =>
188
+ wizard.changeSteps(value, validationFunc)
209
189
 
210
- if (currentBlockId.value === 'select-compute-resource' && !force) {
211
- selectComputeResourceSubmit.value++
212
- return false
213
- }
190
+ // Choosing Scheme
191
+ watch(
192
+ () => form.value.migrate_type,
193
+ (newValue: UI_T_VmMigrateType) => {
194
+ const schemes: UI_I_ChangeStepsSchemes = {
195
+ procurator: {
196
+ storage: 0,
197
+ },
198
+ sphere: {
199
+ storage: 0,
200
+ resource: 1,
201
+ 'resource-storage': 2,
202
+ server: 3,
203
+ },
204
+ }
205
+
206
+ const projectSchemes = schemes[props.project]
207
+
208
+ if (projectSchemes && projectSchemes[newValue] !== undefined) {
209
+ wizard.changeScheme(projectSchemes[newValue] as number)
210
+ }
211
+ },
212
+ { deep: true, immediate: true }
213
+ )
214
214
 
215
- return true
216
- }
217
- const onBack = (): void => {
218
- stepPosition.value--
219
- }
220
- const onChangeStep = (key: number): void => {
221
- if (key < stepPosition.value) {
222
- stepPosition.value = key
223
- return
224
- }
215
+ const loading = ref<boolean>(false)
225
216
 
226
- const isValid = checkSubmit()
227
- if (!isValid) {
228
- cashStep = key
229
- return
230
- }
217
+ const connectedStorageIdOnVm = computed<string>(
218
+ () => props.vmSettings?.storage.id || ''
219
+ )
220
+
221
+ const dataReadyView = computed<UI_I_TableInfoItem>(() =>
222
+ constructDataReadyViewFunc(props.vmName, form.value)
223
+ )
231
224
 
232
- stepPosition.value = key
225
+ // const dataFormLocal = ref<UI_I_CollectedDataFormLocal>({
226
+ // selectedComputeResource: null,
227
+ // })
228
+ const onFinish = (): void => {
229
+ loading.value = true
230
+ emits('finish', form.value)
231
+ loading.value = false
233
232
  }
234
233
 
235
234
  const onHideModal = (): void => {
236
235
  emits('hide')
237
236
  }
237
+
238
+ const onHideAlert = (stepId: number): void => {
239
+ wizard.hideAlertMessagesByStepId(stepId)
240
+ }
238
241
  </script>
239
242
 
240
243
  <style scoped lang="scss">
241
244
  @import 'assets/scss/common/mixins.scss';
242
245
  .migrate-vm {
243
- &__wrapper {
246
+ :deep(.modal-body) {
247
+ height: inherit;
244
248
  @include flex($dir: column);
245
- //height: 100%;
246
- padding-left: 10px;
247
249
  }
248
250
  }
249
-
250
- :deep(.has-solid.close-icon.clr-icon) {
251
- width: 20px;
252
- top: 0;
253
- }
254
- :deep(.modal .modal-dialog .modal-content .modal-footer) {
255
- flex: unset;
256
- height: unset;
257
- min-height: unset;
258
- }
259
- :deep(.wizard-modal-titlebar h3) {
260
- color: #000;
261
- font-size: 24px;
262
- font-weight: 200;
263
- line-height: 27px;
264
- margin: 0;
265
- padding: 0;
266
- }
267
- :deep(.clr-wizard-stepnav-item) {
268
- padding-left: 0;
269
- }
270
- :deep(.clr-wizard-stepnav
271
- .clr-wizard-stepnav-item
272
- button
273
- .clr-wizard-stepnav-link-title) {
274
- width: 189px;
275
- font-weight: 700;
276
- font-size: 13px;
277
- }
278
251
  </style>