bfg-common 1.6.23 → 1.6.25

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 (87) hide show
  1. package/assets/localization/local_be.json +65 -5
  2. package/assets/localization/local_en.json +72 -12
  3. package/assets/localization/local_hy.json +66 -6
  4. package/assets/localization/local_kk.json +65 -5
  5. package/assets/localization/local_ru.json +71 -11
  6. package/assets/localization/local_zh.json +65 -5
  7. package/assets/scss/common/theme.scss +2 -2
  8. package/components/atoms/stack/StackBlock.vue +1 -1
  9. package/components/common/adapterManager/addAdapterModal/AddAdapterModalNew.vue +1 -1
  10. package/components/common/adapterManager/addAdapterWarningModal/AddAdapterWarningModalNew.vue +0 -1
  11. package/components/common/adapterManager/ui/table/adapters/AdaptersNew.vue +1 -0
  12. package/components/common/configure/physicalAdapters/PhysicalAdapters.vue +6 -0
  13. package/components/common/configure/physicalAdapters/PhysicalAdaptersNew.vue +219 -192
  14. package/components/common/configure/physicalAdapters/PhysicalAdaptersOld.vue +6 -4
  15. package/components/common/configure/physicalAdapters/buttons/Buttons.vue +1 -0
  16. package/components/common/configure/physicalAdapters/modals/edit/Edit.vue +26 -1
  17. package/components/common/configure/physicalAdapters/modals/edit/EditNew.vue +30 -1
  18. package/components/common/configure/physicalAdapters/modals/edit/lib/models/interfaces.ts +5 -0
  19. package/components/common/configure/physicalAdapters/modals/edit/lib/validations/validations.ts +19 -0
  20. package/components/common/configure/physicalAdapters/tableView/TableViewNew.vue +12 -1
  21. package/components/common/configure/physicalAdapters/tableView/lib/config/physicalAdaptersTableConfigNew.ts +21 -21
  22. package/components/common/configure/physicalAdapters/tableView/lib/config/settings.ts +12 -5
  23. package/components/common/configure/physicalAdapters/tableView/lib/models/interfaces.ts +4 -1
  24. package/components/common/diagramMain/DiagramMain.vue +6 -0
  25. package/components/common/diagramMain/modals/Modals.vue +4 -0
  26. package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +2 -2
  27. package/components/common/diagramMain/modals/lib/config/vmKernelAdapter.ts +1 -1
  28. package/components/common/diagramMain/modals/migrateVmkernelAdapter/MigrateVmkernelAdapter.vue +2 -2
  29. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/common.ts +1 -1
  30. package/components/common/layout/theHeader/ThemeSwitch.vue +1 -1
  31. package/components/common/layout/theHeader/userMenu/modals/changePassword/New.vue +8 -9
  32. package/components/common/layout/theHeader/userMenu/modals/preferences/New.vue +4 -0
  33. package/components/common/layout/theHeader/userMenu/modals/preferences/Old.vue +9 -2
  34. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/ChangeLanguage.vue +11 -7
  35. package/components/common/layout/theHeader/userMenu/modals/preferences/defaultConsole/DefaultConsole.vue +7 -1
  36. package/components/common/layout/theHeader/userMenu/modals/preferences/defaultConsole/lib/config/consoleOptions.ts +8 -5
  37. package/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/TimeFormat.vue +9 -5
  38. package/components/common/layout/theHeader/userMenu/modals/preferences/view/Old.vue +5 -9
  39. package/components/common/layout/theHeader/userMenu/modals/preferences/view/View.vue +9 -6
  40. package/components/common/mainNavigationPanel/MainNavigationPanelNew.vue +3 -1
  41. package/components/common/monitor/advanced/table/tableNew/lib/utils/constructBody.ts +27 -27
  42. package/components/common/monitor/lib/utils/local_be.json +39 -31
  43. package/components/common/monitor/lib/utils/local_en.json +39 -31
  44. package/components/common/monitor/lib/utils/local_hy.json +39 -31
  45. package/components/common/monitor/lib/utils/local_kk.json +39 -31
  46. package/components/common/monitor/lib/utils/local_ru.json +39 -31
  47. package/components/common/monitor/lib/utils/local_zh.json +39 -31
  48. package/components/common/noDataProvided/NoDataProvidedNew.vue +1 -1
  49. package/components/common/pages/backups/modals/createBackup/datastores/tableView/new/lib/config/table.ts +4 -4
  50. package/components/common/pages/backups/modals/createBackup/datastores/tableView/old/lib/config/table.ts +4 -4
  51. package/components/common/pages/scheduledTasks/table/lib/models/enums.ts +9 -0
  52. package/components/common/pages/scheduledTasks/table/new/New.vue +12 -10
  53. package/components/common/pages/tasks/Tasks.vue +4 -1
  54. package/components/common/pages/tasks/table/Table.vue +24 -22
  55. package/components/common/split/vertical/New.vue +42 -8
  56. package/components/common/split/vertical/Old.vue +31 -2
  57. package/components/common/split/vertical/Vertical.vue +4 -0
  58. package/components/common/vm/actions/add/New.vue +21 -6
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/New.vue +1 -0
  60. package/components/common/vm/actions/common/select/storage/new/lib/config/table.ts +13 -15
  61. package/components/common/vm/actions/confirm/Confirm.vue +3 -0
  62. package/components/common/vm/snapshots/DetailView.vue +6 -6
  63. package/components/common/wizards/datastore/add/New.vue +6 -0
  64. package/components/common/wizards/datastore/add/steps/nameAndDevice/NameAndDeviceNew.vue +1 -1
  65. package/components/common/wizards/datastore/add/steps/nameAndDevice/advancedOptions/New.vue +1 -1
  66. package/components/common/wizards/network/add/Add.vue +13 -2
  67. package/components/common/wizards/network/add/AddNew.vue +22 -26
  68. package/components/common/wizards/network/add/lib/config/initialData.ts +4 -4
  69. package/components/common/wizards/network/add/lib/utils/utils.ts +1 -1
  70. package/components/common/wizards/network/add/steps/ipFourSettings/IpFourSettingsNew.vue +2 -8
  71. package/components/common/wizards/network/add/steps/portProperties/PortPropertiesNew.vue +2 -8
  72. package/components/common/wizards/network/add/steps/selectTargetDevice/SelectTargetDeviceNew.vue +10 -3
  73. package/components/common/wizards/network/add/steps/selectTargetDevice/modals/new/SelectNetwork.vue +5 -1
  74. package/components/common/wizards/network/add/validations/common.ts +1 -1
  75. package/components/common/wizards/vm/migrate/steps/computeResource/tableView/new/New.vue +31 -13
  76. package/components/common/wizards/vm/migrate/steps/computeResource/tableView/new/lib/config/clusterTable.ts +340 -0
  77. package/components/common/wizards/vm/migrate/steps/computeResource/tableView/new/lib/config/hostTable.ts +3 -1
  78. package/components/common/wizards/vm/migrate/steps/selectStorage/New.vue +5 -4
  79. package/components/common/wizards/vm/migrate/steps/selectStorage/configure/batch/New.vue +4 -0
  80. package/components/common/wizards/vm/migrate/steps/selectStorage/configure/batch/table/new/New.vue +3 -1
  81. package/components/common/wizards/vm/migrate/steps/selectStorage/configure/disk/table/new/lib/config/diskTable.ts +8 -3
  82. package/components/common/wizards/vm/migrate/steps/selectStorage/configure/disk/table/old/lib/config/diskTable.ts +7 -1
  83. package/lib/models/store/tasks/enums.ts +3 -0
  84. package/lib/models/store/tasks/types.ts +7 -6
  85. package/package.json +2 -2
  86. package/store/tasks/actions.ts +26 -8
  87. package/store/tasks/mappers/recentTasks.ts +1 -0
@@ -3,13 +3,22 @@
3
3
  :id="props.elementId"
4
4
  :class="['fill-parent vertical', { dragging: props.isDrag }]"
5
5
  >
6
- <div :style="props.topPanelStyle" class="vui-horizontal-panel firstPanel">
6
+ <div
7
+ :style="props.topPanelStyle"
8
+ :class="[
9
+ 'vui-horizontal-panel firstPanel',
10
+ {
11
+ 'hidden-second': !props.bottomPermission,
12
+ },
13
+ ]"
14
+ >
7
15
  <div class="vui-horizontal-panel sec-nav-container">
8
16
  <slot name="firstPanel" />
9
17
  </div>
10
18
  </div>
11
19
 
12
20
  <div
21
+ v-if="props.bottomPermission"
13
22
  :id="`gutter-${props.elementId}`"
14
23
  class="gutter gutter-vertical"
15
24
  tabindex="0"
@@ -20,7 +29,16 @@
20
29
  <div class="gutter-vertical-handler"></div>
21
30
  </div>
22
31
 
23
- <div :style="props.bottomPanelStyle" class="secondPanel bottom">
32
+ <div
33
+ v-if="props.bottomPermission"
34
+ :style="props.bottomPanelStyle"
35
+ :class="[
36
+ 'secondPanel bottom',
37
+ {
38
+ hidden: !props.bottomPermission,
39
+ },
40
+ ]"
41
+ >
24
42
  <slot name="secondPanel" />
25
43
  </div>
26
44
  </div>
@@ -37,6 +55,7 @@ const props = defineProps<{
37
55
  isDrag: boolean
38
56
  topPanelStyle: UI_I_SplitVerticalStyle
39
57
  bottomPanelStyle: UI_I_SplitVerticalStyle
58
+ bottomPermission: boolean
40
59
  }>()
41
60
  </script>
42
61
 
@@ -52,10 +71,14 @@ const props = defineProps<{
52
71
  </style>
53
72
 
54
73
  <style scoped lang="scss">
55
- .fill-parent {
74
+ .vertical {
56
75
  &.dragging {
57
76
  .gutter-vertical.gutter {
58
- background-color: var(--gutter-active-bg-color);
77
+ background-color: var(--new-gutter-active-bg-color);
78
+
79
+ &::before {
80
+ background-color: var(--new-gutter-active-before-bg-color);
81
+ }
59
82
  }
60
83
  }
61
84
 
@@ -63,6 +86,11 @@ const props = defineProps<{
63
86
  max-height: calc(100% - 36px);
64
87
  height: calc(100vh - 36px);
65
88
 
89
+ &.hidden-second {
90
+ max-height: 100%;
91
+ height: 100% !important;
92
+ }
93
+
66
94
  .sec-nav-container {
67
95
  width: 100%;
68
96
  height: 100%;
@@ -95,11 +123,11 @@ const props = defineProps<{
95
123
  //}
96
124
 
97
125
  &:hover {
98
- background-color: var(--gutter-hover-bg-color);
126
+ background-color: var(--new-gutter-hover-bg-color);
99
127
  cursor: row-resize;
100
128
 
101
129
  &:before {
102
- background-color: var(--gutter-handler-active-bg-color);
130
+ background-color: var(--new-gutter-active-before-bg-color);
103
131
  }
104
132
  }
105
133
 
@@ -112,8 +140,9 @@ const props = defineProps<{
112
140
  transition-duration: 0.25s;
113
141
  width: 24px;
114
142
  height: 2px;
115
- left: calc(50% - 12px);
116
- top: calc(50% - 1px);
143
+ left: 50%;
144
+ top: 50%;
145
+ transform: translate(-50%, -50%);
117
146
  border-radius: 4px;
118
147
  }
119
148
  }
@@ -122,6 +151,11 @@ const props = defineProps<{
122
151
  overflow: hidden;
123
152
  flex: 1;
124
153
  box-shadow: var(--second-panel-box-shadow);
154
+
155
+ &.hidden {
156
+ display: none;
157
+ height: 0;
158
+ }
125
159
  //z-index: calc(var(--z-default) + 1);
126
160
  }
127
161
  }
@@ -3,13 +3,22 @@
3
3
  :id="props.elementId"
4
4
  :class="['fill-parent vertical', { dragging: props.isDrag }]"
5
5
  >
6
- <div :style="props.topPanelStyle" class="vui-horizontal-panel firstPanel">
6
+ <div
7
+ :style="props.topPanelStyle"
8
+ :class="[
9
+ 'vui-horizontal-panel firstPanel',
10
+ {
11
+ 'hidden-second': !props.bottomPermission,
12
+ },
13
+ ]"
14
+ >
7
15
  <div class="vui-horizontal-panel sec-nav-container">
8
16
  <slot name="firstPanel" />
9
17
  </div>
10
18
  </div>
11
19
 
12
20
  <div
21
+ v-if="props.bottomPermission"
13
22
  :id="`gutter-${props.elementId}`"
14
23
  class="gutter gutter-vertical"
15
24
  tabindex="0"
@@ -20,7 +29,16 @@
20
29
  <div class="gutter-vertical-handler"></div>
21
30
  </div>
22
31
 
23
- <div :style="props.bottomPanelStyle" class="secondPanel bottom">
32
+ <div
33
+ v-if="props.bottomPermission"
34
+ :style="props.bottomPanelStyle"
35
+ :class="[
36
+ 'secondPanel bottom',
37
+ {
38
+ hidden: !props.bottomPermission,
39
+ },
40
+ ]"
41
+ >
24
42
  <slot name="secondPanel" />
25
43
  </div>
26
44
  </div>
@@ -37,6 +55,7 @@ const props = defineProps<{
37
55
  isDrag: boolean
38
56
  topPanelStyle: UI_I_SplitVerticalStyle
39
57
  bottomPanelStyle: UI_I_SplitVerticalStyle
58
+ bottomPermission: boolean
40
59
  }>()
41
60
  </script>
42
61
 
@@ -52,6 +71,11 @@ const props = defineProps<{
52
71
  max-height: calc(100% - 36px);
53
72
  height: calc(100vh - 36px);
54
73
 
74
+ &.hidden-second {
75
+ max-height: 100%;
76
+ height: 100% !important;
77
+ }
78
+
55
79
  .sec-nav-container {
56
80
  width: 100%;
57
81
  height: 100%;
@@ -109,6 +133,11 @@ const props = defineProps<{
109
133
  height: auto;
110
134
  overflow: hidden;
111
135
  flex: 1;
136
+
137
+ &.hidden {
138
+ display: none;
139
+ height: 0;
140
+ }
112
141
  }
113
142
  }
114
143
  </style>
@@ -7,6 +7,7 @@
7
7
  :is-drag="isDrag"
8
8
  :top-panel-style="topPanelStyle"
9
9
  :bottom-panel-style="bottomPanelStyle"
10
+ :bottom-permission="props.bottomPermission"
10
11
  >
11
12
  <template #firstPanel>
12
13
  <slot name="firstPanel" />
@@ -25,6 +26,7 @@
25
26
  :is-drag="isDrag"
26
27
  :top-panel-style="topPanelStyle"
27
28
  :bottom-panel-style="bottomPanelStyle"
29
+ :bottom-permission="props.bottomPermission"
28
30
  >
29
31
  <template #firstPanel>
30
32
  <slot name="firstPanel" />
@@ -46,12 +48,14 @@ const props = withDefaults(
46
48
  topPanelH?: number
47
49
  topPanelMinHeight?: number
48
50
  bottomPanelMinHeight?: number
51
+ bottomPermission?: boolean
49
52
  }>(),
50
53
  {
51
54
  topPanelMinHeight: 200, // 200px
52
55
  bottomPanelMinHeight: 200, // 200px
53
56
  topPanelHForce: '',
54
57
  topPanelH: undefined,
58
+ bottomPermission: true,
55
59
  }
56
60
  )
57
61
  const emits = defineEmits<{
@@ -55,13 +55,13 @@
55
55
  <div ref="subTitleBlockName">
56
56
  <div class="subtitle-block">
57
57
  <div
58
- id="name-alert-wrapper"
59
- :class="[{ 'mb-4': !isNameAlertWrapperEmpty }]"
58
+ id="name-alert-wrapper"
59
+ :class="[{ 'mb-4': !isNameAlertWrapperEmpty }]"
60
60
  ></div>
61
61
  <ui-wizard-subtitle
62
- :sub-title="
63
- localization.vmWizard.specifyUniqueNameAndTargetLocationForVm
64
- "
62
+ :sub-title="
63
+ localization.vmWizard.specifyUniqueNameAndTargetLocationForVm
64
+ "
65
65
  />
66
66
  </div>
67
67
  </div>
@@ -153,7 +153,8 @@
153
153
  :datastore="props.datastore"
154
154
  :is-datastore-loading="props.isDatastoreLoading"
155
155
  :get-datastore-table-func="props.getDatastoreTableFunc"
156
- :storage="props.vmtSettings?.storage"
156
+ :storage="storageLocal"
157
+ @change-storage="setSelectedStorageIdLocal"
157
158
  @submit="emits('change-storage', $event)"
158
159
  @has-errors="isStorageAlertWrapperEmpty = $event"
159
160
  />
@@ -593,6 +594,20 @@ const isNameAlertWrapperEmpty = ref<boolean>(false)
593
594
  // const isComputeResourceAlertWrapperEmpty = ref<boolean>(false)
594
595
  const isStorageAlertWrapperEmpty = ref<boolean>(false)
595
596
  const isCompatibilityAlertWrapperEmpty = ref<boolean>(false)
597
+
598
+ const storageLocal = computed<UI_I_DatastoreTableItem | undefined>(() => {
599
+ return selectedStorageLocal.value ?? props.vmtSettings?.storage
600
+ })
601
+
602
+ /* TODO: В дальнейшем необходимо вынести все данные наружу и передавать его через v-model */
603
+ // рефакторинг. При возврате на шаг выбора хранилища ранее выбранное хранилище не отображается как выбранное.
604
+ // Для хранилища в v-model необходимо сохранять ID хранилища, а не ключ индекса.
605
+ const selectedStorageLocal = ref<UI_I_DatastoreTableItem | null>(null)
606
+ const setSelectedStorageIdLocal = (datastore: UI_I_DatastoreTableItem) => {
607
+ selectedStorageLocal.value = {
608
+ id: datastore.id,
609
+ } as UI_I_DatastoreTableItem
610
+ }
596
611
  </script>
597
612
 
598
613
  <style>
@@ -242,6 +242,7 @@ const localization = computed<UI_I_Localization>(() => useLocal())
242
242
  .cpu-info-block {
243
243
  :deep(.help-text) {
244
244
  margin-bottom: 12px;
245
+ color: var(--stack-block-text-color);
245
246
  }
246
247
  :deep(.cpu-more-info) {
247
248
  font-size: 13px;
@@ -9,9 +9,7 @@ import type { UI_I_StatusData } from '~/components/common/vm/actions/common/sele
9
9
  import { datastoreLocalizationByState } from '~/components/common/lib/config/states'
10
10
  import { getStatus } from '~/components/common/vm/actions/common/select/storage/new/lib/utils/utils'
11
11
 
12
- export const tableDataFunc = (
13
- localization: UI_I_Localization
14
- ): UI_I_DataTable => ({
12
+ export const tableDataFunc = (localization: UI_I_Localization): UI_I_DataTable => ({
15
13
  id: 'select-storage',
16
14
  header: [
17
15
  {
@@ -31,7 +29,7 @@ export const tableDataFunc = (
31
29
  text: localization.inventorySummary.state,
32
30
  isSortable: false,
33
31
  sort: 'asc',
34
- sortColumn: true,
32
+ sortColumn: false,
35
33
  width: '160px',
36
34
  show: true,
37
35
  filter: true,
@@ -42,7 +40,7 @@ export const tableDataFunc = (
42
40
  text: localization.common.capacity,
43
41
  isSortable: false,
44
42
  sort: 'asc',
45
- sortColumn: true,
43
+ sortColumn: false,
46
44
  width: '150px',
47
45
  show: true,
48
46
  filter: true,
@@ -53,7 +51,7 @@ export const tableDataFunc = (
53
51
  text: localization.common.provisioned,
54
52
  isSortable: false,
55
53
  sort: 'asc',
56
- sortColumn: true,
54
+ sortColumn: false,
57
55
  width: '150px',
58
56
  show: true,
59
57
  filter: true,
@@ -64,7 +62,7 @@ export const tableDataFunc = (
64
62
  text: localization.common.free,
65
63
  isSortable: false,
66
64
  sort: 'asc',
67
- sortColumn: true,
65
+ sortColumn: false,
68
66
  width: '150px',
69
67
  show: true,
70
68
  filter: true,
@@ -75,7 +73,7 @@ export const tableDataFunc = (
75
73
  text: localization.common.used,
76
74
  isSortable: false,
77
75
  sort: 'asc',
78
- sortColumn: true,
76
+ sortColumn: false,
79
77
  width: '150px',
80
78
  show: true,
81
79
  filter: true,
@@ -86,7 +84,7 @@ export const tableDataFunc = (
86
84
  text: localization.common.type,
87
85
  isSortable: false,
88
86
  sort: 'asc',
89
- sortColumn: true,
87
+ sortColumn: false,
90
88
  width: '120px',
91
89
  show: true,
92
90
  filter: true,
@@ -97,7 +95,7 @@ export const tableDataFunc = (
97
95
  text: localization.common.thinProvisioning,
98
96
  isSortable: false,
99
97
  sort: 'asc',
100
- sortColumn: true,
98
+ sortColumn: false,
101
99
  width: '160px',
102
100
  show: true,
103
101
  filter: true,
@@ -108,7 +106,7 @@ export const tableDataFunc = (
108
106
  text: localization.common.access,
109
107
  isSortable: false,
110
108
  sort: 'asc',
111
- sortColumn: true,
109
+ sortColumn: false,
112
110
  width: '120px',
113
111
  show: true,
114
112
  filter: true,
@@ -119,7 +117,7 @@ export const tableDataFunc = (
119
117
  text: localization.common.hardwareAcceleration,
120
118
  isSortable: false,
121
119
  sort: 'asc',
122
- sortColumn: true,
120
+ sortColumn: false,
123
121
  width: '200px',
124
122
  show: true,
125
123
  filter: true,
@@ -130,7 +128,7 @@ export const tableDataFunc = (
130
128
  text: localization.common.driverType,
131
129
  isSortable: false,
132
130
  sort: 'asc',
133
- sortColumn: true,
131
+ sortColumn: false,
134
132
  width: '150px',
135
133
  show: true,
136
134
  filter: true,
@@ -141,7 +139,7 @@ export const tableDataFunc = (
141
139
  text: localization.common.device,
142
140
  isSortable: false,
143
141
  sort: 'asc',
144
- sortColumn: true,
142
+ sortColumn: false,
145
143
  width: '150px',
146
144
  show: true,
147
145
  filter: true,
@@ -152,7 +150,7 @@ export const tableDataFunc = (
152
150
  text: localization.common.storageIoControl,
153
151
  isSortable: false,
154
152
  sort: 'asc',
155
- sortColumn: true,
153
+ sortColumn: false,
156
154
  width: '180px',
157
155
  show: true,
158
156
  filter: true,
@@ -4,6 +4,7 @@
4
4
  :sub-title="props.subTitle"
5
5
  :description="props.description"
6
6
  :modal-texts="props.modalTexts"
7
+ :loading="props.isLoading"
7
8
  @hide-modal="emits('hide')"
8
9
  @confirm="emits('confirm')"
9
10
  >
@@ -22,9 +23,11 @@ const props = withDefaults(
22
23
  subTitle: string
23
24
  description: string
24
25
  modalTexts?: UI_I_ModalTexts
26
+ isLoading?: boolean
25
27
  }>(),
26
28
  {
27
29
  modalTexts: undefined,
30
+ isLoading: false
28
31
  }
29
32
  )
30
33
 
@@ -7,13 +7,13 @@
7
7
  >
8
8
  <tbody>
9
9
  <tr>
10
- <td class="left">{{ localization.common.name }}</td>
10
+ <td class="left" data-id="vm-snapshot-name-label">{{ localization.common.name }}</td>
11
11
  <td class="left snapshot-name-label" data-id="vm-snapshot-name">
12
12
  {{ detailData.name }}
13
13
  </td>
14
14
  </tr>
15
15
  <tr>
16
- <td class="left">{{ localization.common.description }}</td>
16
+ <td class="left" data-id="vm-snapshot-description-label">{{ localization.common.description }}</td>
17
17
  <td
18
18
  class="left snapshot-name-label"
19
19
  data-id="vm-snapshot-description"
@@ -22,17 +22,17 @@
22
22
  </td>
23
23
  </tr>
24
24
  <tr>
25
- <td class="left">{{ localization.snapshots.timestamp }}</td>
25
+ <td class="left" data-id="vm-snapshot-timestamp-label">{{ localization.snapshots.timestamp }}</td>
26
26
  <td class="left snapshot-name-label" data-id="vm-snapshot-timestamp">
27
27
  {{ detailData.timestamp }}
28
28
  </td>
29
29
  </tr>
30
30
  <tr>
31
- <td class="left">{{ localization.common.size }}</td>
31
+ <td class="left" data-id="vm-snapshot-size-label">{{ localization.common.size }}</td>
32
32
  <td class="left snapshot-name-label">{{ detailData.size }}</td>
33
33
  </tr>
34
34
  <tr>
35
- <td class="left">
35
+ <td class="left" data-id="vm-snapshot-of-memory-label">
36
36
  {{ localization.common.snapshotTheVirtualMachinesMemory }}
37
37
  </td>
38
38
  <td class="left snapshot-name-label" data-id="vm-snapshot-of-memory">
@@ -40,7 +40,7 @@
40
40
  </td>
41
41
  </tr>
42
42
  <tr>
43
- <td class="left">
43
+ <td class="left" data-id="vm-snapshot-file-system-label">
44
44
  {{ localization.common.quiesceGuestFileSystem }}
45
45
  </td>
46
46
  <td
@@ -256,4 +256,10 @@ const onCreateDatastore = (): void => emits('submit')
256
256
  padding: 10px 12px;
257
257
  }
258
258
  }
259
+ :deep(.ui-wizard-content-right-container) {
260
+ padding: 0 30px;
261
+ }
262
+ :deep(.ui-wizard-subtitle-container) + *, :deep(.ui-wizard-subtitle-container) {
263
+ padding-left: 2px;
264
+ }
259
265
  </style>
@@ -179,7 +179,7 @@ const onSelectHost = (event: string): void => {
179
179
  display: flex;
180
180
  flex-direction: column;
181
181
  row-gap: 16px;
182
- margin: 16px 0 16px 2px;
182
+ margin: 16px 0;
183
183
 
184
184
  &__alert {
185
185
  align-items: flex-start;
@@ -3,7 +3,7 @@
3
3
  <ui-button
4
4
  variant="text"
5
5
  test-id="advanced-options-button"
6
- class="advanced-options-btn btn btn-link"
6
+ class="advanced-options-btn"
7
7
  @click="isShowAdvancedOptions = !isShowAdvancedOptions"
8
8
  >
9
9
  <template #icon>
@@ -618,9 +618,20 @@ const finalValidationFunc = async (
618
618
  const stepId = wizard.getStepIdByFieldName(fieldName)
619
619
 
620
620
  if (stepId !== -1) {
621
+ let message = ''
622
+
623
+ if (validationFields[fieldName]) {
624
+ message = `${validationFields[
625
+ fieldName
626
+ ][0].toUpperCase()}${validationFields[fieldName].substring(1)}`
627
+
628
+ message =
629
+ message.charAt(message.length - 1) !== '.' ? message + '.' : message
630
+ }
631
+
621
632
  stepHasError = wizard.setValidation(stepId, fieldName, {
622
- fieldMessage: validationFields[fieldName],
623
- alertMessage: validationFields[fieldName],
633
+ fieldMessage: message,
634
+ alertMessage: message,
624
635
  })
625
636
  }
626
637
  }
@@ -44,22 +44,21 @@
44
44
  >
45
45
  <template #subTitle>
46
46
  <div ref="selectTargetDeviceBlock">
47
- <div class="subtitle-block flex flex-col">
47
+ <div class="alert-block flex flex-col">
48
48
  <template
49
49
  v-for="(message, field, key) in selectedStep.fields"
50
50
  :key="key"
51
51
  >
52
52
  <ui-alert
53
+ v-if="!!message.alert"
53
54
  :messages="[message.alert]"
54
55
  test-id="select-target-device-alert"
55
- :class="{
56
- 'mb-4':
57
- props.alertMessages[selectedStep.id].length - 1 === key,
58
- }"
59
56
  size="md"
60
57
  @hide="emits('hide-alert', selectedStep.id, field)"
61
58
  />
62
59
  </template>
60
+ </div>
61
+ <div class="subtitle-block flex flex-col">
63
62
  <ui-wizard-subtitle :sub-title="selectedStep.subTitle" />
64
63
  <ui-line margin="12px 0 0" />
65
64
  </div>
@@ -89,22 +88,21 @@
89
88
  >
90
89
  <template #subTitle>
91
90
  <div ref="createStandardSwitchBlock">
92
- <div class="subtitle-block flex flex-col">
91
+ <div class="alert-block flex flex-col">
93
92
  <template
94
93
  v-for="(message, field, key) in selectedStep.fields"
95
94
  :key="key"
96
95
  >
97
96
  <ui-alert
97
+ v-if="!!message.alert"
98
98
  :messages="[message.alert]"
99
99
  test-id="create-standard-switch-alert"
100
- :class="{
101
- 'mb-4':
102
- props.alertMessages[selectedStep.id].length - 1 === key,
103
- }"
104
100
  size="md"
105
101
  @hide="emits('hide-alert', selectedStep.id, field)"
106
102
  />
107
103
  </template>
104
+ </div>
105
+ <div class="subtitle-block flex flex-col">
108
106
  <ui-wizard-subtitle :sub-title="selectedStep.subTitle" />
109
107
  <ui-line margin="12px 0 0" />
110
108
  </div>
@@ -146,22 +144,21 @@
146
144
  >
147
145
  <template #subTitle>
148
146
  <div ref="portPropertiesBlock">
149
- <div class="subtitle-block flex flex-col">
147
+ <div class="alert-block flex flex-col">
150
148
  <template
151
149
  v-for="(message, field, key) in selectedStep.fields"
152
150
  :key="key"
153
151
  >
154
152
  <ui-alert
153
+ v-if="!!message.alert"
155
154
  :messages="[message.alert]"
156
155
  test-id="port-properties-alert"
157
- :class="{
158
- 'mb-4':
159
- props.alertMessages[selectedStep.id].length - 1 === key,
160
- }"
161
156
  size="md"
162
157
  @hide="emits('hide-alert', selectedStep.id, field)"
163
158
  />
164
159
  </template>
160
+ </div>
161
+ <div class="subtitle-block flex flex-col">
165
162
  <ui-wizard-subtitle :sub-title="selectedStep.subTitle" />
166
163
  <ui-line margin="12px 0 0" />
167
164
  </div>
@@ -190,22 +187,21 @@
190
187
  >
191
188
  <template #subTitle>
192
189
  <div ref="ipFourSettingsBlock">
193
- <div class="subtitle-block flex flex-col">
190
+ <div class="alert-block flex flex-col">
194
191
  <template
195
192
  v-for="(message, field, key) in selectedStep.fields"
196
193
  :key="key"
197
194
  >
198
195
  <ui-alert
196
+ v-if="!!message.alert"
199
197
  :messages="[message.alert]"
200
198
  test-id="ip-four-settings-alert"
201
- :class="{
202
- 'mb-4':
203
- props.alertMessages[selectedStep.id].length - 1 === key,
204
- }"
205
199
  size="md"
206
200
  @hide="emits('hide-alert', selectedStep.id, field)"
207
201
  />
208
202
  </template>
203
+ </div>
204
+ <div class="subtitle-block flex flex-col">
209
205
  <ui-wizard-subtitle :sub-title="selectedStep.subTitle" />
210
206
  <ui-line margin="12px 0 0" />
211
207
  </div>
@@ -233,22 +229,21 @@
233
229
  >
234
230
  <template #subTitle>
235
231
  <div ref="connectionSettingsBlock">
236
- <div class="subtitle-block flex flex-col">
232
+ <div class="alert-block flex flex-col">
237
233
  <template
238
234
  v-for="(message, field, key) in selectedStep.fields"
239
235
  :key="key"
240
236
  >
241
237
  <ui-alert
238
+ v-if="!!message.alert"
242
239
  :messages="[message.alert]"
243
240
  test-id="connection-settings-alert"
244
- :class="{
245
- 'mb-4':
246
- props.alertMessages[selectedStep.id].length - 1 === key,
247
- }"
248
241
  size="md"
249
242
  @hide="emits('hide-alert', selectedStep.id, field)"
250
243
  />
251
244
  </template>
245
+ </div>
246
+ <div class="subtitle-block flex flex-col">
252
247
  <ui-wizard-subtitle :sub-title="selectedStep.subTitle" />
253
248
  <ui-line margin="12px 0 0" />
254
249
  </div>
@@ -463,6 +458,7 @@ const onChangeSteps = async (value: UI_I_WizardStep[]): Promise<void> => {
463
458
  }
464
459
  :deep(.ui-wizard-content-with-subtitle) {
465
460
  padding-right: 0;
461
+ scrollbar-gutter: unset;
466
462
  }
467
463
  }
468
464
 
@@ -477,7 +473,7 @@ const onChangeSteps = async (value: UI_I_WizardStep[]): Promise<void> => {
477
473
  :deep(.ui-alert-item) {
478
474
  margin-bottom: 12px;
479
475
 
480
- &.mb-4 {
476
+ &:last-of-type {
481
477
  margin-bottom: 16px;
482
478
  }
483
479
  }