bfg-common 1.5.23 → 1.5.24

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 (161) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/scss/common/normalize.scss +339 -339
  3. package/components/atoms/TheIcon3.vue +50 -50
  4. package/components/atoms/collapse/CollapseNav.vue +165 -165
  5. package/components/atoms/dropdown/dropdown/Dropdown.vue +168 -168
  6. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  7. package/components/atoms/perPage/PerPage.vue +58 -58
  8. package/components/atoms/stack/StackBlock.vue +185 -185
  9. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  10. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  11. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  12. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  13. package/components/common/accordion/Recursion.vue +222 -222
  14. package/components/common/browse/BrowseNew.vue +237 -237
  15. package/components/common/browse/BrowseOld.vue +217 -217
  16. package/components/common/browse/blocks/contents/Files.vue +37 -37
  17. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  18. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  19. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  20. package/components/common/context/Context.vue +111 -111
  21. package/components/common/context/lib/models/interfaces.ts +31 -31
  22. package/components/common/context/recursion/Recursion.vue +87 -87
  23. package/components/common/context/recursion/RecursionNew.vue +238 -238
  24. package/components/common/context/recursion/RecursionOld.vue +228 -228
  25. package/components/common/details/DetailsItem.vue +109 -109
  26. package/components/common/diagramMain/DiagramMain.vue +897 -897
  27. package/components/common/diagramMain/Header.vue +214 -214
  28. package/components/common/graph/Graph.vue +104 -104
  29. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  30. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  31. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  32. package/components/common/mainNavigationPanel/MainNavigationPanelNew.vue +336 -336
  33. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +311 -311
  34. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  35. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/lib/config/utils.ts +1040 -1040
  36. package/components/common/monitor/overview/Overview.vue +1 -0
  37. package/components/common/monitor/overview/Overview.vue~ +132 -0
  38. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  39. package/components/common/pages/home/StatusContent.vue +49 -49
  40. package/components/common/pages/home/headline/Headline.vue +45 -45
  41. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  42. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  43. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  44. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  45. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  46. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  47. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  48. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  49. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  50. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  51. package/components/common/pages/packages/Packages.vue +208 -208
  52. package/components/common/pages/shortcuts/block/BlockNew.vue +96 -96
  53. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  54. package/components/common/portlets/customAttributes/Portlet.vue +667 -667
  55. package/components/common/portlets/tag/Portlet.vue +433 -433
  56. package/components/common/recursionTree/RecursionTree.vue +223 -223
  57. package/components/common/select/button/ButtonDropdown.vue +108 -108
  58. package/components/common/spiceConsole/Drawer.vue +370 -370
  59. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  60. package/components/common/split/horizontal/HorizontalNew.vue +376 -376
  61. package/components/common/split/horizontal/HorizontalOld.vue +337 -337
  62. package/components/common/split/vertical/Vertical.vue +160 -160
  63. package/components/common/tools/Actions.vue +188 -188
  64. package/components/common/vm/actions/add/Add.vue +622 -622
  65. package/components/common/vm/actions/clone/Clone.vue +639 -639
  66. package/components/common/vm/actions/clone/lib/config/steps.ts +129 -129
  67. package/components/common/vm/actions/clone/toTemplate/ToTemplate.vue +634 -634
  68. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  69. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +275 -275
  70. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +274 -274
  71. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +177 -177
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +698 -698
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +410 -410
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +319 -319
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +99 -99
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +164 -164
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +368 -368
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +232 -232
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +250 -250
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +286 -286
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  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 +69 -69
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  117. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  118. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  119. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  120. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  121. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  122. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  123. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  124. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  125. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  126. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  127. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  128. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  129. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  130. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  131. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  132. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  133. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  134. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  135. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  136. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  137. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  138. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  139. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  140. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  141. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  142. package/components/common/wizards/datastore/add/lib/config/steps.ts +138 -138
  143. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +60 -60
  144. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +92 -92
  145. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +105 -105
  146. package/components/common/wizards/vm/migrate/Migrate.vue +302 -302
  147. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  148. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  149. package/components/common/wizards/vm/migrate/select/network/table/network/Network.vue +150 -150
  150. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  151. package/components/common/wizards/vm/migrate/select/priority/Priority.vue +43 -43
  152. package/composables/productNameLocal.ts +30 -30
  153. package/composables/useAppVersion.ts +21 -21
  154. package/package.json +1 -1
  155. package/plugins/date.ts +233 -233
  156. package/plugins/directives.ts +24 -24
  157. package/public/spice-console/lib/images/bitmap.js +203 -203
  158. package/public/spice-console/network/spicechannel.js +383 -383
  159. package/store/main/mutations.ts +7 -7
  160. package/store/main/state.ts +7 -7
  161. 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,99 +1,99 @@
1
- <template>
2
- <common-vm-actions-common-customize-hardware-virtual-hardware-bus-new
3
- v-if="isNewView"
4
- v-model:bus="bus"
5
- v-model:is-show-help="isShowHelp"
6
- :index="props.index"
7
- :component-type="props.componentType"
8
- :test-id="props.testId"
9
- :error-text="apiError"
10
- :bus-options="busOptions"
11
- :help-id="helpId"
12
- :disabled="disabled"
13
- :help-text="helpText"
14
- @remove-error="onRemoveValidationError"
15
- />
16
- <common-vm-actions-common-customize-hardware-virtual-hardware-bus-old
17
- v-else
18
- v-model:bus="bus"
19
- v-model:is-show-help="isShowHelp"
20
- :index="props.index"
21
- :component-type="props.componentType"
22
- :test-id="props.testId"
23
- :error-text="apiError"
24
- :bus-options="busOptions"
25
- :help-id="helpId"
26
- :disabled="disabled"
27
- :help-text="helpText"
28
- @remove-error="onRemoveValidationError"
29
- />
30
- </template>
31
-
32
- <script setup lang="ts">
33
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
34
- import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
35
- import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
36
- import { capabilities } from '~/components/common/vm/actions/common/lib/config/capabilities'
37
-
38
- const bus = defineModel<string>('bus')
39
-
40
- const props = defineProps<{
41
- index: number
42
- componentType: string
43
- testId: string
44
- errorValidationFields: UI_I_ErrorValidationField<string>[]
45
- disabled?: boolean
46
- shortOptions?: boolean
47
- helpText?: string
48
- guestMachineType?: UI_I_OptionItem | null
49
- computeResource?: UI_I_TreeNode | null
50
- }>()
51
- const emits = defineEmits<{
52
- (event: 'remove-error-by-title', value: string): void
53
- }>()
54
-
55
- const { $store }: any = useNuxtApp()
56
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
57
-
58
- const helpId = ref<string>(`bus-field-help-icon${useUniqueId()}`)
59
-
60
- const busOptions = ref<UI_I_OptionItem[]>([])
61
- watch(
62
- [() => props.guestMachineType, () => props.computeResource],
63
- () => {
64
- if (props.guestMachineType) {
65
- busOptions.value = capabilities.bus[props.guestMachineType.value]
66
- if (props.shortOptions) {
67
- busOptions.value = capabilities.cdromBus[props.guestMachineType.value]
68
- }
69
- if (busOptions.value) {
70
- const hasSelected = busOptions.value.some(
71
- (option) => option.value === bus.value
72
- )
73
- if (!hasSelected) bus.value = busOptions.value[0].value
74
- }
75
- }
76
- },
77
- { immediate: true, deep: true }
78
- )
79
-
80
- const busValidationType = computed<string>(
81
- () => `disk_devices[${props.index}].bus`
82
- )
83
-
84
- const apiError = computed<string>(() => {
85
- return (
86
- props.errorValidationFields?.find(
87
- (message) => message.field === busValidationType.value
88
- )?.error_message || ''
89
- )
90
- })
91
-
92
- const onRemoveValidationError = (): void => {
93
- emits('remove-error-by-title', busValidationType.value)
94
- }
95
-
96
- const isShowHelp = ref<boolean>(false)
97
- </script>
98
-
99
- <style scoped></style>
1
+ <template>
2
+ <common-vm-actions-common-customize-hardware-virtual-hardware-bus-new
3
+ v-if="isNewView"
4
+ v-model:bus="bus"
5
+ v-model:is-show-help="isShowHelp"
6
+ :index="props.index"
7
+ :component-type="props.componentType"
8
+ :test-id="props.testId"
9
+ :error-text="apiError"
10
+ :bus-options="busOptions"
11
+ :help-id="helpId"
12
+ :disabled="disabled"
13
+ :help-text="helpText"
14
+ @remove-error="onRemoveValidationError"
15
+ />
16
+ <common-vm-actions-common-customize-hardware-virtual-hardware-bus-old
17
+ v-else
18
+ v-model:bus="bus"
19
+ v-model:is-show-help="isShowHelp"
20
+ :index="props.index"
21
+ :component-type="props.componentType"
22
+ :test-id="props.testId"
23
+ :error-text="apiError"
24
+ :bus-options="busOptions"
25
+ :help-id="helpId"
26
+ :disabled="disabled"
27
+ :help-text="helpText"
28
+ @remove-error="onRemoveValidationError"
29
+ />
30
+ </template>
31
+
32
+ <script setup lang="ts">
33
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
34
+ import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
35
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
36
+ import { capabilities } from '~/components/common/vm/actions/common/lib/config/capabilities'
37
+
38
+ const bus = defineModel<string>('bus')
39
+
40
+ const props = defineProps<{
41
+ index: number
42
+ componentType: string
43
+ testId: string
44
+ errorValidationFields: UI_I_ErrorValidationField<string>[]
45
+ disabled?: boolean
46
+ shortOptions?: boolean
47
+ helpText?: string
48
+ guestMachineType?: UI_I_OptionItem | null
49
+ computeResource?: UI_I_TreeNode | null
50
+ }>()
51
+ const emits = defineEmits<{
52
+ (event: 'remove-error-by-title', value: string): void
53
+ }>()
54
+
55
+ const { $store }: any = useNuxtApp()
56
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
57
+
58
+ const helpId = ref<string>(`bus-field-help-icon${useUniqueId()}`)
59
+
60
+ const busOptions = ref<UI_I_OptionItem[]>([])
61
+ watch(
62
+ [() => props.guestMachineType, () => props.computeResource],
63
+ () => {
64
+ if (props.guestMachineType) {
65
+ busOptions.value = capabilities.bus[props.guestMachineType.value]
66
+ if (props.shortOptions) {
67
+ busOptions.value = capabilities.cdromBus[props.guestMachineType.value]
68
+ }
69
+ if (busOptions.value) {
70
+ const hasSelected = busOptions.value.some(
71
+ (option) => option.value === bus.value
72
+ )
73
+ if (!hasSelected) bus.value = busOptions.value[0].value
74
+ }
75
+ }
76
+ },
77
+ { immediate: true, deep: true }
78
+ )
79
+
80
+ const busValidationType = computed<string>(
81
+ () => `disk_devices[${props.index}].bus`
82
+ )
83
+
84
+ const apiError = computed<string>(() => {
85
+ return (
86
+ props.errorValidationFields?.find(
87
+ (message) => message.field === busValidationType.value
88
+ )?.error_message || ''
89
+ )
90
+ })
91
+
92
+ const onRemoveValidationError = (): void => {
93
+ emits('remove-error-by-title', busValidationType.value)
94
+ }
95
+
96
+ const isShowHelp = ref<boolean>(false)
97
+ </script>
98
+
99
+ <style scoped></style>