bfg-common 1.5.408 → 1.5.410

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 (176) 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/assets/localization/local_be.json +11 -1
  7. package/assets/localization/local_en.json +11 -1
  8. package/assets/localization/local_hy.json +11 -1
  9. package/assets/localization/local_kk.json +11 -1
  10. package/assets/localization/local_ru.json +12 -2
  11. package/assets/localization/local_zh.json +11 -1
  12. package/components/atoms/TheIcon3.vue +50 -50
  13. package/components/atoms/collapse/CollapseNav.vue +170 -170
  14. package/components/atoms/collapse/CollapseNavItem.vue +226 -226
  15. package/components/atoms/nav/NavBar.vue +159 -159
  16. package/components/atoms/perPage/PerPage.vue +58 -58
  17. package/components/atoms/table/dataGrid/DataGrid.vue +1717 -1717
  18. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +277 -277
  19. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  20. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  21. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  22. package/components/common/backup/storage/actions/add/lib/config/steps.ts +168 -168
  23. package/components/common/backup/storage/actions/add/steps/hostAccessibility/HostAccessibility.vue +52 -52
  24. package/components/common/backup/storage/actions/add/steps/readyComplete/ReadyComplete.vue +45 -45
  25. package/components/common/backup/storage/actions/delete/Delete.vue +65 -65
  26. package/components/common/browse/blocks/Container.vue +234 -234
  27. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  28. package/components/common/browse/blocks/lib/models/types.ts +1 -1
  29. package/components/common/browse/lib/models/interfaces.ts +5 -5
  30. package/components/common/context/lib/models/interfaces.ts +33 -33
  31. package/components/common/diagramMain/adapter/AdapterItems.vue +61 -61
  32. package/components/common/diagramMain/lib/config/initial.ts +50 -50
  33. package/components/common/diagramMain/lib/models/types.ts +21 -21
  34. package/components/common/diagramMain/lib/utils/utils.ts +331 -331
  35. package/components/common/diagramMain/modals/editSettings/ConfirmTeamingSettingsModal.vue +40 -40
  36. package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +214 -214
  37. package/components/common/diagramMain/modals/editSettings/tabs/Security.vue +189 -189
  38. package/components/common/diagramMain/modals/editSettings/tabs/SwitchProperties.vue +163 -163
  39. package/components/common/diagramMain/modals/editSettings/tabs/TeamingFailover.vue +175 -175
  40. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +346 -346
  41. package/components/common/diagramMain/modals/lib/config/initial.ts +180 -180
  42. package/components/common/diagramMain/modals/lib/config/networkModal.ts +398 -398
  43. package/components/common/diagramMain/modals/lib/config/vmKernelAdapter.ts +90 -90
  44. package/components/common/diagramMain/modals/lib/mappers/mappers.ts +87 -87
  45. package/components/common/diagramMain/modals/lib/utils/index.ts +24 -24
  46. package/components/common/diagramMain/modals/migrateVmkernelAdapter/lib/config/steps.ts +114 -114
  47. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/ConnectionSettings.vue +169 -169
  48. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/SelectVmkernelAdapter.vue +159 -159
  49. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/common.ts +14 -14
  50. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/connectionSettings.ts +137 -137
  51. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/selectVmkernelAdapter.ts +52 -52
  52. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/validations.ts +19 -19
  53. package/components/common/diagramMain/network/Network.vue +141 -141
  54. package/components/common/diagramMain/port/Ports.vue +47 -47
  55. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  56. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  57. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  58. package/components/common/pages/home/headline/Headline.vue +45 -45
  59. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  60. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  61. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  62. package/components/common/pages/home/widgets/WidgetsNew.vue +88 -88
  63. package/components/common/pages/home/widgets/WidgetsOld.vue +36 -36
  64. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  65. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  66. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  67. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  68. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  69. package/components/common/pages/packages/Packages.vue +208 -208
  70. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  71. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  72. package/components/common/recursionTree/RecursionTree.vue +223 -223
  73. package/components/common/select/button/ButtonDropdown.vue +112 -112
  74. package/components/common/select/radio/RadioGroup.vue +137 -137
  75. package/components/common/spiceConsole/Drawer.vue +381 -381
  76. package/components/common/spiceConsole/SpiceConsole.vue +127 -127
  77. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  78. package/components/common/tools/Actions.vue +207 -207
  79. package/components/common/vm/actions/add/Old.vue +388 -388
  80. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  81. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  82. package/components/common/vm/actions/add/folderTreeView/Old.vue +50 -50
  83. package/components/common/vm/actions/clone/Clone.vue +823 -823
  84. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -291
  85. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +321 -321
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +227 -227
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +100 -100
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +78 -78
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/tooltip/TooltipNew.vue +154 -154
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/dropdownItems.ts +155 -155
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +307 -307
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +385 -385
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationOld.vue +85 -85
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +288 -288
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +94 -94
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCard.vue +154 -154
  117. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  118. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +155 -155
  119. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +130 -130
  120. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsOld.vue +113 -113
  121. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  122. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  123. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +174 -174
  124. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptions.vue +95 -95
  125. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsOld.vue +155 -155
  126. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  127. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapOld.vue +44 -44
  128. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  129. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  130. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  131. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  132. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +143 -143
  133. package/components/common/vm/actions/common/select/computeResource/New.vue +184 -184
  134. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +131 -131
  135. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  136. package/components/common/vm/actions/common/select/createType/lib/config/items.ts +48 -48
  137. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  138. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  139. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  140. package/components/common/vm/actions/common/select/storage/Storage.vue +155 -155
  141. package/components/common/vm/actions/common/select/storage/new/New.vue +300 -300
  142. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  143. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  144. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  145. package/components/common/vm/actions/editSettings/EditSettings.vue +242 -242
  146. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  147. package/components/common/vmt/actions/add/lib/models/interfaces.ts +23 -23
  148. package/components/common/wizards/datastore/add/New.vue +7 -6
  149. package/components/common/wizards/datastore/add/steps/hostAccessibility/table/new/New.vue +9 -4
  150. package/components/common/wizards/datastore/add/steps/nameAndConfigure/NameAndConfigure.vue +13 -5
  151. package/components/common/wizards/datastore/add/steps/nameAndConfigure/NameAndConfigureNew.vue +4 -0
  152. package/components/common/wizards/datastore/add/steps/nameAndDevice/NameAndDeviceNew.vue +1 -0
  153. package/components/common/wizards/datastore/add/steps/nameAndDevice/table/new/New.vue +12 -4
  154. package/components/common/wizards/datastore/add/steps/nameAndDevice/table/new/lib/models/enums.ts +1 -1
  155. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  156. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +104 -104
  157. package/components/common/wizards/network/add/steps/SelectedTargetDevice.vue +467 -467
  158. package/components/common/wizards/vm/migrate/Migrate.vue +349 -349
  159. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  160. package/components/common/wizards/vm/migrate/lib/config/steps.ts +157 -157
  161. package/components/common/wizards/vm/migrate/lib/validations.ts +68 -68
  162. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  163. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  164. package/components/common/wizards/vm/migrate/select/type/lib/config/typeOptions.ts +45 -45
  165. package/composables/productNameLocal.ts +30 -30
  166. package/composables/useAppVersion.ts +21 -21
  167. package/package.json +2 -2
  168. package/plugins/date.ts +233 -233
  169. package/plugins/panelStates.ts +70 -70
  170. package/plugins/text.ts +59 -59
  171. package/public/spice-console/lib/images/bitmap.js +203 -203
  172. package/public/spice-console/network/spicechannel.js +390 -390
  173. package/store/main/mutations.ts +7 -7
  174. package/store/main/state.ts +7 -7
  175. package/store/tasks/lib/models/enums.ts +4 -4
  176. package/store/tasks/mappers/recentTasks.ts +79 -79
@@ -1,300 +1,300 @@
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
- test-id="select-storage-data-table"
23
- server-off
24
- size="sm"
25
- @select-row="onSelectRow"
26
- >
27
- <template v-if="!props.isInWizard" #skeleton-header>
28
- <div class="flex justify-between items-center">
29
- <ui-skeleton-item width="80" height="20" />
30
- <ui-skeleton-item width="88" height="22" border-radius="6px" />
31
- </div>
32
- </template>
33
- <template v-if="!props.isInWizard" #insteadOfTitleActions>
34
- <h3 class="storage-count">
35
- {{ storageCount }}
36
- </h3>
37
- </template>
38
- <template #name="{ item }">
39
- <ui-icon
40
- name="datastores"
41
- width="18"
42
- height="18"
43
- class="mr-1 row-datastores-icon"
44
- />
45
- {{ item.text }}
46
- </template>
47
- <template #state="{ item }">
48
- <ui-chip :color="item.data.color" size="sm" rounded>
49
- <ui-icon :name="item.data.iconClassName" width="12" height="12" />
50
- {{ item.data.text }}
51
- </ui-chip>
52
- </template>
53
- </ui-data-table>
54
- </div>
55
-
56
- <div v-if="!props.hideCompatibility" class="compatibility-wrap">
57
- <p class="compatibility">
58
- {{ localization.inventorySummary.compatibility }}
59
- </p>
60
- <div class="compatibility-message flex-align-start">
61
- <ui-skeleton-item v-if="loading" width="160px" height="16px" />
62
- <template v-else>
63
- <template v-if="props.selectedStorage">
64
- <ui-icon
65
- name="success-fill"
66
- width="16"
67
- height="16"
68
- class="icon-compatibility-alert"
69
- />
70
- <span class="compatibility-message-description">{{
71
- localization.common.compatibilityChecksSucceeded
72
- }}</span>
73
- </template>
74
- <template v-else>
75
- <!-- <ui-icon name="error" width="16" height="16" />-->
76
- <span class="compatibility-message-description empty">{{
77
- localization.vmWizard.noStorageSelected
78
- }}</span>
79
- </template>
80
- </template>
81
- </div>
82
- </div>
83
- </div>
84
- </template>
85
-
86
- <script setup lang="ts">
87
- import type { UI_I_DataTableOptions } from 'bfg-uikit/components/ui/dataTable/models/interfaces'
88
- import type {
89
- UI_I_DataTable,
90
- UI_I_TableTexts,
91
- } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
92
- import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
93
- import type { UI_I_Localization } from '~/lib/models/interfaces'
94
- import {
95
- tableBodyFunc,
96
- tableDataFunc,
97
- tableOptions,
98
- } from '~/components/common/vm/actions/common/select/storage/new/lib/config/table'
99
- import { tableTextsFunc } from '~/lib/config/uiTable'
100
-
101
- const selectedRow = defineModel<number | null>('selectedRow')
102
-
103
- const props = defineProps<{
104
- datastore: UI_I_DatastoreTableItem[]
105
- isDatastoreLoading: boolean
106
- errors: string[]
107
- selectedStorage: UI_I_DatastoreTableItem | null
108
- hideCompatibility?: boolean
109
- hideAlert?: boolean
110
- isInWizard?: boolean
111
- tableOptions?: UI_I_DataTableOptions
112
- }>()
113
- const emits = defineEmits<{
114
- (event: 'remove-error'): void
115
- (event: 'change-storage', value: number): void
116
- }>()
117
-
118
- const tableOptionsLocal = computed(() => props.tableOptions || tableOptions)
119
-
120
- const localization = computed<UI_I_Localization>(() => useLocal())
121
-
122
- const tableTexts = computed<UI_I_TableTexts>(() =>
123
- tableTextsFunc(localization.value)
124
- )
125
-
126
- const storageCount = computed<string>(() =>
127
- localization.value.vmWizard.storageCount.replace(
128
- '{0}',
129
- data.value.body.length.toString()
130
- )
131
- )
132
- // const loading = ref<boolean>(true)
133
- const data = ref<UI_I_DataTable>(tableDataFunc(localization.value))
134
-
135
- watch(
136
- () => props.datastore,
137
- (newValue: UI_I_DatastoreTableItem[]) => {
138
- // loading.value = true
139
-
140
- // if (!newValue.length || data.value.body.length) return
141
-
142
- data.value.body = tableBodyFunc(
143
- newValue,
144
- localization.value,
145
- selectedRow.value
146
- )
147
-
148
- // loading.value = false
149
- },
150
- { immediate: true, deep: true }
151
- // { deep: true }
152
- )
153
-
154
- const onSelectRow = (selectedData: UI_I_DataTable): void => {
155
- const selectedId = selectedData[0]?.data[0]?.data.id
156
- const selectedItemIndex = props.datastore.findIndex(
157
- (item) => item.id === selectedId
158
- )
159
-
160
- emits('change-storage', selectedItemIndex)
161
- }
162
- </script>
163
-
164
- <style>
165
- :root {
166
- --select-storage-border-color: #e9ebed;
167
- --select-storage-bg-color: #ffffff;
168
- --select-storage-title-color: #4d5d69;
169
- --select-storage-compatibility-bg-color: #ffffff;
170
- --select-storage-compatibility-description-color: #4d5d69;
171
- --select-storage-compatibility-empty-description-color: #9da6ad;
172
- --select-storage-compatibility-table-column-button-hover-bg: #f6f7f8;
173
- --select-storage-compatibility-table-column-button-active-hover-bg: #f0f8fd;
174
- }
175
- :root.dark-theme {
176
- --select-storage-border-color: #e9ebed1f;
177
- --select-storage-bg-color: var(--wizard-right-bg);
178
- --select-storage-title-color: #e9eaec;
179
- --select-storage-compatibility-bg-color: #1b2a371f;
180
- --select-storage-compatibility-description-color: #e9eaec;
181
- --select-storage-compatibility-empty-description-color: #9da6ad;
182
- --select-storage-compatibility-table-column-button-hover-bg: linear-gradient(
183
- 0deg,
184
- rgba(233, 234, 236, 0.04) 0%,
185
- rgba(233, 234, 236, 0.04) 100%
186
- ),
187
- rgba(27, 42, 55, 0.24);
188
- --select-storage-compatibility-table-column-button-active-hover-bg: linear-gradient(
189
- 0deg,
190
- rgba(43, 162, 222, 0.08) 0%,
191
- rgba(43, 162, 222, 0.08) 100%
192
- ),
193
- rgba(27, 42, 55, 0.24);
194
- }
195
- </style>
196
- <style scoped lang="scss">
197
- :root.dark-theme {
198
- .select-storage {
199
- &.in-wizard {
200
- :deep(.column-manager-button) {
201
- &:hover {
202
- background: #b8bcc10a;
203
- }
204
- &.active:hover {
205
- background-color: #2785b614;
206
- }
207
- }
208
- }
209
- }
210
- }
211
- .select-storage {
212
- padding-top: 12px;
213
- //padding-bottom: 16px;
214
-
215
- :deep(.title-sm) {
216
- font-size: 12px;
217
- }
218
-
219
- :deep(.table-container.default-layout) {
220
- box-shadow: unset;
221
- padding: 0;
222
- }
223
- .storage-count {
224
- font-size: 16px;
225
- font-weight: 500;
226
- color: var(--select-storage-title-color);
227
- }
228
-
229
- :deep(.column-manager-button) {
230
- span {
231
- font-size: 12px;
232
- font-weight: 500;
233
- }
234
- //&:not(.active):hover {
235
- // background-color: var(
236
- // --select-storage-compatibility-table-column-button-hover-bg
237
- // );
238
- // color: var(--btn-table-manager-color);
239
- //}
240
- //&.active:hover {
241
- // background-color: var(
242
- // --select-storage-compatibility-table-column-button-active-hover-bg
243
- // );
244
- //}
245
- }
246
-
247
- &:not(.in-wizard) {
248
- :deep(.bottom-grid-content) {
249
- border: 1px solid var(--select-storage-border-color);
250
- border-radius: 8px;
251
- padding: 12px;
252
- //background-color: var(--select-storage-bg-color);
253
- }
254
- :deep(.select-row-item) {
255
- background-color: var(--select-storage-bg-color);
256
- }
257
- }
258
-
259
- :deep(.table-title-actions-container) {
260
- justify-content: flex-start;
261
- }
262
- :deep(.table-container .table-title) {
263
- margin-bottom: 12px;
264
- }
265
-
266
- .compatibility-wrap {
267
- margin-top: 24px;
268
-
269
- .compatibility {
270
- font-size: 16px;
271
- font-weight: 500;
272
- color: var(--select-storage-title-color);
273
- margin-bottom: 16px;
274
- }
275
- .compatibility-message {
276
- border-radius: 8px;
277
- border: 1px solid var(--select-storage-border-color);
278
- padding: 12px;
279
- background-color: var(--select-storage-compatibility-bg-color);
280
- gap: 10px;
281
-
282
- .icon-compatibility-alert {
283
- min-width: 16px;
284
- min-height: 16px;
285
- }
286
- .compatibility-message-description {
287
- font-size: 13px;
288
- color: var(--select-storage-compatibility-description-color);
289
-
290
- &.empty {
291
- color: var(--select-storage-compatibility-empty-description-color);
292
- }
293
- }
294
- }
295
- }
296
- .row-datastores-icon {
297
- min-width: 18px;
298
- }
299
- }
300
- </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
+ test-id="select-storage-data-table"
23
+ server-off
24
+ size="sm"
25
+ @select-row="onSelectRow"
26
+ >
27
+ <template v-if="!props.isInWizard" #skeleton-header>
28
+ <div class="flex justify-between items-center">
29
+ <ui-skeleton-item width="80" height="20" />
30
+ <ui-skeleton-item width="88" height="22" border-radius="6px" />
31
+ </div>
32
+ </template>
33
+ <template v-if="!props.isInWizard" #insteadOfTitleActions>
34
+ <h3 class="storage-count">
35
+ {{ storageCount }}
36
+ </h3>
37
+ </template>
38
+ <template #name="{ item }">
39
+ <ui-icon
40
+ name="datastores"
41
+ width="18"
42
+ height="18"
43
+ class="mr-1 row-datastores-icon"
44
+ />
45
+ {{ item.text }}
46
+ </template>
47
+ <template #state="{ item }">
48
+ <ui-chip :color="item.data.color" size="sm" rounded>
49
+ <ui-icon :name="item.data.iconClassName" width="12" height="12" />
50
+ {{ item.data.text }}
51
+ </ui-chip>
52
+ </template>
53
+ </ui-data-table>
54
+ </div>
55
+
56
+ <div v-if="!props.hideCompatibility" class="compatibility-wrap">
57
+ <p class="compatibility">
58
+ {{ localization.inventorySummary.compatibility }}
59
+ </p>
60
+ <div class="compatibility-message flex-align-start">
61
+ <ui-skeleton-item v-if="loading" width="160px" height="16px" />
62
+ <template v-else>
63
+ <template v-if="props.selectedStorage">
64
+ <ui-icon
65
+ name="success-fill"
66
+ width="16"
67
+ height="16"
68
+ class="icon-compatibility-alert"
69
+ />
70
+ <span class="compatibility-message-description">{{
71
+ localization.common.compatibilityChecksSucceeded
72
+ }}</span>
73
+ </template>
74
+ <template v-else>
75
+ <!-- <ui-icon name="error" width="16" height="16" />-->
76
+ <span class="compatibility-message-description empty">{{
77
+ localization.vmWizard.noStorageSelected
78
+ }}</span>
79
+ </template>
80
+ </template>
81
+ </div>
82
+ </div>
83
+ </div>
84
+ </template>
85
+
86
+ <script setup lang="ts">
87
+ import type { UI_I_DataTableOptions } from 'bfg-uikit/components/ui/dataTable/models/interfaces'
88
+ import type {
89
+ UI_I_DataTable,
90
+ UI_I_TableTexts,
91
+ } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
92
+ import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
93
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
94
+ import {
95
+ tableBodyFunc,
96
+ tableDataFunc,
97
+ tableOptions,
98
+ } from '~/components/common/vm/actions/common/select/storage/new/lib/config/table'
99
+ import { tableTextsFunc } from '~/lib/config/uiTable'
100
+
101
+ const selectedRow = defineModel<number | null>('selectedRow')
102
+
103
+ const props = defineProps<{
104
+ datastore: UI_I_DatastoreTableItem[]
105
+ isDatastoreLoading: boolean
106
+ errors: string[]
107
+ selectedStorage: UI_I_DatastoreTableItem | null
108
+ hideCompatibility?: boolean
109
+ hideAlert?: boolean
110
+ isInWizard?: boolean
111
+ tableOptions?: UI_I_DataTableOptions
112
+ }>()
113
+ const emits = defineEmits<{
114
+ (event: 'remove-error'): void
115
+ (event: 'change-storage', value: number): void
116
+ }>()
117
+
118
+ const tableOptionsLocal = computed(() => props.tableOptions || tableOptions)
119
+
120
+ const localization = computed<UI_I_Localization>(() => useLocal())
121
+
122
+ const tableTexts = computed<UI_I_TableTexts>(() =>
123
+ tableTextsFunc(localization.value)
124
+ )
125
+
126
+ const storageCount = computed<string>(() =>
127
+ localization.value.vmWizard.storageCount.replace(
128
+ '{0}',
129
+ data.value.body.length.toString()
130
+ )
131
+ )
132
+ // const loading = ref<boolean>(true)
133
+ const data = ref<UI_I_DataTable>(tableDataFunc(localization.value))
134
+
135
+ watch(
136
+ () => props.datastore,
137
+ (newValue: UI_I_DatastoreTableItem[]) => {
138
+ // loading.value = true
139
+
140
+ // if (!newValue.length || data.value.body.length) return
141
+
142
+ data.value.body = tableBodyFunc(
143
+ newValue,
144
+ localization.value,
145
+ selectedRow.value
146
+ )
147
+
148
+ // loading.value = false
149
+ },
150
+ { immediate: true, deep: true }
151
+ // { deep: true }
152
+ )
153
+
154
+ const onSelectRow = (selectedData: UI_I_DataTable): void => {
155
+ const selectedId = selectedData[0]?.data[0]?.data.id
156
+ const selectedItemIndex = props.datastore.findIndex(
157
+ (item) => item.id === selectedId
158
+ )
159
+
160
+ emits('change-storage', selectedItemIndex)
161
+ }
162
+ </script>
163
+
164
+ <style>
165
+ :root {
166
+ --select-storage-border-color: #e9ebed;
167
+ --select-storage-bg-color: #ffffff;
168
+ --select-storage-title-color: #4d5d69;
169
+ --select-storage-compatibility-bg-color: #ffffff;
170
+ --select-storage-compatibility-description-color: #4d5d69;
171
+ --select-storage-compatibility-empty-description-color: #9da6ad;
172
+ --select-storage-compatibility-table-column-button-hover-bg: #f6f7f8;
173
+ --select-storage-compatibility-table-column-button-active-hover-bg: #f0f8fd;
174
+ }
175
+ :root.dark-theme {
176
+ --select-storage-border-color: #e9ebed1f;
177
+ --select-storage-bg-color: var(--wizard-right-bg);
178
+ --select-storage-title-color: #e9eaec;
179
+ --select-storage-compatibility-bg-color: #1b2a371f;
180
+ --select-storage-compatibility-description-color: #e9eaec;
181
+ --select-storage-compatibility-empty-description-color: #9da6ad;
182
+ --select-storage-compatibility-table-column-button-hover-bg: linear-gradient(
183
+ 0deg,
184
+ rgba(233, 234, 236, 0.04) 0%,
185
+ rgba(233, 234, 236, 0.04) 100%
186
+ ),
187
+ rgba(27, 42, 55, 0.24);
188
+ --select-storage-compatibility-table-column-button-active-hover-bg: linear-gradient(
189
+ 0deg,
190
+ rgba(43, 162, 222, 0.08) 0%,
191
+ rgba(43, 162, 222, 0.08) 100%
192
+ ),
193
+ rgba(27, 42, 55, 0.24);
194
+ }
195
+ </style>
196
+ <style scoped lang="scss">
197
+ :root.dark-theme {
198
+ .select-storage {
199
+ &.in-wizard {
200
+ :deep(.column-manager-button) {
201
+ &:hover {
202
+ background: #b8bcc10a;
203
+ }
204
+ &.active:hover {
205
+ background-color: #2785b614;
206
+ }
207
+ }
208
+ }
209
+ }
210
+ }
211
+ .select-storage {
212
+ padding-top: 12px;
213
+ //padding-bottom: 16px;
214
+
215
+ :deep(.title-sm) {
216
+ font-size: 12px;
217
+ }
218
+
219
+ :deep(.table-container.default-layout) {
220
+ box-shadow: unset;
221
+ padding: 0;
222
+ }
223
+ .storage-count {
224
+ font-size: 16px;
225
+ font-weight: 500;
226
+ color: var(--select-storage-title-color);
227
+ }
228
+
229
+ :deep(.column-manager-button) {
230
+ span {
231
+ font-size: 12px;
232
+ font-weight: 500;
233
+ }
234
+ //&:not(.active):hover {
235
+ // background-color: var(
236
+ // --select-storage-compatibility-table-column-button-hover-bg
237
+ // );
238
+ // color: var(--btn-table-manager-color);
239
+ //}
240
+ //&.active:hover {
241
+ // background-color: var(
242
+ // --select-storage-compatibility-table-column-button-active-hover-bg
243
+ // );
244
+ //}
245
+ }
246
+
247
+ &:not(.in-wizard) {
248
+ :deep(.bottom-grid-content) {
249
+ border: 1px solid var(--select-storage-border-color);
250
+ border-radius: 8px;
251
+ padding: 12px;
252
+ //background-color: var(--select-storage-bg-color);
253
+ }
254
+ :deep(.select-row-item) {
255
+ background-color: var(--select-storage-bg-color);
256
+ }
257
+ }
258
+
259
+ :deep(.table-title-actions-container) {
260
+ justify-content: flex-start;
261
+ }
262
+ :deep(.table-container .table-title) {
263
+ margin-bottom: 12px;
264
+ }
265
+
266
+ .compatibility-wrap {
267
+ margin-top: 24px;
268
+
269
+ .compatibility {
270
+ font-size: 16px;
271
+ font-weight: 500;
272
+ color: var(--select-storage-title-color);
273
+ margin-bottom: 16px;
274
+ }
275
+ .compatibility-message {
276
+ border-radius: 8px;
277
+ border: 1px solid var(--select-storage-border-color);
278
+ padding: 12px;
279
+ background-color: var(--select-storage-compatibility-bg-color);
280
+ gap: 10px;
281
+
282
+ .icon-compatibility-alert {
283
+ min-width: 16px;
284
+ min-height: 16px;
285
+ }
286
+ .compatibility-message-description {
287
+ font-size: 13px;
288
+ color: var(--select-storage-compatibility-description-color);
289
+
290
+ &.empty {
291
+ color: var(--select-storage-compatibility-empty-description-color);
292
+ }
293
+ }
294
+ }
295
+ }
296
+ .row-datastores-icon {
297
+ min-width: 18px;
298
+ }
299
+ }
300
+ </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
  }
@@ -1,21 +1,21 @@
1
- import type { UI_I_StatusData } from '~/components/common/vm/actions/common/select/storage/new/lib/models/interfaces'
2
-
3
- export const getStatus = (
4
- status: boolean,
5
- text1?: string,
6
- text2?: string
7
- ): UI_I_StatusData => {
8
- return status
9
- ? {
10
- iconClassName: 'status-check',
11
- color: 'green',
12
- isState: true,
13
- text: text1 || 'True',
14
- }
15
- : {
16
- iconClassName: 'close',
17
- color: 'red',
18
- isState: true,
19
- text: text2 || 'False',
20
- }
21
- }
1
+ import type { UI_I_StatusData } from '~/components/common/vm/actions/common/select/storage/new/lib/models/interfaces'
2
+
3
+ export const getStatus = (
4
+ status: boolean,
5
+ text1?: string,
6
+ text2?: string
7
+ ): UI_I_StatusData => {
8
+ return status
9
+ ? {
10
+ iconClassName: 'status-check',
11
+ color: 'green',
12
+ isState: true,
13
+ text: text1 || 'True',
14
+ }
15
+ : {
16
+ iconClassName: 'close',
17
+ color: 'red',
18
+ isState: true,
19
+ text: text2 || 'False',
20
+ }
21
+ }