bfg-common 1.5.473 → 1.5.474

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 (156) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  3. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  4. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  5. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  6. package/assets/localization/local_be.json +1 -2
  7. package/assets/localization/local_en.json +1 -2
  8. package/assets/localization/local_hy.json +1 -2
  9. package/assets/localization/local_kk.json +1 -2
  10. package/assets/localization/local_ru.json +1 -2
  11. package/assets/localization/local_zh.json +1 -2
  12. package/assets/scss/clarity/local_ar.json +1 -2
  13. package/components/atoms/TheIcon3.vue +50 -50
  14. package/components/atoms/collapse/CollapseNav.vue +170 -170
  15. package/components/atoms/perPage/PerPage.vue +58 -58
  16. package/components/atoms/table/dataGrid/DataGrid.vue +1709 -1709
  17. package/components/atoms/table/dataGrid/DataGridPagination.vue +97 -97
  18. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  19. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  20. package/components/atoms/window/Window.vue +458 -458
  21. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  22. package/components/common/context/lib/models/interfaces.ts +33 -33
  23. package/components/common/diagramMain/modals/lib/config/networkModal.ts +398 -398
  24. package/components/common/diagramMain/modals/lib/config/portModal.ts +251 -251
  25. package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
  26. package/components/common/diagramMain/port/Port.vue +580 -580
  27. package/components/common/layout/theHeader/helpMenu/About.vue +79 -82
  28. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +3 -7
  29. package/components/common/layout/theHeader/helpMenu/aboutOld/AboutOld.vue +2 -3
  30. package/components/common/pages/backups/DetailView.vue +52 -52
  31. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  32. package/components/common/pages/backups/modals/createBackup/configuration/Configuration.vue +29 -29
  33. package/components/common/pages/backups/modals/createBackup/configuration/backupWindow/BackupWindow.vue +26 -26
  34. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/MaxBandwidth.vue +66 -66
  35. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
  36. package/components/common/pages/backups/modals/createBackup/configuration/strategy/Strategy.vue +35 -35
  37. package/components/common/pages/backups/modals/createBackup/datastores/tableView/TableView.vue +95 -95
  38. package/components/common/pages/backups/modals/createBackup/general/General.vue +141 -141
  39. package/components/common/pages/backups/modals/createBackup/lib/config/strategyOptions.ts +12 -12
  40. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  41. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  42. package/components/common/pages/backups/modals/restore/disks/Disks.vue +27 -27
  43. package/components/common/pages/backups/modals/restore/disks/tableView/lib/config/table.ts +117 -117
  44. package/components/common/pages/backups/modals/restore/name/Name.vue +166 -166
  45. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  46. package/components/common/pages/backups/modals/restore/networks/Networks.vue +67 -67
  47. package/components/common/pages/backups/modals/restore/networks/table/Table.vue +214 -214
  48. package/components/common/pages/backups/modals/restore/types/lib/config/typeOptions.ts +25 -25
  49. package/components/common/pages/backups/tools/Tools.vue +75 -75
  50. package/components/common/pages/backups/tools/lib/config/tabs.ts +36 -36
  51. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  52. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  53. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  54. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  55. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  56. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  57. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  58. package/components/common/select/radio/RadioGroup.vue +137 -137
  59. package/components/common/spiceConsole/Drawer.vue +392 -392
  60. package/components/common/spiceConsole/SpiceConsole.vue +184 -184
  61. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  62. package/components/common/tools/Actions.vue +207 -207
  63. package/components/common/treeView/TreeView.vue +52 -52
  64. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  65. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +4 -1
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusOld.vue +1 -1
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +1 -0
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +1 -0
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +1 -0
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +84 -78
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +368 -368
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/coresPerSocket/CoresPerSocketNew.vue +4 -1
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/hotPlug/HotPlugNew.vue +4 -1
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/maxCpu/MaxCpuNew.vue +4 -1
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/model/ModelNew.vue +4 -1
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/SharesNew.vue +4 -1
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/LimitNew.vue +4 -1
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/hotPlug/HotPlugNew.vue +4 -1
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +2 -0
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/cache/CacheNew.vue +4 -1
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/file/File.vue +1 -0
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/file/FileNew.vue +5 -1
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/limitIops/LimitIopsNew.vue +4 -1
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationNew.vue +4 -1
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/maximumSize/MaximumSize.vue +1 -0
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/maximumSize/MaximumSizeNew.vue +5 -1
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeNew.vue +4 -1
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/provisioning/ProvisioningNew.vue +4 -1
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +4 -1
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/adapterType/AdapterTypeNew.vue +4 -1
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/Table.vue +99 -99
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +4 -1
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +69 -66
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +4 -1
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +1 -0
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +49 -42
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +4 -1
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/typeSelection/TypeSelectionNew.vue +4 -1
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/inputDevices/InputDevicesNew.vue +4 -1
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/reservation/ReservationNew.vue +4 -1
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/model/ModelNew.vue +4 -1
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplaysNew.vue +4 -1
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +4 -1
  112. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  113. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/DelayNew.vue +4 -1
  114. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  115. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +4 -1
  116. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +4 -1
  117. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +174 -174
  118. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +4 -1
  119. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +16 -4
  120. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +4 -1
  121. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +4 -1
  122. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +4 -1
  123. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  124. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +4 -1
  125. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  126. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +4 -1
  127. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  128. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +4 -1
  129. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  130. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +143 -143
  131. package/components/common/vm/actions/common/select/computeResource/New.vue +184 -184
  132. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +131 -131
  133. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  134. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  135. package/components/common/vm/actions/common/select/name/Name.vue +197 -197
  136. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  137. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  138. package/components/common/vm/actions/common/select/storage/new/New.vue +320 -320
  139. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  140. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  141. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  142. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  143. package/components/common/vm/actions/register/Register.vue +267 -267
  144. package/components/common/vm/actions/register/lib/config/steps.ts +86 -86
  145. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  146. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  147. package/composables/productNameLocal.ts +30 -30
  148. package/composables/useAppVersion.ts +21 -21
  149. package/package.json +1 -1
  150. package/plugins/date.ts +233 -233
  151. package/plugins/panelStates.ts +70 -70
  152. package/plugins/text.ts +59 -59
  153. package/public/spice-console/lib/images/bitmap.js +203 -203
  154. package/public/spice-console/network/spicechannel.js +440 -440
  155. package/store/main/mutations.ts +7 -7
  156. package/store/main/state.ts +7 -7
@@ -1,143 +1,143 @@
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
- (event: 'has-errors', value: boolean): void
57
- }>()
58
-
59
- const { $store }: any = useNuxtApp()
60
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
61
-
62
- const localization = computed<UI_I_Localization>(() => useLocal())
63
-
64
- watch(
65
- () => props.computeResourceSubmit,
66
- (newValue: null | Function) => {
67
- newValue && submit(newValue)
68
- }
69
- )
70
- const submit = (cb: Function): void => {
71
- if (
72
- !selectedNode.value ||
73
- // !compatibilityText.value[1] ||
74
- compatibilityText.value[0] !== 1 ||
75
- selectedNode.value.type === 'datacenter' ||
76
- selectedNode.value.type === 'folder' ||
77
- (selectedNode.value.type === 'cluster' && !selectedNode.value.nodes.length)
78
- ) {
79
- showValidationErrors(
80
- localization.value.common.specifyValidClusterOrHostDestination
81
- )
82
- cb(false)
83
- return
84
- }
85
-
86
- onRemoveValidationErrors()
87
- emits('submit', selectedNode.value)
88
- cb(true)
89
- }
90
-
91
- const errors = ref<string[]>([])
92
- const showValidationErrors = (text: string): void => {
93
- errors.value = [text]
94
- }
95
- const onRemoveValidationErrors = (): void => {
96
- errors.value = []
97
- }
98
- watch(
99
- errors,
100
- (newValue) => {
101
- emits('has-errors', !newValue.length)
102
- },
103
- { immediate: true, deep: true }
104
- )
105
-
106
- const selectedNode = defineModel<UI_I_TreeNode | null>('modelValue')
107
-
108
- const compatibilityText = computed<[number, string]>(() => {
109
- if (!selectedNode.value)
110
- return [0, localization.value.vmWizard.noDestinationComputeResourceSelected]
111
-
112
- let res: [number, string] = [
113
- 1,
114
- localization.value.common.compatibilityChecksSucceeded,
115
- ]
116
-
117
- if (
118
- !['cluster', 'host', 'resource_pool'].includes(selectedNode.value?.type)
119
- ) {
120
- res = [2, localization.value.common.selectValidClusterOrHostDestination]
121
- }
122
- if (selectedNode.value?.type === 'cluster') {
123
- const hasHost = !!selectedNode.value.nodes.length
124
- if (!hasHost) {
125
- res = [2, localization.value.common.clusterNotContainAnyHosts]
126
- }
127
- }
128
-
129
- if (selectedNode.value?.type === 'host') {
130
- if (selectedNode.value.state === 'Error') {
131
- // TODO check Maintenance Mode
132
- res = [
133
- 2,
134
- localization.value.common.selectedHostDisconnectedMaintenanceMode,
135
- ]
136
- }
137
- }
138
-
139
- return res
140
- })
141
- </script>
142
-
143
- <style scoped lang="scss"></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
+ (event: 'has-errors', value: boolean): void
57
+ }>()
58
+
59
+ const { $store }: any = useNuxtApp()
60
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
61
+
62
+ const localization = computed<UI_I_Localization>(() => useLocal())
63
+
64
+ watch(
65
+ () => props.computeResourceSubmit,
66
+ (newValue: null | Function) => {
67
+ newValue && submit(newValue)
68
+ }
69
+ )
70
+ const submit = (cb: Function): void => {
71
+ if (
72
+ !selectedNode.value ||
73
+ // !compatibilityText.value[1] ||
74
+ compatibilityText.value[0] !== 1 ||
75
+ selectedNode.value.type === 'datacenter' ||
76
+ selectedNode.value.type === 'folder' ||
77
+ (selectedNode.value.type === 'cluster' && !selectedNode.value.nodes.length)
78
+ ) {
79
+ showValidationErrors(
80
+ localization.value.common.specifyValidClusterOrHostDestination
81
+ )
82
+ cb(false)
83
+ return
84
+ }
85
+
86
+ onRemoveValidationErrors()
87
+ emits('submit', selectedNode.value)
88
+ cb(true)
89
+ }
90
+
91
+ const errors = ref<string[]>([])
92
+ const showValidationErrors = (text: string): void => {
93
+ errors.value = [text]
94
+ }
95
+ const onRemoveValidationErrors = (): void => {
96
+ errors.value = []
97
+ }
98
+ watch(
99
+ errors,
100
+ (newValue) => {
101
+ emits('has-errors', !newValue.length)
102
+ },
103
+ { immediate: true, deep: true }
104
+ )
105
+
106
+ const selectedNode = defineModel<UI_I_TreeNode | null>('modelValue')
107
+
108
+ const compatibilityText = computed<[number, string]>(() => {
109
+ if (!selectedNode.value)
110
+ return [0, localization.value.vmWizard.noDestinationComputeResourceSelected]
111
+
112
+ let res: [number, string] = [
113
+ 1,
114
+ localization.value.common.compatibilityChecksSucceeded,
115
+ ]
116
+
117
+ if (
118
+ !['cluster', 'host', 'resource_pool'].includes(selectedNode.value?.type)
119
+ ) {
120
+ res = [2, localization.value.common.selectValidClusterOrHostDestination]
121
+ }
122
+ if (selectedNode.value?.type === 'cluster') {
123
+ const hasHost = !!selectedNode.value.nodes.length
124
+ if (!hasHost) {
125
+ res = [2, localization.value.common.clusterNotContainAnyHosts]
126
+ }
127
+ }
128
+
129
+ if (selectedNode.value?.type === 'host') {
130
+ if (selectedNode.value.state === 'Error') {
131
+ // TODO check Maintenance Mode
132
+ res = [
133
+ 2,
134
+ localization.value.common.selectedHostDisconnectedMaintenanceMode,
135
+ ]
136
+ }
137
+ }
138
+
139
+ return res
140
+ })
141
+ </script>
142
+
143
+ <style scoped lang="scss"></style>
@@ -1,184 +1,184 @@
1
- <template>
2
- <div class="select-compute-resource pb-4">
3
- <Teleport to="#compute-resource-alert-wrapper">
4
- <ui-alert
5
- v-show="props.errors.length"
6
- :messages="props.errors"
7
- status="alert-danger"
8
- test-id="computed-resource-alert"
9
- class="errors-alert"
10
- size="md"
11
- @hide="emits('remove-validation-errors')"
12
- />
13
- </Teleport>
14
-
15
- <div class="tree-view-wrap">
16
- <common-vm-actions-common-select-compute-resource-tree-view
17
- v-model="selectedNode"
18
- :data-center="props.dataCenter"
19
- :compute-resource="props.computeResource"
20
- :compute-resource-tree="props.computeResourceTree"
21
- @get-compute-resource-tree="emits('get-compute-resource-tree', $event)"
22
- @show-compute-resource-tree="
23
- emits('show-compute-resource-tree', $event)
24
- "
25
- @select-compute-resource-tree="
26
- emits('select-compute-resource-tree', $event)
27
- "
28
- @clear-compute-resource-tree="emits('clear-compute-resource-tree')"
29
- />
30
- </div>
31
-
32
- <div class="compatibility-wrap">
33
- <p class="compatibility">
34
- {{ localization.inventorySummary.compatibility }}
35
- </p>
36
- <div class="compatibility-message flex-align-start">
37
- <ui-skeleton-item
38
- v-if="!props.computeResourceTree"
39
- width="160px"
40
- height="16px"
41
- />
42
- <template v-else-if="props.compatibilityText[1]">
43
- <ui-icon
44
- v-show="props.compatibilityText[0] === 2"
45
- name="error"
46
- width="16"
47
- height="16"
48
- class="icon-compatibility-alert"
49
- />
50
-
51
- <ui-icon
52
- v-show="props.compatibilityText[0] === 1"
53
- name="success-fill"
54
- width="16"
55
- height="16"
56
- class="icon-compatibility-alert"
57
- />
58
- <span
59
- :class="[
60
- 'compatibility-message-description',
61
- { 'not-selected': props.compatibilityText[0] === 0 },
62
- ]"
63
- >{{ props.compatibilityText[1] }}</span
64
- >
65
- </template>
66
- </div>
67
- </div>
68
- </div>
69
- </template>
70
-
71
- <script setup lang="ts">
72
- import type { UI_I_Localization } from '~/lib/models/interfaces'
73
- import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
74
-
75
- const selectedNode = defineModel<UI_I_TreeNode>('modelValue', {
76
- required: true,
77
- })
78
-
79
- const props = defineProps<{
80
- dataCenter: UI_I_TreeNode | null
81
- computeResource: UI_I_TreeNode
82
- computeResourceTree: UI_I_TreeNode[]
83
- errors: string[]
84
- compatibilityText: [number, string]
85
- }>()
86
-
87
- const emits = defineEmits<{
88
- (
89
- event: 'get-compute-resource-tree',
90
- value: { id: string | number; cb: () => void }
91
- ): void
92
- (event: 'show-compute-resource-tree', value: UI_I_TreeNode): void
93
- (event: 'select-compute-resource-tree', value: UI_I_TreeNode): void
94
- (event: 'clear-compute-resource-tree'): void
95
- (event: 'remove-validation-errors'): void
96
- }>()
97
-
98
- const localization = computed<UI_I_Localization>(() => useLocal())
99
- </script>
100
-
101
- <style>
102
- :root {
103
- --select-compute-resource-border-color: #e9ebed;
104
- --select-compute-resource-location-bg-color: #ffffff;
105
- --select-compute-resource-compatibility-title-color: #4d5d69;
106
- --select-compute-resource-compatibilityd-empty-escription-color: #9da6ad;
107
- --select-compute-resource-compatibility-description-color: #4d5d69;
108
- }
109
- :root.dark-theme {
110
- --select-compute-resource-border-color: #e9ebed1f;
111
- --select-compute-resource-location-bg-color: #1b2a371f;
112
- --select-compute-resource-compatibility-title-color: #e9eaec;
113
- --select-compute-resource-compatibilityd-empty-escription-color: #9da6ad;
114
- --select-compute-resource-compatibility-description-color: #e9eaec;
115
- }
116
- </style>
117
- <style scoped lang="scss">
118
- .select-compute-resource {
119
- .tree-view-wrap {
120
- height: 182px;
121
- max-height: 240px;
122
- border-radius: 8px;
123
- border: 1px solid var(--select-compute-resource-border-color);
124
- padding: 8px;
125
- background-color: var(--select-compute-resource-location-bg-color);
126
- margin: 16px 0 24px;
127
- overflow: auto;
128
-
129
- :deep(.skeleton-tree) {
130
- padding: 4px 8px;
131
-
132
- .skeleton-tree-row:last-child {
133
- display: none;
134
- }
135
- }
136
- :deep(.tree-content) {
137
- padding: 0 !important;
138
-
139
- .node-wrapper {
140
- border-radius: 4px;
141
-
142
- .node-name {
143
- font-size: 12px;
144
- margin-left: 8px;
145
- overflow: hidden;
146
- text-overflow: ellipsis;
147
- white-space: nowrap;
148
- }
149
- }
150
- }
151
- }
152
-
153
- .compatibility-wrap {
154
- .compatibility {
155
- font-size: 16px;
156
- font-weight: 500;
157
- color: var(--select-compute-resource-compatibility-title-color);
158
- margin-bottom: 16px;
159
- }
160
- .compatibility-message {
161
- border-radius: 8px;
162
- border: 1px solid var(--select-compute-resource-border-color);
163
- padding: 12px;
164
- background-color: var(--select-compute-resource-location-bg-color);
165
- gap: 10px;
166
-
167
- .icon-compatibility-alert {
168
- min-width: 16px;
169
- min-height: 16px;
170
- }
171
- .compatibility-message-description {
172
- font-size: 13px;
173
- color: var(--select-compute-resource-compatibility-description-color);
174
-
175
- &.not-selected {
176
- color: var(
177
- --select-compute-resource-compatibilityd-empty-escription-color
178
- );
179
- }
180
- }
181
- }
182
- }
183
- }
184
- </style>
1
+ <template>
2
+ <div class="select-compute-resource pb-4">
3
+ <Teleport to="#compute-resource-alert-wrapper">
4
+ <ui-alert
5
+ v-show="props.errors.length"
6
+ :messages="props.errors"
7
+ status="alert-danger"
8
+ test-id="computed-resource-alert"
9
+ class="errors-alert"
10
+ size="md"
11
+ @hide="emits('remove-validation-errors')"
12
+ />
13
+ </Teleport>
14
+
15
+ <div class="tree-view-wrap">
16
+ <common-vm-actions-common-select-compute-resource-tree-view
17
+ v-model="selectedNode"
18
+ :data-center="props.dataCenter"
19
+ :compute-resource="props.computeResource"
20
+ :compute-resource-tree="props.computeResourceTree"
21
+ @get-compute-resource-tree="emits('get-compute-resource-tree', $event)"
22
+ @show-compute-resource-tree="
23
+ emits('show-compute-resource-tree', $event)
24
+ "
25
+ @select-compute-resource-tree="
26
+ emits('select-compute-resource-tree', $event)
27
+ "
28
+ @clear-compute-resource-tree="emits('clear-compute-resource-tree')"
29
+ />
30
+ </div>
31
+
32
+ <div class="compatibility-wrap">
33
+ <p class="compatibility">
34
+ {{ localization.inventorySummary.compatibility }}
35
+ </p>
36
+ <div class="compatibility-message flex-align-start">
37
+ <ui-skeleton-item
38
+ v-if="!props.computeResourceTree"
39
+ width="160px"
40
+ height="16px"
41
+ />
42
+ <template v-else-if="props.compatibilityText[1]">
43
+ <ui-icon
44
+ v-show="props.compatibilityText[0] === 2"
45
+ name="error"
46
+ width="16"
47
+ height="16"
48
+ class="icon-compatibility-alert"
49
+ />
50
+
51
+ <ui-icon
52
+ v-show="props.compatibilityText[0] === 1"
53
+ name="success-fill"
54
+ width="16"
55
+ height="16"
56
+ class="icon-compatibility-alert"
57
+ />
58
+ <span
59
+ :class="[
60
+ 'compatibility-message-description',
61
+ { 'not-selected': props.compatibilityText[0] === 0 },
62
+ ]"
63
+ >{{ props.compatibilityText[1] }}</span
64
+ >
65
+ </template>
66
+ </div>
67
+ </div>
68
+ </div>
69
+ </template>
70
+
71
+ <script setup lang="ts">
72
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
73
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
74
+
75
+ const selectedNode = defineModel<UI_I_TreeNode>('modelValue', {
76
+ required: true,
77
+ })
78
+
79
+ const props = defineProps<{
80
+ dataCenter: UI_I_TreeNode | null
81
+ computeResource: UI_I_TreeNode
82
+ computeResourceTree: UI_I_TreeNode[]
83
+ errors: string[]
84
+ compatibilityText: [number, string]
85
+ }>()
86
+
87
+ const emits = defineEmits<{
88
+ (
89
+ event: 'get-compute-resource-tree',
90
+ value: { id: string | number; cb: () => void }
91
+ ): void
92
+ (event: 'show-compute-resource-tree', value: UI_I_TreeNode): void
93
+ (event: 'select-compute-resource-tree', value: UI_I_TreeNode): void
94
+ (event: 'clear-compute-resource-tree'): void
95
+ (event: 'remove-validation-errors'): void
96
+ }>()
97
+
98
+ const localization = computed<UI_I_Localization>(() => useLocal())
99
+ </script>
100
+
101
+ <style>
102
+ :root {
103
+ --select-compute-resource-border-color: #e9ebed;
104
+ --select-compute-resource-location-bg-color: #ffffff;
105
+ --select-compute-resource-compatibility-title-color: #4d5d69;
106
+ --select-compute-resource-compatibilityd-empty-escription-color: #9da6ad;
107
+ --select-compute-resource-compatibility-description-color: #4d5d69;
108
+ }
109
+ :root.dark-theme {
110
+ --select-compute-resource-border-color: #e9ebed1f;
111
+ --select-compute-resource-location-bg-color: #1b2a371f;
112
+ --select-compute-resource-compatibility-title-color: #e9eaec;
113
+ --select-compute-resource-compatibilityd-empty-escription-color: #9da6ad;
114
+ --select-compute-resource-compatibility-description-color: #e9eaec;
115
+ }
116
+ </style>
117
+ <style scoped lang="scss">
118
+ .select-compute-resource {
119
+ .tree-view-wrap {
120
+ height: 182px;
121
+ max-height: 240px;
122
+ border-radius: 8px;
123
+ border: 1px solid var(--select-compute-resource-border-color);
124
+ padding: 8px;
125
+ background-color: var(--select-compute-resource-location-bg-color);
126
+ margin: 16px 0 24px;
127
+ overflow: auto;
128
+
129
+ :deep(.skeleton-tree) {
130
+ padding: 4px 8px;
131
+
132
+ .skeleton-tree-row:last-child {
133
+ display: none;
134
+ }
135
+ }
136
+ :deep(.tree-content) {
137
+ padding: 0 !important;
138
+
139
+ .node-wrapper {
140
+ border-radius: 4px;
141
+
142
+ .node-name {
143
+ font-size: 12px;
144
+ margin-left: 8px;
145
+ overflow: hidden;
146
+ text-overflow: ellipsis;
147
+ white-space: nowrap;
148
+ }
149
+ }
150
+ }
151
+ }
152
+
153
+ .compatibility-wrap {
154
+ .compatibility {
155
+ font-size: 16px;
156
+ font-weight: 500;
157
+ color: var(--select-compute-resource-compatibility-title-color);
158
+ margin-bottom: 16px;
159
+ }
160
+ .compatibility-message {
161
+ border-radius: 8px;
162
+ border: 1px solid var(--select-compute-resource-border-color);
163
+ padding: 12px;
164
+ background-color: var(--select-compute-resource-location-bg-color);
165
+ gap: 10px;
166
+
167
+ .icon-compatibility-alert {
168
+ min-width: 16px;
169
+ min-height: 16px;
170
+ }
171
+ .compatibility-message-description {
172
+ font-size: 13px;
173
+ color: var(--select-compute-resource-compatibility-description-color);
174
+
175
+ &.not-selected {
176
+ color: var(
177
+ --select-compute-resource-compatibilityd-empty-escription-color
178
+ );
179
+ }
180
+ }
181
+ }
182
+ }
183
+ }
184
+ </style>