bfg-common 1.5.285 → 1.5.287

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 (21) hide show
  1. package/components/common/backup/storage/actions/add/New.vue +0 -1
  2. package/components/common/backup/storage/actions/add/steps/hostAccessibility/table/new/New.vue +6 -0
  3. package/components/common/backup/storage/actions/add/steps/hostAccessibility/table/new/lib/config/compatibleTable.ts +2 -1
  4. package/components/common/browse/BrowseNew.vue +124 -101
  5. package/components/common/browse/blocks/Container.vue +45 -9
  6. package/components/common/browse/blocks/TitleNew.vue +2 -2
  7. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationNew.vue +1 -0
  8. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/StorageModal.vue +2 -1
  9. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/StorageModalNew.vue +2 -0
  10. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +12 -0
  11. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/Table.vue +4 -1
  12. package/components/common/vm/actions/common/select/storage/Storage.vue +2 -0
  13. package/components/common/vm/actions/common/select/storage/new/New.vue +28 -10
  14. package/components/common/wizards/datastore/add/New.vue +1 -1
  15. package/components/common/wizards/datastore/add/lib/validations.ts +22 -8
  16. package/components/common/wizards/datastore/add/steps/hostAccessibility/table/new/New.vue +8 -0
  17. package/components/common/wizards/datastore/add/steps/hostAccessibility/table/new/lib/config/compatibleTable.ts +1 -0
  18. package/components/common/wizards/datastore/add/steps/nameAndDevice/table/Table.vue +7 -4
  19. package/components/common/wizards/datastore/add/steps/nameAndDevice/table/new/New.vue +6 -0
  20. package/components/common/wizards/datastore/add/steps/nameAndDevice/table/new/lib/config/lunDiskTable.ts +2 -1
  21. package/package.json +1 -1
@@ -28,7 +28,6 @@
28
28
  :help-text="localization.common.datastoreTypeHelpDesc"
29
29
  dropdown-width="320px"
30
30
  dropdown-left
31
- dropdown-top
32
31
  class="ml-2"
33
32
  />
34
33
  </div>
@@ -9,6 +9,7 @@
9
9
  :total-items="props.totalItems"
10
10
  :texts="texts"
11
11
  :default-layout="false"
12
+ :skeleton="tableSkeleton"
12
13
  class="accessibility-host-table"
13
14
  size="sm"
14
15
  @select-row="onSelectRow"
@@ -31,6 +32,7 @@ import type {
31
32
  UI_I_DataTableHeader,
32
33
  UI_I_TableTexts,
33
34
  } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
35
+ import type {UI_I_DataTableSkeleton} from "~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces";
34
36
  import type { UI_I_CompatibleHostsTableItem } from '~/components/common/backup/storage/actions/add/steps/hostAccessibility/table/lib/models/interfaces'
35
37
  import {
36
38
  getBodyDataFunc,
@@ -63,6 +65,10 @@ const texts = computed<UI_I_TableTexts>(() => ({
63
65
  filter: localization.value.common.filter,
64
66
  }))
65
67
 
68
+ const tableSkeleton = ref<UI_I_DataTableSkeleton>({
69
+ withoutPagination: true,
70
+ })
71
+
66
72
  const data = computed<UI_I_DataTable>(() => ({
67
73
  id: 'accessibility-host-table',
68
74
  header: hostHeadItems.value,
@@ -45,7 +45,8 @@ export const options: UI_I_DataTableOptions = {
45
45
  isResizable: true,
46
46
  showSelectedRows: true,
47
47
  showColumnManager: false,
48
- inBlock: true
48
+ inBlock: true,
49
+ inModal: true
49
50
  }
50
51
 
51
52
  export const getBodyDataFunc = (
@@ -13,111 +13,117 @@
13
13
  >
14
14
  <template #content>
15
15
  <div class="browse-container">
16
- <common-browse-blocks-container
17
- type="horizontal"
18
- :blocks-width="props.blocksWidth"
19
- @change-widths="onChangeWidths"
20
- >
21
- <template #firstBlock>
22
- <common-browse-blocks-title-new
23
- :width="props.blocksWidth[0]"
24
- :title="localization.common.datastores"
25
- :sorting="props.firstBlockSorting"
26
- @sort="emits('sort-first')"
27
- >
28
- <template #content>
29
- <div class="first-block-content">
30
- <ui-tree
31
- :nodes="props.nodesLocalWithLoading"
32
- @toggle-node="onShowNodes"
33
- @select-node="onSelectNode"
34
- >
35
- <template #content="{ node }">
36
- <div
37
- :class="['browse-tree-item', { active: node.isActive }]"
38
- >
39
- <span :class="node.iconClassName"></span>
40
- <span class="text-ellipsis datastore-node-name">{{
41
- node.name
42
- }}</span>
43
- </div>
44
- </template>
45
- </ui-tree>
46
- </div>
47
- </template>
48
- </common-browse-blocks-title-new>
49
- </template>
50
- <template #secondBlock>
51
- <common-browse-blocks-title-new
52
- :width="props.blocksWidth[1]"
53
- :title="localization.common.contents"
54
- :sorting="props.secondBlockSorting"
55
- position="second-block"
56
- @sort="emits('sort-second')"
57
- >
58
- <template #content>
59
- <common-browse-blocks-contents-files
60
- :selected-folder-files="props.filesLocal"
61
- :selected-file="props.selectedFile"
62
- :browse-loading="props.browseLoading"
63
- @select-file="onSelectFile"
64
- />
65
- </template>
66
- </common-browse-blocks-title-new>
67
- </template>
68
- <template #thirdBlock>
69
- <common-browse-blocks-title-new
70
- :width="props.blocksWidth[2]"
71
- :title="localization.common.information"
72
- position="third-block"
73
- >
74
- <template #content>
75
- <div v-if="props.info" class="new-view-info">
76
- <div class="new-view-info_prop">
77
- <template v-for="item in props.info" :key="item.title">
78
- <span class="new-view-info_prop-item">
79
- {{ item.title }}:
80
- </span>
81
- </template>
16
+ <div class="container-columns-block">
17
+ <common-browse-blocks-container
18
+ type="horizontal"
19
+ :blocks-width="props.blocksWidth"
20
+ @change-widths="onChangeWidths"
21
+ >
22
+ <template #firstBlock>
23
+ <common-browse-blocks-title-new
24
+ :width="props.blocksWidth[0]"
25
+ :title="localization.common.datastores"
26
+ :sorting="props.firstBlockSorting"
27
+ @sort="emits('sort-first')"
28
+ >
29
+ <template #content>
30
+ <div class="first-block-content">
31
+ <ui-tree
32
+ :nodes="props.nodesLocalWithLoading"
33
+ @toggle-node="onShowNodes"
34
+ @select-node="onSelectNode"
35
+ >
36
+ <template #content="{ node }">
37
+ <div
38
+ :class="[
39
+ 'browse-tree-item',
40
+ { active: node.isActive },
41
+ ]"
42
+ >
43
+ <span :class="node.iconClassName"></span>
44
+ <span class="text-ellipsis datastore-node-name">{{
45
+ node.name
46
+ }}</span>
47
+ </div>
48
+ </template>
49
+ </ui-tree>
82
50
  </div>
83
- <div class="text-ellipsis">
84
- <div v-for="item in props.info" :key="item.title">
85
- <common-browse-blocks-info-text
86
- v-if="item.type === 'text'"
87
- :title="item.title"
88
- :value="item.value"
89
- />
90
- <common-browse-blocks-info-size
91
- v-if="item.type === 'size'"
92
- :title="item.title"
93
- :value="item.value"
94
- />
95
- <common-browse-blocks-info-date
96
- v-if="item.type === 'date'"
97
- :title="item.title"
98
- :value="item.value"
99
- />
51
+ </template>
52
+ </common-browse-blocks-title-new>
53
+ </template>
54
+ <template #secondBlock>
55
+ <common-browse-blocks-title-new
56
+ :width="props.blocksWidth[1]"
57
+ :title="localization.common.contents"
58
+ :sorting="props.secondBlockSorting"
59
+ position="second-block"
60
+ @sort="emits('sort-second')"
61
+ >
62
+ <template #content>
63
+ <common-browse-blocks-contents-files
64
+ :selected-folder-files="props.filesLocal"
65
+ :selected-file="props.selectedFile"
66
+ :browse-loading="props.browseLoading"
67
+ @select-file="onSelectFile"
68
+ />
69
+ </template>
70
+ </common-browse-blocks-title-new>
71
+ </template>
72
+ <template #thirdBlock>
73
+ <common-browse-blocks-title-new
74
+ :width="props.blocksWidth[2]"
75
+ :title="localization.common.information"
76
+ position="third-block"
77
+ >
78
+ <template #content>
79
+ <div v-if="props.info" class="new-view-info">
80
+ <div class="new-view-info_prop">
81
+ <template v-for="item in props.info" :key="item.title">
82
+ <span class="new-view-info_prop-item">
83
+ {{ item.title }}:
84
+ </span>
85
+ </template>
100
86
  </div>
101
- </div>
102
- </div>
103
- <div v-else>
104
- <div class="grid items-center empty-information">
105
- <div class="grid gap-3 mr-4 labels-block">
106
- <span>{{ localization.common.name }}:</span>
107
- <span>{{ localization.common.available }}:</span>
108
- <span>{{ localization.common.modified }}:</span>
87
+ <div class="text-ellipsis">
88
+ <div v-for="item in props.info" :key="item.title">
89
+ <common-browse-blocks-info-text
90
+ v-if="item.type === 'text'"
91
+ :title="item.title"
92
+ :value="item.value"
93
+ />
94
+ <common-browse-blocks-info-size
95
+ v-if="item.type === 'size'"
96
+ :title="item.title"
97
+ :value="item.value"
98
+ />
99
+ <common-browse-blocks-info-date
100
+ v-if="item.type === 'date'"
101
+ :title="item.title"
102
+ :value="item.value"
103
+ />
104
+ </div>
109
105
  </div>
110
- <div class="grid gap-3 values-block">
111
- <span>--</span>
112
- <span>--</span>
113
- <span>--</span>
106
+ </div>
107
+ <div v-else>
108
+ <div class="grid items-center empty-information">
109
+ <div class="grid gap-3 mr-4 labels-block">
110
+ <span>{{ localization.common.name }}:</span>
111
+ <span>{{ localization.common.available }}:</span>
112
+ <span>{{ localization.common.modified }}:</span>
113
+ </div>
114
+ <div class="grid gap-3 values-block">
115
+ <span>--</span>
116
+ <span>--</span>
117
+ <span>--</span>
118
+ </div>
114
119
  </div>
115
120
  </div>
116
- </div>
117
- </template>
118
- </common-browse-blocks-title-new>
119
- </template>
120
- </common-browse-blocks-container>
121
+ </template>
122
+ </common-browse-blocks-title-new>
123
+ </template>
124
+ </common-browse-blocks-container>
125
+ <div class="opacity-block"></div>
126
+ </div>
121
127
  <div v-if="props.fileTypes" class="flex items-center mt-3">
122
128
  <span class="file-type-label mr-3"
123
129
  >{{ localization.common.fileType }}:</span
@@ -234,7 +240,24 @@ const selectedFileTypeLocal = computed<any>({
234
240
  }
235
241
 
236
242
  .browse-container {
237
- padding: 8px 32px 0 32px;
243
+ margin-top: 8px;
244
+ padding: 0 32px 0 32px;
245
+ height: calc(100vh - 308px);
246
+ display: grid;
247
+ grid-template-rows: 1fr auto;
248
+ overflow-y: hidden;
249
+
250
+ .container-columns-block {
251
+ overflow-y: hidden;
252
+ height: 100%;
253
+
254
+ .opacity-block {
255
+ height: 16px;
256
+ top: -16px;
257
+ position: relative;
258
+ background: linear-gradient(rgba(250, 250, 250, 0), var(--modal-bg));
259
+ }
260
+ }
238
261
  }
239
262
 
240
263
  .browse-tree-item {
@@ -1,5 +1,6 @@
1
1
  <template>
2
2
  <div
3
+ ref="containerBlock"
3
4
  :class="[
4
5
  `title-block__${props.type}-container`,
5
6
  {
@@ -9,6 +10,7 @@
9
10
  >
10
11
  <slot name="firstBlock"></slot>
11
12
  <div
13
+ ref="moveSeperator"
12
14
  :class="[
13
15
  'move-separator',
14
16
  {
@@ -18,13 +20,14 @@
18
20
  },
19
21
  ]"
20
22
  :data-id="`${props.testId}-first`"
21
- :style="leftPosition"
23
+ :style="seperatorStyles"
22
24
  @mousedown="onMouseDown($event, 'first')"
23
25
  >
24
- <div></div>
26
+ <div :style="moveSeperatorBeforeStyles"></div>
25
27
  </div>
26
28
  <slot name="secondBlock"></slot>
27
29
  <div
30
+ ref="secondMoveSeperator"
28
31
  :class="[
29
32
  'move-separator',
30
33
  {
@@ -34,16 +37,17 @@
34
37
  },
35
38
  ]"
36
39
  :data-id="`${props.testId}-second`"
37
- :style="rightPosition"
40
+ :style="secondSeperatorStyles"
38
41
  @mousedown="onMouseDown($event, 'second')"
39
42
  >
40
- <div></div>
43
+ <div :style="secondMoveSeperatorBeforeStyles"></div>
41
44
  </div>
42
45
  <slot name="thirdBlock"></slot>
43
46
  </div>
44
47
  </template>
45
48
 
46
49
  <script setup lang="ts">
50
+ import { useElementSize } from '@vueuse/core'
47
51
  import type { UI_T_BlocksWidth } from '~/components/common/browse/blocks/lib/models/types'
48
52
 
49
53
  const props = withDefaults(
@@ -66,14 +70,46 @@ const sectionSelectedName = ref<string>('')
66
70
 
67
71
  const positionOnDown = ref<number>(0)
68
72
 
73
+ const containerBlock = ref<HTMLElement | null>(null)
74
+ const { height: heightContainerBlock } = useElementSize(containerBlock)
75
+
76
+ const moveSeperator = ref<HTMLElement | null>(null)
77
+ const { height: heightMoveSeperator } = useElementSize(moveSeperator)
78
+ const moveSeperatorBeforeStyles = ref<any>({})
79
+ watch(
80
+ heightMoveSeperator,
81
+ (newValue) => {
82
+ if (!newValue) return
83
+
84
+ moveSeperatorBeforeStyles.value.top = newValue / 2 + 'px'
85
+ },
86
+ { immediate: true, deep: true }
87
+ )
88
+
89
+ const secondMoveSeperator = ref<HTMLElement | null>(null)
90
+ const { height: heightSecondMoveSeperator } =
91
+ useElementSize(secondMoveSeperator)
92
+ const secondMoveSeperatorBeforeStyles = ref<any>({})
93
+ watch(
94
+ heightSecondMoveSeperator,
95
+ (newValue) => {
96
+ if (!newValue) return
97
+
98
+ secondMoveSeperatorBeforeStyles.value.top = newValue / 2 + 'px'
99
+ },
100
+ { immediate: true, deep: true }
101
+ )
102
+
69
103
  const translation1 = computed<number>(() => (isNewView.value ? 31 : 28))
70
104
  const translation2 = computed<number>(() => (isNewView.value ? 47 : 28))
71
105
 
72
- const leftPosition = computed(() => ({
106
+ const seperatorStyles = computed(() => ({
73
107
  left: `${props.blocksWidth[0] + translation1.value}px`,
108
+ height: `${heightContainerBlock.value}px`,
74
109
  }))
75
- const rightPosition = computed(() => ({
110
+ const secondSeperatorStyles = computed(() => ({
76
111
  right: `${props.blocksWidth[2] + translation2.value}px`,
112
+ height: `${heightContainerBlock.value}px`,
77
113
  }))
78
114
 
79
115
  const emits = defineEmits<{
@@ -141,13 +177,14 @@ onUnmounted(() => {
141
177
 
142
178
  .title-block__horizontal-container.title-block__new-view {
143
179
  gap: 0;
180
+ height: inherit;
144
181
  }
145
182
  .move-separator {
146
183
  position: absolute;
147
184
  width: 3px;
148
- height: 400px;
185
+ height: inherit;
149
186
  background-color: var(--modal-bg-color);
150
- cursor: e-resize;
187
+ cursor: col-resize;
151
188
  z-index: var(--z-fixed);
152
189
 
153
190
  &-new-view {
@@ -172,7 +209,6 @@ onUnmounted(() => {
172
209
  background-color: var(--select-file-sprt-handler-color);
173
210
  position: absolute;
174
211
  left: 0.5px;
175
- top: 192px;
176
212
  border-radius: 2px;
177
213
  }
178
214
  }
@@ -61,7 +61,7 @@ const blockTitleWidth = computed<any>(() => ({
61
61
  <style scoped lang="scss">
62
62
  .title-block {
63
63
  width: 100%;
64
- min-height: 400px;
64
+ min-height: 100%;
65
65
  position: relative;
66
66
 
67
67
  &__container {
@@ -70,7 +70,7 @@ const blockTitleWidth = computed<any>(() => ({
70
70
  left: 0;
71
71
  display: flex;
72
72
  flex-direction: column;
73
- height: 400px;
73
+ height: 100%;
74
74
 
75
75
  &.title-block__container-first-block {
76
76
  padding-right: 12px;
@@ -24,6 +24,7 @@
24
24
  :datastore="props.datastore"
25
25
  :is-datastore-loading="props.isDatastoreLoading"
26
26
  :get-datastore-table-func="props.getDatastoreTableFunc"
27
+ is-in-wizard
27
28
  @change-storage="emits('change-storage', $event)"
28
29
  @hide="emits('hide-storage-modal')"
29
30
  @submit="emits('submit-storage-modal')"
@@ -6,6 +6,7 @@
6
6
  :datastore="props.datastore"
7
7
  :is-datastore-loading="props.isDatastoreLoading"
8
8
  :get-datastore-table-func="props.getDatastoreTableFunc"
9
+ :is-in-wizard="props.isInWizard"
9
10
  @change-storage="emits('change-storage', $event)"
10
11
  @submit="emits('submit')"
11
12
  @hide="emits('hide')"
@@ -33,6 +34,7 @@ const props = defineProps<{
33
34
  datastore: UI_I_DatastoreTableItem[]
34
35
  isDatastoreLoading: boolean
35
36
  getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
37
+ isInWizard?: boolean
36
38
  }>()
37
39
 
38
40
  const emits = defineEmits<{
@@ -43,7 +45,6 @@ const emits = defineEmits<{
43
45
 
44
46
  const { $store }: any = useNuxtApp()
45
47
  const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
46
-
47
48
  </script>
48
49
 
49
50
  <style scoped lang="scss">
@@ -28,6 +28,7 @@
28
28
  :datastore="props.datastore"
29
29
  :is-datastore-loading="props.isDatastoreLoading"
30
30
  :get-datastore-table-func="props.getDatastoreTableFunc"
31
+ :is-in-wizard="props.isInWizard"
31
32
  hide-compatibility
32
33
  hide-alert
33
34
  @submit="emits('change-storage', $event)"
@@ -58,6 +59,7 @@ const props = defineProps<{
58
59
  datastore: UI_I_DatastoreTableItem[]
59
60
  isDatastoreLoading: boolean
60
61
  getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
62
+ isInWizard?: boolean
61
63
  }>()
62
64
 
63
65
  const emits = defineEmits<{
@@ -73,6 +73,18 @@ const modalTexts = ref<UI_I_ModalTexts>({
73
73
  </script>
74
74
 
75
75
  <style scoped lang="scss">
76
+ :root.dark-theme {
77
+ .network-select-dialog-content {
78
+ :deep(.column-manager-button) {
79
+ &:hover {
80
+ background: #b8bcc10a;
81
+ }
82
+ &.active:hover {
83
+ background-color: #2785b614;
84
+ }
85
+ }
86
+ }
87
+ }
76
88
  .network-select-dialog-content {
77
89
  margin: 0 32px;
78
90
  }
@@ -14,7 +14,7 @@
14
14
  <span class="flex-align-center">
15
15
  <span :class="['icon', item.data.icon]" />
16
16
 
17
- <span :data-id="item.data.testId">
17
+ <span class="network-name" :data-id="item.data.testId">
18
18
  {{ item.text }}
19
19
  </span>
20
20
  </span>
@@ -80,4 +80,7 @@ const onSelect = (value: UI_I_DataTableBody[]): void => {
80
80
  .icon {
81
81
  margin-right: 4px;
82
82
  }
83
+ .network-name {
84
+ font-size: 12px;
85
+ }
83
86
  </style>
@@ -9,6 +9,7 @@
9
9
  :selected-storage="selectedStorage"
10
10
  :hide-compatibility="props.hideCompatibility"
11
11
  :hide-alert="props.hideAlert"
12
+ :is-in-wizard="props.isInWizard"
12
13
  @remove-error="onRemoveValidationErrors"
13
14
  @change-storage="changeStorage"
14
15
  />
@@ -42,6 +43,7 @@ const props = defineProps<{
42
43
  storage?: UI_I_DatastoreTableItem
43
44
  hideCompatibility?: boolean
44
45
  hideAlert?: boolean
46
+ isInWizard?: boolean
45
47
  }>()
46
48
  const emits = defineEmits<{
47
49
  (event: 'submit', value: UI_I_DatastoreTableItem): void
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="select-storage">
2
+ <div :class="['select-storage', { 'in-wizard': isInWizard }]">
3
3
  <Teleport v-if="!props.hideAlert" to="#storage-alert-wrapper">
4
4
  <ui-alert
5
5
  v-show="props.errors.length"
@@ -24,7 +24,7 @@
24
24
  size="sm"
25
25
  @select-row="onSelectRow"
26
26
  >
27
- <template #insteadOfTitleActions
27
+ <template v-if="!props.isInWizard" #insteadOfTitleActions
28
28
  ><h3 class="storage-count">
29
29
  {{ storageCount }}
30
30
  </h3></template
@@ -95,6 +95,7 @@ const props = defineProps<{
95
95
  selectedStorage: UI_I_DatastoreTableItem | null
96
96
  hideCompatibility?: boolean
97
97
  hideAlert?: boolean
98
+ isInWizard?: boolean
98
99
  }>()
99
100
  const emits = defineEmits<{
100
101
  (event: 'remove-error'): void
@@ -168,6 +169,20 @@ const onSelectRow = (selectedData: UI_I_DataTable): void => {
168
169
  }
169
170
  </style>
170
171
  <style scoped lang="scss">
172
+ :root.dark-theme {
173
+ .select-storage {
174
+ &.in-wizard {
175
+ :deep(.column-manager-button) {
176
+ &:hover {
177
+ background: #b8bcc10a;
178
+ }
179
+ &.active:hover {
180
+ background-color: #2785b614;
181
+ }
182
+ }
183
+ }
184
+ }
185
+ }
171
186
  .select-storage {
172
187
  padding-top: 12px;
173
188
  padding-bottom: 16px;
@@ -196,15 +211,18 @@ const onSelectRow = (selectedData: UI_I_DataTable): void => {
196
211
  }
197
212
  }
198
213
 
199
- :deep(.bottom-grid-content) {
200
- border: 1px solid var(--select-storage-border-color);
201
- border-radius: 8px;
202
- padding: 12px;
203
- background-color: var(--select-storage-bg-color);
204
- }
205
- :deep(.select-row-item) {
206
- background-color: var(--select-storage-bg-color);
214
+ &:not(.in-wizard) {
215
+ :deep(.bottom-grid-content) {
216
+ border: 1px solid var(--select-storage-border-color);
217
+ border-radius: 8px;
218
+ padding: 12px;
219
+ background-color: var(--select-storage-bg-color);
220
+ }
221
+ :deep(.select-row-item) {
222
+ background-color: var(--select-storage-bg-color);
223
+ }
207
224
  }
225
+
208
226
  :deep(.table-title-actions-container) {
209
227
  justify-content: flex-start;
210
228
  }
@@ -28,7 +28,6 @@
28
28
  :title="localization.common.information"
29
29
  dropdown-width="320px"
30
30
  dropdown-left
31
- dropdown-top
32
31
  />
33
32
  </div>
34
33
  </div>
@@ -66,6 +65,7 @@
66
65
  v-if="selectedStep.id === dynamicSteps.nameAndDevice"
67
66
  v-model="formModelLocal"
68
67
  :project="props.project"
68
+ :selected-node="props.selectedNode"
69
69
  :messages-fields="selectedStep.fields"
70
70
  :hosts="props.nfsHosts"
71
71
  :host-id="props.hostId"
@@ -58,7 +58,7 @@ export const checkDatastoreNameAsync = async (
58
58
 
59
59
  if (!labelValidation.isValid) {
60
60
  stepHasError = wizard.setValidation(stepId, fieldName, {
61
- fieldMessage: labelValidation.message,
61
+ fieldMessage: localization.common.fieldRequired,
62
62
  alertMessage: form.name ? labelValidation.message : '',
63
63
  })
64
64
  } else if (wizard.hasMessage(stepId, fieldName)) {
@@ -90,7 +90,11 @@ export const checkSelectedLunDiskSync = (
90
90
  : localization.common.selectDiskToContinueAlert,
91
91
  })
92
92
  } else if (wizard.hasMessage(dynamicSteps.nameAndDevice, 'lunDisk')) {
93
- value = wizard.removeValidation(dynamicSteps.nameAndDevice, 'lunDisk', value)
93
+ value = wizard.removeValidation(
94
+ dynamicSteps.nameAndDevice,
95
+ 'lunDisk',
96
+ value
97
+ )
94
98
  }
95
99
 
96
100
  return {
@@ -170,12 +174,22 @@ export const checkHostsAccessibilitySync = (
170
174
  let stepHasError = false
171
175
 
172
176
  if (!hosts.length) {
173
- stepHasError = wizard.setValidation(dynamicSteps.hostAccessibility, 'hostsAccessibility', {
174
- fieldMessage: '',
175
- alertMessage: localization.common.selectLeastEntityContinue,
176
- })
177
- } else if (wizard.hasMessage(dynamicSteps.hostAccessibility, 'hostsAccessibility')) {
178
- value = wizard.removeValidation(dynamicSteps.hostAccessibility, 'hostsAccessibility', value)
177
+ stepHasError = wizard.setValidation(
178
+ dynamicSteps.hostAccessibility,
179
+ 'hostsAccessibility',
180
+ {
181
+ fieldMessage: '',
182
+ alertMessage: localization.common.selectLeastEntityContinue,
183
+ }
184
+ )
185
+ } else if (
186
+ wizard.hasMessage(dynamicSteps.hostAccessibility, 'hostsAccessibility')
187
+ ) {
188
+ value = wizard.removeValidation(
189
+ dynamicSteps.hostAccessibility,
190
+ 'hostsAccessibility',
191
+ value
192
+ )
179
193
  }
180
194
 
181
195
  return {
@@ -9,6 +9,7 @@
9
9
  :total-items="props.totalItems"
10
10
  :texts="texts"
11
11
  :default-layout="false"
12
+ :skeleton="tableSkeleton"
12
13
  class="accessibility-host-table"
13
14
  size="sm"
14
15
  @select-row="onSelectRow"
@@ -31,6 +32,7 @@ import type {
31
32
  UI_I_DataTableHeader,
32
33
  UI_I_TableTexts,
33
34
  } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
35
+ import type {UI_I_DataTableSkeleton} from "~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces";
34
36
  import {
35
37
  getBodyDataFunc,
36
38
  getHeaderDataFunc,
@@ -63,6 +65,10 @@ const texts = computed<UI_I_TableTexts>(() => ({
63
65
  filter: localization.value.common.filter,
64
66
  }))
65
67
 
68
+ const tableSkeleton = ref<UI_I_DataTableSkeleton>({
69
+ withoutPagination: true,
70
+ })
71
+
66
72
  const data = computed<UI_I_DataTable>(() => ({
67
73
  id: 'accessibility-host-table',
68
74
  header: hostHeadItems.value,
@@ -94,6 +100,8 @@ const onSelectRow = (value: UI_I_DataTableBody[]): void => {
94
100
 
95
101
  <style lang="scss" scoped>
96
102
  .host-accessibility-table {
103
+ margin-bottom: 10px;
104
+
97
105
  :deep(.bottom-grid-content) {
98
106
  border: 1px solid var(--select-storage-border-color);
99
107
  border-radius: 8px;
@@ -45,6 +45,7 @@ export const options: UI_I_DataTableOptions = {
45
45
  isResizable: true,
46
46
  showSelectedRows: true,
47
47
  showColumnManager: true,
48
+ inModal: true
48
49
  }
49
50
 
50
51
  export const getBodyDataFunc = (
@@ -33,7 +33,9 @@ import type {
33
33
  UI_I_CreateStorageLunDisks,
34
34
  } from '~/components/common/wizards/datastore/add/steps/nameAndDevice/table/lib/models/interfaces'
35
35
 
36
- const modelLunDiskLocal = defineModel<UI_I_CreateStorageLunDiskItem[]>({ required: true })
36
+ const modelLunDiskLocal = defineModel<UI_I_CreateStorageLunDiskItem[]>({
37
+ required: true,
38
+ })
37
39
  const props = defineProps<{
38
40
  lunDisksData: UI_I_CreateStorageLunDisks
39
41
  loading: boolean
@@ -66,9 +68,10 @@ const onMainFiltering = (data: string): void => {
66
68
  sendFilter(data)
67
69
  }
68
70
  const onSelectLunDisk = (event: number[]): void => {
69
- modelLunDiskLocal.value = props.lunDisksData?.items?.filter(
70
- (_: never, key: number) => event.includes(key)
71
- )
71
+ modelLunDiskLocal.value =
72
+ props.lunDisksData?.items?.filter((_: never, key: number) =>
73
+ event.includes(key)
74
+ ) || []
72
75
  }
73
76
  </script>
74
77
 
@@ -9,6 +9,7 @@
9
9
  :total-items="props.totalItems"
10
10
  :texts="texts"
11
11
  :default-layout="false"
12
+ :skeleton="tableSkeleton"
12
13
  class="device-table"
13
14
  size="sm"
14
15
  @select-row="onSelectRow"
@@ -46,6 +47,7 @@ import type {
46
47
  UI_I_DataTableBody,
47
48
  UI_I_TableTexts,
48
49
  } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
50
+ import type {UI_I_DataTableSkeleton} from "~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces";
49
51
  import {
50
52
  options,
51
53
  getHeaderDataFunc,
@@ -84,6 +86,10 @@ const texts = computed<UI_I_TableTexts>(() => ({
84
86
  filter: localization.value.common.filter,
85
87
  }))
86
88
 
89
+ const tableSkeleton = ref<UI_I_DataTableSkeleton>({
90
+ withoutPagination: true
91
+ })
92
+
87
93
  const data = computed<UI_I_DataTable>(() => ({
88
94
  id: 'device-selection-table',
89
95
  header: deviceHeadItems.value,
@@ -112,12 +112,13 @@ export const options: UI_I_DataTableOptions = {
112
112
  isResizable: true,
113
113
  showSelectedRows: true,
114
114
  showColumnManager: true,
115
+ inModal: true,
115
116
  // perPageOptions: [{ text: '10', value: 100, default: true }],
116
117
  // isFocusable: false,
117
118
  // showPaginationOnTop: false,
118
119
  // showSearch: false,
119
120
  // withActions: false,
120
- inBlock: true,
121
+ inBlock: true
121
122
  // showExport: false,
122
123
  // withCollapse: false,
123
124
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bfg-common",
3
3
  "private": false,
4
- "version": "1.5.285",
4
+ "version": "1.5.287",
5
5
  "scripts": {
6
6
  "build": "nuxt build",
7
7
  "dev": "nuxt dev --port=3002",