bfg-common 1.5.474 → 1.5.475

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 (149) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  3. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  4. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  5. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  6. package/components/atoms/TheIcon3.vue +50 -50
  7. package/components/atoms/collapse/CollapseNav.vue +170 -170
  8. package/components/atoms/perPage/PerPage.vue +58 -58
  9. package/components/atoms/table/dataGrid/DataGrid.vue +1709 -1709
  10. package/components/atoms/table/dataGrid/DataGridPagination.vue +97 -97
  11. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  12. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  13. package/components/atoms/window/Window.vue +458 -458
  14. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  15. package/components/common/context/lib/models/interfaces.ts +33 -33
  16. package/components/common/diagramMain/modals/lib/config/networkModal.ts +398 -398
  17. package/components/common/diagramMain/modals/lib/config/portModal.ts +251 -251
  18. package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
  19. package/components/common/diagramMain/port/Port.vue +580 -580
  20. package/components/common/layout/theHeader/helpMenu/About.vue +79 -79
  21. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +95 -95
  22. package/components/common/layout/theHeader/helpMenu/aboutOld/AboutOld.vue +79 -79
  23. package/components/common/pages/backups/DetailView.vue +52 -52
  24. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  25. package/components/common/pages/backups/modals/createBackup/configuration/Configuration.vue +29 -29
  26. package/components/common/pages/backups/modals/createBackup/configuration/backupWindow/BackupWindow.vue +26 -26
  27. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/MaxBandwidth.vue +66 -66
  28. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
  29. package/components/common/pages/backups/modals/createBackup/configuration/strategy/Strategy.vue +35 -35
  30. package/components/common/pages/backups/modals/createBackup/datastores/tableView/TableView.vue +95 -95
  31. package/components/common/pages/backups/modals/createBackup/general/General.vue +141 -141
  32. package/components/common/pages/backups/modals/createBackup/lib/config/strategyOptions.ts +12 -12
  33. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  34. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  35. package/components/common/pages/backups/modals/restore/disks/Disks.vue +27 -27
  36. package/components/common/pages/backups/modals/restore/disks/tableView/lib/config/table.ts +117 -117
  37. package/components/common/pages/backups/modals/restore/name/Name.vue +166 -166
  38. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  39. package/components/common/pages/backups/modals/restore/networks/Networks.vue +67 -67
  40. package/components/common/pages/backups/modals/restore/networks/table/Table.vue +214 -214
  41. package/components/common/pages/backups/modals/restore/types/lib/config/typeOptions.ts +25 -25
  42. package/components/common/pages/backups/tools/Tools.vue +75 -75
  43. package/components/common/pages/backups/tools/lib/config/tabs.ts +36 -36
  44. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  45. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  46. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  47. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  48. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  49. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  50. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  51. package/components/common/select/radio/RadioGroup.vue +137 -137
  52. package/components/common/spiceConsole/Drawer.vue +392 -392
  53. package/components/common/spiceConsole/SpiceConsole.vue +184 -184
  54. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  55. package/components/common/tools/Actions.vue +207 -207
  56. package/components/common/treeView/TreeView.vue +52 -52
  57. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  58. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +1 -4
  60. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusOld.vue +1 -1
  61. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +0 -1
  62. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +0 -1
  63. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +0 -1
  64. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +78 -84
  65. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +368 -368
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/coresPerSocket/CoresPerSocketNew.vue +1 -4
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/hotPlug/HotPlugNew.vue +1 -4
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/maxCpu/MaxCpuNew.vue +1 -4
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/model/ModelNew.vue +1 -4
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/SharesNew.vue +1 -4
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/LimitNew.vue +1 -4
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/hotPlug/HotPlugNew.vue +1 -4
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +0 -2
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/cache/CacheNew.vue +1 -4
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/file/File.vue +0 -1
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/file/FileNew.vue +1 -5
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/limitIops/LimitIopsNew.vue +1 -4
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationNew.vue +1 -4
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/maximumSize/MaximumSize.vue +0 -1
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/maximumSize/MaximumSizeNew.vue +1 -5
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeNew.vue +1 -4
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/provisioning/ProvisioningNew.vue +1 -4
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +1 -4
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/adapterType/AdapterTypeNew.vue +1 -4
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/Table.vue +99 -99
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +1 -4
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -69
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +1 -4
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +0 -1
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -49
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +1 -4
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/typeSelection/TypeSelectionNew.vue +1 -4
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/inputDevices/InputDevicesNew.vue +1 -4
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/reservation/ReservationNew.vue +1 -4
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/model/ModelNew.vue +1 -4
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplaysNew.vue +1 -4
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +1 -4
  105. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  106. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/DelayNew.vue +1 -4
  107. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  108. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +1 -4
  109. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +1 -4
  110. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +174 -174
  111. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +1 -4
  112. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +4 -16
  113. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +1 -4
  114. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +1 -4
  115. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +1 -4
  116. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  117. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +1 -4
  118. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  119. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +1 -4
  120. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  121. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +1 -4
  122. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  123. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +143 -143
  124. package/components/common/vm/actions/common/select/computeResource/New.vue +184 -184
  125. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +131 -131
  126. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  127. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  128. package/components/common/vm/actions/common/select/name/Name.vue +197 -197
  129. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  130. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  131. package/components/common/vm/actions/common/select/storage/new/New.vue +320 -320
  132. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  133. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  134. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  135. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  136. package/components/common/vm/actions/register/Register.vue +267 -267
  137. package/components/common/vm/actions/register/lib/config/steps.ts +86 -86
  138. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  139. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  140. package/composables/productNameLocal.ts +30 -30
  141. package/composables/useAppVersion.ts +21 -21
  142. package/package.json +1 -1
  143. package/plugins/date.ts +233 -233
  144. package/plugins/panelStates.ts +70 -70
  145. package/plugins/text.ts +59 -59
  146. package/public/spice-console/lib/images/bitmap.js +203 -203
  147. package/public/spice-console/network/spicechannel.js +440 -440
  148. package/store/main/mutations.ts +7 -7
  149. package/store/main/state.ts +7 -7
@@ -1,320 +1,320 @@
1
- <template>
2
- <div :class="['select-storage', { 'in-wizard': isInWizard }]">
3
- <Teleport v-if="!props.hideAlert" to="#storage-alert-wrapper">
4
- <ui-alert
5
- v-show="props.errors.length"
6
- :messages="props.errors"
7
- :items="props.errors"
8
- status="alert-danger"
9
- test-id="storage-alert"
10
- size="md"
11
- @hide="emits('remove-error')"
12
- />
13
- </Teleport>
14
-
15
- <div class="table-wrap">
16
- <ui-data-table
17
- :data="data"
18
- :options="tableOptionsLocal"
19
- :loading="props.isDatastoreLoading"
20
- :default-layout="false"
21
- :texts="tableTexts"
22
- :skeleton="skeletonData"
23
- test-id="select-storage-data-table"
24
- server-off
25
- size="sm"
26
- @select-row="onSelectRow"
27
- >
28
- <template v-if="!props.isInWizard" #skeleton-header>
29
- <div class="flex justify-between items-center">
30
- <ui-skeleton-item width="80" height="20" />
31
- <ui-skeleton-item width="88" height="22" border-radius="6px" />
32
- </div>
33
- </template>
34
- <template v-if="!props.isInWizard" #insteadOfTitleActions>
35
- <h3 class="storage-count">
36
- {{ storageCount }}
37
- </h3>
38
- </template>
39
- <template #name="{ item }">
40
- <ui-icon
41
- name="datastores"
42
- width="18"
43
- height="18"
44
- class="mr-1 row-datastores-icon"
45
- />
46
- {{ item.text }}
47
- </template>
48
- <template #state="{ item }">
49
- <ui-chip :color="item.data.color" size="sm" rounded>
50
- <ui-icon :name="item.data.iconClassName" width="12" height="12" />
51
- {{ item.data.text }}
52
- </ui-chip>
53
- </template>
54
- </ui-data-table>
55
- </div>
56
-
57
- <div v-if="!props.hideCompatibility" class="compatibility-wrap">
58
- <p class="compatibility">
59
- {{ localization.inventorySummary.compatibility }}
60
- </p>
61
- <div class="compatibility-message flex-align-start">
62
- <ui-skeleton-item v-if="loading" width="160px" height="16px" />
63
- <template v-else>
64
- <template v-if="props.selectedStorage">
65
- <ui-icon
66
- name="success-fill"
67
- width="16"
68
- height="16"
69
- class="icon-compatibility-alert"
70
- />
71
- <span class="compatibility-message-description">{{
72
- localization.common.compatibilityChecksSucceeded
73
- }}</span>
74
- </template>
75
- <template v-else>
76
- <!-- <ui-icon name="error" width="16" height="16" />-->
77
- <span class="compatibility-message-description empty">{{
78
- localization.vmWizard.noStorageSelected
79
- }}</span>
80
- </template>
81
- </template>
82
- </div>
83
- </div>
84
- </div>
85
- </template>
86
-
87
- <script setup lang="ts">
88
- import type {
89
- UI_I_DataTableOptions,
90
- UI_I_DataTableSkeleton,
91
- } from 'bfg-uikit/components/ui/dataTable/models/interfaces'
92
- import type {
93
- UI_I_DataTable,
94
- UI_I_TableTexts,
95
- } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
96
- import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
97
- import type { UI_I_Localization } from '~/lib/models/interfaces'
98
- import {
99
- tableBodyFunc,
100
- tableDataFunc,
101
- tableOptions,
102
- } from '~/components/common/vm/actions/common/select/storage/new/lib/config/table'
103
- import { tableTextsFunc } from '~/lib/config/uiTable'
104
-
105
- const selectedRow = defineModel<number | null>('selectedRow')
106
-
107
- const props = withDefaults(
108
- defineProps<{
109
- datastore: UI_I_DatastoreTableItem[]
110
- isDatastoreLoading: boolean
111
- errors: string[]
112
- selectedStorage: UI_I_DatastoreTableItem | null
113
- hideCompatibility?: boolean
114
- hideAlert?: boolean
115
- isInWizard?: boolean
116
- tableOptions?: UI_I_DataTableOptions
117
- }>(),
118
- {
119
- hideCompatibility: undefined,
120
- hideAlert: undefined,
121
- isInWizard: undefined,
122
- tableOptions: undefined,
123
- }
124
- )
125
- const emits = defineEmits<{
126
- (event: 'remove-error'): void
127
- (event: 'change-storage', value: number): void
128
- }>()
129
-
130
- const tableOptionsLocal = computed<UI_I_DataTableOptions>(
131
- () => props.tableOptions || tableOptions
132
- )
133
-
134
- const localization = computed<UI_I_Localization>(() => useLocal())
135
-
136
- const tableTexts = computed<UI_I_TableTexts>(() =>
137
- tableTextsFunc(localization.value)
138
- )
139
-
140
- const storageCount = computed<string>(() =>
141
- localization.value.vmWizard.storageCount.replace(
142
- '{0}',
143
- data.value.body.length.toString()
144
- )
145
- )
146
- // const loading = ref<boolean>(true)
147
- const data = ref<UI_I_DataTable>(tableDataFunc(localization.value))
148
-
149
- watch(
150
- () => props.datastore,
151
- (newValue: UI_I_DatastoreTableItem[]) => {
152
- // loading.value = true
153
-
154
- // if (!newValue.length || data.value.body.length) return
155
-
156
- data.value.body = tableBodyFunc(
157
- newValue,
158
- localization.value,
159
- selectedRow.value
160
- )
161
-
162
- // loading.value = false
163
- },
164
- { immediate: true, deep: true }
165
- // { deep: true }
166
- )
167
-
168
- const onSelectRow = (selectedData: UI_I_DataTable): void => {
169
- const selectedId = selectedData[0]?.data[0]?.data.id
170
- const selectedItemIndex = props.datastore.findIndex(
171
- (item) => item.id === selectedId
172
- )
173
-
174
- emits('change-storage', selectedItemIndex)
175
- }
176
-
177
- const skeletonData = ref<UI_I_DataTableSkeleton>({
178
- columnsCount: 5,
179
- headColumns: [],
180
- bodyColumns: [],
181
- })
182
- </script>
183
-
184
- <style>
185
- :root {
186
- --select-storage-border-color: #e9ebed;
187
- --select-storage-bg-color: #ffffff;
188
- --select-storage-title-color: #4d5d69;
189
- --select-storage-compatibility-bg-color: #ffffff;
190
- --select-storage-compatibility-description-color: #4d5d69;
191
- --select-storage-compatibility-empty-description-color: #9da6ad;
192
- --select-storage-compatibility-table-column-button-hover-bg: #f6f7f8;
193
- --select-storage-compatibility-table-column-button-active-hover-bg: #f0f8fd;
194
- }
195
- :root.dark-theme {
196
- --select-storage-border-color: #e9ebed1f;
197
- --select-storage-bg-color: var(--wizard-right-bg);
198
- --select-storage-title-color: #e9eaec;
199
- --select-storage-compatibility-bg-color: #1b2a371f;
200
- --select-storage-compatibility-description-color: #e9eaec;
201
- --select-storage-compatibility-empty-description-color: #9da6ad;
202
- --select-storage-compatibility-table-column-button-hover-bg: linear-gradient(
203
- 0deg,
204
- rgba(233, 234, 236, 0.04) 0%,
205
- rgba(233, 234, 236, 0.04) 100%
206
- ),
207
- rgba(27, 42, 55, 0.24);
208
- --select-storage-compatibility-table-column-button-active-hover-bg: linear-gradient(
209
- 0deg,
210
- rgba(43, 162, 222, 0.08) 0%,
211
- rgba(43, 162, 222, 0.08) 100%
212
- ),
213
- rgba(27, 42, 55, 0.24);
214
- }
215
- </style>
216
- <style scoped lang="scss">
217
- //:root.dark-theme {
218
- // .select-storage {
219
- // &.in-wizard {
220
- // :deep(.column-manager-button) {
221
- // &:hover {
222
- // background: #b8bcc10a;
223
- // }
224
- // &.active:hover {
225
- // background-color: #2785b614;
226
- // }
227
- // }
228
- // }
229
- // }
230
- //}
231
- .select-storage {
232
- padding-top: 12px;
233
- //padding-bottom: 16px;
234
-
235
- :deep(.title-sm) {
236
- font-size: 12px;
237
- }
238
-
239
- :deep(.table-container.default-layout) {
240
- box-shadow: unset;
241
- padding: 0;
242
- }
243
- .storage-count {
244
- font-size: 16px;
245
- font-weight: 500;
246
- color: var(--select-storage-title-color);
247
- }
248
-
249
- :deep(.column-manager-button) {
250
- span {
251
- font-size: 12px;
252
- font-weight: 500;
253
- }
254
- //&:not(.active):hover {
255
- // background-color: var(
256
- // --select-storage-compatibility-table-column-button-hover-bg
257
- // );
258
- // color: var(--btn-table-manager-color);
259
- //}
260
- //&.active:hover {
261
- // background-color: var(
262
- // --select-storage-compatibility-table-column-button-active-hover-bg
263
- // );
264
- //}
265
- }
266
-
267
- &:not(.in-wizard) {
268
- :deep(.bottom-grid-content) {
269
- border: 1px solid var(--select-storage-border-color);
270
- border-radius: 8px;
271
- padding: 12px;
272
- //background-color: var(--select-storage-bg-color);
273
- }
274
- :deep(.select-row-item) {
275
- background-color: var(--select-storage-bg-color);
276
- }
277
- }
278
-
279
- :deep(.table-title-actions-container) {
280
- justify-content: flex-start;
281
- }
282
- :deep(.table-container .table-title) {
283
- margin-bottom: 12px;
284
- }
285
-
286
- .compatibility-wrap {
287
- margin-top: 24px;
288
-
289
- .compatibility {
290
- font-size: 16px;
291
- font-weight: 500;
292
- color: var(--select-storage-title-color);
293
- margin-bottom: 16px;
294
- }
295
- .compatibility-message {
296
- border-radius: 8px;
297
- border: 1px solid var(--select-storage-border-color);
298
- padding: 12px;
299
- background-color: var(--select-storage-compatibility-bg-color);
300
- gap: 10px;
301
-
302
- .icon-compatibility-alert {
303
- min-width: 16px;
304
- min-height: 16px;
305
- }
306
- .compatibility-message-description {
307
- font-size: 13px;
308
- color: var(--select-storage-compatibility-description-color);
309
-
310
- &.empty {
311
- color: var(--select-storage-compatibility-empty-description-color);
312
- }
313
- }
314
- }
315
- }
316
- .row-datastores-icon {
317
- min-width: 18px;
318
- }
319
- }
320
- </style>
1
+ <template>
2
+ <div :class="['select-storage', { 'in-wizard': isInWizard }]">
3
+ <Teleport v-if="!props.hideAlert" to="#storage-alert-wrapper">
4
+ <ui-alert
5
+ v-show="props.errors.length"
6
+ :messages="props.errors"
7
+ :items="props.errors"
8
+ status="alert-danger"
9
+ test-id="storage-alert"
10
+ size="md"
11
+ @hide="emits('remove-error')"
12
+ />
13
+ </Teleport>
14
+
15
+ <div class="table-wrap">
16
+ <ui-data-table
17
+ :data="data"
18
+ :options="tableOptionsLocal"
19
+ :loading="props.isDatastoreLoading"
20
+ :default-layout="false"
21
+ :texts="tableTexts"
22
+ :skeleton="skeletonData"
23
+ test-id="select-storage-data-table"
24
+ server-off
25
+ size="sm"
26
+ @select-row="onSelectRow"
27
+ >
28
+ <template v-if="!props.isInWizard" #skeleton-header>
29
+ <div class="flex justify-between items-center">
30
+ <ui-skeleton-item width="80" height="20" />
31
+ <ui-skeleton-item width="88" height="22" border-radius="6px" />
32
+ </div>
33
+ </template>
34
+ <template v-if="!props.isInWizard" #insteadOfTitleActions>
35
+ <h3 class="storage-count">
36
+ {{ storageCount }}
37
+ </h3>
38
+ </template>
39
+ <template #name="{ item }">
40
+ <ui-icon
41
+ name="datastores"
42
+ width="18"
43
+ height="18"
44
+ class="mr-1 row-datastores-icon"
45
+ />
46
+ {{ item.text }}
47
+ </template>
48
+ <template #state="{ item }">
49
+ <ui-chip :color="item.data.color" size="sm" rounded>
50
+ <ui-icon :name="item.data.iconClassName" width="12" height="12" />
51
+ {{ item.data.text }}
52
+ </ui-chip>
53
+ </template>
54
+ </ui-data-table>
55
+ </div>
56
+
57
+ <div v-if="!props.hideCompatibility" class="compatibility-wrap">
58
+ <p class="compatibility">
59
+ {{ localization.inventorySummary.compatibility }}
60
+ </p>
61
+ <div class="compatibility-message flex-align-start">
62
+ <ui-skeleton-item v-if="loading" width="160px" height="16px" />
63
+ <template v-else>
64
+ <template v-if="props.selectedStorage">
65
+ <ui-icon
66
+ name="success-fill"
67
+ width="16"
68
+ height="16"
69
+ class="icon-compatibility-alert"
70
+ />
71
+ <span class="compatibility-message-description">{{
72
+ localization.common.compatibilityChecksSucceeded
73
+ }}</span>
74
+ </template>
75
+ <template v-else>
76
+ <!-- <ui-icon name="error" width="16" height="16" />-->
77
+ <span class="compatibility-message-description empty">{{
78
+ localization.vmWizard.noStorageSelected
79
+ }}</span>
80
+ </template>
81
+ </template>
82
+ </div>
83
+ </div>
84
+ </div>
85
+ </template>
86
+
87
+ <script setup lang="ts">
88
+ import type {
89
+ UI_I_DataTableOptions,
90
+ UI_I_DataTableSkeleton,
91
+ } from 'bfg-uikit/components/ui/dataTable/models/interfaces'
92
+ import type {
93
+ UI_I_DataTable,
94
+ UI_I_TableTexts,
95
+ } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
96
+ import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
97
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
98
+ import {
99
+ tableBodyFunc,
100
+ tableDataFunc,
101
+ tableOptions,
102
+ } from '~/components/common/vm/actions/common/select/storage/new/lib/config/table'
103
+ import { tableTextsFunc } from '~/lib/config/uiTable'
104
+
105
+ const selectedRow = defineModel<number | null>('selectedRow')
106
+
107
+ const props = withDefaults(
108
+ defineProps<{
109
+ datastore: UI_I_DatastoreTableItem[]
110
+ isDatastoreLoading: boolean
111
+ errors: string[]
112
+ selectedStorage: UI_I_DatastoreTableItem | null
113
+ hideCompatibility?: boolean
114
+ hideAlert?: boolean
115
+ isInWizard?: boolean
116
+ tableOptions?: UI_I_DataTableOptions
117
+ }>(),
118
+ {
119
+ hideCompatibility: undefined,
120
+ hideAlert: undefined,
121
+ isInWizard: undefined,
122
+ tableOptions: undefined,
123
+ }
124
+ )
125
+ const emits = defineEmits<{
126
+ (event: 'remove-error'): void
127
+ (event: 'change-storage', value: number): void
128
+ }>()
129
+
130
+ const tableOptionsLocal = computed<UI_I_DataTableOptions>(
131
+ () => props.tableOptions || tableOptions
132
+ )
133
+
134
+ const localization = computed<UI_I_Localization>(() => useLocal())
135
+
136
+ const tableTexts = computed<UI_I_TableTexts>(() =>
137
+ tableTextsFunc(localization.value)
138
+ )
139
+
140
+ const storageCount = computed<string>(() =>
141
+ localization.value.vmWizard.storageCount.replace(
142
+ '{0}',
143
+ data.value.body.length.toString()
144
+ )
145
+ )
146
+ // const loading = ref<boolean>(true)
147
+ const data = ref<UI_I_DataTable>(tableDataFunc(localization.value))
148
+
149
+ watch(
150
+ () => props.datastore,
151
+ (newValue: UI_I_DatastoreTableItem[]) => {
152
+ // loading.value = true
153
+
154
+ // if (!newValue.length || data.value.body.length) return
155
+
156
+ data.value.body = tableBodyFunc(
157
+ newValue,
158
+ localization.value,
159
+ selectedRow.value
160
+ )
161
+
162
+ // loading.value = false
163
+ },
164
+ { immediate: true, deep: true }
165
+ // { deep: true }
166
+ )
167
+
168
+ const onSelectRow = (selectedData: UI_I_DataTable): void => {
169
+ const selectedId = selectedData[0]?.data[0]?.data.id
170
+ const selectedItemIndex = props.datastore.findIndex(
171
+ (item) => item.id === selectedId
172
+ )
173
+
174
+ emits('change-storage', selectedItemIndex)
175
+ }
176
+
177
+ const skeletonData = ref<UI_I_DataTableSkeleton>({
178
+ columnsCount: 5,
179
+ headColumns: [],
180
+ bodyColumns: [],
181
+ })
182
+ </script>
183
+
184
+ <style>
185
+ :root {
186
+ --select-storage-border-color: #e9ebed;
187
+ --select-storage-bg-color: #ffffff;
188
+ --select-storage-title-color: #4d5d69;
189
+ --select-storage-compatibility-bg-color: #ffffff;
190
+ --select-storage-compatibility-description-color: #4d5d69;
191
+ --select-storage-compatibility-empty-description-color: #9da6ad;
192
+ --select-storage-compatibility-table-column-button-hover-bg: #f6f7f8;
193
+ --select-storage-compatibility-table-column-button-active-hover-bg: #f0f8fd;
194
+ }
195
+ :root.dark-theme {
196
+ --select-storage-border-color: #e9ebed1f;
197
+ --select-storage-bg-color: var(--wizard-right-bg);
198
+ --select-storage-title-color: #e9eaec;
199
+ --select-storage-compatibility-bg-color: #1b2a371f;
200
+ --select-storage-compatibility-description-color: #e9eaec;
201
+ --select-storage-compatibility-empty-description-color: #9da6ad;
202
+ --select-storage-compatibility-table-column-button-hover-bg: linear-gradient(
203
+ 0deg,
204
+ rgba(233, 234, 236, 0.04) 0%,
205
+ rgba(233, 234, 236, 0.04) 100%
206
+ ),
207
+ rgba(27, 42, 55, 0.24);
208
+ --select-storage-compatibility-table-column-button-active-hover-bg: linear-gradient(
209
+ 0deg,
210
+ rgba(43, 162, 222, 0.08) 0%,
211
+ rgba(43, 162, 222, 0.08) 100%
212
+ ),
213
+ rgba(27, 42, 55, 0.24);
214
+ }
215
+ </style>
216
+ <style scoped lang="scss">
217
+ //:root.dark-theme {
218
+ // .select-storage {
219
+ // &.in-wizard {
220
+ // :deep(.column-manager-button) {
221
+ // &:hover {
222
+ // background: #b8bcc10a;
223
+ // }
224
+ // &.active:hover {
225
+ // background-color: #2785b614;
226
+ // }
227
+ // }
228
+ // }
229
+ // }
230
+ //}
231
+ .select-storage {
232
+ padding-top: 12px;
233
+ //padding-bottom: 16px;
234
+
235
+ :deep(.title-sm) {
236
+ font-size: 12px;
237
+ }
238
+
239
+ :deep(.table-container.default-layout) {
240
+ box-shadow: unset;
241
+ padding: 0;
242
+ }
243
+ .storage-count {
244
+ font-size: 16px;
245
+ font-weight: 500;
246
+ color: var(--select-storage-title-color);
247
+ }
248
+
249
+ :deep(.column-manager-button) {
250
+ span {
251
+ font-size: 12px;
252
+ font-weight: 500;
253
+ }
254
+ //&:not(.active):hover {
255
+ // background-color: var(
256
+ // --select-storage-compatibility-table-column-button-hover-bg
257
+ // );
258
+ // color: var(--btn-table-manager-color);
259
+ //}
260
+ //&.active:hover {
261
+ // background-color: var(
262
+ // --select-storage-compatibility-table-column-button-active-hover-bg
263
+ // );
264
+ //}
265
+ }
266
+
267
+ &:not(.in-wizard) {
268
+ :deep(.bottom-grid-content) {
269
+ border: 1px solid var(--select-storage-border-color);
270
+ border-radius: 8px;
271
+ padding: 12px;
272
+ //background-color: var(--select-storage-bg-color);
273
+ }
274
+ :deep(.select-row-item) {
275
+ background-color: var(--select-storage-bg-color);
276
+ }
277
+ }
278
+
279
+ :deep(.table-title-actions-container) {
280
+ justify-content: flex-start;
281
+ }
282
+ :deep(.table-container .table-title) {
283
+ margin-bottom: 12px;
284
+ }
285
+
286
+ .compatibility-wrap {
287
+ margin-top: 24px;
288
+
289
+ .compatibility {
290
+ font-size: 16px;
291
+ font-weight: 500;
292
+ color: var(--select-storage-title-color);
293
+ margin-bottom: 16px;
294
+ }
295
+ .compatibility-message {
296
+ border-radius: 8px;
297
+ border: 1px solid var(--select-storage-border-color);
298
+ padding: 12px;
299
+ background-color: var(--select-storage-compatibility-bg-color);
300
+ gap: 10px;
301
+
302
+ .icon-compatibility-alert {
303
+ min-width: 16px;
304
+ min-height: 16px;
305
+ }
306
+ .compatibility-message-description {
307
+ font-size: 13px;
308
+ color: var(--select-storage-compatibility-description-color);
309
+
310
+ &.empty {
311
+ color: var(--select-storage-compatibility-empty-description-color);
312
+ }
313
+ }
314
+ }
315
+ }
316
+ .row-datastores-icon {
317
+ min-width: 18px;
318
+ }
319
+ }
320
+ </style>
@@ -1,6 +1,6 @@
1
- export interface UI_I_StatusData {
2
- iconClassName: string
3
- color: string
4
- isState: boolean
5
- text: string
1
+ export interface UI_I_StatusData {
2
+ iconClassName: string
3
+ color: string
4
+ isState: boolean
5
+ text: string
6
6
  }