bfg-common 1.5.63 → 1.5.65

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 (193) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/localization/local_be.json +7 -1
  3. package/assets/localization/local_en.json +7 -1
  4. package/assets/localization/local_hy.json +7 -1
  5. package/assets/localization/local_kk.json +7 -1
  6. package/assets/localization/local_ru.json +7 -1
  7. package/assets/localization/local_zh.json +7 -1
  8. package/assets/scss/common/normalize.scss +339 -339
  9. package/components/atoms/TheIcon3.vue +50 -50
  10. package/components/atoms/collapse/CollapseNav.vue +165 -165
  11. package/components/atoms/dropdown/dropdown/Dropdown.vue +168 -168
  12. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  13. package/components/atoms/perPage/PerPage.vue +58 -58
  14. package/components/atoms/stack/StackBlock.vue +185 -185
  15. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  16. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  17. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  18. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  19. package/components/atoms/tooltip/Signpost.vue +227 -227
  20. package/components/common/browse/BrowseNew.vue +237 -237
  21. package/components/common/browse/BrowseOld.vue +217 -217
  22. package/components/common/browse/blocks/contents/Files.vue +37 -37
  23. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  24. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  25. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  26. package/components/common/context/Context.vue +111 -111
  27. package/components/common/context/lib/models/interfaces.ts +31 -31
  28. package/components/common/context/recursion/Recursion.vue +87 -87
  29. package/components/common/context/recursion/RecursionNew.vue +238 -238
  30. package/components/common/context/recursion/RecursionOld.vue +228 -228
  31. package/components/common/details/DetailsItem.vue +109 -109
  32. package/components/common/diagramMain/DiagramMain.vue +897 -897
  33. package/components/common/diagramMain/Header.vue +214 -214
  34. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  35. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  36. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  37. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +311 -311
  38. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  39. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/lib/utils/optionsActions.ts +32 -32
  40. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/lib/config/utils.ts +1040 -1040
  41. package/components/common/monitor/advanced/tools/lib/config/advancedToolbar.ts +146 -146
  42. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  43. package/components/common/pages/home/headline/Headline.vue +45 -45
  44. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  45. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  46. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  47. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  48. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  49. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  50. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  51. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  52. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  53. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  54. package/components/common/pages/packages/Packages.vue +208 -208
  55. package/components/common/pages/shortcuts/block/BlockNew.vue +96 -96
  56. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  57. package/components/common/portlets/customAttributes/Portlet.vue +667 -667
  58. package/components/common/portlets/tag/Portlet.vue +433 -433
  59. package/components/common/recursionTree/RecursionTree.vue +223 -223
  60. package/components/common/select/button/ButtonDropdown.vue +108 -108
  61. package/components/common/spiceConsole/Drawer.vue +370 -370
  62. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  63. package/components/common/split/horizontal/HorizontalOld.vue +337 -337
  64. package/components/common/split/vertical/Vertical.vue +160 -160
  65. package/components/common/tools/Actions.vue +202 -202
  66. package/components/common/vm/actions/add/Add.vue +785 -785
  67. package/components/common/vm/actions/add/New.vue +485 -429
  68. package/components/common/vm/actions/add/Old.vue +371 -371
  69. package/components/common/vm/actions/add/{FolderTreeView.vue → folderTreeView/FolderTreeView.vue} +72 -83
  70. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -0
  71. package/components/common/vm/actions/add/folderTreeView/Old.vue +50 -0
  72. package/components/common/vm/actions/add/lib/config/steps.ts +263 -263
  73. package/components/common/vm/actions/clone/Clone.vue +798 -798
  74. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -291
  75. package/components/common/vm/actions/clone/toTemplate/ToTemplate.vue +626 -626
  76. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  77. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +275 -275
  78. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +274 -274
  79. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +177 -177
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +698 -698
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +410 -410
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +319 -319
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +99 -99
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +164 -164
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +368 -368
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +232 -232
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +250 -250
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +286 -286
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  117. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  118. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  119. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  120. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  121. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  122. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  123. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  124. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  125. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  126. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  127. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  128. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  129. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  130. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  131. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  132. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  133. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  134. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  135. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  136. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  137. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  138. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  139. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  140. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  141. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  142. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  143. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  144. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  145. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  146. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  147. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  148. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  149. package/components/common/vm/actions/common/lib/utils/capabilities.ts +52 -52
  150. package/components/common/vm/actions/common/select/compatibility/Compatibility.vue +100 -162
  151. package/components/common/vm/actions/common/select/compatibility/New.vue +165 -0
  152. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -0
  153. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +134 -164
  154. package/components/common/vm/actions/common/select/computeResource/New.vue +141 -0
  155. package/components/common/vm/actions/common/select/computeResource/Old.vue +99 -0
  156. package/components/common/vm/actions/common/select/computeResource/treeView/New.vue +44 -0
  157. package/components/common/vm/actions/common/select/computeResource/treeView/Old.vue +48 -0
  158. package/components/common/vm/actions/common/select/computeResource/{TreeView.vue → treeView/TreeView.vue} +118 -124
  159. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  160. package/components/common/vm/actions/common/select/createType/New.vue +84 -84
  161. package/components/common/vm/actions/common/select/createType/Old.vue +70 -70
  162. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  163. package/components/common/vm/actions/common/select/name/Name.vue +167 -167
  164. package/components/common/vm/actions/common/select/name/New.vue +246 -143
  165. package/components/common/vm/actions/common/select/name/Old.vue +119 -119
  166. package/components/common/vm/actions/common/select/storage/{StorageOld.vue → Old.vue} +129 -129
  167. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  168. package/components/common/vm/actions/common/select/storage/new/New.vue +189 -159
  169. package/components/common/vm/actions/common/select/storage/new/lib/config/table.ts +326 -173
  170. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +6 -0
  171. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -0
  172. package/components/common/vm/actions/common/select/template/Template.vue +64 -64
  173. package/components/common/vm/actions/common/select/template/TemplateTreeView.vue +88 -88
  174. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  175. package/components/common/wizards/datastore/add/lib/config/steps.ts +138 -138
  176. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +60 -60
  177. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +92 -92
  178. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +105 -105
  179. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  180. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  181. package/components/common/wizards/vm/migrate/select/network/table/network/Network.vue +150 -150
  182. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  183. package/components/common/wizards/vm/migrate/select/priority/Priority.vue +43 -43
  184. package/composables/productNameLocal.ts +30 -30
  185. package/composables/useAppVersion.ts +21 -21
  186. package/package.json +1 -1
  187. package/plugins/date.ts +233 -233
  188. package/plugins/directives.ts +24 -24
  189. package/public/spice-console/lib/images/bitmap.js +203 -203
  190. package/public/spice-console/network/spicechannel.js +383 -383
  191. package/store/main/mutations.ts +7 -7
  192. package/store/main/state.ts +7 -7
  193. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -1,164 +1,134 @@
1
- <template>
2
- <div class="select-compute-resource">
3
- <atoms-alert
4
- v-show="errors.length"
5
- status="alert-danger"
6
- test-id="computed-resource-alert"
7
- :items="errors"
8
- @remove="removeValidationErrors"
9
- />
10
-
11
- <div class="tree-view-wrap mt-1">
12
- <common-vm-actions-common-select-compute-resource-tree-view
13
- v-model="selectedNode"
14
- :data-center="props.dataCenter"
15
- :compute-resource="props.computeResource"
16
- :compute-resource-tree="props.computeResourceTree"
17
- @get-compute-resource-tree="emits('get-compute-resource-tree', $event)"
18
- @show-compute-resource-tree="
19
- emits('show-compute-resource-tree', $event)
20
- "
21
- @select-compute-resource-tree="
22
- emits('select-compute-resource-tree', $event)
23
- "
24
- @clear-compute-resource-tree="
25
- emits('clear-compute-resource-tree', $event)
26
- "
27
- />
28
- </div>
29
-
30
- <div class="compatibility-wrap">
31
- <p class="compatibility">
32
- {{ localization.inventorySummary.compatibility }}
33
- </p>
34
- <div class="compatibility-message flex-align-center">
35
- <template v-if="compatibilityText[1]">
36
- <atoms-the-icon
37
- v-show="!compatibilityText[0]"
38
- width="20"
39
- name="exclamation-circle"
40
- />
41
- <div v-show="compatibilityText[0]" class="icon-status-ok" />
42
- <span>{{ compatibilityText[1] }}</span>
43
- </template>
44
- </div>
45
- </div>
46
- </div>
47
- </template>
48
-
49
- <script setup lang="ts">
50
- import type { UI_I_Localization } from '~/lib/models/interfaces'
51
- import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
52
-
53
- const props = defineProps<{
54
- computeResourceSubmit: null | Function
55
- dataCenter: UI_I_TreeNode | null
56
- computeResource: UI_I_TreeNode
57
- computeResourceTree: UI_I_TreeNode[]
58
- modelValue: UI_I_TreeNode | null
59
- }>()
60
-
61
- const emits = defineEmits<{
62
- (event: 'submit', value: UI_I_TreeNode): void
63
- (event: 'update:model-value', value: UI_I_TreeNode | null): void
64
- (
65
- event: 'get-compute-resource-tree',
66
- value: { id: string | number; cb: () => void }
67
- ): void
68
- (event: 'show-compute-resource-tree', value: UI_I_TreeNode): void
69
- (event: 'select-compute-resource-tree', value: UI_I_TreeNode): void
70
- (event: 'clear-compute-resource-tree'): void
71
- }>()
72
-
73
- const localization = computed<UI_I_Localization>(() => useLocal())
74
-
75
- watch(
76
- () => props.computeResourceSubmit,
77
- (newValue: null | Function) => {
78
- newValue && submit(newValue)
79
- }
80
- )
81
- const submit = (cb: Function): void => {
82
- if (
83
- !selectedNode.value ||
84
- !compatibilityText.value[1] ||
85
- selectedNode.value.type === 'datacenter' ||
86
- selectedNode.value.type === 'folder' ||
87
- (selectedNode.value.type === 'cluster' && !selectedNode.value.nodes.length)
88
- ) {
89
- showValidationErrors(
90
- localization.value.common.specifyValidClusterOrHostDestination
91
- )
92
- cb(false)
93
- return
94
- }
95
-
96
- removeValidationErrors()
97
- emits('submit', selectedNode.value)
98
- cb(true)
99
- }
100
-
101
- const errors = ref<string[]>([])
102
- const showValidationErrors = (text: string): void => {
103
- errors.value = [text]
104
- }
105
- const removeValidationErrors = (): void => {
106
- errors.value = []
107
- }
108
-
109
- const selectedNode = defineModel<UI_I_TreeNode | null>('model')
110
-
111
- const compatibilityText = computed<[boolean, string]>(() => {
112
- let res: [boolean, string] = [
113
- true,
114
- localization.value.common.compatibilityChecksSucceeded,
115
- ]
116
-
117
- if (!selectedNode.value) res = [true, '']
118
-
119
- if (
120
- !['cluster', 'host', 'resource_pool'].includes(selectedNode.value?.type)
121
- ) {
122
- res = [false, localization.value.common.selectValidClusterOrHostDestination]
123
- }
124
- if (selectedNode.value?.type === 'cluster') {
125
- const hasHost = !!selectedNode.value.nodes.length
126
- if (!hasHost) {
127
- res = [false, localization.value.common.clusterNotContainAnyHosts]
128
- }
129
- }
130
-
131
- if (selectedNode.value?.type === 'host') {
132
- if (selectedNode.value.state === 'Error') {
133
- // TODO check Maintenance Mode
134
- res = [false, localization.value.common.selectedHostDisconnectedMaintenanceMode]
135
- }
136
- }
137
-
138
- return res
139
- })
140
- </script>
141
-
142
- <style scoped lang="scss">
143
- .select-compute-resource {
144
- .tree-view-wrap {
145
- max-height: 300px;
146
- min-height: 200px;
147
- position: relative;
148
- border: 1px solid #000;
149
- padding: 5px 0 0 5px;
150
- overflow: auto;
151
- }
152
-
153
- .compatibility-wrap {
154
- padding-top: 10px;
155
-
156
- .compatibility-message {
157
- border: 1px solid #000;
158
- padding-top: 5px;
159
- padding-left: 5px;
160
- overflow: auto;
161
- }
162
- }
163
- }
164
- </style>
1
+ <template>
2
+ <common-vm-actions-common-select-compute-resource-new
3
+ v-if="isNewView"
4
+ v-model="selectedNode"
5
+ :data-center="props.dataCenter"
6
+ :compute-resource="props.computeResource"
7
+ :compute-resource-tree="props.computeResourceTree"
8
+ :errors="errors"
9
+ :compatibility-text="compatibilityText"
10
+ @get-compute-resource-tree="emits('get-compute-resource-tree', $event)"
11
+ @show-compute-resource-tree="emits('show-compute-resource-tree', $event)"
12
+ @select-compute-resource-tree="
13
+ emits('select-compute-resource-tree', $event)
14
+ "
15
+ @clear-compute-resource-tree="emits('clear-compute-resource-tree')"
16
+ @remove-validation-errors="onRemoveValidationErrors"
17
+ />
18
+ <common-vm-actions-common-select-compute-resource-old
19
+ v-else
20
+ v-model="selectedNode"
21
+ :data-center="props.dataCenter"
22
+ :compute-resource="props.computeResource"
23
+ :compute-resource-tree="props.computeResourceTree"
24
+ :errors="errors"
25
+ :compatibility-text="compatibilityText"
26
+ @get-compute-resource-tree="emits('get-compute-resource-tree', $event)"
27
+ @show-compute-resource-tree="emits('show-compute-resource-tree', $event)"
28
+ @select-compute-resource-tree="
29
+ emits('select-compute-resource-tree', $event)
30
+ "
31
+ @clear-compute-resource-tree="emits('clear-compute-resource-tree')"
32
+ @remove-validation-errors="onRemoveValidationErrors"
33
+ />
34
+ </template>
35
+
36
+ <script setup lang="ts">
37
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
38
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
39
+
40
+ const props = defineProps<{
41
+ computeResourceSubmit: null | Function
42
+ dataCenter: UI_I_TreeNode | null
43
+ computeResource: UI_I_TreeNode
44
+ computeResourceTree: UI_I_TreeNode[]
45
+ }>()
46
+
47
+ const emits = defineEmits<{
48
+ (event: 'submit', value: UI_I_TreeNode): void
49
+ (
50
+ event: 'get-compute-resource-tree',
51
+ value: { id: string | number; cb: () => void }
52
+ ): void
53
+ (event: 'show-compute-resource-tree', value: UI_I_TreeNode): void
54
+ (event: 'select-compute-resource-tree', value: UI_I_TreeNode): void
55
+ (event: 'clear-compute-resource-tree'): void
56
+ }>()
57
+
58
+ const { $store }: any = useNuxtApp()
59
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
60
+
61
+ const localization = computed<UI_I_Localization>(() => useLocal())
62
+
63
+ watch(
64
+ () => props.computeResourceSubmit,
65
+ (newValue: null | Function) => {
66
+ newValue && submit(newValue)
67
+ }
68
+ )
69
+ const submit = (cb: Function): void => {
70
+ if (
71
+ !selectedNode.value ||
72
+ // !compatibilityText.value[1] ||
73
+ !compatibilityText.value[0] ||
74
+ selectedNode.value.type === 'datacenter' ||
75
+ selectedNode.value.type === 'folder' ||
76
+ (selectedNode.value.type === 'cluster' && !selectedNode.value.nodes.length)
77
+ ) {
78
+ showValidationErrors(
79
+ localization.value.common.specifyValidClusterOrHostDestination
80
+ )
81
+ cb(false)
82
+ return
83
+ }
84
+
85
+ onRemoveValidationErrors()
86
+ emits('submit', selectedNode.value)
87
+ cb(true)
88
+ }
89
+
90
+ const errors = ref<string[]>([])
91
+ const showValidationErrors = (text: string): void => {
92
+ errors.value = [text]
93
+ }
94
+ const onRemoveValidationErrors = (): void => {
95
+ errors.value = []
96
+ }
97
+
98
+ const selectedNode = defineModel<UI_I_TreeNode | null>('modelValue')
99
+
100
+ const compatibilityText = computed<[boolean, string]>(() => {
101
+ let res: [boolean, string] = [
102
+ true,
103
+ localization.value.common.compatibilityChecksSucceeded,
104
+ ]
105
+
106
+ if (!selectedNode.value) res = [true, '']
107
+
108
+ if (
109
+ !['cluster', 'host', 'resource_pool'].includes(selectedNode.value?.type)
110
+ ) {
111
+ res = [false, localization.value.common.selectValidClusterOrHostDestination]
112
+ }
113
+ if (selectedNode.value?.type === 'cluster') {
114
+ const hasHost = !!selectedNode.value.nodes.length
115
+ if (!hasHost) {
116
+ res = [false, localization.value.common.clusterNotContainAnyHosts]
117
+ }
118
+ }
119
+
120
+ if (selectedNode.value?.type === 'host') {
121
+ if (selectedNode.value.state === 'Error') {
122
+ // TODO check Maintenance Mode
123
+ res = [
124
+ false,
125
+ localization.value.common.selectedHostDisconnectedMaintenanceMode,
126
+ ]
127
+ }
128
+ }
129
+
130
+ return res
131
+ })
132
+ </script>
133
+
134
+ <style scoped lang="scss"></style>
@@ -0,0 +1,141 @@
1
+ <template>
2
+ <div class="select-compute-resource">
3
+ <Teleport to="#compute-resource-alert-wrapper">
4
+ <ui-alert
5
+ v-show="props.errors.length"
6
+ status="alert-danger"
7
+ :messages="props.errors"
8
+ test-id="computed-resource-alert"
9
+ class="errors-alert"
10
+ @remove="emits('remove-validation-errors')"
11
+ />
12
+ </Teleport>
13
+
14
+ <div class="tree-view-wrap">
15
+ <common-vm-actions-common-select-compute-resource-tree-view
16
+ v-model="selectedNode"
17
+ :data-center="props.dataCenter"
18
+ :compute-resource="props.computeResource"
19
+ :compute-resource-tree="props.computeResourceTree"
20
+ @get-compute-resource-tree="emits('get-compute-resource-tree', $event)"
21
+ @show-compute-resource-tree="
22
+ emits('show-compute-resource-tree', $event)
23
+ "
24
+ @select-compute-resource-tree="
25
+ emits('select-compute-resource-tree', $event)
26
+ "
27
+ @clear-compute-resource-tree="emits('clear-compute-resource-tree')"
28
+ />
29
+ </div>
30
+
31
+ <div class="compatibility-wrap">
32
+ <p class="compatibility">
33
+ {{ localization.inventorySummary.compatibility }}
34
+ </p>
35
+ <div class="compatibility-message flex-align-center">
36
+ <ui-skeleton-item v-if="!selectedNode" width="160px" height="16px" />
37
+ <template v-else-if="props.compatibilityText[1]">
38
+ <ui-icon
39
+ v-show="!props.compatibilityText[0]"
40
+ name="error"
41
+ width="16"
42
+ height="16"
43
+ />
44
+
45
+ <ui-icon
46
+ v-show="props.compatibilityText[0]"
47
+ name="success-fill"
48
+ width="16"
49
+ height="16"
50
+ />
51
+ <span class="compatibility-message-description">{{
52
+ props.compatibilityText[1]
53
+ }}</span>
54
+ </template>
55
+ </div>
56
+ </div>
57
+ </div>
58
+ </template>
59
+
60
+ <script setup lang="ts">
61
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
62
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
63
+
64
+ const selectedNode = defineModel<UI_I_TreeNode>('modelValue', {
65
+ required: true,
66
+ })
67
+
68
+ const props = defineProps<{
69
+ dataCenter: UI_I_TreeNode | null
70
+ computeResource: UI_I_TreeNode
71
+ computeResourceTree: UI_I_TreeNode[]
72
+ errors: string[]
73
+ compatibilityText: [boolean, string]
74
+ }>()
75
+
76
+ const emits = defineEmits<{
77
+ (
78
+ event: 'get-compute-resource-tree',
79
+ value: { id: string | number; cb: () => void }
80
+ ): void
81
+ (event: 'show-compute-resource-tree', value: UI_I_TreeNode): void
82
+ (event: 'select-compute-resource-tree', value: UI_I_TreeNode): void
83
+ (event: 'clear-compute-resource-tree'): void
84
+ (event: 'remove-validation-errors'): void
85
+ }>()
86
+
87
+ const localization = computed<UI_I_Localization>(() => useLocal())
88
+ </script>
89
+
90
+ <style>
91
+ :root {
92
+ --select-compute-resource-border-color: #e9ebed;
93
+ --select-compute-resource-location-bg-color: #ffffff;
94
+ --select-compute-resource-compatibility-title-color: #4d5d69;
95
+ --select-compute-resource-compatibility-description-color: #4d5d69;
96
+ }
97
+ :root.dark-theme {
98
+ --select-compute-resource-border-color: #e9ebed1f;
99
+ --select-compute-resource-location-bg-color: transparent;
100
+ --select-compute-resource-compatibility-title-color: #e9eaec;
101
+ --select-compute-resource-compatibility-description-color: #9da6ad;
102
+ }
103
+ </style>
104
+ <style scoped lang="scss">
105
+ .select-compute-resource {
106
+ .tree-view-wrap {
107
+ height: 170px;
108
+ border-radius: 8px;
109
+ border: 1px solid var(--select-compute-resource-border-color);
110
+ padding: 12px;
111
+ background-color: var(--select-compute-resource-location-bg-color);
112
+ margin: 16px 0 24px;
113
+ overflow: auto;
114
+
115
+ :deep(.tree-content) {
116
+ padding: 0 !important;
117
+ }
118
+ }
119
+
120
+ .compatibility-wrap {
121
+ .compatibility {
122
+ font-size: 16px;
123
+ font-weight: 500;
124
+ color: var(--select-compute-resource-compatibility-title-color);
125
+ margin-bottom: 16px;
126
+ }
127
+ .compatibility-message {
128
+ border-radius: 8px;
129
+ border: 1px solid var(--select-compute-resource-border-color);
130
+ padding: 12px;
131
+ background-color: var(--select-compute-resource-location-bg-color);
132
+ gap: 12px;
133
+
134
+ .compatibility-message-description {
135
+ font-size: 13px;
136
+ color: var(--select-compute-resource-compatibility-description-color);
137
+ }
138
+ }
139
+ }
140
+ }
141
+ </style>
@@ -0,0 +1,99 @@
1
+ <template>
2
+ <div class="select-compute-resource">
3
+ <atoms-alert
4
+ v-show="props.errors.length"
5
+ status="alert-danger"
6
+ test-id="computed-resource-alert"
7
+ :items="props.errors"
8
+ @remove="emits('remove-validation-errors')"
9
+ />
10
+
11
+ <div class="tree-view-wrap mt-1">
12
+ <common-vm-actions-common-select-compute-resource-tree-view
13
+ v-model="selectedNode"
14
+ :data-center="props.dataCenter"
15
+ :compute-resource="props.computeResource"
16
+ :compute-resource-tree="props.computeResourceTree"
17
+ @get-compute-resource-tree="emits('get-compute-resource-tree', $event)"
18
+ @show-compute-resource-tree="
19
+ emits('show-compute-resource-tree', $event)
20
+ "
21
+ @select-compute-resource-tree="
22
+ emits('select-compute-resource-tree', $event)
23
+ "
24
+ @clear-compute-resource-tree="emits('clear-compute-resource-tree')"
25
+ />
26
+ </div>
27
+
28
+ <div class="compatibility-wrap">
29
+ <p class="compatibility">
30
+ {{ localization.inventorySummary.compatibility }}
31
+ </p>
32
+ <div class="compatibility-message flex-align-center">
33
+ <template v-if="props.compatibilityText[1]">
34
+ <atoms-the-icon
35
+ v-show="!props.compatibilityText[0]"
36
+ width="20"
37
+ name="exclamation-circle"
38
+ />
39
+ <div v-show="props.compatibilityText[0]" class="icon-status-ok" />
40
+ <span>{{ props.compatibilityText[1] }}</span>
41
+ </template>
42
+ </div>
43
+ </div>
44
+ </div>
45
+ </template>
46
+
47
+ <script setup lang="ts">
48
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
49
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
50
+
51
+ const selectedNode = defineModel<UI_I_TreeNode>('modelValue', {
52
+ required: true,
53
+ })
54
+
55
+ const props = defineProps<{
56
+ dataCenter: UI_I_TreeNode | null
57
+ computeResource: UI_I_TreeNode
58
+ computeResourceTree: UI_I_TreeNode[]
59
+ errors: string[]
60
+ compatibilityText: [boolean, string]
61
+ }>()
62
+
63
+ const emits = defineEmits<{
64
+ (
65
+ event: 'get-compute-resource-tree',
66
+ value: { id: string | number; cb: () => void }
67
+ ): void
68
+ (event: 'show-compute-resource-tree', value: UI_I_TreeNode): void
69
+ (event: 'select-compute-resource-tree', value: UI_I_TreeNode): void
70
+ (event: 'clear-compute-resource-tree'): void
71
+ (event: 'remove-validation-errors'): void
72
+ }>()
73
+
74
+ const localization = computed<UI_I_Localization>(() => useLocal())
75
+ </script>
76
+
77
+ <style scoped lang="scss">
78
+ .select-compute-resource {
79
+ .tree-view-wrap {
80
+ max-height: 300px;
81
+ min-height: 200px;
82
+ position: relative;
83
+ border: 1px solid #000;
84
+ padding: 5px 0 0 5px;
85
+ overflow: auto;
86
+ }
87
+
88
+ .compatibility-wrap {
89
+ padding-top: 10px;
90
+
91
+ .compatibility-message {
92
+ border: 1px solid #000;
93
+ padding-top: 5px;
94
+ padding-left: 5px;
95
+ overflow: auto;
96
+ }
97
+ }
98
+ }
99
+ </style>
@@ -0,0 +1,44 @@
1
+ <template>
2
+ <div class="tree-view">
3
+ <ui-tree
4
+ :nodes="props.computeResourceTree"
5
+ :expand-all="false"
6
+ :is-loading="props.loading"
7
+ @toggle-node="onShowNodes"
8
+ @select-node="emits('select-node', $event)"
9
+ >
10
+ <template #content="{ node }">
11
+ <div class="flex-align-center">
12
+ <span :class="['node-icon', node.iconClassName]"></span>
13
+ <span class="node-name">{{ node.name }}</span>
14
+ </div>
15
+ </template>
16
+ </ui-tree>
17
+ </div>
18
+ </template>
19
+
20
+ <script setup lang="ts">
21
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
22
+
23
+ const props = defineProps<{
24
+ computeResourceTree: UI_I_TreeNode[]
25
+ loading: boolean
26
+ }>()
27
+
28
+ const emits = defineEmits<{
29
+ (
30
+ event: 'show-nodes',
31
+ value: {
32
+ node: UI_I_TreeNode
33
+ cb: () => void
34
+ }
35
+ ): void
36
+ (event: 'select-node', value: UI_I_TreeNode): void
37
+ }>()
38
+
39
+ const onShowNodes = (node: UI_I_TreeNode) => {
40
+ emits('show-nodes', { node, cb: (): void => {} })
41
+ }
42
+ </script>
43
+
44
+ <style scoped lang="scss"></style>
@@ -0,0 +1,48 @@
1
+ <template>
2
+ <div class="tree-view">
3
+ <atoms-loader-pre-loader
4
+ v-show="props.loading"
5
+ id="loader"
6
+ class="absolute-center tree-view__loading"
7
+ :show="true"
8
+ />
9
+ <common-recursion-tree
10
+ :nodes="props.computeResourceTree"
11
+ class="recursion-tree"
12
+ @get-nodes="emits('show-nodes', $event)"
13
+ @select-node="emits('select-node', $event)"
14
+ @contextmenu.prevent
15
+ />
16
+ </div>
17
+ </template>
18
+
19
+ <script setup lang="ts">
20
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
21
+
22
+ const props = defineProps<{
23
+ computeResourceTree: UI_I_TreeNode[]
24
+ loading: boolean
25
+ }>()
26
+
27
+ const emits = defineEmits<{
28
+ (event: 'show-nodes', value: {
29
+ node: UI_I_TreeNode
30
+ cb: () => void
31
+ }): void
32
+ (event: 'select-node', value: UI_I_TreeNode): void
33
+ }>()
34
+ </script>
35
+
36
+ <style scoped lang="scss">
37
+ .tree-view {
38
+ &__loading {
39
+ :deep(.spinner.spinner-inverse) {
40
+ position: static;
41
+ width: 45px;
42
+ height: 45px;
43
+ min-width: 45px;
44
+ min-height: 45px;
45
+ }
46
+ }
47
+ }
48
+ </style>