bfg-common 1.4.695 → 1.4.696

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 (118) hide show
  1. package/assets/scss/common/normalize.scss +355 -355
  2. package/components/atoms/TheIcon3.vue +50 -50
  3. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  4. package/components/atoms/stack/StackBlock.vue +185 -185
  5. package/components/atoms/table/dataGrid/DataGrid.vue +1696 -1696
  6. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  7. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +91 -91
  8. package/components/common/browse/BrowseNew.vue +237 -237
  9. package/components/common/browse/BrowseOld.vue +217 -217
  10. package/components/common/browse/blocks/contents/Files.vue +37 -37
  11. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  12. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  13. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  14. package/components/common/context/lib/models/interfaces.ts +30 -30
  15. package/components/common/context/recursion/Recursion.vue +86 -86
  16. package/components/common/context/recursion/RecursionNew.vue +199 -199
  17. package/components/common/context/recursion/RecursionOld.vue +213 -213
  18. package/components/common/layout/theHeader/helpMenu/About.vue +79 -79
  19. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  20. package/components/common/mainNavigationPanel/MainNavigationPanel.vue +150 -150
  21. package/components/common/modals/confirmByInput/ConfirmByInput.vue +206 -206
  22. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  23. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/Object.vue +299 -299
  24. package/components/common/pages/home/StatusContent.vue +49 -49
  25. package/components/common/pages/home/headline/Headline.vue +44 -44
  26. package/components/common/pages/home/headline/HeadlineNew.vue +71 -71
  27. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  28. package/components/common/pages/home/widgets/Widgets.vue +49 -45
  29. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -79
  30. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -29
  31. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  32. package/components/common/pages/home/widgets/hosts/HostsNew.vue +100 -100
  33. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  34. package/components/common/pages/home/widgets/services/lib/config/config.ts +108 -108
  35. package/components/common/pages/home/widgets/vms/Vms.vue +26 -27
  36. package/components/common/pages/home/widgets/vms/VmsNew.vue +101 -101
  37. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -25
  38. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  39. package/components/common/select/button/ButtonDropdown.vue +108 -108
  40. package/components/common/spiceConsole/Drawer.vue +370 -370
  41. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  42. package/components/common/split/vertical/Vertical.vue +160 -160
  43. package/components/common/vm/actions/add/Add.vue +616 -616
  44. package/components/common/vm/actions/clone/lib/config/steps.ts +129 -129
  45. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +267 -267
  46. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +269 -269
  47. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  48. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  49. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +161 -161
  50. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +165 -165
  51. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  52. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +55 -55
  53. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  54. package/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/dropdownItems.ts +147 -147
  55. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  56. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  57. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  58. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +281 -281
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  60. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  61. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  62. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  63. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  64. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  65. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDeviceNew.vue +85 -85
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDeviceOld.vue +91 -91
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +35 -35
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +48 -48
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +30 -30
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/typeSelection/TypeSelectionNew.vue +46 -46
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  81. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  82. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  83. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  84. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  85. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  86. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  87. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  88. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  89. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  90. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  91. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  92. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  93. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  94. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  95. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  96. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  97. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  98. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  99. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  100. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  101. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  102. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  103. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  104. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  105. package/components/common/vm/actions/editSettings/EditSettings.vue +232 -232
  106. package/components/common/vm/actions/editSettings/EditSettingsOld.vue +183 -183
  107. package/components/common/vm/actions/editSettings/new/New.vue +177 -177
  108. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  109. package/composables/productNameLocal.ts +30 -30
  110. package/composables/useAppVersion.ts +21 -21
  111. package/package.json +1 -1
  112. package/plugins/date.ts +233 -233
  113. package/plugins/recursion.ts +311 -311
  114. package/public/spice-console/lib/images/bitmap.js +203 -203
  115. package/public/spice-console/network/spicechannel.js +383 -383
  116. package/store/main/mutations.ts +7 -7
  117. package/store/main/state.ts +7 -7
  118. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -1,299 +1,299 @@
1
- <template>
2
- <div class="vertical-flex-container chart-option-objects-split">
3
- <span class="chart-options-grid-title">
4
- {{ localization.inventoryMonitor.selectObjectForChart }}:
5
- </span>
6
- <div class="flex-to-absolute-positioning-container">
7
- <div class="flex-to-absolute-positioning-container-inner">
8
- <atoms-table-data-grid
9
- v-model:selected-row="selectedRow"
10
- v-model:column-keys="columnItems"
11
- v-model:page-size="pagination.pageSize"
12
- v-model:page="pagination.page"
13
- :type="tableType"
14
- class="data-table"
15
- test-id="object-table"
16
- :loading="props.loading"
17
- :head-items="headItems"
18
- :body-items="bodyItems"
19
- :total-items="bodyItems.length"
20
- :total-pages="1"
21
- hide-footer
22
- server-off
23
- >
24
- </atoms-table-data-grid>
25
- </div>
26
- </div>
27
- </div>
28
- </template>
29
-
30
- <script setup lang="ts">
31
- import type {
32
- UI_I_HeadItem,
33
- UI_I_BodyItem,
34
- UI_I_ColumnKey,
35
- } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
36
- import type { UI_I_Localization } from '~/lib/models/interfaces'
37
- import type { UI_I_Pagination } from '~/lib/models/table/interfaces'
38
- import type { UI_I_AdvancedTargetObject } from '~/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/lib/models/interfaces'
39
- import type { UI_I_ObjectItem } from '~/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/lib/models/interfaces'
40
- import type { UI_T_DataGridType } from '~/components/atoms/table/dataGrid/lib/models/types'
41
- import type { UI_T_AdvancedType } from '~/components/common/monitor/advanced/lib/models/types'
42
- import type {
43
- UI_T_ChartHost,
44
- UI_T_ChartVm,
45
- } from '~/components/common/monitor/advanced/tools/chartOptionsModal/lib/models/types'
46
- import * as table from '~/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/lib/config/objectTable'
47
-
48
- const props = defineProps<{
49
- type: UI_T_AdvancedType
50
- chart: UI_T_ChartHost | UI_T_ChartVm
51
- totalCores: number
52
- hostId: string
53
- selectedMetricsKeys: number[]
54
- totalMetricItems: number
55
- selectedObjects: string
56
- loading: boolean
57
- currentItems: UI_I_ObjectItem[]
58
- }>()
59
-
60
- const emits = defineEmits<{
61
- (event: 'select-objects', value: string): void
62
- }>()
63
-
64
- const localization = computed<UI_I_Localization>(() => useLocal())
65
-
66
- const tableType = computed<UI_T_DataGridType>(() => {
67
- let result = 'checkbox'
68
-
69
- if (props.type === 'host') {
70
- result = ['disk', 'network'].includes(props.chart) ? 'radio' : 'checkbox'
71
- }
72
-
73
- return result
74
- })
75
-
76
- const selectedRow = ref<number[] | number>([])
77
- const pagination = ref<UI_I_Pagination>({
78
- page: 1,
79
- pageSize: 35,
80
- })
81
-
82
- const headItems = computed<UI_I_HeadItem[]>(() =>
83
- table.headItems(localization.value)
84
- )
85
- const columnItems = computed<UI_I_ColumnKey[]>(() =>
86
- table.columnKeys(localization.value)
87
- )
88
-
89
- const bodyItems = ref<UI_I_BodyItem[][]>([])
90
-
91
- let items: UI_I_AdvancedTargetObject[] = []
92
- let firstRequest = false
93
- const getTotalCores = (): void => {
94
- if (
95
- props.selectedMetricsKeys.includes(1) &&
96
- !props.totalCores &&
97
- !firstRequest
98
- ) {
99
- firstRequest = true
100
- }
101
- }
102
- const updateSelectedRow = (): void => {
103
- if (selectedRow.value.length) return
104
-
105
- if (props.type === 'vm' && props.chart === 'network') {
106
- selectedRow.value = []
107
-
108
- if (props.currentItems.length === 1) {
109
- selectedRow.value.push(0)
110
- } else if (props.currentItems.length > 1) {
111
- const totalIndex = props.currentItems.findIndex(
112
- (item) => item.target_object.toLowerCase() === 'total'
113
- )
114
-
115
- totalIndex >= 0 && selectedRow.value.push(totalIndex)
116
- }
117
- }
118
- }
119
- watch(
120
- () => props.selectedMetricsKeys,
121
- () => {
122
- getTotalCores()
123
- },
124
- { deep: true }
125
- )
126
- watch(
127
- () => [
128
- props.type,
129
- props.chart,
130
- props.totalCores,
131
- props.hostId,
132
- props.selectedMetricsKeys,
133
- props.currentItems,
134
- ],
135
- (newValue) => {
136
- items = []
137
- selectedRow.value = []
138
-
139
- if (newValue[0] === 'host' && newValue[1] === 'cpu') {
140
- if (newValue[4].includes(0)) {
141
- items.push({
142
- id: 'total',
143
- target_object: newValue[3],
144
- })
145
- }
146
- if (newValue[4].includes(1)) {
147
- for (let i = 0; i < newValue[2]; i++) {
148
- items.push({
149
- id: 'core' + i,
150
- target_object: 'core' + i,
151
- })
152
- }
153
- }
154
- if (newValue[4].includes(2)) {
155
- for (let i = 0; i < newValue[2]; i++) {
156
- items.push({
157
- id: 'core' + i + 'MHz',
158
- target_object: 'core' + i + 'MHz',
159
- })
160
- }
161
- }
162
- if (newValue[4].includes(3)) {
163
- items.push({
164
- id: 'totalMHz',
165
- target_object: 'totalMHz',
166
- })
167
- }
168
- if (newValue[4].includes(4)) {
169
- items.push({
170
- id: 'averageMHz',
171
- target_object: 'averageMHz',
172
- })
173
- }
174
- } else if (
175
- newValue[0] === 'host' &&
176
- ['disk', 'network'].includes(newValue[1])
177
- ) {
178
- let newItems = []
179
-
180
- if (newValue[1] === 'network')
181
- newItems.push({
182
- id: 'total',
183
- // target_object: localization.value.common.total.toLowerCase(),
184
- target_object: 'total',
185
- })
186
-
187
- newItems = [...newItems, ...props.currentItems]
188
-
189
- items = newItems
190
- } else if (newValue[0] === 'vm' && newValue[1] === 'network') {
191
- items = [...props.currentItems]
192
- }
193
-
194
- bodyItems.value = table.bodyItems(items)
195
- updateSelectedRow()
196
- },
197
- { immediate: true, deep: true }
198
- )
199
-
200
- watch(
201
- selectedRow,
202
- (newValue) => {
203
- const selectedItems: string[] = []
204
-
205
- if (props.type === 'host' && ['disk', 'network'].includes(props.chart)) {
206
- selectedItems.push(items[newValue]?.target_object)
207
- } else if (props.type === 'vm' && ['network'].includes(props.chart)) {
208
- newValue.forEach((key) => {
209
- const newItem = items[key]?.target_object
210
- newItem && selectedItems.push(newItem)
211
- })
212
- } else
213
- newValue.forEach((key) => {
214
- selectedItems.push(items[key].id)
215
- })
216
-
217
- let selectedNames = ''
218
-
219
- if (
220
- items.length === newValue.length &&
221
- props.selectedMetricsKeys.length === props.totalMetricItems
222
- ) {
223
- selectedNames = '*'
224
-
225
- if (props.type === 'vm') selectedNames = 'total'
226
- } else selectedNames = selectedItems.join(', ')
227
-
228
- /* if (props.type === 'vm' && ['network'].includes(props.chart)) {
229
- if (
230
- selectedItems.includes('total') ||
231
- (!selectedItems.includes('total') &&
232
- items.length === newValue.length + 1)
233
- )
234
- selectedNames = 'total'
235
- } */
236
-
237
- emits('select-objects', selectedNames)
238
- },
239
- { deep: true }
240
- )
241
-
242
- watch(
243
- () => [props.selectedObjects, bodyItems.value],
244
- ([selected, all]) => {
245
- if (!all.length) return
246
-
247
- if (props.type === 'host' && props.chart === 'cpu') {
248
- if (selected === '*') {
249
- selectedRow.value = all.map((item) => item[0].id)
250
- } else {
251
- const selectedNames = selected.split(', ')
252
- const selectedKeys: number[] = []
253
- all.forEach((item) => {
254
- if (selectedNames.includes('total')) selectedKeys.push(0)
255
- if (selectedNames.includes(`core${item[0].text}`))
256
- selectedKeys.push(item[0].id)
257
- })
258
- selectedRow.value = selectedKeys
259
- }
260
- } else if (
261
- props.type === 'host' &&
262
- ['disk', 'network'].includes(props.chart)
263
- ) {
264
- if (selected) {
265
- const selectedId = all.find((item) => item[0].text === selected)?.[0]
266
- ?.id
267
- typeof selectedId === 'number' && (selectedRow.value = selectedId)
268
- }
269
- }
270
- },
271
- { immediate: true }
272
- )
273
- </script>
274
-
275
- <style scoped lang="scss">
276
- .chart-option-objects-split {
277
- flex: 1;
278
-
279
- .chart-options-grid-title {
280
- display: block;
281
- margin-bottom: -20px;
282
- }
283
- .flex-to-absolute-positioning-container {
284
- height: 100%;
285
- max-height: 204px;
286
- .flex-to-absolute-positioning-container-inner {
287
- height: inherit;
288
-
289
- .data-table {
290
- height: inherit;
291
-
292
- :deep(.datagrid-outer-wrapper) {
293
- height: inherit;
294
- }
295
- }
296
- }
297
- }
298
- }
299
- </style>
1
+ <template>
2
+ <div class="vertical-flex-container chart-option-objects-split">
3
+ <span class="chart-options-grid-title">
4
+ {{ localization.inventoryMonitor.selectObjectForChart }}:
5
+ </span>
6
+ <div class="flex-to-absolute-positioning-container">
7
+ <div class="flex-to-absolute-positioning-container-inner">
8
+ <atoms-table-data-grid
9
+ v-model:selected-row="selectedRow"
10
+ v-model:column-keys="columnItems"
11
+ v-model:page-size="pagination.pageSize"
12
+ v-model:page="pagination.page"
13
+ :type="tableType"
14
+ class="data-table"
15
+ test-id="object-table"
16
+ :loading="props.loading"
17
+ :head-items="headItems"
18
+ :body-items="bodyItems"
19
+ :total-items="bodyItems.length"
20
+ :total-pages="1"
21
+ hide-footer
22
+ server-off
23
+ >
24
+ </atoms-table-data-grid>
25
+ </div>
26
+ </div>
27
+ </div>
28
+ </template>
29
+
30
+ <script setup lang="ts">
31
+ import type {
32
+ UI_I_HeadItem,
33
+ UI_I_BodyItem,
34
+ UI_I_ColumnKey,
35
+ } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
36
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
37
+ import type { UI_I_Pagination } from '~/lib/models/table/interfaces'
38
+ import type { UI_I_AdvancedTargetObject } from '~/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/lib/models/interfaces'
39
+ import type { UI_I_ObjectItem } from '~/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/lib/models/interfaces'
40
+ import type { UI_T_DataGridType } from '~/components/atoms/table/dataGrid/lib/models/types'
41
+ import type { UI_T_AdvancedType } from '~/components/common/monitor/advanced/lib/models/types'
42
+ import type {
43
+ UI_T_ChartHost,
44
+ UI_T_ChartVm,
45
+ } from '~/components/common/monitor/advanced/tools/chartOptionsModal/lib/models/types'
46
+ import * as table from '~/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/lib/config/objectTable'
47
+
48
+ const props = defineProps<{
49
+ type: UI_T_AdvancedType
50
+ chart: UI_T_ChartHost | UI_T_ChartVm
51
+ totalCores: number
52
+ hostId: string
53
+ selectedMetricsKeys: number[]
54
+ totalMetricItems: number
55
+ selectedObjects: string
56
+ loading: boolean
57
+ currentItems: UI_I_ObjectItem[]
58
+ }>()
59
+
60
+ const emits = defineEmits<{
61
+ (event: 'select-objects', value: string): void
62
+ }>()
63
+
64
+ const localization = computed<UI_I_Localization>(() => useLocal())
65
+
66
+ const tableType = computed<UI_T_DataGridType>(() => {
67
+ let result = 'checkbox'
68
+
69
+ if (props.type === 'host') {
70
+ result = ['disk', 'network'].includes(props.chart) ? 'radio' : 'checkbox'
71
+ }
72
+
73
+ return result
74
+ })
75
+
76
+ const selectedRow = ref<number[] | number>([])
77
+ const pagination = ref<UI_I_Pagination>({
78
+ page: 1,
79
+ pageSize: 35,
80
+ })
81
+
82
+ const headItems = computed<UI_I_HeadItem[]>(() =>
83
+ table.headItems(localization.value)
84
+ )
85
+ const columnItems = computed<UI_I_ColumnKey[]>(() =>
86
+ table.columnKeys(localization.value)
87
+ )
88
+
89
+ const bodyItems = ref<UI_I_BodyItem[][]>([])
90
+
91
+ let items: UI_I_AdvancedTargetObject[] = []
92
+ let firstRequest = false
93
+ const getTotalCores = (): void => {
94
+ if (
95
+ props.selectedMetricsKeys.includes(1) &&
96
+ !props.totalCores &&
97
+ !firstRequest
98
+ ) {
99
+ firstRequest = true
100
+ }
101
+ }
102
+ const updateSelectedRow = (): void => {
103
+ if (selectedRow.value.length) return
104
+
105
+ if (props.type === 'vm' && props.chart === 'network') {
106
+ selectedRow.value = []
107
+
108
+ if (props.currentItems.length === 1) {
109
+ selectedRow.value.push(0)
110
+ } else if (props.currentItems.length > 1) {
111
+ const totalIndex = props.currentItems.findIndex(
112
+ (item) => item.target_object.toLowerCase() === 'total'
113
+ )
114
+
115
+ totalIndex >= 0 && selectedRow.value.push(totalIndex)
116
+ }
117
+ }
118
+ }
119
+ watch(
120
+ () => props.selectedMetricsKeys,
121
+ () => {
122
+ getTotalCores()
123
+ },
124
+ { deep: true }
125
+ )
126
+ watch(
127
+ () => [
128
+ props.type,
129
+ props.chart,
130
+ props.totalCores,
131
+ props.hostId,
132
+ props.selectedMetricsKeys,
133
+ props.currentItems,
134
+ ],
135
+ (newValue) => {
136
+ items = []
137
+ selectedRow.value = []
138
+
139
+ if (newValue[0] === 'host' && newValue[1] === 'cpu') {
140
+ if (newValue[4].includes(0)) {
141
+ items.push({
142
+ id: 'total',
143
+ target_object: newValue[3],
144
+ })
145
+ }
146
+ if (newValue[4].includes(1)) {
147
+ for (let i = 0; i < newValue[2]; i++) {
148
+ items.push({
149
+ id: 'core' + i,
150
+ target_object: 'core' + i,
151
+ })
152
+ }
153
+ }
154
+ if (newValue[4].includes(2)) {
155
+ for (let i = 0; i < newValue[2]; i++) {
156
+ items.push({
157
+ id: 'core' + i + 'MHz',
158
+ target_object: 'core' + i + 'MHz',
159
+ })
160
+ }
161
+ }
162
+ if (newValue[4].includes(3)) {
163
+ items.push({
164
+ id: 'totalMHz',
165
+ target_object: 'totalMHz',
166
+ })
167
+ }
168
+ if (newValue[4].includes(4)) {
169
+ items.push({
170
+ id: 'averageMHz',
171
+ target_object: 'averageMHz',
172
+ })
173
+ }
174
+ } else if (
175
+ newValue[0] === 'host' &&
176
+ ['disk', 'network'].includes(newValue[1])
177
+ ) {
178
+ let newItems = []
179
+
180
+ if (newValue[1] === 'network')
181
+ newItems.push({
182
+ id: 'total',
183
+ // target_object: localization.value.common.total.toLowerCase(),
184
+ target_object: 'total',
185
+ })
186
+
187
+ newItems = [...newItems, ...props.currentItems]
188
+
189
+ items = newItems
190
+ } else if (newValue[0] === 'vm' && newValue[1] === 'network') {
191
+ items = [...props.currentItems]
192
+ }
193
+
194
+ bodyItems.value = table.bodyItems(items)
195
+ updateSelectedRow()
196
+ },
197
+ { immediate: true, deep: true }
198
+ )
199
+
200
+ watch(
201
+ selectedRow,
202
+ (newValue) => {
203
+ const selectedItems: string[] = []
204
+
205
+ if (props.type === 'host' && ['disk', 'network'].includes(props.chart)) {
206
+ selectedItems.push(items[newValue]?.target_object)
207
+ } else if (props.type === 'vm' && ['network'].includes(props.chart)) {
208
+ newValue.forEach((key) => {
209
+ const newItem = items[key]?.target_object
210
+ newItem && selectedItems.push(newItem)
211
+ })
212
+ } else
213
+ newValue.forEach((key) => {
214
+ selectedItems.push(items[key].id)
215
+ })
216
+
217
+ let selectedNames = ''
218
+
219
+ if (
220
+ items.length === newValue.length &&
221
+ props.selectedMetricsKeys.length === props.totalMetricItems
222
+ ) {
223
+ selectedNames = '*'
224
+
225
+ if (props.type === 'vm') selectedNames = 'total'
226
+ } else selectedNames = selectedItems.join(', ')
227
+
228
+ /* if (props.type === 'vm' && ['network'].includes(props.chart)) {
229
+ if (
230
+ selectedItems.includes('total') ||
231
+ (!selectedItems.includes('total') &&
232
+ items.length === newValue.length + 1)
233
+ )
234
+ selectedNames = 'total'
235
+ } */
236
+
237
+ emits('select-objects', selectedNames)
238
+ },
239
+ { deep: true }
240
+ )
241
+
242
+ watch(
243
+ () => [props.selectedObjects, bodyItems.value],
244
+ ([selected, all]) => {
245
+ if (!all.length) return
246
+
247
+ if (props.type === 'host' && props.chart === 'cpu') {
248
+ if (selected === '*') {
249
+ selectedRow.value = all.map((item) => item[0].id)
250
+ } else {
251
+ const selectedNames = selected.split(', ')
252
+ const selectedKeys: number[] = []
253
+ all.forEach((item) => {
254
+ if (selectedNames.includes('total')) selectedKeys.push(0)
255
+ if (selectedNames.includes(`core${item[0].text}`))
256
+ selectedKeys.push(item[0].id)
257
+ })
258
+ selectedRow.value = selectedKeys
259
+ }
260
+ } else if (
261
+ props.type === 'host' &&
262
+ ['disk', 'network'].includes(props.chart)
263
+ ) {
264
+ if (selected) {
265
+ const selectedId = all.find((item) => item[0].text === selected)?.[0]
266
+ ?.id
267
+ typeof selectedId === 'number' && (selectedRow.value = selectedId)
268
+ }
269
+ }
270
+ },
271
+ { immediate: true }
272
+ )
273
+ </script>
274
+
275
+ <style scoped lang="scss">
276
+ .chart-option-objects-split {
277
+ flex: 1;
278
+
279
+ .chart-options-grid-title {
280
+ display: block;
281
+ margin-bottom: -20px;
282
+ }
283
+ .flex-to-absolute-positioning-container {
284
+ height: 100%;
285
+ max-height: 204px;
286
+ .flex-to-absolute-positioning-container-inner {
287
+ height: inherit;
288
+
289
+ .data-table {
290
+ height: inherit;
291
+
292
+ :deep(.datagrid-outer-wrapper) {
293
+ height: inherit;
294
+ }
295
+ }
296
+ }
297
+ }
298
+ }
299
+ </style>