bfg-common 1.6.64 → 1.6.66

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 (144) hide show
  1. package/assets/localization/local_ru.json +5 -5
  2. package/components/atoms/dropdown/dropdown/Dropdown.vue +10 -8
  3. package/components/atoms/dropdown/dropdown/lib/models/interfaces.ts +1 -0
  4. package/components/common/adapterManager/AdapterManager.vue +473 -473
  5. package/components/common/adapterManager/AdapterManagerOld.vue +498 -498
  6. package/components/common/adapterManager/addAdapterModal/AddAdapterModal.vue +70 -70
  7. package/components/common/adapterManager/addAdapterModal/AddAdapterModalNew.vue +110 -110
  8. package/components/common/adapterManager/addAdapterModal/AddAdapterModalOld.vue +531 -531
  9. package/components/common/adapterManager/addAdapterWarningModal/AddAdapterWarningModal.vue +32 -32
  10. package/components/common/adapterManager/addAdapterWarningModal/AddAdapterWarningModalNew.vue +37 -37
  11. package/components/common/adapterManager/addAdapterWarningModal/AddAdapterWarningModalOld.vue +73 -73
  12. package/components/common/adapterManager/lib/config/index.ts +19 -19
  13. package/components/common/adapterManager/noActiveAdaptersModal/NoActiveAdaptersModal.vue +31 -31
  14. package/components/common/adapterManager/noActiveAdaptersModal/NoActiveAdaptersModalNew.vue +34 -34
  15. package/components/common/adapterManager/noActiveAdaptersModal/NoActiveAdaptersModalOld.vue +57 -57
  16. package/components/common/adapterManager/noConnectedActiveAdaptersModal/NoConnectedActiveAdaptersModal.vue +31 -31
  17. package/components/common/adapterManager/noConnectedActiveAdaptersModal/NoConnectedActiveAdaptersModalNew.vue +34 -34
  18. package/components/common/adapterManager/noConnectedActiveAdaptersModal/NoConnectedActiveAdaptersModalOld.vue +57 -57
  19. package/components/common/adapterManager/ui/actions/AddAdapterButton.vue +34 -34
  20. package/components/common/adapterManager/ui/actions/RemoveAdapterButton.vue +41 -41
  21. package/components/common/adapterManager/ui/actions/VerticalSeparator.vue +10 -10
  22. package/components/common/adapterManager/ui/actions/bar/BarOld.vue +95 -95
  23. package/components/common/adapterManager/ui/actions/moveDownAdapterButton/MoveDownAdapterButton.vue +28 -28
  24. package/components/common/adapterManager/ui/actions/moveDownAdapterButton/MoveDownAdapterButtonNew.vue +76 -76
  25. package/components/common/adapterManager/ui/actions/moveDownAdapterButton/MoveDownAdapterButtonOld.vue +33 -33
  26. package/components/common/adapterManager/ui/actions/moveUpAdapterButton/MoveUpAdapterButton.vue +28 -28
  27. package/components/common/adapterManager/ui/actions/moveUpAdapterButton/MoveUpAdapterButtonNew.vue +77 -77
  28. package/components/common/adapterManager/ui/actions/moveUpAdapterButton/MoveUpAdapterButtonOld.vue +33 -33
  29. package/components/common/adapterManager/ui/noSelectedAdapter/NoSelectedAdapter.vue +24 -24
  30. package/components/common/adapterManager/ui/noSelectedAdapter/NoSelectedAdapterNew.vue +18 -18
  31. package/components/common/adapterManager/ui/noSelectedAdapter/NoSelectedAdapterOld.vue +38 -38
  32. package/components/common/adapterManager/ui/secondTitle/SecondTitle.vue +31 -31
  33. package/components/common/adapterManager/ui/secondTitle/SecondTitleNew.vue +51 -51
  34. package/components/common/adapterManager/ui/secondTitle/SecondTitleOld.vue +35 -35
  35. package/components/common/adapterManager/ui/table/Table.vue +88 -88
  36. package/components/common/adapterManager/ui/table/TableNew.vue +137 -137
  37. package/components/common/adapterManager/ui/table/TableOld.vue +141 -141
  38. package/components/common/adapterManager/ui/table/adapters/Adapters.vue +44 -44
  39. package/components/common/adapterManager/ui/table/adapters/AdaptersNew.vue +187 -187
  40. package/components/common/adapterManager/ui/table/adapters/AdaptersOld.vue +87 -87
  41. package/components/common/adapterManager/ui/table/header/Header.vue +57 -57
  42. package/components/common/adapterManager/ui/table/header/HeaderNew.vue +81 -81
  43. package/components/common/adapterManager/ui/table/header/HeaderOld.vue +79 -79
  44. package/components/common/adapterManager/ui/table/lib/models/types.ts +1 -1
  45. package/components/common/diagramMain/Diagram.vue +459 -459
  46. package/components/common/diagramMain/DiagramMain.vue +929 -929
  47. package/components/common/diagramMain/adapter/Adapter.vue +123 -123
  48. package/components/common/diagramMain/adapter/AdapterItem.vue +438 -438
  49. package/components/common/diagramMain/adapter/AdapterItems.vue +61 -61
  50. package/components/common/diagramMain/adapter/Contents.vue +212 -212
  51. package/components/common/diagramMain/adapter/Lines.vue +81 -81
  52. package/components/common/diagramMain/adapter/block/Block.vue +27 -27
  53. package/components/common/diagramMain/adapter/block/BlockNew.vue +58 -58
  54. package/components/common/diagramMain/adapter/block/BlockOld.vue +50 -50
  55. package/components/common/diagramMain/adapter/secondBlock/SecondBlock.vue +27 -27
  56. package/components/common/diagramMain/adapter/secondBlock/SecondBlockNew.vue +60 -60
  57. package/components/common/diagramMain/adapter/secondBlock/SecondBlockOld.vue +51 -51
  58. package/components/common/diagramMain/header/Header.vue +49 -49
  59. package/components/common/diagramMain/header/HeaderNew.vue +155 -155
  60. package/components/common/diagramMain/header/HeaderOld.vue +234 -234
  61. package/components/common/diagramMain/highlights/Highlights.vue +151 -151
  62. package/components/common/diagramMain/highlights/HighlightsNew.vue +124 -124
  63. package/components/common/diagramMain/highlights/HighlightsOld.vue +107 -107
  64. package/components/common/diagramMain/lib/config/index.ts +81 -81
  65. package/components/common/diagramMain/lib/config/initial.ts +50 -50
  66. package/components/common/diagramMain/lib/config/positions.ts +194 -194
  67. package/components/common/diagramMain/lib/models/enums.ts +44 -44
  68. package/components/common/diagramMain/lib/models/interfaces.ts +760 -760
  69. package/components/common/diagramMain/lib/models/types.ts +21 -21
  70. package/components/common/diagramMain/lib/utils/utils.ts +331 -331
  71. package/components/common/diagramMain/modals/ManagePhysicalAdaptersModal.vue +331 -331
  72. package/components/common/diagramMain/modals/Modals.vue +483 -483
  73. package/components/common/diagramMain/modals/lib/config/adapterModal.ts +147 -147
  74. package/components/common/diagramMain/modals/lib/config/diagramConfig.ts +66 -66
  75. package/components/common/diagramMain/modals/lib/config/index.ts +56 -56
  76. package/components/common/diagramMain/modals/lib/config/initial.ts +180 -180
  77. package/components/common/diagramMain/modals/lib/config/networkModal.ts +405 -405
  78. package/components/common/diagramMain/modals/lib/config/portModal.ts +253 -253
  79. package/components/common/diagramMain/modals/lib/config/switchModal.ts +245 -245
  80. package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
  81. package/components/common/diagramMain/modals/lib/config/vmKernelAdapter.ts +90 -90
  82. package/components/common/diagramMain/modals/lib/mappers/mappers.ts +88 -88
  83. package/components/common/diagramMain/modals/migrateVmkernelAdapter/MigrateVmkernelAdapter.vue +541 -541
  84. package/components/common/diagramMain/modals/migrateVmkernelAdapter/lib/config/steps.ts +114 -114
  85. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/ConnectionSettings.vue +170 -170
  86. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/SelectVmkernelAdapter.vue +159 -159
  87. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/VmkernelAdapterReadyComplete.vue +49 -49
  88. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/common.ts +19 -19
  89. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/connectionSettings.ts +137 -137
  90. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/selectVmkernelAdapter.ts +52 -52
  91. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/validations.ts +19 -19
  92. package/components/common/diagramMain/modals/remove/RemoveModal.vue +82 -82
  93. package/components/common/diagramMain/modals/remove/RemoveModalNew.vue +106 -106
  94. package/components/common/diagramMain/modals/remove/RemoveModalOld.vue +241 -241
  95. package/components/common/diagramMain/modals/viewSettings/info/Info.vue +57 -57
  96. package/components/common/diagramMain/modals/viewSettings/info/InfoNew.vue +174 -174
  97. package/components/common/diagramMain/modals/viewSettings/info/InfoOld.vue +141 -141
  98. package/components/common/diagramMain/modals/viewSettings/viewSettings/ViewSettings.vue +45 -45
  99. package/components/common/diagramMain/modals/viewSettings/viewSettings/ViewSettingsNew.vue +323 -323
  100. package/components/common/diagramMain/modals/viewSettings/viewSettings/ViewSettingsOld.vue +203 -203
  101. package/components/common/diagramMain/modals/viewSettings/viewSettingsModal/ViewSettingsModal.vue +60 -60
  102. package/components/common/diagramMain/modals/viewSettings/viewSettingsModal/ViewSettingsModalNew.vue +50 -50
  103. package/components/common/diagramMain/modals/viewSettings/viewSettingsModal/ViewSettingsModalOld.vue +70 -70
  104. package/components/common/diagramMain/modals/viewSettings/viewSettingsModal/lib/models/interfaces.ts +48 -48
  105. package/components/common/diagramMain/network/Contents.vue +497 -497
  106. package/components/common/diagramMain/network/Lines.vue +107 -107
  107. package/components/common/diagramMain/network/Network.vue +141 -141
  108. package/components/common/diagramMain/network/block/Block.vue +37 -37
  109. package/components/common/diagramMain/network/block/BlockNew.vue +68 -68
  110. package/components/common/diagramMain/network/block/BlockOld.vue +64 -64
  111. package/components/common/diagramMain/network/noNetwork/NoNetwork.vue +12 -12
  112. package/components/common/diagramMain/network/noNetwork/NoNetworkNew.vue +89 -89
  113. package/components/common/diagramMain/network/noNetwork/NoNetworkOld.vue +61 -61
  114. package/components/common/diagramMain/network/secondBlock/SecondBlock.vue +41 -41
  115. package/components/common/diagramMain/network/secondBlock/SecondBlockNew.vue +64 -64
  116. package/components/common/diagramMain/network/secondBlock/SecondBlockOld.vue +60 -60
  117. package/components/common/diagramMain/port/Port.vue +580 -580
  118. package/components/common/diagramMain/port/Ports.vue +47 -47
  119. package/components/common/diagramMain/skeleton/Header.vue +31 -31
  120. package/components/common/diagramMain/skeleton/Switch.vue +75 -75
  121. package/components/common/diagramMain/switch/Switch.vue +180 -180
  122. package/components/common/diagramMain/switch/SwitchSelected.vue +111 -111
  123. package/components/common/modals/Rename.vue +3 -1
  124. package/components/common/monitor/advanced/table/tableOld/TableOld.vue +93 -93
  125. package/components/common/monitor/utilization/Old.vue +65 -24
  126. package/components/common/monitor/utilization/Utilization.vue +22 -14
  127. package/components/common/monitor/utilization/infoBlock/InfoBlock.vue +125 -2
  128. package/components/common/monitor/utilization/infoBlock/New.vue +183 -3
  129. package/components/common/monitor/utilization/infoBlock/Old.vue +71 -66
  130. package/components/common/monitor/utilization/infoBlock/progressBar/New.vue +64 -0
  131. package/components/common/monitor/utilization/infoBlock/progressBar/Old.vue +65 -0
  132. package/components/common/monitor/utilization/infoBlock/progressBar/ProgressBar.vue +84 -0
  133. package/components/common/monitor/utilization/infoBlock/progressBar/lib/models/interfaces.ts +10 -0
  134. package/components/common/monitor/utilization/lib/models/enums.ts +4 -4
  135. package/components/common/monitor/utilization/lib/models/interfaces.ts +14 -12
  136. package/components/common/monitor/utilization/lib/models/types.ts +1 -0
  137. package/components/common/monitor/utilization/lib/utils/index.ts +64 -6
  138. package/components/common/monitor/utilization/new/New.vue +195 -0
  139. package/components/common/monitor/utilization/new/Portlet.vue +42 -0
  140. package/components/common/monitor/utilization/new/Skeleton.vue +120 -0
  141. package/components/common/monitor/utilization/new/lib/utils/newPortlet.ts +7 -0
  142. package/components/common/vm/actions/rename/Old.vue +1 -0
  143. package/package.json +1 -1
  144. package/components/common/monitor/utilization/New.vue +0 -5
@@ -0,0 +1,84 @@
1
+ <template>
2
+ <component
3
+ :is="currentComponent"
4
+ :percent="percent"
5
+ :inner-fill-container-styles="innerFillContainerStyles"
6
+ :items-for-print="itemsForPrint"
7
+ />
8
+ </template>
9
+
10
+ <script setup lang="ts">
11
+ import type { UI_I_UtilizationDataItem } from '~/components/common/monitor/utilization/lib/models/interfaces'
12
+ import type {
13
+ UI_I_UtilizationProgressInnerFillStyles,
14
+ UI_I_UtilizationProgressItemForPrint,
15
+ } from '~/components/common/monitor/utilization/infoBlock/progressBar/lib/models/interfaces'
16
+
17
+ const props = defineProps<{
18
+ infoData: UI_I_UtilizationDataItem | null
19
+ maxItem: UI_I_UtilizationDataItem['data'][0] | null
20
+ percent: number | string
21
+ color: string
22
+ }>()
23
+
24
+ const { $store }: any = useNuxtApp()
25
+
26
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
27
+ const currentComponent = computed(() =>
28
+ isNewView.value
29
+ ? defineAsyncComponent(() => import('./New.vue'))
30
+ : defineAsyncComponent(() => import('./Old.vue'))
31
+ )
32
+
33
+ const percent = computed<number>(() => Number(props.percent))
34
+
35
+ const itemsForPrint = ref<UI_I_UtilizationProgressItemForPrint[]>([])
36
+
37
+ const innerFillContainerStyles =
38
+ computed<UI_I_UtilizationProgressInnerFillStyles>(() => ({
39
+ width: `${percent.value}%`,
40
+ backgroundColor: `${props.color}`,
41
+ }))
42
+
43
+ watch(
44
+ () => props.infoData,
45
+ (newValue) => {
46
+ if (!newValue) return
47
+
48
+ newValue.data.forEach((item) => {
49
+ if (
50
+ item.color &&
51
+ !['consumed'].find((item2) =>
52
+ item.labelKey.toLowerCase().includes(item2)
53
+ ) &&
54
+ parseFloat(item.value.replace(/[^\d.-]/g, '')) !== 0
55
+ )
56
+ itemsForPrint.value.push(item)
57
+ })
58
+ itemsForPrint.value = itemsForPrint.value.filter((item) =>
59
+ item.value ? parseFloat(item.value.replace(/[^\d.-]/g, '')) !== 0 : false
60
+ )
61
+
62
+ let currentLeft = 0
63
+
64
+ const total = parseFloat(props.maxItem.value.replace(/[^\d.-]/g, ''))
65
+
66
+ itemsForPrint.value = itemsForPrint.value.map((item) => {
67
+ const width = item.value
68
+ ? (parseFloat(item.value.replace(/[^\d.-]/g, '')) / total) * 100
69
+ : 0
70
+
71
+ const segment = {
72
+ left: currentLeft,
73
+ width: width,
74
+ color: item.colorKey ? `var(${item.colorKey})` : item.color,
75
+ }
76
+ currentLeft += width
77
+ return segment
78
+ })
79
+ },
80
+ { immediate: true, deep: true }
81
+ )
82
+ </script>
83
+
84
+ <style scoped lang="scss"></style>
@@ -0,0 +1,10 @@
1
+ export interface UI_I_UtilizationProgressInnerFillStyles {
2
+ width: string
3
+ backgroundColor: string
4
+ }
5
+
6
+ export interface UI_I_UtilizationProgressItemForPrint {
7
+ left: number
8
+ width: number
9
+ color: string
10
+ }
@@ -1,4 +1,4 @@
1
- export enum UI_E_UtilizationBlockCurrentKeys {
2
- cpuUtilization = 'hostCpu',
3
- hostMemoryUtilization = 'hostMem',
4
- }
1
+ export enum UI_E_UtilizationBlockCurrentKeys {
2
+ cpuUtilization = 'hostCpu',
3
+ hostMemoryUtilization = 'hostMem',
4
+ }
@@ -1,25 +1,27 @@
1
- export interface API_UI_I_UtilizationDataItems {
2
- label: string
3
- value: string
4
- }
1
+ import type { UI_T_UtilizationDataItemType } from '~/components/common/monitor/utilization/lib/models/types'
5
2
 
6
3
  export interface API_UI_I_UtilizationDataItem {
7
- items: API_UI_I_UtilizationDataItems[]
4
+ items: {
5
+ label: string
6
+ value: string
7
+ }[]
8
8
  }
9
9
 
10
10
  export interface API_UI_I_UtilizationData {
11
11
  [key: string]: API_UI_I_UtilizationDataItem
12
12
  }
13
13
 
14
- export interface UI_I_UtilizationDataItems {
15
- label: string
16
- value: string
17
- color: string
18
- }
19
-
20
14
  export interface UI_I_UtilizationDataItem {
21
15
  id: string
22
16
  isShow: boolean
23
17
  title: string
24
- data: UI_I_UtilizationDataItems[]
18
+ type: UI_T_UtilizationDataItemType
19
+ data: {
20
+ label: string
21
+ labelKey: string
22
+ value: string
23
+ color: string
24
+ colorKey: string
25
+ iconName: string
26
+ }[]
25
27
  }
@@ -0,0 +1 @@
1
+ export type UI_T_UtilizationDataItemType = 'cpu' | 'memory'
@@ -6,26 +6,84 @@ import type { UI_I_Localization } from '~/lib/models/interfaces'
6
6
  import { UI_E_UtilizationBlockCurrentKeys } from '~/components/common/monitor/utilization/lib/models/enums'
7
7
  import { getMetricsLocalizationByKey } from '~/components/common/monitor/lib/utils/localization'
8
8
 
9
+ const currentColorKey = (value: string): string => {
10
+ let result: string = ''
11
+ const valueLowerCase = value.toLowerCase()
12
+ if (valueLowerCase.includes('consumed'))
13
+ result = '--utilization-settings-consumed-info-color'
14
+ if (valueLowerCase.includes('demand'))
15
+ result = '--utilization-settings-demand-info-color'
16
+ if (valueLowerCase.includes('overhead'))
17
+ result = '--utilization-settings-overhead-info-color'
18
+ if (valueLowerCase.includes('granted'))
19
+ result = '--utilization-settings-granted-info-color'
20
+ if (valueLowerCase.includes('active'))
21
+ result = '--utilization-settings-active-info-color'
22
+ if (valueLowerCase.includes('swapped'))
23
+ result = '--utilization-settings-swapped-info-color'
24
+ if (valueLowerCase.includes('ballooned'))
25
+ result = '--utilization-settings-ballooned-info-color'
26
+ if (valueLowerCase.includes('unaccessed'))
27
+ result = '--utilization-settings-unaccessed-info-color'
28
+
29
+ return result
30
+ }
31
+
9
32
  export const constructApiData = (
10
- apiData: API_UI_I_UtilizationData,
33
+ apiData: API_UI_I_UtilizationData | null,
11
34
  localization: UI_I_Localization
12
35
  ): UI_I_UtilizationDataItem[] => {
36
+ if (!apiData) return []
37
+
13
38
  const result: UI_I_UtilizationDataItem[] = []
39
+ const utilizationPortletsShow = useLocalStorage('utilization-portlets-show')
40
+
14
41
  Object.keys(apiData).forEach((key) => {
42
+ let currentType = ''
43
+ if (key.includes('cpu')) currentType = 'cpu'
44
+ else if (key.includes('memory')) currentType = 'memory'
45
+
46
+ let isShow = true
47
+ if (utilizationPortletsShow) isShow = utilizationPortletsShow.includes(key)
48
+
15
49
  result.push({
50
+ isShow,
16
51
  id: key,
17
- isShow: true,
18
- title: localization.common[UI_E_UtilizationBlockCurrentKeys[key]],
52
+ title: localization.common[UI_E_UtilizationBlockCurrentKeys[key]] || key,
53
+ type: currentType,
19
54
  data: apiData[key].items.map((item) => {
20
- item.color = !item.label.toLowerCase().includes('capacity')
55
+ const color = ![
56
+ 'capacity',
57
+ 'limit',
58
+ 'vcpus',
59
+ 'usagepercent',
60
+ 'ballooncurrentbytes',
61
+ 'balloonmaxbytes',
62
+ 'entitlement',
63
+ ].find((item2) => item.label.toLowerCase().includes(item2))
21
64
  ? '#' +
22
65
  Math.floor(Math.random() * 0xffffff)
23
66
  .toString(16)
24
67
  .padStart(6, '0')
25
68
  : ''
26
- item.label = getMetricsLocalizationByKey(item.label)
69
+ const colorKey = currentColorKey(item.label)
70
+ const labelKey = item.label
71
+ const label = getMetricsLocalizationByKey(item.label)
72
+
73
+ const iconName =
74
+ labelKey.toLowerCase().includes('limit') ||
75
+ labelKey.toLowerCase().includes('entitlement')
76
+ ? 'arrow3'
77
+ : ''
27
78
 
28
- return item
79
+ return {
80
+ ...item,
81
+ color,
82
+ colorKey,
83
+ labelKey,
84
+ label,
85
+ iconName,
86
+ }
29
87
  }),
30
88
  })
31
89
  })
@@ -0,0 +1,195 @@
1
+ <template>
2
+ <div class="utilization flex flex-col h-full overflow-hidden">
3
+ <common-monitor-utilization-new-skeleton v-if="props.isLoading" />
4
+ <template v-else>
5
+ <div class="flex flex-wrap justify-between gap-4 mb-4 px-[6px]">
6
+ <h3 class="utilization-title text-[18px] font-[500]">
7
+ {{ localization.common.utilization }}
8
+ </h3>
9
+
10
+ <ui-button
11
+ id="utilization-settings-edit-button"
12
+ test-id="utilization-settings-edit-button"
13
+ variant="text"
14
+ class="utilization-settings-edit-button"
15
+ is-without-sizes
16
+ is-without-height
17
+ @click="isShowSettings = !isShowSettings"
18
+ >
19
+ <ui-icon name="settings" width="18px" height="18px" />
20
+ </ui-button>
21
+ <ui-popup-window
22
+ v-model="isShowSettings"
23
+ test-id="utilization-settings-select"
24
+ elem-id="utilization-settings-edit-button"
25
+ :margin-between-trigger="4"
26
+ width="144px"
27
+ left
28
+ >
29
+ <ul class="utilization-settings-items grid gap-2 p-2">
30
+ <li class="list-item">
31
+ <ui-checkbox
32
+ v-model="isCheckAllSettings"
33
+ :label-text="localization.common.all"
34
+ :disabled="isDisabledCheckAllSettings"
35
+ test-id="utilization-settings-all"
36
+ size="md"
37
+ @change="onCheckAllSettings"
38
+ />
39
+ </li>
40
+ <li v-for="item in allDataLocal" :key="item.id" class="list-item">
41
+ <ui-checkbox
42
+ v-model="item.isShow"
43
+ :test-id="`utilization-settings-${item.id}`"
44
+ :label-text="item.title"
45
+ size="md"
46
+ />
47
+ </li>
48
+ </ul>
49
+ </ui-popup-window>
50
+ </div>
51
+
52
+ <div class="utilization-info-block-flex-container overflow-auto">
53
+ <ui-portlet-sortable-view
54
+ :portlets="portlets"
55
+ :name="portletsPageName"
56
+ @change-container-size="onChangeContainerSize"
57
+ >
58
+ <template
59
+ #default="{ portletId, dragged, isOpen, draggedAny, isLast }"
60
+ >
61
+ <common-monitor-utilization-new-portlet
62
+ :all-data="allDataLocal"
63
+ :portlet-id="portletId"
64
+ :dragged="dragged"
65
+ :dragged-any="draggedAny"
66
+ :is-open="isOpen"
67
+ :is-last="isLast"
68
+ :not-single-column-block="notSingleColumnBlock"
69
+ @toggle-portlet="onTogglePortlet"
70
+ />
71
+ </template>
72
+ </ui-portlet-sortable-view>
73
+ </div>
74
+ </template>
75
+ </div>
76
+ </template>
77
+
78
+ <script setup lang="ts">
79
+ import type { UI_I_Portlet } from '~/node_modules/bfg-uikit/components/ui/portlet/lib/models/interfaces'
80
+ import { togglePortletFunc } from '~/node_modules/bfg-uikit/components/ui/portlet/lib/utils/utils'
81
+ import type { UI_I_UtilizationDataItem } from '~/components/common/monitor/utilization/lib/models/interfaces'
82
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
83
+ import { getPortletsLocal } from '~/components/common/monitor/utilization/new/lib/utils/newPortlet'
84
+
85
+ const allDataLocal = defineModel<UI_I_UtilizationDataItem[]>('all-data', {
86
+ required: true,
87
+ })
88
+ const props = defineProps<{
89
+ isLoading: boolean
90
+ }>()
91
+ const emits = defineEmits<{
92
+ (event: 'set-items-show-settings'): void
93
+ }>()
94
+
95
+ const localization = computed<UI_I_Localization>(() => useLocal())
96
+
97
+ const isShowSettings = ref<boolean>(false)
98
+
99
+ const isCheckAllSettings = ref<boolean>(false)
100
+ const isDisabledCheckAllSettings = computed<boolean>(() =>
101
+ allDataLocal.value.every((item) => item.isShow)
102
+ )
103
+ const onCheckAllSettings = () => {
104
+ allDataLocal.value = allDataLocal.value.map((item) => {
105
+ return {
106
+ ...item,
107
+ isShow: isCheckAllSettings.value,
108
+ }
109
+ })
110
+ }
111
+
112
+ const portletsPageName = 'utilization'
113
+
114
+ const portlets = ref<UI_I_Portlet[]>([])
115
+
116
+ let initialPortlets: UI_I_Portlet[] = []
117
+
118
+ const containerWidth = ref<number>(0)
119
+
120
+ const notSingleColumnBlock = computed<boolean>(
121
+ () =>
122
+ containerWidth.value > 1150 ||
123
+ (containerWidth.value < 720 && containerWidth.value > 500)
124
+ )
125
+
126
+ const onChangeContainerSize = (width: number): void => {
127
+ containerWidth.value = width
128
+ }
129
+
130
+ const getPortletData = (): void => {
131
+ portlets.value = getPortletsLocal(portletsPageName, initialPortlets)
132
+ }
133
+
134
+ const onTogglePortlet = (id: string): void => {
135
+ togglePortletFunc(id, portletsPageName, initialPortlets, getPortletData)
136
+ }
137
+
138
+ watch(
139
+ allDataLocal,
140
+ (newValue) => {
141
+ if (newValue.length) {
142
+ initialPortlets = []
143
+
144
+ newValue.forEach((item) => {
145
+ initialPortlets.push({
146
+ id: item.id,
147
+ list: 1,
148
+ isOpen: true,
149
+ })
150
+ })
151
+ getPortletData()
152
+ emits('set-items-show-settings')
153
+
154
+ const isNotAllSelected = newValue.some((item) => !item.isShow)
155
+ isCheckAllSettings.value = !isNotAllSelected
156
+ }
157
+ },
158
+ { immediate: true, deep: true }
159
+ )
160
+ </script>
161
+
162
+ <style>
163
+ :root {
164
+ --utilization-settings-trigger-btn-bg-color: #f6f7f8;
165
+ }
166
+ :root.dark-theme {
167
+ --utilization-settings-trigger-btn-bg-color: #283948;
168
+ }
169
+ </style>
170
+
171
+ <style scoped lang="scss">
172
+ .utilization {
173
+ padding-top: 16px;
174
+
175
+ &-title {
176
+ color: var(--title-form-first-color);
177
+ }
178
+
179
+ .utilization-settings-edit-button {
180
+ width: 34px;
181
+ height: 34px;
182
+ border: 1px solid var(--line-color);
183
+ color: var(--modal-icon);
184
+ background-color: var(--btn-default-outline-bg-color);
185
+ &:hover {
186
+ background-color: var(--utilization-settings-trigger-btn-bg-color);
187
+ }
188
+ }
189
+ .utilization-settings-items {
190
+ .list-item {
191
+ padding: 7px 9px;
192
+ }
193
+ }
194
+ }
195
+ </style>
@@ -0,0 +1,42 @@
1
+ <template>
2
+ <ui-portlet
3
+ v-if="selectedItem?.isShow"
4
+ :title="selectedItem.title"
5
+ :dragged="props.dragged"
6
+ :dragged-any="props.draggedAny"
7
+ :is-open="props.isOpen"
8
+ :portlet-id="props.portletId"
9
+ :is-last="props.isLast"
10
+ :not-single="!props.notSingleColumnBlock"
11
+ :test-id="`utilization-portlet-${props.portletId}`"
12
+ @toggle="emits('toggle-portlet', $event)"
13
+ >
14
+ <template #portletBody>
15
+ <common-monitor-utilization-info-block :info-data="selectedItem" />
16
+ </template>
17
+ </ui-portlet>
18
+ </template>
19
+
20
+ <script setup lang="ts">
21
+ import type { UI_I_UtilizationDataItem } from '~/components/common/monitor/utilization/lib/models/interfaces'
22
+
23
+ const props = defineProps<{
24
+ allData: UI_I_UtilizationDataItem[]
25
+ portletId: string
26
+ dragged: boolean
27
+ isOpen: boolean
28
+ isLast: boolean
29
+ draggedAny: boolean
30
+ notSingleColumnBlock: boolean
31
+ }>()
32
+
33
+ const emits = defineEmits<{
34
+ (event: 'toggle-portlet', id: string): void
35
+ }>()
36
+
37
+ const selectedItem = computed<UI_I_UtilizationDataItem | null>(
38
+ () => props.allData.find((item) => item.id === props.portletId) || null
39
+ )
40
+ </script>
41
+
42
+ <style scoped lang="scss"></style>
@@ -0,0 +1,120 @@
1
+ <template>
2
+ <div class="flex flex-col overflow-hidden h-full pb-4">
3
+ <div class="flex flex-wrap justify-between gap-4 px-[6px]">
4
+ <ui-skeleton-item width="160" height="22" />
5
+ <ui-skeleton-item width="34" height="34" border-radius="8" />
6
+ </div>
7
+ <div
8
+ class="utilization-portlet-skeleton-container h-full overflow-auto mt-4"
9
+ >
10
+ <div class="utilization-portlet-skeleton p-4">
11
+ <div class="flex justify-between">
12
+ <ui-skeleton-item width="80" height="20" />
13
+ <ui-icon
14
+ name="drag-area"
15
+ class="utilization-portlet-skeleton-drag-icon"
16
+ />
17
+ <ui-icon
18
+ class="utilization-portlet-skeleton-arrow-icon"
19
+ name="arrow"
20
+ width="20"
21
+ height="20"
22
+ />
23
+ </div>
24
+ <div
25
+ class="utilization-portlet-skeleton-progress-container grid mt-4 gap-2"
26
+ >
27
+ <ui-skeleton-item width="100%" height="20" />
28
+ <ui-skeleton-item width="100%" height="20" />
29
+ <ui-icon name="dotes-with-arrow" class="icon-dotes left" />
30
+ <ui-icon name="dotes-with-arrow" class="icon-dotes right" />
31
+ </div>
32
+ <div class="block-header-text-info flex justify-between mt-3 pb-4">
33
+ <ui-skeleton-item width="64" height="16" />
34
+ <ui-skeleton-item width="64" height="16" />
35
+ </div>
36
+ <div class="flex justify-between mt-4">
37
+ <ui-skeleton-item width="144" height="18" />
38
+ <ui-skeleton-item width="144" height="18" />
39
+ </div>
40
+ <div class="flex justify-between mt-4">
41
+ <ui-skeleton-item width="144" height="18" />
42
+ <ui-skeleton-item width="144" height="18" />
43
+ </div>
44
+ <div class="flex justify-between mt-4">
45
+ <ui-skeleton-item width="144" height="18" />
46
+ <ui-skeleton-item width="144" height="18" />
47
+ </div>
48
+ <div class="flex justify-between mt-4">
49
+ <ui-skeleton-item width="144" height="18" />
50
+ <ui-skeleton-item width="144" height="18" />
51
+ </div>
52
+ <div class="flex justify-between mt-4">
53
+ <ui-skeleton-item width="144" height="18" />
54
+ <ui-skeleton-item width="144" height="18" />
55
+ </div>
56
+ </div>
57
+ </div>
58
+ </div>
59
+ </template>
60
+
61
+ <script setup lang="ts"></script>
62
+
63
+ <style>
64
+ :root {
65
+ --utilization-settings-skeleton-block-bg: #ffffff;
66
+ --utilization-settings-skeleton-drag-icon: #e9ebed;
67
+ --utilization-settings-skeleton-toggle-icon: #213444;
68
+ --utilization-settings-skeleton-dotes-icon: #bdc3c7;
69
+ --utilization-settings-skeleton-progress-bottom-info-block-border: #e9ebeda3;
70
+ }
71
+ :root.dark-theme {
72
+ --utilization-settings-skeleton-block-bg: #334453;
73
+ --utilization-settings-skeleton-drag-icon: #e9ebed1f;
74
+ --utilization-settings-skeleton-toggle-icon: #e9eaec;
75
+ --utilization-settings-skeleton-dotes-icon: #bdc3c770;
76
+ --utilization-settings-skeleton-progress-bottom-info-block-border: #e9ebed1f;
77
+ }
78
+ </style>
79
+
80
+ <style scoped lang="scss">
81
+ .utilization-portlet-skeleton-container {
82
+ padding-left: 6px;
83
+ padding-right: 6px;
84
+
85
+ .utilization-portlet-skeleton {
86
+ background-color: var(--utilization-settings-skeleton-block-bg);
87
+ box-shadow: 0 1px 4px 0 #00000014;
88
+ border-radius: 8px;
89
+
90
+ .utilization-portlet-skeleton-drag-icon {
91
+ color: var(--utilization-settings-skeleton-drag-icon);
92
+ }
93
+ .utilization-portlet-skeleton-arrow-icon {
94
+ color: var(--utilization-settings-skeleton-toggle-icon);
95
+ }
96
+ .utilization-portlet-skeleton-progress-container {
97
+ height: 64px;
98
+ position: relative;
99
+
100
+ .icon-dotes {
101
+ color: var(--utilization-settings-skeleton-dotes-icon);
102
+ position: absolute;
103
+ top: -2px;
104
+
105
+ &.left {
106
+ left: 30%;
107
+ transform: rotateY(170deg);
108
+ }
109
+ &.right {
110
+ left: 70%;
111
+ }
112
+ }
113
+ }
114
+ .block-header-text-info {
115
+ border-bottom: 1px solid
116
+ var(--utilization-settings-skeleton-progress-bottom-info-block-border);
117
+ }
118
+ }
119
+ }
120
+ </style>
@@ -0,0 +1,7 @@
1
+ import type { UI_I_Portlet } from '~/node_modules/bfg-uikit/components/ui/portlet/lib/models/interfaces'
2
+
3
+ export const getPortletsLocal = (
4
+ portletsPageName: string,
5
+ initialPortlets: UI_I_Portlet[]
6
+ ): UI_I_Portlet[] =>
7
+ useLocalStorage(`${portletsPageName}-portlets-positions`) || initialPortlets
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <common-modals-rename
3
3
  :name="props.vmName"
4
+ :subtitle="props.vmName"
4
5
  :is-loading="props.isLoading"
5
6
  test-id="rename-vm"
6
7
  @hide="emits('hide')"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bfg-common",
3
3
  "private": false,
4
- "version": "1.6.64",
4
+ "version": "1.6.66",
5
5
  "scripts": {
6
6
  "build": "nuxt build",
7
7
  "dev": "nuxt dev --port=3002",
@@ -1,5 +0,0 @@
1
- <template>New</template>
2
-
3
- <script setup lang="ts"></script>
4
-
5
- <style scoped lang="scss"></style>