bfg-common 1.3.239 → 1.3.241

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 (163) hide show
  1. package/components/common/BadBrowser.vue +16 -12
  2. package/components/common/accordion/Accordion.vue +1 -0
  3. package/components/common/accordion/Recursion.vue +2 -0
  4. package/components/common/accordion/lib/models/interfaces.ts +1 -0
  5. package/components/common/adapterManager/AddAdapterModal.vue +11 -4
  6. package/components/common/adapterManager/AddAdapterWarningModal.vue +1 -0
  7. package/components/common/adapterManager/ui/actions/AddAdapterButton.vue +2 -0
  8. package/components/common/adapterManager/ui/actions/MoveDownAdapterButton.vue +2 -0
  9. package/components/common/adapterManager/ui/actions/MoveUpAdapterButton.vue +2 -0
  10. package/components/common/adapterManager/ui/actions/RemoveAdapterButton.vue +2 -0
  11. package/components/common/adapterManager/ui/table/Adapters.vue +14 -13
  12. package/components/common/adapterManager/ui/table/Header.vue +6 -4
  13. package/components/common/adapterManager/ui/table/Table.vue +13 -4
  14. package/components/common/browse/Browse.vue +5 -1
  15. package/components/common/browse/blocks/Container.vue +3 -0
  16. package/components/common/browse/blocks/contents/Files.vue +1 -0
  17. package/components/common/context/ContextRecursion.vue +6 -1
  18. package/components/common/details/DetailsItem.vue +3 -0
  19. package/components/common/diagramMain/Header.vue +4 -0
  20. package/components/common/diagramMain/adapter/AdapterItem.vue +2 -0
  21. package/components/common/diagramMain/adapter/Contents.vue +2 -0
  22. package/components/common/diagramMain/lib/models/interfaces.ts +10 -0
  23. package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +1 -0
  24. package/components/common/diagramMain/modals/editSettings/tabs/Security.vue +13 -27
  25. package/components/common/diagramMain/modals/editSettings/tabs/SwitchProperties.vue +1 -0
  26. package/components/common/diagramMain/modals/editSettings/tabs/TeamingFailover.vue +3 -0
  27. package/components/common/diagramMain/modals/editSettings/tabs/TrafficShaping.vue +8 -0
  28. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +6 -0
  29. package/components/common/diagramMain/modals/editSettings/tabs/port/PortProperties.vue +2 -0
  30. package/components/common/diagramMain/modals/lib/config/networkModal.ts +4 -0
  31. package/components/common/diagramMain/modals/lib/config/portModal.ts +7 -2
  32. package/components/common/diagramMain/modals/lib/mappers/mappers.ts +36 -0
  33. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/ConnectionSettings.vue +19 -13
  34. package/components/common/diagramMain/modals/remove/RemoveModal.vue +5 -0
  35. package/components/common/diagramMain/modals/viewSettings/ViewSettings.vue +11 -7
  36. package/components/common/diagramMain/network/Contents.vue +5 -4
  37. package/components/common/diagramMain/port/Port.vue +1 -0
  38. package/components/common/feedback/Buttons.vue +2 -0
  39. package/components/common/feedback/Feedback.vue +9 -2
  40. package/components/common/feedback/Message.vue +9 -0
  41. package/components/common/feedback/VisitPortal.vue +11 -2
  42. package/components/common/help/navbar/left/Left.vue +1 -0
  43. package/components/common/help/navbar/right/Right.vue +12 -2
  44. package/components/common/help/navbar/right/lib/models/interfaces.ts +1 -0
  45. package/components/common/home/alertsTable/AlertsTable.vue +1 -0
  46. package/components/common/modals/Confirmation.vue +10 -2
  47. package/components/common/modals/Rename.vue +1 -0
  48. package/components/common/monitor/advanced/tools/Tools.vue +10 -1
  49. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/Actions.vue +7 -1
  50. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/saveOptionsModal/SaveOptionsModal.vue +6 -1
  51. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/form/Form.vue +14 -1
  52. package/components/common/monitor/overview/filters/Filters.vue +12 -5
  53. package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModal.vue +4 -0
  54. package/components/common/pages/Tasks.vue +120 -120
  55. package/components/common/perPage/PerPage.vue +1 -0
  56. package/components/common/recursionTree/RecursionTree.vue +205 -203
  57. package/components/common/recursionTree/lib/models/interfaces.ts +4 -2
  58. package/components/common/select/button/ButtonDropdown.vue +2 -0
  59. package/components/common/select/button/lib/models/interfaces.ts +1 -0
  60. package/components/common/select/input/Input.vue +1 -0
  61. package/components/common/select/radio/RadioGroup.vue +2 -0
  62. package/components/common/select/radio/lib/models/interfaces.ts +1 -0
  63. package/components/common/shortcuts/Block.vue +2 -0
  64. package/components/common/shortcuts/Category.vue +1 -0
  65. package/components/common/shortcuts/lib/models/interfaces.ts +1 -0
  66. package/components/common/spiceConsole/Drawer.vue +4 -0
  67. package/components/common/spiceConsole/keyboard/Keyboard.vue +1 -0
  68. package/components/common/spiceConsole/keyboard/lib/config/keyboardRows.ts +81 -6
  69. package/components/common/spiceConsole/keyboard/lib/models/interfaces.ts +1 -0
  70. package/components/common/split/horizontal/Horizontal.vue +1 -0
  71. package/components/common/vm/actions/add/Add.vue +576 -575
  72. package/components/common/vm/actions/clone/select/options/Options.vue +9 -3
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +5 -1
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +7 -2
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +2 -0
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/CoresPerSocket.vue +1 -0
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/CpuHotPlug.vue +1 -0
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/CpuModel.vue +225 -220
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Hv.vue +2 -0
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Iommu.vue +1 -0
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Pc.vue +1 -0
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Sa.vue +2 -0
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +5 -1
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/tooltip/Tooltip.vue +1 -0
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +2 -1
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +1 -0
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/MemoryHotPlug.vue +1 -0
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/Location.vue +6 -6
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +5 -6
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/cache/Cache.vue +1 -0
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/limitIops/LimitIops.vue +1 -0
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/Mode.vue +1 -0
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/provisioning/Provisioning.vue +1 -0
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/Sharing.vue +1 -0
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/Location.vue +2 -0
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +295 -294
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/adapterType/AdapterType.vue +1 -0
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +12 -4
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIo.vue +5 -1
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +2 -1
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/typeSelection/TypeSelection.vue +2 -1
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbController.vue +1 -0
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/reservation/Reservation.vue +3 -1
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/Graphics.vue +6 -1
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/TotalVideoMemory.vue +2 -1
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCard.vue +1 -0
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/model/Model.vue +1 -0
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +1 -0
  109. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/Menu.vue +6 -1
  110. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/Secure.vue +6 -1
  111. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +5 -1
  112. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +1 -0
  113. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +5 -1
  114. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/lib/models/interfaces.ts +1 -0
  115. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptions.vue +4 -1
  116. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/CopyPaste.vue +1 -0
  117. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/FileTransfer.vue +1 -0
  118. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/FolderSharing.vue +1 -0
  119. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/PlaybackCompression.vue +1 -0
  120. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/PowerControl.vue +1 -0
  121. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/imgCompression/ImgCompression.vue +1 -0
  122. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/jpegCompression/JpegCompression.vue +1 -0
  123. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +2 -1
  124. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/mouseMode/MouseMode.vue +6 -1
  125. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +7 -1
  126. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/sharePolicy/SharePolicy.vue +5 -1
  127. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/streamingMode/StreamingMode.vue +1 -0
  128. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/type/Type.vue +1 -0
  129. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +2 -1
  130. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/zlibCompression/ZlibCompression.vue +1 -0
  131. package/components/common/vm/actions/common/customizeHardware/vmoptions/tools/Tools.vue +6 -1
  132. package/components/common/vm/actions/common/select/compatibility/Compatibility.vue +31 -27
  133. package/components/common/vm/actions/common/select/name/Name.vue +7 -1
  134. package/components/common/vm/actions/common/select/os/os.vue +7 -1
  135. package/components/common/weekSelect/WeekSelect.vue +143 -112
  136. package/components/common/weekSelect/lib/models/interfaces.ts +1 -0
  137. package/components/common/wizards/datastore/add/local/createName/CreateName.vue +1 -0
  138. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +8 -7
  139. package/components/common/wizards/datastore/add/nfs/configuration/Configuration.vue +9 -1
  140. package/components/common/wizards/datastore/add/nfs/configuration/serversList/DeletePopover.vue +6 -3
  141. package/components/common/wizards/datastore/add/nfs/kerberosAuthentication/KerberosAuthentication.vue +1 -0
  142. package/components/common/wizards/datastore/add/nfs/kerberosAuthentication/lib/config/radioOptions.ts +3 -0
  143. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/DeviceSelection.vue +2 -0
  144. package/components/common/wizards/datastore/add/sharedStorm/partitionConfiguration/PartitionConfiguration.vue +2 -0
  145. package/components/common/wizards/datastore/add/types/Types.vue +1 -0
  146. package/components/common/wizards/network/add/modals/SelectNetwork.vue +16 -3
  147. package/components/common/wizards/network/add/modals/SelectStandardSwitch.vue +10 -2
  148. package/components/common/wizards/network/add/modals/SelectSwitch.vue +10 -2
  149. package/components/common/wizards/network/add/steps/ConnectionSettings.vue +5 -1
  150. package/components/common/wizards/network/add/steps/IpFourSettings.vue +12 -2
  151. package/components/common/wizards/network/add/steps/PortProperties.vue +16 -3
  152. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +6 -3
  153. package/components/common/wizards/network/add/steps/SelectedTargetDevice.vue +11 -0
  154. package/components/common/wizards/vm/common/tooltip/Tooltip.vue +2 -0
  155. package/components/common/wizards/vm/migrate/select/network/Network.vue +1 -0
  156. package/components/common/wizards/vm/migrate/select/network/table/network/Network.vue +1 -0
  157. package/components/common/wizards/vm/migrate/select/storage/Storage.vue +5 -1
  158. package/components/common/wizards/vm/migrate/select/storage/configure/disk/Disk.vue +1 -0
  159. package/components/common/wizards/vm/migrate/select/storage/diskFormat/DiskFormat.vue +1 -0
  160. package/components/common/wizards/vm/migrate/select/storage/policy/Policy.vue +1 -0
  161. package/components/common/wizards/vm/migrate/select/storage/selectedPerDisk/SelectedPerDisk.vue +1 -0
  162. package/components/common/wizards/vm/migrate/select/targetServer/new/New.vue +9 -1
  163. package/package.json +1 -1
@@ -1,203 +1,205 @@
1
- <template>
2
- <div class="recursion-tree">
3
- <div v-for="node in nodes" :key="`${node.type}_${node.id}`">
4
- <div
5
- :id="`tree-node-${node.type}-${node.id}`"
6
- class="clr-tree-node"
7
- @click="selectNode(node)"
8
- >
9
- <button
10
- v-if="node.hasNodes"
11
- :id="`tree-node-${node.type}-${node.id}-toggle-button`"
12
- class="clr-treenode-caret"
13
- @click.stop="getNodes({ node })"
14
- >
15
- <i
16
- v-if="loading[`${node.id}_${node.type}`]"
17
- class="fa clr-tree-node-caret-icon spinner spinner-sm"
18
- />
19
- <atoms-the-icon
20
- v-else
21
- :class="['clr-tree-node-caret-icon', { down: node.nodesShow }]"
22
- name="angle"
23
- />
24
- </button>
25
- <div
26
- :class="[
27
- 'tree-node-text-drag',
28
- { 'no-child': !node.hasNodes, 'dark-mode': hasDarkMode },
29
- ]"
30
- @contextmenu.prevent="showContextMenuAndSelectNode($event, node)"
31
- >
32
- <div
33
- :class="[
34
- 'clr-treenode-link tree-node-text',
35
- { active: node.isActive },
36
- ]"
37
- >
38
- <span :class="node.iconClassName" />
39
- {{ node.name }}
40
- </div>
41
- </div>
42
- </div>
43
-
44
- <common-recursion-tree
45
- v-if="node.nodesShow && node.nodes.length"
46
- :nodes="node.nodes"
47
- :style="{ 'padding-left': node.nodesShow ? '20px' : '' }"
48
- @get-nodes="getNodes($event)"
49
- @select-node="selectNode($event)"
50
- @contextmenu.prevent
51
- @show-context-menu="showContextMenu"
52
- />
53
- </div>
54
- </div>
55
- </template>
56
-
57
- <script setup lang="ts">
58
- import { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
59
-
60
- const { $store } = useNuxtApp()
61
-
62
- interface UI_I_Loading {
63
- [key: string]: boolean
64
- }
65
-
66
- const props = defineProps<{
67
- nodes: UI_I_TreeNode[]
68
- }>()
69
- const emits = defineEmits<{
70
- (event: 'get-nodes', value: any): void
71
- (event: 'select-node', value: UI_I_TreeNode): void
72
- (event: 'show-context-menu', value: any): void
73
- }>()
74
-
75
- const loading = ref<UI_I_Loading>({})
76
- watch(props.nodes, (nodes) => {
77
- nodes.forEach((node) => {
78
- loading.value[`${node.id}_${node.type}`] = false
79
- })
80
- })
81
-
82
- const hasDarkMode = computed<boolean>(
83
- () => $store.getters['main/getInterfaceThemeMode'] === 'DARK'
84
- )
85
-
86
- const getNodes = (data: any): void => {
87
- const node: UI_I_TreeNode = data.node
88
- const cb: Function | undefined = data.cb
89
-
90
- loading.value[`${node.id}_${node.type}`] = true
91
- const collBack = () => {
92
- loading.value[`${node.id}_${node.type}`] = false
93
- }
94
- emits('get-nodes', {
95
- node,
96
- cb: cb || collBack,
97
- })
98
- }
99
- const selectNode = (node: UI_I_TreeNode): void => {
100
- emits('select-node', node)
101
- }
102
- const showContextMenu = (event: any, node: UI_I_TreeNode): void => {
103
- // Если данные приходят от потомка, то нужно так обработать, из-за рекурсии
104
- if (event.node && event.event) {
105
- emits('show-context-menu', { ...event })
106
- return
107
- }
108
- emits('show-context-menu', { event, node })
109
- }
110
- const showContextMenuAndSelectNode = (
111
- event: any,
112
- node: UI_I_TreeNode
113
- ): void => {
114
- selectNode(node)
115
-
116
- setTimeout(() => {
117
- showContextMenu(event, node)
118
- }, 0)
119
- }
120
- </script>
121
-
122
- <style scoped lang="scss">
123
- .recursion-tree {
124
- .clr-tree-node {
125
- width: 100%;
126
- overflow: hidden;
127
- display: flex;
128
- flex: 1 1 0;
129
- align-items: center;
130
- margin-bottom: 1px;
131
-
132
- .clr-treenode-caret {
133
- outline: none;
134
-
135
- .clr-tree-node-caret-icon {
136
- position: static;
137
- transform: rotate(90deg);
138
- width: 11px;
139
- height: 11px;
140
- fill: var(--tree-node-caret-icon);
141
-
142
- &.down {
143
- transform: rotate(180deg);
144
- }
145
- }
146
- }
147
- .tree-node-text-drag {
148
- width: 100%;
149
- overflow: hidden;
150
- display: flex;
151
- cursor: grab;
152
-
153
- &.no-child {
154
- margin-left: 30px;
155
- }
156
- .tree-node-text {
157
- width: 100%;
158
- box-sizing: border-box;
159
- text-overflow: ellipsis;
160
- overflow: hidden;
161
- white-space: nowrap;
162
- padding: 0;
163
- border-radius: 0;
164
- border-bottom: 1px solid transparent;
165
-
166
- &.active {
167
- background: var(--vertical-nav-active-bg-color);
168
- color: var(--vertical-nav-active-item-color);
169
- border-bottom: 1px solid transparent;
170
- }
171
- &:hover {
172
- border-color: var(--vertical-nav-hover-border-color);
173
- &:not(.active) {
174
- background: var(--vertical-nav-hover-bg-color);
175
- }
176
- }
177
- span {
178
- display: inline-block;
179
- vertical-align: text-bottom;
180
- margin: 1px 4px 0;
181
- }
182
- }
183
- }
184
- }
185
- }
186
- </style>
187
-
188
- <style>
189
- :root {
190
- --vertical-nav-active-item-color: #fff;
191
- --vertical-nav-active-bg-color: #29414e;
192
- --vertical-nav-hover-bg-color: #e8e8e8;
193
- --vertical-nav-hover-border-color: #666;
194
- --tree-node-caret-icon: #666;
195
- }
196
- :root.dark-theme {
197
- --vertical-nav-active-item-color: #000;
198
- --vertical-nav-active-bg-color: #d8e3e9;
199
- --vertical-nav-hover-bg-color: #324f61;
200
- --vertical-nav-hover-border-color: #fff;
201
- --tree-node-caret-icon: #acbac3;
202
- }
203
- </style>
1
+ <template>
2
+ <div class="recursion-tree">
3
+ <div v-for="node in nodes" :key="`${node.type}_${node.id}`">
4
+ <div
5
+ :id="`tree-node-${node.type}-${node.id}`"
6
+ :data-id="node.testId"
7
+ class="clr-tree-node"
8
+ @click="selectNode(node)"
9
+ >
10
+ <button
11
+ v-if="node.hasNodes"
12
+ :id="`tree-node-${node.type}-${node.id}-toggle-button`"
13
+ :data-id="`${node.testId}-toggle-button`"
14
+ class="clr-treenode-caret"
15
+ @click.stop="getNodes({ node })"
16
+ >
17
+ <i
18
+ v-if="loading[`${node.id}_${node.type}`]"
19
+ class="fa clr-tree-node-caret-icon spinner spinner-sm"
20
+ />
21
+ <atoms-the-icon
22
+ v-else
23
+ :class="['clr-tree-node-caret-icon', { down: node.nodesShow }]"
24
+ name="angle"
25
+ />
26
+ </button>
27
+ <div
28
+ :class="[
29
+ 'tree-node-text-drag',
30
+ { 'no-child': !node.hasNodes, 'dark-mode': hasDarkMode },
31
+ ]"
32
+ @contextmenu.prevent="showContextMenuAndSelectNode($event, node)"
33
+ >
34
+ <div
35
+ :class="[
36
+ 'clr-treenode-link tree-node-text',
37
+ { active: node.isActive },
38
+ ]"
39
+ >
40
+ <span :class="node.iconClassName" />
41
+ {{ node.name }}
42
+ </div>
43
+ </div>
44
+ </div>
45
+
46
+ <common-recursion-tree
47
+ v-if="node.nodesShow && node.nodes.length"
48
+ :nodes="node.nodes"
49
+ :style="{ 'padding-left': node.nodesShow ? '20px' : '' }"
50
+ @get-nodes="getNodes($event)"
51
+ @select-node="selectNode($event)"
52
+ @contextmenu.prevent
53
+ @show-context-menu="showContextMenu"
54
+ />
55
+ </div>
56
+ </div>
57
+ </template>
58
+
59
+ <script setup lang="ts">
60
+ import { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
61
+
62
+ const { $store } = useNuxtApp()
63
+
64
+ interface UI_I_Loading {
65
+ [key: string]: boolean
66
+ }
67
+
68
+ const props = defineProps<{
69
+ nodes: UI_I_TreeNode[]
70
+ }>()
71
+ const emits = defineEmits<{
72
+ (event: 'get-nodes', value: any): void
73
+ (event: 'select-node', value: UI_I_TreeNode): void
74
+ (event: 'show-context-menu', value: any): void
75
+ }>()
76
+
77
+ const loading = ref<UI_I_Loading>({})
78
+ watch(props.nodes, (nodes) => {
79
+ nodes.forEach((node) => {
80
+ loading.value[`${node.id}_${node.type}`] = false
81
+ })
82
+ })
83
+
84
+ const hasDarkMode = computed<boolean>(
85
+ () => $store.getters['main/getInterfaceThemeMode'] === 'DARK'
86
+ )
87
+
88
+ const getNodes = (data: any): void => {
89
+ const node: UI_I_TreeNode = data.node
90
+ const cb: Function | undefined = data.cb
91
+
92
+ loading.value[`${node.id}_${node.type}`] = true
93
+ const collBack = () => {
94
+ loading.value[`${node.id}_${node.type}`] = false
95
+ }
96
+ emits('get-nodes', {
97
+ node,
98
+ cb: cb || collBack,
99
+ })
100
+ }
101
+ const selectNode = (node: UI_I_TreeNode): void => {
102
+ emits('select-node', node)
103
+ }
104
+ const showContextMenu = (event: any, node: UI_I_TreeNode): void => {
105
+ // Если данные приходят от потомка, то нужно так обработать, из-за рекурсии
106
+ if (event.node && event.event) {
107
+ emits('show-context-menu', { ...event })
108
+ return
109
+ }
110
+ emits('show-context-menu', { event, node })
111
+ }
112
+ const showContextMenuAndSelectNode = (
113
+ event: any,
114
+ node: UI_I_TreeNode
115
+ ): void => {
116
+ selectNode(node)
117
+
118
+ setTimeout(() => {
119
+ showContextMenu(event, node)
120
+ }, 0)
121
+ }
122
+ </script>
123
+
124
+ <style scoped lang="scss">
125
+ .recursion-tree {
126
+ .clr-tree-node {
127
+ width: 100%;
128
+ overflow: hidden;
129
+ display: flex;
130
+ flex: 1 1 0;
131
+ align-items: center;
132
+ margin-bottom: 1px;
133
+
134
+ .clr-treenode-caret {
135
+ outline: none;
136
+
137
+ .clr-tree-node-caret-icon {
138
+ position: static;
139
+ transform: rotate(90deg);
140
+ width: 11px;
141
+ height: 11px;
142
+ fill: var(--tree-node-caret-icon);
143
+
144
+ &.down {
145
+ transform: rotate(180deg);
146
+ }
147
+ }
148
+ }
149
+ .tree-node-text-drag {
150
+ width: 100%;
151
+ overflow: hidden;
152
+ display: flex;
153
+ cursor: grab;
154
+
155
+ &.no-child {
156
+ margin-left: 30px;
157
+ }
158
+ .tree-node-text {
159
+ width: 100%;
160
+ box-sizing: border-box;
161
+ text-overflow: ellipsis;
162
+ overflow: hidden;
163
+ white-space: nowrap;
164
+ padding: 0;
165
+ border-radius: 0;
166
+ border-bottom: 1px solid transparent;
167
+
168
+ &.active {
169
+ background: var(--vertical-nav-active-bg-color);
170
+ color: var(--vertical-nav-active-item-color);
171
+ border-bottom: 1px solid transparent;
172
+ }
173
+ &:hover {
174
+ border-color: var(--vertical-nav-hover-border-color);
175
+ &:not(.active) {
176
+ background: var(--vertical-nav-hover-bg-color);
177
+ }
178
+ }
179
+ span {
180
+ display: inline-block;
181
+ vertical-align: text-bottom;
182
+ margin: 1px 4px 0;
183
+ }
184
+ }
185
+ }
186
+ }
187
+ }
188
+ </style>
189
+
190
+ <style>
191
+ :root {
192
+ --vertical-nav-active-item-color: #fff;
193
+ --vertical-nav-active-bg-color: #29414e;
194
+ --vertical-nav-hover-bg-color: #e8e8e8;
195
+ --vertical-nav-hover-border-color: #666;
196
+ --tree-node-caret-icon: #666;
197
+ }
198
+ :root.dark-theme {
199
+ --vertical-nav-active-item-color: #000;
200
+ --vertical-nav-active-bg-color: #d8e3e9;
201
+ --vertical-nav-hover-bg-color: #324f61;
202
+ --vertical-nav-hover-border-color: #fff;
203
+ --tree-node-caret-icon: #acbac3;
204
+ }
205
+ </style>
@@ -4,7 +4,8 @@ export interface UI_I_TreeNodeShort<T = string> {
4
4
  id: string | number
5
5
  type: T
6
6
  }
7
- export interface UI_I_TreeNode<N = UI_I_TreeNodeDuplicate, T = string> extends UI_I_TreeNodeShort<T> {
7
+ export interface UI_I_TreeNode<N = UI_I_TreeNodeDuplicate, T = string>
8
+ extends UI_I_TreeNodeShort<T> {
8
9
  state: string | number // TODO только number
9
10
  name: string
10
11
  iconClassName: string
@@ -12,8 +13,9 @@ export interface UI_I_TreeNode<N = UI_I_TreeNodeDuplicate, T = string> extends U
12
13
  hasNodes: boolean
13
14
  nodesShow: boolean
14
15
  nodes: N[]
15
- parent?:N
16
+ parent?: N
16
17
  capacity?: number
17
18
  available?: number
18
19
  modified?: number
20
+ testId?: string
19
21
  }
@@ -2,6 +2,7 @@
2
2
  <div :class="['dropdown-button dropdown', { open }]">
3
3
  <button
4
4
  :id="`${props.testId}-heading`"
5
+ :data-id="`${props.testId}-heading`"
5
6
  class="btn btn-link dropdown-toggle"
6
7
  @click.stop="open = !open"
7
8
  >
@@ -13,6 +14,7 @@
13
14
  <div v-for="(item, key) in props.items" :key="key">
14
15
  <button
15
16
  :id="`${props.testId}-item`"
17
+ :data-id="item.testId"
16
18
  :disabled="item.disabled"
17
19
  class="dropdown-item"
18
20
  @click="click(item.type)"
@@ -3,4 +3,5 @@ export interface UI_I_DropdownButtonItem {
3
3
  type: string
4
4
  disabled: boolean
5
5
  divider?: boolean
6
+ testId?: string
6
7
  }
@@ -17,6 +17,7 @@
17
17
  <select
18
18
  :id="`${props.testId}-target`"
19
19
  v-model="selectedValueLocal"
20
+ :data-id="`${props.testId}-target`"
20
21
  :disabled="props.disabled"
21
22
  >
22
23
  <option
@@ -11,6 +11,7 @@
11
11
  <input
12
12
  :id="radio.label"
13
13
  v-model="selectedType"
14
+ :data-id="radio.testId"
14
15
  type="radio"
15
16
  :value="radio.value"
16
17
  :disabled="radio.disabled"
@@ -23,6 +24,7 @@
23
24
  class="signpost-container relative"
24
25
  >
25
26
  <atoms-the-icon
27
+ :data-id="`${radio.testId}-tooltip-toggle-icon`"
26
28
  fill="#0072a3"
27
29
  width="24px"
28
30
  height="24px"
@@ -5,4 +5,5 @@ export interface UI_I_RadioOption {
5
5
  isTooltip?: boolean
6
6
  description?: string
7
7
  tooltipContent?: string
8
+ testId?: string
8
9
  }
@@ -4,6 +4,7 @@
4
4
  class="unit"
5
5
  :to="navigate"
6
6
  :title="props.item.navigateTo"
7
+ :data-id="props.testId"
7
8
  @click="changeLastNavigation"
8
9
  @contextmenu="changeLastNavigation"
9
10
  >
@@ -19,6 +20,7 @@ import type { UI_I_BlockItem } from '~/components/common/shortcuts/lib/models/in
19
20
 
20
21
  const props = defineProps<{
21
22
  item: UI_I_BlockItem
23
+ testId?: string
22
24
  }>()
23
25
 
24
26
  const navigate = computed<string>(() => '/' + props.item.navigateTo)
@@ -8,6 +8,7 @@
8
8
  v-for="(item, key) in props.blockItems"
9
9
  :key="key"
10
10
  :item="item"
11
+ :test-id="item.testId"
11
12
  />
12
13
  </div>
13
14
  </div>
@@ -3,6 +3,7 @@ export interface UI_I_BlockItem {
3
3
  iconClassName: string
4
4
  navigateTo?: string
5
5
  nav?: string
6
+ testId?: string
6
7
  }
7
8
 
8
9
  export interface UI_I_ShortcutsItems {
@@ -1,11 +1,13 @@
1
1
  <template>
2
2
  <div
3
3
  :class="['vmw-drawer animation', { show: isShow }]"
4
+ data-id="spice-console-drawer"
4
5
  @click.capture="onInputManagerFocus"
5
6
  >
6
7
  <div
7
8
  v-if="!isShow"
8
9
  ref="grab"
10
+ data-id="spice-console-drawer-toggle"
9
11
  class="vmw-drawer__open"
10
12
  :style="`top: ${y}px;`"
11
13
  @click="toggleDrawer"
@@ -18,6 +20,7 @@
18
20
  <h3>{{ localization.consolePanel }}</h3>
19
21
  <atoms-the-icon
20
22
  class="vmw-drawer-header__close"
23
+ data-id="spice-console-drawer-toggle-icon"
21
24
  name="close"
22
25
  @click="toggleDrawer"
23
26
  />
@@ -26,6 +29,7 @@
26
29
  <div class="vmw-drawer-body">
27
30
  <div
28
31
  class="vmw-drawer-body__btn animation toggle-fullscreen"
32
+ data-id="spice-console-drawer-toggle-fullscreen"
29
33
  @click="emits('toggle-fullscreen')"
30
34
  >
31
35
  {{ localization.toggleFullscreenMode }}
@@ -16,6 +16,7 @@
16
16
  },
17
17
  ]"
18
18
  :style="{ width: keyItem.width }"
19
+ :data-id="keyItem.testId"
19
20
  @click="onKeyPress(keyItem)"
20
21
  >
21
22
  <span>