bfg-common 1.5.150 → 1.5.152

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 (121) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/components/atoms/TheIcon3.vue +50 -50
  3. package/components/atoms/perPage/PerPage.vue +58 -58
  4. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  5. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  6. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  7. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  8. package/components/common/context/lib/models/interfaces.ts +31 -31
  9. package/components/common/context/recursion/RecursionNew.vue +238 -238
  10. package/components/common/diagramMain/DiagramMain.vue +897 -897
  11. package/components/common/diagramMain/Header.vue +214 -214
  12. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  13. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  14. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/lib/config/utils.ts +1040 -1040
  15. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  16. package/components/common/pages/home/headline/Headline.vue +45 -45
  17. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  18. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  19. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  20. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  21. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  22. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  23. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  24. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  25. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  26. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  27. package/components/common/pages/packages/Packages.vue +208 -208
  28. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  29. package/components/common/readyToComplete/New.vue +66 -66
  30. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  31. package/components/common/recursionTree/RecursionTree.vue +223 -223
  32. package/components/common/select/button/ButtonDropdown.vue +108 -108
  33. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  34. package/components/common/vm/actions/add/New.vue +556 -556
  35. package/components/common/vm/actions/add/Old.vue +371 -371
  36. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  37. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  38. package/components/common/vm/actions/add/folderTreeView/Old.vue +50 -50
  39. package/components/common/vm/actions/add/lib/config/steps.ts +263 -263
  40. package/components/common/vm/actions/clone/Clone.vue +801 -801
  41. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -291
  42. package/components/common/vm/actions/clone/toTemplate/ToTemplate.vue +626 -626
  43. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  44. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +319 -319
  45. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  46. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +99 -99
  47. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  48. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  49. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  50. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  51. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  52. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  53. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  54. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  55. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  56. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +373 -368
  57. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +149 -149
  58. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationNew.vue +74 -74
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationOld.vue +83 -83
  60. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +288 -288
  61. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +94 -94
  62. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  63. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  64. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  65. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  74. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  75. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  76. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  77. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  78. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  79. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  80. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  81. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  82. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  83. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  84. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  85. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  86. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +39 -39
  87. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  88. package/components/common/vm/actions/common/lib/utils/capabilities.ts +52 -52
  89. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  90. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +134 -134
  91. package/components/common/vm/actions/common/select/computeResource/treeView/New.vue +44 -44
  92. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +118 -118
  93. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  94. package/components/common/vm/actions/common/select/createType/New.vue +84 -84
  95. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  96. package/components/common/vm/actions/common/select/name/Name.vue +167 -167
  97. package/components/common/vm/actions/common/select/os/New.vue +122 -122
  98. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  99. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  100. package/components/common/vm/actions/common/select/storage/Storage.vue +131 -131
  101. package/components/common/vm/actions/common/select/storage/new/lib/config/table.ts +326 -326
  102. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  103. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  104. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  105. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +105 -105
  106. package/components/common/wizards/vm/migrate/Migrate.vue +343 -340
  107. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  108. package/components/common/wizards/vm/migrate/lib/config/steps.ts +157 -157
  109. package/components/common/wizards/vm/migrate/lib/validations.ts +68 -68
  110. package/components/common/wizards/vm/migrate/select/computeResource/tableView/TableView.vue +137 -137
  111. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  112. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  113. package/composables/productNameLocal.ts +30 -30
  114. package/composables/useAppVersion.ts +21 -21
  115. package/package.json +1 -1
  116. package/plugins/date.ts +233 -233
  117. package/public/spice-console/lib/images/bitmap.js +203 -203
  118. package/public/spice-console/network/spicechannel.js +383 -383
  119. package/store/main/mutations.ts +7 -7
  120. package/store/main/state.ts +7 -7
  121. 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>