bfg-common 1.4.777 → 1.4.779

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 (170) hide show
  1. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  2. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  3. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  4. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  5. package/assets/localization/local_be.json +1 -1
  6. package/assets/localization/local_en.json +1 -1
  7. package/assets/localization/local_hy.json +1 -1
  8. package/assets/localization/local_kk.json +1 -1
  9. package/assets/localization/local_ru.json +1 -1
  10. package/assets/localization/local_zh.json +1 -1
  11. package/assets/scss/clarity/local_ar.json +1 -1
  12. package/assets/scss/common/normalize.scss +361 -361
  13. package/components/atoms/TheIcon3.vue +50 -50
  14. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  15. package/components/atoms/stack/StackBlock.vue +185 -185
  16. package/components/atoms/table/dataGrid/DataGrid.vue +1703 -1703
  17. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  18. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +91 -91
  19. package/components/common/browse/BrowseNew.vue +237 -237
  20. package/components/common/browse/BrowseOld.vue +217 -217
  21. package/components/common/browse/blocks/contents/Files.vue +37 -37
  22. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  23. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  24. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  25. package/components/common/browse/blocks/lib/models/types.ts +1 -1
  26. package/components/common/browse/lib/models/interfaces.ts +5 -5
  27. package/components/common/context/Context.vue +111 -111
  28. package/components/common/context/lib/models/interfaces.ts +30 -30
  29. package/components/common/context/recursion/Recursion.vue +87 -87
  30. package/components/common/context/recursion/RecursionNew.vue +237 -237
  31. package/components/common/context/recursion/RecursionOld.vue +227 -227
  32. package/components/common/diagramMain/Header.vue +211 -211
  33. package/components/common/diagramMain/adapter/AdapterItems.vue +61 -61
  34. package/components/common/diagramMain/lib/config/initial.ts +50 -50
  35. package/components/common/diagramMain/lib/models/types.ts +21 -21
  36. package/components/common/diagramMain/lib/utils/utils.ts +331 -331
  37. package/components/common/diagramMain/modals/ManagePhysicalAdaptersModal.vue +330 -330
  38. package/components/common/diagramMain/modals/editSettings/ConfirmTeamingSettingsModal.vue +40 -40
  39. package/components/common/diagramMain/modals/editSettings/EditSettings.vue +497 -497
  40. package/components/common/diagramMain/modals/editSettings/EditSettingsModal.vue +812 -812
  41. package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +214 -214
  42. package/components/common/diagramMain/modals/editSettings/tabs/Security.vue +189 -189
  43. package/components/common/diagramMain/modals/editSettings/tabs/SwitchProperties.vue +163 -163
  44. package/components/common/diagramMain/modals/editSettings/tabs/TeamingFailover.vue +175 -175
  45. package/components/common/diagramMain/modals/editSettings/tabs/TrafficShaping.vue +398 -398
  46. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +346 -346
  47. package/components/common/diagramMain/modals/editSettings/tabs/port/PortProperties.vue +205 -205
  48. package/components/common/diagramMain/modals/lib/config/diagramConfig.ts +23 -23
  49. package/components/common/diagramMain/modals/lib/config/initial.ts +180 -180
  50. package/components/common/diagramMain/modals/lib/config/vmKernelAdapter.ts +90 -90
  51. package/components/common/diagramMain/modals/lib/mappers/mappers.ts +87 -87
  52. package/components/common/diagramMain/modals/lib/utils/index.ts +24 -24
  53. package/components/common/diagramMain/modals/migrateVmkernelAdapter/lib/config/steps.ts +114 -114
  54. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/ConnectionSettings.vue +169 -169
  55. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/SelectVmkernelAdapter.vue +159 -159
  56. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/common.ts +14 -14
  57. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/connectionSettings.ts +137 -137
  58. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/selectVmkernelAdapter.ts +52 -52
  59. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/validations.ts +19 -19
  60. package/components/common/diagramMain/port/Ports.vue +47 -47
  61. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  62. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  63. package/components/common/mainNavigationPanel/MainNavigationPanel.vue +151 -151
  64. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +300 -300
  65. package/components/common/modals/confirmByInput/ConfirmByInput.vue +206 -206
  66. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  67. package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModal.vue +250 -250
  68. package/components/common/pages/home/StatusContent.vue +49 -49
  69. package/components/common/pages/home/headline/Headline.vue +44 -44
  70. package/components/common/pages/home/headline/HeadlineNew.vue +71 -71
  71. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  72. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  73. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  74. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  75. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  76. package/components/common/pages/home/widgets/hosts/HostsNew.vue +100 -100
  77. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  78. package/components/common/pages/home/widgets/services/lib/config/config.ts +108 -108
  79. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  80. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  81. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  82. package/components/common/pages/packages/Packages.vue +208 -208
  83. package/components/common/recursionTree/RecursionTree.vue +223 -223
  84. package/components/common/select/button/ButtonDropdown.vue +108 -108
  85. package/components/common/spiceConsole/Drawer.vue +370 -370
  86. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  87. package/components/common/split/horizontal/HorizontalNew.vue +376 -376
  88. package/components/common/split/horizontal/HorizontalOld.vue +337 -337
  89. package/components/common/split/vertical/Vertical.vue +160 -160
  90. package/components/common/vm/actions/add/Add.vue +621 -621
  91. package/components/common/vm/actions/clone/Clone.vue +639 -639
  92. package/components/common/vm/actions/clone/lib/config/steps.ts +129 -129
  93. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +271 -271
  94. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +271 -271
  95. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +174 -174
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +2 -2
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +161 -161
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +165 -165
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +357 -357
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +281 -281
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  117. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +27 -14
  118. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  119. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  120. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  121. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  122. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  123. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  124. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  125. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  126. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  127. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  128. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  129. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  130. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  131. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  132. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  133. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  134. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  135. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  136. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  137. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  138. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  139. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  140. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  141. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  142. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  143. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  144. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  145. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  146. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  147. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  148. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  149. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  150. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  151. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  152. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  153. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  154. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  155. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  156. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  157. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  158. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  159. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  160. package/components/common/wizards/datastore/add/lib/config/steps.ts +138 -138
  161. package/composables/productNameLocal.ts +30 -30
  162. package/composables/useAppVersion.ts +21 -21
  163. package/package.json +1 -1
  164. package/plugins/date.ts +233 -233
  165. package/plugins/recursion.ts +311 -311
  166. package/public/spice-console/lib/images/bitmap.js +203 -203
  167. package/public/spice-console/network/spicechannel.js +383 -383
  168. package/store/main/mutations.ts +7 -7
  169. package/store/main/state.ts +7 -7
  170. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -1,219 +1,219 @@
1
- <template>
2
- <div>
3
- <common-browse
4
- v-model:selected-file="selectedFile"
5
- v-model:selected-file-type="selectedFileType"
6
- :show="props.show"
7
- :nodes="props.nodes"
8
- :files="files"
9
- :info="selectedNodeInfo"
10
- :file-types="props.fileTypes"
11
- :browse-loading="browseLoading"
12
- @get-nodes="onGetCurrentDirNodes"
13
- @select-node="onSelectNode"
14
- @submit="onSubmit"
15
- @hide="emits('hide')"
16
- />
17
- </div>
18
- </template>
19
-
20
- <script lang="ts" setup>
21
- import type { UI_I_FileTreeNode } from '~/components/lib/models/interfaces'
22
- import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
23
- import type { UI_I_FolderOrFileTreePayload } from '~/lib/models/store/storage/interfaces'
24
- import type { UI_I_CurrentDirNodesArguments } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/lib/models/interfaces'
25
- import type { UI_I_Localization } from '~/lib/models/interfaces'
26
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
27
- import type { UI_I_FileInfo } from '~/components/common/browse/lib/models/interfaces'
28
-
29
- const props = defineProps<{
30
- show: boolean
31
- nodes: UI_I_FileTreeNode[]
32
- files: UI_I_FileTreeNode[]
33
- fileTypes?: UI_I_OptionItem[]
34
- }>()
35
- const emits = defineEmits<{
36
- (event: 'hide'): void
37
- (event: 'submit', value: UI_I_FileTreeNode | null): void
38
- (event: 'get-storage', value: UI_I_TablePayload): void
39
- (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
40
- (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
41
- (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
42
- }>()
43
-
44
- const { $recursion } = useNuxtApp()
45
-
46
- const localization = computed<UI_I_Localization>(() => useLocal())
47
-
48
- const selectedFileType = ref<string | null>(null)
49
- watch(
50
- selectedFileType,
51
- (newValue) => {
52
- if (newValue === null || selectedFile.value === null) return
53
-
54
- const isExist = files.value.includes(selectedFile.value)
55
- if (!isExist) selectedFile.value = null
56
- },
57
- { immediate: true, deep: true }
58
- )
59
- watch(
60
- () => props.fileTypes,
61
- (newValue) => {
62
- if (newValue?.length) selectedFileType.value = newValue[0].value
63
- },
64
- { immediate: true, deep: true }
65
- )
66
-
67
- const getStorage = (): void => {
68
- const payload: UI_I_TablePayload = {
69
- pagination: {
70
- page: 1,
71
- pageSize: 100,
72
- },
73
- sortBy: null,
74
- type: 'datastore',
75
- schema: 'full',
76
- }
77
-
78
- emits('get-storage', payload)
79
- }
80
- getStorage()
81
-
82
- const getFileNodes = (payload: UI_I_FolderOrFileTreePayload): void => {
83
- emits('get-folders-or-files', payload)
84
- }
85
-
86
- const files = computed<UI_I_FileTreeNode[]>(() => {
87
- if (!selectedNode.value) return []
88
-
89
- const files: UI_I_FileTreeNode[] = props.files
90
- if (selectedFileType.value === 'all' || selectedFileType.value === null)
91
- return files
92
-
93
- let type = 3
94
- if (selectedFileType.value === 'iso') type = 2
95
-
96
- return files.filter((file) => file.provisioned_type === type)
97
- })
98
-
99
- const getRootNodeById = (id: string): UI_I_FileTreeNode | null => {
100
- let result = null
101
- props.nodes.forEach((node) => {
102
- const findNode =
103
- node.id === id ? node : $recursion.find(node.nodes, id, 'id', 'nodes')
104
-
105
- findNode && (result = node)
106
- })
107
-
108
- return result
109
- }
110
- const onGetCurrentDirNodes = async ({
111
- node,
112
- cb,
113
- select = false,
114
- type = 'folder',
115
- }: UI_I_CurrentDirNodesArguments): Promise<void> => {
116
- if (!node) return
117
-
118
- const isRootNode = props.nodes?.some((item) => item.id === node.id)
119
-
120
- if (!select && (isRootNode || node.nodesShow)) {
121
- emits('show-datastore-child', node)
122
- cb && cb()
123
- return
124
- }
125
-
126
- const rootNode = getRootNodeById(node.id)
127
- if (!rootNode) return
128
-
129
- const payload: UI_I_FolderOrFileTreePayload = {
130
- type,
131
- id: rootNode.id,
132
- path: node.path,
133
- merge: true,
134
- show: !select,
135
- }
136
-
137
- await getFileNodes(payload)
138
- cb && cb()
139
- }
140
-
141
- const selectedNode = ref<UI_I_FileTreeNode | null>(null)
142
- const selectedFile = ref<UI_I_FileTreeNode | null>(null)
143
- const selectedNodeInfo = computed<UI_I_FileInfo[] | null>(() => {
144
- const node = selectedFile.value || selectedNode.value
145
- if (!node) return null
146
-
147
- const result = [
148
- {
149
- type: 'text',
150
- title: localization.value.common.name,
151
- value: node.name || '',
152
- },
153
- {
154
- type: 'size',
155
- title: localization.value.common.available,
156
- value: node.size || 0,
157
- },
158
- ]
159
-
160
- if (node.type !== 4) {
161
- const modified = node.modified_time || 0
162
- result.push({
163
- type: 'date',
164
- title: localization.value.common.modified,
165
- value: +modified * 1000,
166
- })
167
- }
168
-
169
- return result
170
- })
171
-
172
- // TODO найти решение получше
173
- const browseLoading = ref<boolean>(false)
174
- const onSelectNode = (node: UI_I_FileTreeNode): void => {
175
- selectedNode.value = node
176
- selectedFile.value = null
177
-
178
- onGetCurrentDirNodes({ node, select: true, type: 'file' })
179
-
180
- emits('get-active-device-child', node)
181
-
182
- setTimeout(() => {
183
- browseLoading.value = true
184
- }, 0)
185
- }
186
- watch(
187
- files,
188
- () => {
189
- browseLoading.value = false
190
- },
191
- { immediate: true, deep: true }
192
- )
193
-
194
- const onSubmit = (): void => {
195
- emits('submit', selectedFile.value)
196
- emits('hide')
197
- }
198
-
199
- let helper = false
200
- watch(
201
- () => props.nodes,
202
- (newValue: UI_I_FileTreeNode[]) => {
203
- if (helper || !newValue.length) return
204
- newValue.forEach((node) => {
205
- getFileNodes({
206
- id: node.id,
207
- path: `${node.id}:/`,
208
- type: 'folder',
209
- show: false,
210
- merge: false,
211
- })
212
- })
213
- helper = true
214
- },
215
- { immediate: true }
216
- )
217
- </script>
218
-
219
- <style lang="scss" scoped></style>
1
+ <template>
2
+ <div>
3
+ <common-browse
4
+ v-model:selected-file="selectedFile"
5
+ v-model:selected-file-type="selectedFileType"
6
+ :show="props.show"
7
+ :nodes="props.nodes"
8
+ :files="files"
9
+ :info="selectedNodeInfo"
10
+ :file-types="props.fileTypes"
11
+ :browse-loading="browseLoading"
12
+ @get-nodes="onGetCurrentDirNodes"
13
+ @select-node="onSelectNode"
14
+ @submit="onSubmit"
15
+ @hide="emits('hide')"
16
+ />
17
+ </div>
18
+ </template>
19
+
20
+ <script lang="ts" setup>
21
+ import type { UI_I_FileTreeNode } from '~/components/lib/models/interfaces'
22
+ import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
23
+ import type { UI_I_FolderOrFileTreePayload } from '~/lib/models/store/storage/interfaces'
24
+ import type { UI_I_CurrentDirNodesArguments } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/lib/models/interfaces'
25
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
26
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
27
+ import type { UI_I_FileInfo } from '~/components/common/browse/lib/models/interfaces'
28
+
29
+ const props = defineProps<{
30
+ show: boolean
31
+ nodes: UI_I_FileTreeNode[]
32
+ files: UI_I_FileTreeNode[]
33
+ fileTypes?: UI_I_OptionItem[]
34
+ }>()
35
+ const emits = defineEmits<{
36
+ (event: 'hide'): void
37
+ (event: 'submit', value: UI_I_FileTreeNode | null): void
38
+ (event: 'get-storage', value: UI_I_TablePayload): void
39
+ (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
40
+ (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
41
+ (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
42
+ }>()
43
+
44
+ const { $recursion } = useNuxtApp()
45
+
46
+ const localization = computed<UI_I_Localization>(() => useLocal())
47
+
48
+ const selectedFileType = ref<string | null>(null)
49
+ watch(
50
+ selectedFileType,
51
+ (newValue) => {
52
+ if (newValue === null || selectedFile.value === null) return
53
+
54
+ const isExist = files.value.includes(selectedFile.value)
55
+ if (!isExist) selectedFile.value = null
56
+ },
57
+ { immediate: true, deep: true }
58
+ )
59
+ watch(
60
+ () => props.fileTypes,
61
+ (newValue) => {
62
+ if (newValue?.length) selectedFileType.value = newValue[0].value
63
+ },
64
+ { immediate: true, deep: true }
65
+ )
66
+
67
+ const getStorage = (): void => {
68
+ const payload: UI_I_TablePayload = {
69
+ pagination: {
70
+ page: 1,
71
+ pageSize: 100,
72
+ },
73
+ sortBy: null,
74
+ type: 'datastore',
75
+ schema: 'full',
76
+ }
77
+
78
+ emits('get-storage', payload)
79
+ }
80
+ getStorage()
81
+
82
+ const getFileNodes = (payload: UI_I_FolderOrFileTreePayload): void => {
83
+ emits('get-folders-or-files', payload)
84
+ }
85
+
86
+ const files = computed<UI_I_FileTreeNode[]>(() => {
87
+ if (!selectedNode.value) return []
88
+
89
+ const files: UI_I_FileTreeNode[] = props.files
90
+ if (selectedFileType.value === 'all' || selectedFileType.value === null)
91
+ return files
92
+
93
+ let type = 3
94
+ if (selectedFileType.value === 'iso') type = 2
95
+
96
+ return files.filter((file) => file.provisioned_type === type)
97
+ })
98
+
99
+ const getRootNodeById = (id: string): UI_I_FileTreeNode | null => {
100
+ let result = null
101
+ props.nodes.forEach((node) => {
102
+ const findNode =
103
+ node.id === id ? node : $recursion.find(node.nodes, id, 'id', 'nodes')
104
+
105
+ findNode && (result = node)
106
+ })
107
+
108
+ return result
109
+ }
110
+ const onGetCurrentDirNodes = async ({
111
+ node,
112
+ cb,
113
+ select = false,
114
+ type = 'folder',
115
+ }: UI_I_CurrentDirNodesArguments): Promise<void> => {
116
+ if (!node) return
117
+
118
+ const isRootNode = props.nodes?.some((item) => item.id === node.id)
119
+
120
+ if (!select && (isRootNode || node.nodesShow)) {
121
+ emits('show-datastore-child', node)
122
+ cb && cb()
123
+ return
124
+ }
125
+
126
+ const rootNode = getRootNodeById(node.id)
127
+ if (!rootNode) return
128
+
129
+ const payload: UI_I_FolderOrFileTreePayload = {
130
+ type,
131
+ id: rootNode.id,
132
+ path: node.path,
133
+ merge: true,
134
+ show: !select,
135
+ }
136
+
137
+ await getFileNodes(payload)
138
+ cb && cb()
139
+ }
140
+
141
+ const selectedNode = ref<UI_I_FileTreeNode | null>(null)
142
+ const selectedFile = ref<UI_I_FileTreeNode | null>(null)
143
+ const selectedNodeInfo = computed<UI_I_FileInfo[] | null>(() => {
144
+ const node = selectedFile.value || selectedNode.value
145
+ if (!node) return null
146
+
147
+ const result = [
148
+ {
149
+ type: 'text',
150
+ title: localization.value.common.name,
151
+ value: node.name || '',
152
+ },
153
+ {
154
+ type: 'size',
155
+ title: localization.value.common.available,
156
+ value: node.size || 0,
157
+ },
158
+ ]
159
+
160
+ if (node.type !== 4) {
161
+ const modified = node.modified_time || 0
162
+ result.push({
163
+ type: 'date',
164
+ title: localization.value.common.modified,
165
+ value: +modified * 1000,
166
+ })
167
+ }
168
+
169
+ return result
170
+ })
171
+
172
+ // TODO найти решение получше
173
+ const browseLoading = ref<boolean>(false)
174
+ const onSelectNode = (node: UI_I_FileTreeNode): void => {
175
+ selectedNode.value = node
176
+ selectedFile.value = null
177
+
178
+ onGetCurrentDirNodes({ node, select: true, type: 'file' })
179
+
180
+ emits('get-active-device-child', node)
181
+
182
+ setTimeout(() => {
183
+ browseLoading.value = true
184
+ }, 0)
185
+ }
186
+ watch(
187
+ files,
188
+ () => {
189
+ browseLoading.value = false
190
+ },
191
+ { immediate: true, deep: true }
192
+ )
193
+
194
+ const onSubmit = (): void => {
195
+ emits('submit', selectedFile.value)
196
+ emits('hide')
197
+ }
198
+
199
+ let helper = false
200
+ watch(
201
+ () => props.nodes,
202
+ (newValue: UI_I_FileTreeNode[]) => {
203
+ if (helper || !newValue.length) return
204
+ newValue.forEach((node) => {
205
+ getFileNodes({
206
+ id: node.id,
207
+ path: `${node.id}:/`,
208
+ type: 'folder',
209
+ show: false,
210
+ merge: false,
211
+ })
212
+ })
213
+ helper = true
214
+ },
215
+ { immediate: true }
216
+ )
217
+ </script>
218
+
219
+ <style lang="scss" scoped></style>
@@ -1,117 +1,117 @@
1
- <template>
2
- <ui-stack-block :has-children="false">
3
- <template #stackBlockKey>
4
- {{ localization.common.bus }}
5
- </template>
6
- <template #stackBlockContent>
7
- <div class="flex-align-center justify-between">
8
- <ui-select
9
- :id="`vm-wizard-${props.componentType}-bus-field-${props.index}`"
10
- v-model="bus"
11
- width="auto"
12
- :items="props.busOptions"
13
- :disabled="props.disabled"
14
- :test-id="`${props.testId}-select`"
15
- :class="`vm-wizard-${props.componentType}-bus-field-${props.index}`"
16
- :error-text="props.errorText"
17
- @click.stop
18
- />
19
-
20
- <div v-if="props.helpText" :id="props.helpId" class="flex-align-center relative">
21
- <ui-icon
22
- width="16"
23
- height="16"
24
- name="info"
25
- :data-id="`${props.testId}-show-help-icon`"
26
- class="pointer"
27
- @click.stop="isShowHelp = !isShowHelp"
28
- />
29
- <Teleport to="body">
30
- <ui-dropdown
31
- :show="isShowHelp"
32
- :elem-id="props.helpId"
33
- test-id=""
34
- :items="[]"
35
- width="auto"
36
- show-from-left
37
- @hide="isShowHelp = false"
38
- >
39
- <template #content>
40
- <div class="help-content">
41
- <div class="headline">
42
- <ui-icon name="info-2" width="16" height="16" />
43
- <h3 class="help-title">
44
- {{ localization.mainNavigation.help }}
45
- </h3>
46
- <ui-icon
47
- name="close"
48
- width="16"
49
- height="16"
50
- class="pointer"
51
- @click="isShowHelp = false"
52
- />
53
- </div>
54
-
55
- <p class="help-text">
56
- {{ props.helpText }}
57
- </p>
58
- </div>
59
- </template>
60
- </ui-dropdown>
61
- </Teleport>
62
- </div>
63
- </div>
64
- </template>
65
- </ui-stack-block>
66
- </template>
67
-
68
- <script setup lang="ts">
69
- import type { UI_I_Localization } from '~/lib/models/interfaces'
70
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
71
-
72
- const bus = defineModel<string>('bus')
73
- const isShowHelp = defineModel<boolean>('isShowHelp')
74
-
75
- const props = defineProps<{
76
- index: number
77
- componentType: string
78
- testId: string
79
- errorText: string
80
- busOptions: UI_I_OptionItem[]
81
- helpId: string
82
- disabled?: boolean
83
- helpText?: string
84
- }>()
85
- // const emits = defineEmits<{
86
- // (event: 'remove-error'): void
87
- // }>()
88
-
89
- const localization = computed<UI_I_Localization>(() => useLocal())
90
- </script>
91
-
92
- <style scoped>
93
- .help-content {
94
- padding: 16px;
95
-
96
- .headline {
97
- display: flex;
98
- align-items: center;
99
- gap: 8px;
100
- margin-bottom: 12px;
101
-
102
- .help-title {
103
- flex: 1;
104
- font-size: 14px;
105
- font-weight: 500;
106
- line-height: 16.94px;
107
- color: #4d5d69;
108
- }
109
- }
110
-
111
- .help-text {
112
- font-size: 13px;
113
- line-height: 15.73px;
114
- color: #4d5d69;
115
- }
116
- }
117
- </style>
1
+ <template>
2
+ <ui-stack-block :has-children="false">
3
+ <template #stackBlockKey>
4
+ {{ localization.common.bus }}
5
+ </template>
6
+ <template #stackBlockContent>
7
+ <div class="flex-align-center justify-between">
8
+ <ui-select
9
+ :id="`vm-wizard-${props.componentType}-bus-field-${props.index}`"
10
+ v-model="bus"
11
+ width="auto"
12
+ :items="props.busOptions"
13
+ :disabled="props.disabled"
14
+ :test-id="`${props.testId}-select`"
15
+ :class="`vm-wizard-${props.componentType}-bus-field-${props.index}`"
16
+ :error-text="props.errorText"
17
+ @click.stop
18
+ />
19
+
20
+ <div v-if="props.helpText" :id="props.helpId" class="flex-align-center relative">
21
+ <ui-icon
22
+ width="16"
23
+ height="16"
24
+ name="info"
25
+ :data-id="`${props.testId}-show-help-icon`"
26
+ class="pointer"
27
+ @click.stop="isShowHelp = !isShowHelp"
28
+ />
29
+ <Teleport to="body">
30
+ <ui-dropdown
31
+ :show="isShowHelp"
32
+ :elem-id="props.helpId"
33
+ test-id=""
34
+ :items="[]"
35
+ width="auto"
36
+ show-from-left
37
+ @hide="isShowHelp = false"
38
+ >
39
+ <template #content>
40
+ <div class="help-content">
41
+ <div class="headline">
42
+ <ui-icon name="info-2" width="16" height="16" />
43
+ <h3 class="help-title">
44
+ {{ localization.mainNavigation.help }}
45
+ </h3>
46
+ <ui-icon
47
+ name="close"
48
+ width="16"
49
+ height="16"
50
+ class="pointer"
51
+ @click="isShowHelp = false"
52
+ />
53
+ </div>
54
+
55
+ <p class="help-text">
56
+ {{ props.helpText }}
57
+ </p>
58
+ </div>
59
+ </template>
60
+ </ui-dropdown>
61
+ </Teleport>
62
+ </div>
63
+ </div>
64
+ </template>
65
+ </ui-stack-block>
66
+ </template>
67
+
68
+ <script setup lang="ts">
69
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
70
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
71
+
72
+ const bus = defineModel<string>('bus')
73
+ const isShowHelp = defineModel<boolean>('isShowHelp')
74
+
75
+ const props = defineProps<{
76
+ index: number
77
+ componentType: string
78
+ testId: string
79
+ errorText: string
80
+ busOptions: UI_I_OptionItem[]
81
+ helpId: string
82
+ disabled?: boolean
83
+ helpText?: string
84
+ }>()
85
+ // const emits = defineEmits<{
86
+ // (event: 'remove-error'): void
87
+ // }>()
88
+
89
+ const localization = computed<UI_I_Localization>(() => useLocal())
90
+ </script>
91
+
92
+ <style scoped>
93
+ .help-content {
94
+ padding: 16px;
95
+
96
+ .headline {
97
+ display: flex;
98
+ align-items: center;
99
+ gap: 8px;
100
+ margin-bottom: 12px;
101
+
102
+ .help-title {
103
+ flex: 1;
104
+ font-size: 14px;
105
+ font-weight: 500;
106
+ line-height: 16.94px;
107
+ color: #4d5d69;
108
+ }
109
+ }
110
+
111
+ .help-text {
112
+ font-size: 13px;
113
+ line-height: 15.73px;
114
+ color: #4d5d69;
115
+ }
116
+ }
117
+ </style>