bfg-common 1.4.884 → 1.4.901

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 (200) hide show
  1. package/assets/localization/local_en.json +6 -6
  2. package/assets/scss/common/normalize.scss +361 -361
  3. package/components/atoms/TheIcon3.vue +50 -50
  4. package/components/atoms/autocomplete/Autocomplete.vue +301 -301
  5. package/components/atoms/collapse/CollapseNav.vue +165 -165
  6. package/components/atoms/collapse/CollapseNavItem.vue +3 -1
  7. package/components/atoms/collapse/lib/models/interfaces.ts +1 -0
  8. package/components/atoms/dropdown/dropdown/Dropdown.vue +168 -168
  9. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  10. package/components/atoms/perPage/PerPage.vue +58 -53
  11. package/components/atoms/stack/StackBlock.vue +185 -185
  12. package/components/atoms/table/dataGrid/DataGrid.vue +1704 -1704
  13. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  14. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  15. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  16. package/components/atoms/tabs/Tabs.vue +1 -0
  17. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  18. package/components/common/accordion/Recursion.vue +222 -221
  19. package/components/common/accordion/lib/models/interfaces.ts +1 -0
  20. package/components/common/browse/BrowseNew.vue +237 -237
  21. package/components/common/browse/BrowseOld.vue +217 -217
  22. package/components/common/browse/blocks/contents/Files.vue +37 -37
  23. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  24. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  25. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  26. package/components/common/chartOptionsModal/counters/timespan/form/Form.vue +92 -102
  27. package/components/common/chartOptionsModal/counters/timespan/form/FormNew.vue +18 -39
  28. package/components/common/context/Context.vue +111 -111
  29. package/components/common/context/lib/models/interfaces.ts +31 -30
  30. package/components/common/context/recursion/Recursion.vue +87 -87
  31. package/components/common/context/recursion/RecursionNew.vue +238 -237
  32. package/components/common/context/recursion/RecursionOld.vue +228 -227
  33. package/components/common/details/DetailsItem.vue +109 -109
  34. package/components/common/diagramMain/DiagramMain.vue +897 -893
  35. package/components/common/diagramMain/Header.vue +214 -211
  36. package/components/common/diagramMain/lib/models/interfaces.ts +1 -0
  37. package/components/common/diagramMain/modals/lib/config/diagramConfig.ts +1 -0
  38. package/components/common/graph/Graph.vue +104 -104
  39. package/components/common/graph/GraphNew.vue +2 -4
  40. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  41. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  42. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  43. package/components/common/mainNavigationPanel/MainNavigationPanelNew.vue +335 -335
  44. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +310 -310
  45. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  46. package/components/common/monitor/advanced/Advanced.vue +0 -2
  47. package/components/common/monitor/advanced/AdvancedNew.vue +16 -28
  48. package/components/common/monitor/advanced/graphView/GraphView.vue +1 -0
  49. package/components/common/monitor/advanced/graphView/GraphViewNew.vue +4 -5
  50. package/components/common/monitor/advanced/table/tableNew/TableNew.vue +1 -8
  51. package/components/common/monitor/advanced/table/tableNew/lib/config/options.ts +2 -2
  52. package/components/common/monitor/advanced/tools/Tools.vue +121 -123
  53. package/components/common/monitor/advanced/tools/ToolsNew.vue +0 -9
  54. package/components/common/monitor/advanced/tools/chartOptionsModal/ChartOptionsModal.vue +0 -34
  55. package/components/common/monitor/advanced/tools/chartOptionsModal/ChartOptionsModalNew.vue +5 -17
  56. package/components/common/monitor/advanced/tools/chartOptionsModal/NotificationNew.vue +0 -2
  57. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/ActionsNew.vue +12 -38
  58. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/lib/utils/optionsActions.ts +1 -1
  59. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/Counters.vue +66 -76
  60. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/CountersNew.vue +2 -43
  61. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/lib/config/utils.ts +1040 -1040
  62. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/tableNew/TableNew.vue +0 -2
  63. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/Timespan.vue +0 -10
  64. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/TimespanNew.vue +14 -43
  65. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/objectNew/ObjectNew.vue +0 -6
  66. package/components/common/monitor/advanced/tools/chartOptionsModal/metrics/Metrics.vue +1 -1
  67. package/components/common/monitor/advanced/tools/chartOptionsModal/metrics/metricsNew/MetricsNew.vue +101 -0
  68. package/components/common/monitor/advanced/tools/chartOptionsModal/metrics/metricsNew/lib/utils/constructAccordion.ts +32 -0
  69. package/components/common/monitor/overview/OverviewNew.vue +142 -142
  70. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  71. package/components/common/monitor/overview/filters/Filters.vue +166 -166
  72. package/components/common/monitor/overview/filters/FiltersNew.vue +172 -172
  73. package/components/common/monitor/overview/filters/FiltersOld.vue +151 -151
  74. package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModal.vue +175 -175
  75. package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModalOld.vue +161 -161
  76. package/components/common/pages/home/StatusContent.vue +49 -49
  77. package/components/common/pages/home/headline/Headline.vue +45 -45
  78. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  79. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  80. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  81. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  82. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  83. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  84. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  85. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  86. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  87. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  88. package/components/common/pages/packages/Packages.vue +208 -208
  89. package/components/common/pages/shortcuts/block/BlockNew.vue +96 -96
  90. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  91. package/components/common/portlets/customAttributes/Portlet.vue +667 -667
  92. package/components/common/portlets/tag/Portlet.vue +433 -433
  93. package/components/common/recursionTree/RecursionTree.vue +223 -223
  94. package/components/common/select/button/ButtonDropdown.vue +108 -108
  95. package/components/common/spiceConsole/Drawer.vue +370 -370
  96. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  97. package/components/common/split/horizontal/HorizontalNew.vue +376 -376
  98. package/components/common/split/horizontal/HorizontalOld.vue +337 -337
  99. package/components/common/split/vertical/Vertical.vue +160 -160
  100. package/components/common/tools/Actions.vue +179 -175
  101. package/components/common/tools/lib/models/interfaces.ts +2 -1
  102. package/components/common/vm/actions/add/Add.vue +622 -622
  103. package/components/common/vm/actions/clone/Clone.vue +639 -639
  104. package/components/common/vm/actions/clone/lib/config/steps.ts +129 -129
  105. package/components/common/vm/actions/clone/toTemplate/ToTemplate.vue +634 -634
  106. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  107. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +275 -275
  108. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +274 -274
  109. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +177 -177
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +698 -698
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +410 -410
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +319 -319
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +99 -99
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  117. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +164 -164
  118. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  119. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  120. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  121. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  122. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  123. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  124. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +368 -368
  125. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +232 -232
  126. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +250 -250
  127. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  128. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  129. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +286 -286
  130. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  131. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  132. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  133. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  134. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  135. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  136. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  137. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  138. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  139. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  140. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  141. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  142. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  143. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  144. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  145. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  146. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  147. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  148. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  149. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  150. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  151. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  152. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  153. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  154. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  155. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  156. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  157. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  158. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  159. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  160. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  161. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  162. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  163. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  164. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  165. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  166. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  167. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  168. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  169. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  170. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  171. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  172. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  173. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  174. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  175. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  176. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  177. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  178. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  179. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  180. package/components/common/wizards/datastore/add/lib/config/steps.ts +138 -138
  181. package/components/common/wizards/network/add/Add.vue +1 -0
  182. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +105 -99
  183. package/components/common/wizards/vm/migrate/Migrate.vue +302 -302
  184. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  185. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  186. package/components/common/wizards/vm/migrate/select/network/table/network/Network.vue +150 -150
  187. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  188. package/components/common/wizards/vm/migrate/select/priority/Priority.vue +43 -43
  189. package/composables/productNameLocal.ts +30 -30
  190. package/composables/useAppVersion.ts +21 -21
  191. package/package.json +2 -2
  192. package/plugins/date.ts +233 -233
  193. package/plugins/directives.ts +24 -24
  194. package/plugins/recursion.ts +311 -311
  195. package/public/spice-console/lib/images/bitmap.js +203 -203
  196. package/public/spice-console/network/spicechannel.js +383 -383
  197. package/store/main/mutations.ts +7 -7
  198. package/store/main/state.ts +7 -7
  199. package/store/tasks/mappers/recentTasks.ts +64 -64
  200. package/components/common/monitor/advanced/tools/chartOptionsModal/metrics/MetricsNew.vue +0 -143
@@ -1,893 +1,897 @@
1
- <template>
2
- <div
3
- v-if="props.diagramData"
4
- :class="{ 'diagram-min-width': !props.inPortlet }"
5
- >
6
- <div class="diagram-main-container">
7
- <common-diagram-main-header
8
- :in-portlet="props.inPortlet"
9
- :is-show-diagram="isShowDiagram"
10
- :diagram-name="props.diagramData.diagramName"
11
- :test-id="props.diagramData.testId"
12
- @toggle-diagram="onToggleDiagram"
13
- @show-modal="onShowModal"
14
- />
15
- <common-diagram-main-diagram
16
- :diagram-data="props.diagramData"
17
- :is-show-diagram="isShowDiagram"
18
- :in-portlet="props.inPortlet"
19
- :networks-with-positions="networksWithPositions"
20
- :main-rect-height="mainRectHeight"
21
- :main-switch-line="mainSwitchLine"
22
- :selected-main-line="selectedMainLine"
23
- :adapters-with-positions="adaptersWithPositions"
24
- :selected-port="selectedPort"
25
- :selected-adapter="selectedAdapter"
26
- :selected-network="selectedNetwork"
27
- :selected-switch-line-y="selectedSwitchLineY"
28
- :is-dark-mode="props.isDarkMode"
29
- :networks-count="networksCount"
30
- @click-diagram="onClickDiagram"
31
- @toggle-adapters="onToggleAdapters"
32
- @select-adapter="onSelectAdapter"
33
- @toggle-ports="onTogglePorts"
34
- @select-port="onSelectPort"
35
- @select-network="onSelectNetwork"
36
- @show-modal="onShowModal"
37
- />
38
- </div>
39
- <common-diagram-main-modals
40
- :is-show-port-view-settings-modal="isShowPortViewSettingsModal"
41
- :is-show-network-view-settings-modal="isShowNetworkViewSettingsModal"
42
- :is-show-adapter-view-settings-modal="isShowAdapterViewSettingsModal"
43
- :is-show-vcenter-view-settings-modal="isShowVCenterViewSettingsModal"
44
- :is-show-network-remove-modal="isShowNetworkRemoveModal"
45
- :is-show-switch-remove-modal="isShowSwitchRemoveModal"
46
- :is-show-port-remove-modal="isShowPortRemoveModal"
47
- :is-show-network-edit-settings-modal="isShowNetworkEditSettingsModal"
48
- :is-show-port-edit-settings-modal="isShowPortEditSettingsModal"
49
- :is-show-switch-edit-settings-modal="isShowSwitchEditSettingsModal"
50
- :is-show-switch-view-settings-modal="isShowSwitchViewSettingsModal"
51
- :is-show-switch-manage-physical-adapters-modal="
52
- isShowSwitchManagePhysicalAdaptersModal
53
- "
54
- :is-show-add-networking-modal="isShowAddNetworkingModal"
55
- :is-show-migrate-vmkernel-adapter-modal="
56
- isShowMigrateVmkernelAdapterModal
57
- "
58
- :initial-data="initialData"
59
- :host-name="props.hostName"
60
- :is-remove-modal-loading="props.isRemoveModalLoading"
61
- :diagram-data="props.diagramData"
62
- :adapters="props.adapters"
63
- :is-dark-mode="props.isDarkMode"
64
- :is-edit-modal-loading="props.isEditModalLoading"
65
- :free-adapters="props.freeAdapters"
66
- :manage-physical-adapter-status="managePhysicalAdapterStatus"
67
- :initial-manage-physical-adapter-status="
68
- initialManagePhysicalAdapterStatus
69
- "
70
- :is-manage-adapters-modal-loading="props.isManageAdaptersModalLoading"
71
- :standard-switches-initial="props.standardSwitchesInitial"
72
- :selected-standard-switch-id="selectedStandardSwitchId"
73
- :selected-switch-id="selectedSwitchId"
74
- :tcp-stacks="props.tcpStacks"
75
- :is-networking-loading="props.isNetworkingLoading"
76
- :networks-list="props.networksList"
77
- :is-migrate-adapter-loading="props.isMigrateAdapterLoading"
78
- :diagrams-data="props.diagramsData"
79
- @hide-port-view-settings-modal="onHidePortViewSettingsModal"
80
- @hide-network-view-settings-modal="onHideNetworkViewSettingsModal"
81
- @hide-adapter-view-settings-modal="onHideAdapterViewSettingsModal"
82
- @hide-vcenter-view-settings-modal="onHideVCenterViewSettingsModal"
83
- @hide-switch-view-settings-modal="onHideSwitchViewSettingsModal"
84
- @hide-network-remove-modal="onHideNetworkRemoveModal"
85
- @hide-switch-remove-modal="onHideSwitchRemoveModal"
86
- @hide-port-remove-modal="onHidePortRemoveModal"
87
- @hide-network-edit-settings-modal="onHideNetworkEditSettingsModal"
88
- @hide-port-edit-settings-modal="onHidePortEditSettingsModal"
89
- @hide-switch-edit-settings-modal="onHideSwitchEditSettingsModal"
90
- @hide-switch-manage-physical-adapters-modal="
91
- onHideSwitchManagePhysicalAdaptersModal
92
- "
93
- @hide-add-networking-modal="onHideAddNetworkingModal"
94
- @hide-migrate-vmkernel-adapter-modal="onHideMigrateVmkernelAdapterModal"
95
- @remove="onRemove"
96
- @send-edit-data="onSendEditData"
97
- @change-edit-fields-data="onChangeEditFieldsData"
98
- @check-network-label="onCheckNetworkLabel"
99
- @send-manage-physical-adapters-data="onSendManagePhysicalAdaptersData"
100
- @change-adapter-status="onChangeManagePhysicalAdapterStatus"
101
- @get-free-adapters="onGetFreeAdapters"
102
- @get-existing-standard-switches="onGetExistingStandardSwitches"
103
- @get-tcp-stacks="onGetTcpStacks"
104
- @send-add-networking-data="onSendNetworkData"
105
- @add-networking-data-validate="onValidateBeforeSending"
106
- />
107
- </div>
108
- </template>
109
-
110
- <script setup lang="ts">
111
- import type {
112
- UI_I_Adapter,
113
- UI_I_AdapterStatus,
114
- UI_I_AdaptersWithPositions,
115
- UI_I_MainRectHeights,
116
- UI_I_ModalsInitialData,
117
- UI_I_Network,
118
- UI_I_EditFieldsData,
119
- UI_I_NetworksWithPositions,
120
- UI_I_SelectedAdapter,
121
- UI_I_SelectedPort,
122
- UI_I_SwitchLine,
123
- UI_I_ToggleDiagramAdaptersPayload,
124
- UI_I_ToggleDiagramPortsPayload,
125
- UI_I_PortToggleFlag,
126
- UI_I_DiagramData,
127
- UI_I_SwitchAdapterItem,
128
- } from '~/components/common/diagramMain/lib/models/interfaces'
129
- import type {
130
- UI_I_ArbitraryObject,
131
- UI_I_ItemsWithTotalCounts,
132
- } from '~/lib/models/interfaces'
133
- import type {
134
- UI_I_Switch,
135
- UI_I_TCPStack,
136
- } from '~/components/common/wizards/network/add/lib/models/interfaces'
137
- import type { UI_T_EditData } from '~/components/common/wizards/network/add/lib/models/types'
138
- import type { UI_T_Adapters } from '~/components/common/diagramMain/lib/models/types'
139
- import { UI_E_NetworkType, UI_E_PositionsY } from './lib/models/enums'
140
- import {
141
- managePhysicalAdapterStatusInitial,
142
- mainRectHeightsInitial,
143
- switchLineInitial,
144
- selectedPortInitial,
145
- selectedSwitchLineYInitial,
146
- selectedAdapterInitial,
147
- } from '~/components/common/diagramMain/lib/config'
148
- import {
149
- hasPortAndNetwork,
150
- networksPositions,
151
- getSelectNetworkDataFunc,
152
- getSelectPortDataFunc,
153
- countAdaptersHeight,
154
- getAdaptersPositions,
155
- } from '~/components/common/diagramMain/lib/utils/utils'
156
-
157
- const props = withDefaults(
158
- defineProps<{
159
- diagramData: UI_I_DiagramData
160
- inPortlet?: boolean
161
- standardSwitchesInitial?: UI_I_Switch[]
162
- hostName?: string
163
- adapters?: UI_I_ItemsWithTotalCounts<UI_I_SwitchAdapterItem>
164
- freeAdapters?: UI_I_Adapter[]
165
- networksList?: UI_I_Network[]
166
- isDarkMode: boolean
167
- tcpStacks?: UI_I_TCPStack[]
168
- diagramsData?: UI_I_DiagramData[]
169
- isManageAdaptersModalLoading?: boolean
170
- isNetworkingLoading?: boolean
171
- isRemoveModalLoading?: boolean
172
- isEditModalLoading?: boolean
173
- isMigrateAdapterLoading?: boolean
174
- }>(),
175
- {
176
- diagramData: null,
177
- inPortlet: false,
178
- standardSwitchesInitial: () => [],
179
- hostName: '',
180
- adapters: () => ({
181
- total_items: 0,
182
- total_pages: 0,
183
- items: [],
184
- }),
185
- freeAdapters: () => [],
186
- networksList: () => [],
187
- tcpStacks: () => [],
188
- diagramsData: [],
189
- isManageAdaptersModalLoading: false,
190
- isNetworkingLoading: false,
191
- isRemoveModalLoading: false,
192
- isEditModalLoading: false,
193
- isMigrateAdapterLoading: false,
194
- }
195
- )
196
-
197
- const initialData = ref<UI_I_ModalsInitialData>({})
198
- const switchInitialData = ref<UI_I_ModalsInitialData>({})
199
-
200
- watch(
201
- () => props.diagramData?.networking,
202
- (initial: UI_I_ModalsInitialData | undefined) => {
203
- if (initial) {
204
- initialData.value = initial
205
- switchInitialData.value = initial
206
- }
207
- },
208
- { deep: true, immediate: true }
209
- )
210
-
211
- const onValidateBeforeSending = (
212
- data: UI_T_EditData,
213
- type: string,
214
- setValidation: (messages: UI_I_ArbitraryObject<string>) => void
215
- ) => {
216
- emits('add-networking-data-validate', data, type, setValidation)
217
- }
218
-
219
- let initialManagePhysicalAdapterStatus = ref<UI_I_AdapterStatus>(
220
- managePhysicalAdapterStatusInitial
221
- )
222
-
223
- const managePhysicalAdapterStatus = ref<UI_I_AdapterStatus>(
224
- useDeepCopy(initialManagePhysicalAdapterStatus.value)
225
- )
226
-
227
- watch(
228
- () => props.diagramData,
229
- (newValue: UI_I_DiagramData) => {
230
- if (newValue?.networking) {
231
- initialManagePhysicalAdapterStatus.value = {
232
- active: useDeepCopy(props.diagramData?.networking?.activeAdapters),
233
- standby: useDeepCopy(props.diagramData?.networking?.standbyAdapters),
234
- unused: useDeepCopy(props.diagramData?.networking?.unusedAdapters),
235
- }
236
-
237
- managePhysicalAdapterStatus.value = useDeepCopy(
238
- initialManagePhysicalAdapterStatus.value
239
- )
240
- }
241
- },
242
- { deep: true, immediate: true }
243
- )
244
-
245
- const onChangeManagePhysicalAdapterStatus = (
246
- adapterStatusNew: UI_I_AdapterStatus
247
- ) => {
248
- managePhysicalAdapterStatus.value = adapterStatusNew
249
- }
250
-
251
- const isShowSwitchManagePhysicalAdaptersModal = ref<boolean>(false)
252
- const onHideSwitchManagePhysicalAdaptersModal = (): void => {
253
- isShowSwitchManagePhysicalAdaptersModal.value = false
254
- }
255
-
256
- const onSendManagePhysicalAdaptersData = (
257
- adapterStatus: UI_I_AdapterStatus,
258
- switchName: string,
259
- hideModal: () => void
260
- ) => {
261
- emits(
262
- 'send-manage-physical-adapters-data',
263
- adapterStatus,
264
- switchName,
265
- hideModal
266
- )
267
- }
268
-
269
- const isShowSwitchViewSettingsModal = ref<boolean>(false)
270
- const isShowSwitchEditSettingsModal = ref<boolean>(false)
271
- const isShowSwitchRemoveModal = ref<boolean>(false)
272
- const onHideSwitchViewSettingsModal = (): void => {
273
- isShowSwitchViewSettingsModal.value = false
274
- }
275
- const onHideSwitchEditSettingsModal = (): void => {
276
- isShowSwitchEditSettingsModal.value = false
277
- }
278
- const onHideSwitchRemoveModal = (): void => {
279
- isShowSwitchRemoveModal.value = false
280
- }
281
-
282
- const isShowAdapterViewSettingsModal = ref<boolean>(false)
283
- const onHideAdapterViewSettingsModal = (): void => {
284
- isShowAdapterViewSettingsModal.value = false
285
- }
286
-
287
- const isShowNetworkViewSettingsModal = ref<boolean>(false)
288
- const isShowNetworkEditSettingsModal = ref<boolean>(false)
289
- const isShowNetworkRemoveModal = ref<boolean>(false)
290
- const onHideNetworkViewSettingsModal = (): void => {
291
- isShowNetworkViewSettingsModal.value = false
292
- }
293
- const onHideNetworkEditSettingsModal = (): void => {
294
- isShowNetworkEditSettingsModal.value = false
295
- }
296
- const onHideNetworkRemoveModal = (): void => {
297
- isShowNetworkRemoveModal.value = false
298
- }
299
-
300
- const isShowPortViewSettingsModal = ref<boolean>(false)
301
- const isShowPortEditSettingsModal = ref<boolean>(false)
302
- const isShowPortRemoveModal = ref<boolean>(false)
303
- const onHidePortViewSettingsModal = (): void => {
304
- isShowPortViewSettingsModal.value = false
305
- }
306
- const onHidePortEditSettingsModal = (): void => {
307
- isShowPortEditSettingsModal.value = false
308
- }
309
- const onHidePortRemoveModal = (): void => {
310
- isShowPortRemoveModal.value = false
311
- }
312
-
313
- const isShowVCenterViewSettingsModal = ref<boolean>(false)
314
- const onHideVCenterViewSettingsModal = (): void => {
315
- isShowVCenterViewSettingsModal.value = false
316
- }
317
- const isShowAddNetworkingModal = ref<boolean>(false)
318
- const onHideAddNetworkingModal = (): void => {
319
- isShowAddNetworkingModal.value = false
320
- }
321
- const isShowMigrateVmkernelAdapterModal = ref<boolean>(false)
322
- const onHideMigrateVmkernelAdapterModal = (): void => {
323
- isShowMigrateVmkernelAdapterModal.value = false
324
- }
325
-
326
- const selectedStandardSwitchId = ref<string>('')
327
- const selectedSwitchId = ref<string>('')
328
-
329
- const onShowModal = (
330
- value: string,
331
- properties: UI_I_ModalsInitialData
332
- ): void => {
333
- switch (value) {
334
- case 'port-view-settings':
335
- initialData.value = properties
336
- isShowPortViewSettingsModal.value = true
337
- break
338
- case 'network-view-settings':
339
- isShowNetworkViewSettingsModal.value = true
340
- initialData.value = properties
341
- break
342
- case 'adapter-view-settings':
343
- isShowAdapterViewSettingsModal.value = true
344
- initialData.value = properties
345
- break
346
- case 'v-center-view-settings':
347
- isShowVCenterViewSettingsModal.value = true
348
- initialData.value = properties
349
- break
350
- case 'network-edit-settings':
351
- isShowNetworkEditSettingsModal.value = true
352
- initialData.value = properties
353
- break
354
- case 'port-edit-settings':
355
- initialData.value = properties
356
- isShowPortEditSettingsModal.value = true
357
- break
358
- case 'network-port-remove':
359
- initialData.value = properties
360
- isShowNetworkRemoveModal.value = true
361
- break
362
- case 'port-remove':
363
- initialData.value = properties
364
- isShowPortRemoveModal.value = true
365
- break
366
- case 'switch-edit':
367
- isShowSwitchEditSettingsModal.value = true
368
- initialData.value = useDeepCopy(switchInitialData.value)
369
- break
370
- case 'switch-manage-physical-adapters':
371
- isShowSwitchManagePhysicalAdaptersModal.value = true
372
- break
373
- case 'add-networking':
374
- isShowAddNetworkingModal.value = true
375
- selectedStandardSwitchId.value = properties.switch_name
376
- selectedSwitchId.value = properties.switch_name
377
- break
378
- case 'switch-view-settings':
379
- isShowSwitchViewSettingsModal.value = true
380
- initialData.value = useDeepCopy(switchInitialData.value)
381
- break
382
- case 'migrate-vmkernel-adapter':
383
- isShowMigrateVmkernelAdapterModal.value = true
384
- break
385
- case 'switch-remove':
386
- isShowSwitchRemoveModal.value = true
387
- break
388
- }
389
- }
390
-
391
- const onRemove = (id: string, type: string) => {
392
- if (type === 'network' && selectedNetwork.value === id) {
393
- selectedNetwork.value = '-1'
394
- resetSelection()
395
- } else if (type === 'port' && selectedPort.value.portId === id) {
396
- selectedPort.value.networkId = '-1'
397
- selectedPort.value.portId = '-1'
398
- resetSelection()
399
- }
400
-
401
- const hideModal =
402
- type === 'network'
403
- ? onHideNetworkRemoveModal
404
- : type === 'switch'
405
- ? onHideSwitchRemoveModal
406
- : onHidePortRemoveModal
407
-
408
- emits('remove', id, type, hideModal)
409
- }
410
- const onChangeEditFieldsData = (newEditFieldsData: UI_I_EditFieldsData) => {
411
- emits('change-edit-fields-data', newEditFieldsData)
412
- }
413
- const onCheckNetworkLabel = (
414
- label: string,
415
- sendMessage: (message: string) => void
416
- ) => {
417
- emits('check-network-label', label, sendMessage)
418
- }
419
- const onGetExistingStandardSwitches = () => {
420
- emits('get-existing-standard-switches')
421
- }
422
- const onGetTcpStacks = () => {
423
- emits('get-tcp-stacks')
424
- }
425
- const onGetFreeAdapters = (showModal: () => void) => {
426
- emits('get-free-adapters', showModal)
427
- }
428
- const onSendNetworkData = (
429
- data: UI_T_EditData,
430
- type: string,
431
- hideModal: () => void
432
- ) => {
433
- emits('send-add-networking-data', data, type, hideModal)
434
- }
435
- const onSendEditData = (type: string, hideModal: () => void, id?: string) => {
436
- emits('send-edit-data', type, initialData.value, hideModal, id)
437
- }
438
- const isShowDiagram = ref<boolean>(true)
439
- const onToggleDiagram = () => {
440
- isShowDiagram.value = !isShowDiagram.value
441
- }
442
- const mainRectHeights = ref<UI_I_MainRectHeights>(
443
- useDeepCopy(mainRectHeightsInitial)
444
- )
445
-
446
- const switchLine = ref<UI_I_SwitchLine>(useDeepCopy(switchLineInitial))
447
- const mainSwitchLine = computed<UI_I_SwitchLine>(
448
- () =>
449
- (switchLine.value.ay && {
450
- y1: Math.min(switchLine.value.y1, switchLine.value.ay),
451
- y2: Math.max(switchLine.value.y2, switchLine.value.ay),
452
- }) || { y1: 0, y2: 0 }
453
- )
454
-
455
- const selectedMainLine = ref(false)
456
- const selectedPort = ref<UI_I_SelectedPort>(useDeepCopy(selectedPortInitial))
457
- const selectedAdapter = ref<UI_I_SelectedAdapter>(
458
- useDeepCopy(selectedAdapterInitial)
459
- )
460
- const selectedNetwork = ref<string>('-1')
461
-
462
- const selectedSwitchLineY = ref<UI_I_SwitchLine>(
463
- useDeepCopy(selectedSwitchLineYInitial)
464
- )
465
- const mainRectHeight = computed<number>(() =>
466
- Math.max(
467
- mainRectHeights.value.networksHeight,
468
- mainRectHeights.value.adaptersHeight
469
- )
470
- )
471
-
472
- const countNetworksPositions = (
473
- newNetworks?: UI_I_Network[] | null
474
- ): UI_I_NetworksWithPositions[] => {
475
- let lastNetworkHeight = 0
476
- let lastPosition = UI_E_PositionsY.DIAGRAM_TOP + UI_E_PositionsY.BETWEEN_RECTS
477
- mainRectHeights.value.networksHeight =
478
- UI_E_PositionsY.DIAGRAM_TOP + UI_E_PositionsY.BETWEEN_RECTS
479
-
480
- const lastIndex = props.diagramData?.networks.findLastIndex(
481
- (network: UI_I_Network) =>
482
- network.activeAdapters.length > 0 && network.state.state !== 3
483
- )
484
-
485
- return (
486
- (newNetworks ? newNetworks : props.diagramData?.networks)?.map(
487
- (network: UI_I_Network, index: number) => {
488
- let portsCount = 0
489
- if (
490
- network.networkType ===
491
- (UI_E_NetworkType.VMPortsGroup || UI_E_NetworkType.VCenter)
492
- ) {
493
- portsCount = network.ports.length
494
- } else {
495
- portsCount = network.sysx ? 1 : 0
496
- }
497
- const portsHeight = network.toggle
498
- ? network.networkType === UI_E_NetworkType.VCenter
499
- ? portsCount * UI_E_PositionsY.SINGLE_V_CENTER_HEIGHT
500
- : portsCount * UI_E_PositionsY.SINGLE_PORT_HEIGHT
501
- : 0
502
- const networkHeight =
503
- UI_E_PositionsY.PORTS_FROM_RECT_TOP +
504
- portsHeight +
505
- (network.networkType === UI_E_NetworkType.VCenter
506
- ? UI_E_PositionsY.SINGLE_V_CENTER_HEIGHT - 10
507
- : UI_E_PositionsY.SINGLE_PORT_HEIGHT) +
508
- UI_E_PositionsY.SPACE_FROM_RECT_BOTTOM
509
-
510
- lastPosition +=
511
- lastNetworkHeight + (index && UI_E_PositionsY.BETWEEN_RECTS)
512
- lastNetworkHeight = networkHeight
513
-
514
- const connectLineY = lastPosition + networkHeight / 2
515
- const titlePosition = lastPosition + UI_E_PositionsY.TITLE_FROM_RECT_TOP
516
- const vlanPosition = lastPosition + UI_E_PositionsY.VLAN_FROM_RECT_TOP
517
- const portsPosition = lastPosition + UI_E_PositionsY.PORTS_FROM_RECT_TOP
518
-
519
- const networkPortsName =
520
- (network.networkType === UI_E_NetworkType.VMkernel &&
521
- 'VMkernel Ports') ||
522
- (network.networkType === UI_E_NetworkType.VMPortsGroup &&
523
- 'Virtual Machines') ||
524
- (network.networkType === UI_E_NetworkType.VCenter &&
525
- 'Virtual Machines') ||
526
- ''
527
-
528
- lastIndex !== -1 && index === 0 && (switchLine.value.y1 = connectLineY)
529
- lastIndex !== -1 &&
530
- index === lastIndex &&
531
- (switchLine.value.y2 = connectLineY)
532
-
533
- mainRectHeights.value.networksHeight +=
534
- networkHeight + UI_E_PositionsY.BETWEEN_RECTS
535
-
536
- const networkWithPortsPositions =
537
- network.networkType ===
538
- (UI_E_NetworkType.VMPortsGroup || UI_E_NetworkType.VCenter)
539
- ? network.ports.map((port, index) => {
540
- const portPosition =
541
- portsPosition +
542
- (network.networkType === UI_E_NetworkType.VCenter
543
- ? (index + 1) * UI_E_PositionsY.SINGLE_V_CENTER_HEIGHT - 10
544
- : (index + 1) * UI_E_PositionsY.SINGLE_PORT_HEIGHT)
545
-
546
- return {
547
- ...port,
548
- portPosition,
549
- }
550
- })
551
- : (network.sysx && [
552
- {
553
- id: network.sysx?.id,
554
- name: `${network.sysx?.id} ${
555
- network.sysx.ipv4_settings.ipv4
556
- ? `: ${network.sysx.ipv4_settings.ipv4}`
557
- : ''
558
- }`,
559
- state: network.sysx.state,
560
- portPosition:
561
- portsPosition + UI_E_PositionsY.SINGLE_PORT_HEIGHT,
562
- },
563
- ]) ||
564
- []
565
-
566
- return {
567
- ...network,
568
- ports: networkWithPortsPositions,
569
- portsCount,
570
- portsHeight,
571
- networkHeight,
572
- rectPosition: lastPosition,
573
- connectLineY,
574
- titlePosition,
575
- vlanPosition,
576
- vlanId: network.vlanId || '--',
577
- portsPosition,
578
- networkPortsName,
579
- }
580
- }
581
- ) || []
582
- )
583
- }
584
- const networksWithPositions = ref<UI_I_NetworksWithPositions[]>(
585
- countNetworksPositions()
586
- )
587
-
588
- const isPortToggled = ref<UI_I_PortToggleFlag>({
589
- value: false,
590
- id: '',
591
- })
592
-
593
- const countAdaptersPositions = (): UI_I_AdaptersWithPositions => {
594
- const { height, toggle, adaptersCount } = countAdaptersHeight(
595
- props.diagramData
596
- )
597
-
598
- mainRectHeights.value.adaptersHeight =
599
- UI_E_PositionsY.DIAGRAM_TOP + UI_E_PositionsY.BETWEEN_RECTS * 2 + height
600
-
601
- const { titlePosition, rectPosition, adaptersConnectLineY, adapters } =
602
- getAdaptersPositions(props.diagramData, height)
603
-
604
- switchLine.value.ay = adaptersConnectLineY
605
-
606
- return {
607
- toggle,
608
- height,
609
- adapters,
610
- rectPosition,
611
- adaptersConnectLineY,
612
- titlePosition,
613
- adaptersCount,
614
- }
615
- }
616
-
617
- const adaptersWithPositions = computed<UI_I_AdaptersWithPositions>(() => {
618
- return countAdaptersPositions()
619
- })
620
-
621
- const networksCount = computed<number>(
622
- () =>
623
- networksWithPositions.value.filter(
624
- (networkWithPositions: UI_I_NetworksWithPositions) =>
625
- networkWithPositions.activeAdapters.length > 0 &&
626
- networkWithPositions.state.state !== 3
627
- ).length
628
- )
629
-
630
- watch(
631
- () => props.diagramData?.networks,
632
- (newValue: UI_I_Network[] | null) => {
633
- networksWithPositions.value = countNetworksPositions(newValue)
634
-
635
- isPortToggled.value.value && handlePortToggle()
636
-
637
- if (selectedAdapter.value.adapterId !== '-1') {
638
- onSelectAdapter(selectedAdapter.value.adapterId)
639
- return
640
- }
641
-
642
- if (selectedPort.value.portId !== '-1') {
643
- onSelectPort(selectedPort.value.networkId, selectedPort.value.portId)
644
- return
645
- }
646
-
647
- if (selectedNetwork.value !== '-1') {
648
- cashedNetworkId.value = '-1'
649
- onSelectNetwork(selectedNetwork.value)
650
- return
651
- }
652
-
653
- if (selectedMainLine.value && networksCount.value === 0) {
654
- selectedMainLine.value = false
655
- return
656
- }
657
-
658
- if (selectedMainLine.value) return
659
-
660
- resetSelection()
661
- },
662
- { deep: true }
663
- )
664
-
665
- const onSelectPort = (networkId: string, portId: string): void => {
666
- const selectPortData = getSelectPortDataFunc(
667
- networkId,
668
- portId,
669
- networksWithPositions.value,
670
- adaptersWithPositions.value
671
- )
672
-
673
- if (!selectPortData) return
674
-
675
- selectedSwitchLineY.value = selectPortData.selectedSwitchLineY
676
- selectedPort.value = selectPortData.selectedPort
677
- }
678
-
679
- const cashedNetworkId = ref<string>('-1')
680
-
681
- const onSelectNetwork = (networkId: string): void => {
682
- if (cashedNetworkId.value === networkId) {
683
- resetSelection()
684
- cashedNetworkId.value = '-1'
685
- return
686
- }
687
-
688
- selectedNetwork.value = networkId
689
-
690
- const selectNetworkData = getSelectNetworkDataFunc(
691
- networkId,
692
- networksWithPositions.value,
693
- adaptersWithPositions.value
694
- )
695
-
696
- cashedNetworkId.value = networkId
697
-
698
- if (!selectNetworkData) return
699
-
700
- selectedSwitchLineY.value = selectNetworkData.selectedSwitchLineY
701
- selectedPort.value = selectNetworkData.selectedPort
702
- }
703
-
704
- const onSelectAdapter = (adapterId: string): void => {
705
- const selectedNetworks: UI_I_NetworksWithPositions[] =
706
- networksWithPositions.value?.filter(
707
- (network: UI_I_NetworksWithPositions) =>
708
- network.activeAdapters.includes(adapterId) && network.state.state !== 3
709
- )
710
-
711
- let pos: number[] = selectedNetworks?.reduce(networksPositions, [])
712
- let selectedAdapterPosition: number | null =
713
- adaptersWithPositions.value.adapters?.find(
714
- (adapter: UI_T_Adapters) => adapter.id === adapterId
715
- )?.adapterPosition || null
716
-
717
- selectedAdapterPosition !== null &&
718
- (selectedAdapterPosition += 7.5) &&
719
- pos?.push(selectedAdapterPosition)
720
-
721
- pos = pos?.sort((y1, y2) => y1 - y2)
722
-
723
- if (pos) {
724
- selectedSwitchLineY.value = {
725
- y1: pos[0],
726
- y2: pos[pos.length - 1],
727
- }
728
- }
729
-
730
- selectedAdapter.value = {
731
- adapterId,
732
- connectedPorts:
733
- selectedNetworks?.map((network: UI_I_Network) => ({
734
- networkId: network.id,
735
- ports: network.ports.map((port) => port.id),
736
- })) || [],
737
- }
738
- }
739
-
740
- const resetSelection = (): void => {
741
- selectedPort.value = useDeepCopy(selectedPortInitial)
742
- selectedSwitchLineY.value = useDeepCopy(selectedSwitchLineYInitial)
743
- selectedAdapter.value = useDeepCopy(selectedAdapterInitial)
744
- selectedNetwork.value = '-1'
745
- selectedMainLine.value = false
746
- }
747
-
748
- const emits = defineEmits<{
749
- (
750
- event: 'toggle-ports',
751
- payload: Omit<UI_I_ToggleDiagramPortsPayload, 'paths'>
752
- ): void
753
- (
754
- event: 'toggle-adapters',
755
- payload: Omit<UI_I_ToggleDiagramAdaptersPayload, 'paths'>
756
- ): void
757
- (event: 'get-existing-standard-switches'): void
758
- (
759
- event: 'send-add-networking-data',
760
- data: UI_T_EditData,
761
- type: string,
762
- hideModal: () => void
763
- ): void
764
- (
765
- event: 'add-networking-data-validate',
766
- data: UI_T_EditData,
767
- type: string,
768
- setValidation: (message: UI_I_ArbitraryObject<string>) => void
769
- ): void
770
- (
771
- event: 'check-network-label',
772
- label: string,
773
- sendMessage: (message: string) => void
774
- ): void
775
- (event: 'get-free-adapters', showModal: () => void): void
776
- (
777
- event: 'send-edit-data',
778
- type: string,
779
- initialData: UI_I_ModalsInitialData,
780
- hideModal: () => void,
781
- id?: string
782
- ): void
783
- (event: 'change-edit-fields-data', editFieldsData: UI_I_EditFieldsData): void
784
- (event: 'remove', id: string, type: string, hideModal: () => void): void
785
- (
786
- event: 'send-manage-physical-adapters-data',
787
- adapterStatus: UI_I_AdapterStatus,
788
- switchName: string,
789
- hideModal: () => void
790
- ): void
791
- (event: 'get-tcp-stacks'): void
792
- }>()
793
-
794
- const onTogglePorts = (
795
- id: string,
796
- isToggle: boolean,
797
- diagramId: string
798
- ): void => {
799
- emits('toggle-ports', {
800
- id,
801
- isToggle,
802
- diagramId,
803
- })
804
-
805
- isPortToggled.value = {
806
- value: true,
807
- id: id,
808
- }
809
- }
810
-
811
- const handlePortToggle = () => {
812
- cashedNetworkId.value = '-1'
813
-
814
- selectedPort.value.portId !== '-1' &&
815
- onSelectPort(selectedPort.value.networkId, selectedPort.value.portId)
816
- selectedAdapter.value.adapterId !== '-1' &&
817
- onSelectAdapter(selectedAdapter.value.adapterId)
818
- selectedNetwork.value !== '-1' && onSelectNetwork(selectedNetwork.value)
819
- hasPortAndNetwork(selectedPort.value, isPortToggled.value.id) &&
820
- resetSelection()
821
-
822
- isPortToggled.value = {
823
- value: false,
824
- id: '',
825
- }
826
- }
827
-
828
- const onToggleAdapters = (): void => {
829
- cashedNetworkId.value = '-1'
830
-
831
- const newState = !adaptersWithPositions.value.toggle
832
- const payload: Omit<UI_I_ToggleDiagramAdaptersPayload, 'paths'> = {
833
- isToggle: newState,
834
- diagramId: props.diagramData?.id || '',
835
- }
836
-
837
- emits('toggle-adapters', payload)
838
-
839
- selectedPort.value.portId !== '-1' &&
840
- onSelectPort(selectedPort.value.networkId, selectedPort.value.portId)
841
- selectedAdapter.value.adapterId !== '-1' && resetSelection()
842
- selectedNetwork.value !== '-1' && onSelectNetwork(selectedNetwork.value)
843
- }
844
-
845
- const onClickDiagram = (ev: MouseEvent): void => {
846
- const target = ev.target as HTMLElement
847
- const targetClassList = target.classList
848
-
849
- if (!targetClassList.contains('network-title')) {
850
- cashedNetworkId.value = '-1'
851
- }
852
-
853
- if (targetClassList.contains('main-line__handler')) {
854
- resetSelection()
855
- selectedMainLine.value = true
856
- } else {
857
- !(
858
- target.closest('.diagram-block__toggle') ||
859
- target.closest('.diagram-actions') ||
860
- target.closest('.dropdown-actions-container')
861
- ) && resetSelection()
862
- }
863
- }
864
- </script>
865
-
866
- <style scoped lang="scss">
867
- .diagram {
868
- &-min-width {
869
- //min-width: 745px;
870
- //min-width: 764px;
871
- }
872
- &-main-container {
873
- padding-top: 5px;
874
- }
875
- }
876
- </style>
877
- <style lang="scss">
878
- .diagram-main-actions__popup.navbar-dropdown-menu {
879
- .btn {
880
- border-radius: 3px;
881
- border-bottom: none;
882
- &:hover {
883
- border-bottom: none;
884
- }
885
- span {
886
- font-size: 14px;
887
- }
888
- &:active {
889
- box-shadow: none;
890
- }
891
- }
892
- }
893
- </style>
1
+ <template>
2
+ <div
3
+ v-if="props.diagramData"
4
+ :class="{ 'diagram-min-width': !props.inPortlet }"
5
+ >
6
+ <div class="diagram-main-container">
7
+ <common-diagram-main-header
8
+ :project="props.project"
9
+ :in-portlet="props.inPortlet"
10
+ :is-show-diagram="isShowDiagram"
11
+ :diagram-name="props.diagramData.diagramName"
12
+ :test-id="props.diagramData.testId"
13
+ @toggle-diagram="onToggleDiagram"
14
+ @show-modal="onShowModal"
15
+ />
16
+ <common-diagram-main-diagram
17
+ :diagram-data="props.diagramData"
18
+ :is-show-diagram="isShowDiagram"
19
+ :in-portlet="props.inPortlet"
20
+ :networks-with-positions="networksWithPositions"
21
+ :main-rect-height="mainRectHeight"
22
+ :main-switch-line="mainSwitchLine"
23
+ :selected-main-line="selectedMainLine"
24
+ :adapters-with-positions="adaptersWithPositions"
25
+ :selected-port="selectedPort"
26
+ :selected-adapter="selectedAdapter"
27
+ :selected-network="selectedNetwork"
28
+ :selected-switch-line-y="selectedSwitchLineY"
29
+ :is-dark-mode="props.isDarkMode"
30
+ :networks-count="networksCount"
31
+ @click-diagram="onClickDiagram"
32
+ @toggle-adapters="onToggleAdapters"
33
+ @select-adapter="onSelectAdapter"
34
+ @toggle-ports="onTogglePorts"
35
+ @select-port="onSelectPort"
36
+ @select-network="onSelectNetwork"
37
+ @show-modal="onShowModal"
38
+ />
39
+ </div>
40
+ <common-diagram-main-modals
41
+ :is-show-port-view-settings-modal="isShowPortViewSettingsModal"
42
+ :is-show-network-view-settings-modal="isShowNetworkViewSettingsModal"
43
+ :is-show-adapter-view-settings-modal="isShowAdapterViewSettingsModal"
44
+ :is-show-vcenter-view-settings-modal="isShowVCenterViewSettingsModal"
45
+ :is-show-network-remove-modal="isShowNetworkRemoveModal"
46
+ :is-show-switch-remove-modal="isShowSwitchRemoveModal"
47
+ :is-show-port-remove-modal="isShowPortRemoveModal"
48
+ :is-show-network-edit-settings-modal="isShowNetworkEditSettingsModal"
49
+ :is-show-port-edit-settings-modal="isShowPortEditSettingsModal"
50
+ :is-show-switch-edit-settings-modal="isShowSwitchEditSettingsModal"
51
+ :is-show-switch-view-settings-modal="isShowSwitchViewSettingsModal"
52
+ :is-show-switch-manage-physical-adapters-modal="
53
+ isShowSwitchManagePhysicalAdaptersModal
54
+ "
55
+ :is-show-add-networking-modal="isShowAddNetworkingModal"
56
+ :is-show-migrate-vmkernel-adapter-modal="
57
+ isShowMigrateVmkernelAdapterModal
58
+ "
59
+ :initial-data="initialData"
60
+ :host-name="props.hostName"
61
+ :is-remove-modal-loading="props.isRemoveModalLoading"
62
+ :diagram-data="props.diagramData"
63
+ :adapters="props.adapters"
64
+ :is-dark-mode="props.isDarkMode"
65
+ :is-edit-modal-loading="props.isEditModalLoading"
66
+ :free-adapters="props.freeAdapters"
67
+ :manage-physical-adapter-status="managePhysicalAdapterStatus"
68
+ :initial-manage-physical-adapter-status="
69
+ initialManagePhysicalAdapterStatus
70
+ "
71
+ :is-manage-adapters-modal-loading="props.isManageAdaptersModalLoading"
72
+ :standard-switches-initial="props.standardSwitchesInitial"
73
+ :selected-standard-switch-id="selectedStandardSwitchId"
74
+ :selected-switch-id="selectedSwitchId"
75
+ :tcp-stacks="props.tcpStacks"
76
+ :is-networking-loading="props.isNetworkingLoading"
77
+ :networks-list="props.networksList"
78
+ :is-migrate-adapter-loading="props.isMigrateAdapterLoading"
79
+ :diagrams-data="props.diagramsData"
80
+ @hide-port-view-settings-modal="onHidePortViewSettingsModal"
81
+ @hide-network-view-settings-modal="onHideNetworkViewSettingsModal"
82
+ @hide-adapter-view-settings-modal="onHideAdapterViewSettingsModal"
83
+ @hide-vcenter-view-settings-modal="onHideVCenterViewSettingsModal"
84
+ @hide-switch-view-settings-modal="onHideSwitchViewSettingsModal"
85
+ @hide-network-remove-modal="onHideNetworkRemoveModal"
86
+ @hide-switch-remove-modal="onHideSwitchRemoveModal"
87
+ @hide-port-remove-modal="onHidePortRemoveModal"
88
+ @hide-network-edit-settings-modal="onHideNetworkEditSettingsModal"
89
+ @hide-port-edit-settings-modal="onHidePortEditSettingsModal"
90
+ @hide-switch-edit-settings-modal="onHideSwitchEditSettingsModal"
91
+ @hide-switch-manage-physical-adapters-modal="
92
+ onHideSwitchManagePhysicalAdaptersModal
93
+ "
94
+ @hide-add-networking-modal="onHideAddNetworkingModal"
95
+ @hide-migrate-vmkernel-adapter-modal="onHideMigrateVmkernelAdapterModal"
96
+ @remove="onRemove"
97
+ @send-edit-data="onSendEditData"
98
+ @change-edit-fields-data="onChangeEditFieldsData"
99
+ @check-network-label="onCheckNetworkLabel"
100
+ @send-manage-physical-adapters-data="onSendManagePhysicalAdaptersData"
101
+ @change-adapter-status="onChangeManagePhysicalAdapterStatus"
102
+ @get-free-adapters="onGetFreeAdapters"
103
+ @get-existing-standard-switches="onGetExistingStandardSwitches"
104
+ @get-tcp-stacks="onGetTcpStacks"
105
+ @send-add-networking-data="onSendNetworkData"
106
+ @add-networking-data-validate="onValidateBeforeSending"
107
+ />
108
+ </div>
109
+ </template>
110
+
111
+ <script setup lang="ts">
112
+ import type {
113
+ UI_I_Adapter,
114
+ UI_I_AdapterStatus,
115
+ UI_I_AdaptersWithPositions,
116
+ UI_I_MainRectHeights,
117
+ UI_I_ModalsInitialData,
118
+ UI_I_Network,
119
+ UI_I_EditFieldsData,
120
+ UI_I_NetworksWithPositions,
121
+ UI_I_SelectedAdapter,
122
+ UI_I_SelectedPort,
123
+ UI_I_SwitchLine,
124
+ UI_I_ToggleDiagramAdaptersPayload,
125
+ UI_I_ToggleDiagramPortsPayload,
126
+ UI_I_PortToggleFlag,
127
+ UI_I_DiagramData,
128
+ UI_I_SwitchAdapterItem,
129
+ } from '~/components/common/diagramMain/lib/models/interfaces'
130
+ import type {
131
+ UI_I_ArbitraryObject,
132
+ UI_I_ItemsWithTotalCounts,
133
+ } from '~/lib/models/interfaces'
134
+ import type {
135
+ UI_I_Switch,
136
+ UI_I_TCPStack,
137
+ } from '~/components/common/wizards/network/add/lib/models/interfaces'
138
+ import type { UI_T_EditData } from '~/components/common/wizards/network/add/lib/models/types'
139
+ import type { UI_T_Adapters } from '~/components/common/diagramMain/lib/models/types'
140
+ import type { UI_T_Project } from '~/lib/models/types'
141
+ import { UI_E_NetworkType, UI_E_PositionsY } from './lib/models/enums'
142
+ import {
143
+ managePhysicalAdapterStatusInitial,
144
+ mainRectHeightsInitial,
145
+ switchLineInitial,
146
+ selectedPortInitial,
147
+ selectedSwitchLineYInitial,
148
+ selectedAdapterInitial,
149
+ } from '~/components/common/diagramMain/lib/config'
150
+ import {
151
+ hasPortAndNetwork,
152
+ networksPositions,
153
+ getSelectNetworkDataFunc,
154
+ getSelectPortDataFunc,
155
+ countAdaptersHeight,
156
+ getAdaptersPositions,
157
+ } from '~/components/common/diagramMain/lib/utils/utils'
158
+
159
+ const props = withDefaults(
160
+ defineProps<{
161
+ diagramData: UI_I_DiagramData
162
+ project?: UI_T_Project
163
+ inPortlet?: boolean
164
+ standardSwitchesInitial?: UI_I_Switch[]
165
+ hostName?: string
166
+ adapters?: UI_I_ItemsWithTotalCounts<UI_I_SwitchAdapterItem>
167
+ freeAdapters?: UI_I_Adapter[]
168
+ networksList?: UI_I_Network[]
169
+ isDarkMode: boolean
170
+ tcpStacks?: UI_I_TCPStack[]
171
+ diagramsData?: UI_I_DiagramData[]
172
+ isManageAdaptersModalLoading?: boolean
173
+ isNetworkingLoading?: boolean
174
+ isRemoveModalLoading?: boolean
175
+ isEditModalLoading?: boolean
176
+ isMigrateAdapterLoading?: boolean
177
+ }>(),
178
+ {
179
+ project: 'procurator',
180
+ diagramData: null,
181
+ inPortlet: false,
182
+ standardSwitchesInitial: () => [],
183
+ hostName: '',
184
+ adapters: () => ({
185
+ total_items: 0,
186
+ total_pages: 0,
187
+ items: [],
188
+ }),
189
+ freeAdapters: () => [],
190
+ networksList: () => [],
191
+ tcpStacks: () => [],
192
+ diagramsData: [],
193
+ isManageAdaptersModalLoading: false,
194
+ isNetworkingLoading: false,
195
+ isRemoveModalLoading: false,
196
+ isEditModalLoading: false,
197
+ isMigrateAdapterLoading: false,
198
+ }
199
+ )
200
+
201
+ const initialData = ref<UI_I_ModalsInitialData>({})
202
+ const switchInitialData = ref<UI_I_ModalsInitialData>({})
203
+
204
+ watch(
205
+ () => props.diagramData?.networking,
206
+ (initial: UI_I_ModalsInitialData | undefined) => {
207
+ if (initial) {
208
+ initialData.value = initial
209
+ switchInitialData.value = initial
210
+ }
211
+ },
212
+ { deep: true, immediate: true }
213
+ )
214
+
215
+ const onValidateBeforeSending = (
216
+ data: UI_T_EditData,
217
+ type: string,
218
+ setValidation: (messages: UI_I_ArbitraryObject<string>) => void
219
+ ) => {
220
+ emits('add-networking-data-validate', data, type, setValidation)
221
+ }
222
+
223
+ let initialManagePhysicalAdapterStatus = ref<UI_I_AdapterStatus>(
224
+ managePhysicalAdapterStatusInitial
225
+ )
226
+
227
+ const managePhysicalAdapterStatus = ref<UI_I_AdapterStatus>(
228
+ useDeepCopy(initialManagePhysicalAdapterStatus.value)
229
+ )
230
+
231
+ watch(
232
+ () => props.diagramData,
233
+ (newValue: UI_I_DiagramData) => {
234
+ if (newValue?.networking) {
235
+ initialManagePhysicalAdapterStatus.value = {
236
+ active: useDeepCopy(props.diagramData?.networking?.activeAdapters),
237
+ standby: useDeepCopy(props.diagramData?.networking?.standbyAdapters),
238
+ unused: useDeepCopy(props.diagramData?.networking?.unusedAdapters),
239
+ }
240
+
241
+ managePhysicalAdapterStatus.value = useDeepCopy(
242
+ initialManagePhysicalAdapterStatus.value
243
+ )
244
+ }
245
+ },
246
+ { deep: true, immediate: true }
247
+ )
248
+
249
+ const onChangeManagePhysicalAdapterStatus = (
250
+ adapterStatusNew: UI_I_AdapterStatus
251
+ ) => {
252
+ managePhysicalAdapterStatus.value = adapterStatusNew
253
+ }
254
+
255
+ const isShowSwitchManagePhysicalAdaptersModal = ref<boolean>(false)
256
+ const onHideSwitchManagePhysicalAdaptersModal = (): void => {
257
+ isShowSwitchManagePhysicalAdaptersModal.value = false
258
+ }
259
+
260
+ const onSendManagePhysicalAdaptersData = (
261
+ adapterStatus: UI_I_AdapterStatus,
262
+ switchName: string,
263
+ hideModal: () => void
264
+ ) => {
265
+ emits(
266
+ 'send-manage-physical-adapters-data',
267
+ adapterStatus,
268
+ switchName,
269
+ hideModal
270
+ )
271
+ }
272
+
273
+ const isShowSwitchViewSettingsModal = ref<boolean>(false)
274
+ const isShowSwitchEditSettingsModal = ref<boolean>(false)
275
+ const isShowSwitchRemoveModal = ref<boolean>(false)
276
+ const onHideSwitchViewSettingsModal = (): void => {
277
+ isShowSwitchViewSettingsModal.value = false
278
+ }
279
+ const onHideSwitchEditSettingsModal = (): void => {
280
+ isShowSwitchEditSettingsModal.value = false
281
+ }
282
+ const onHideSwitchRemoveModal = (): void => {
283
+ isShowSwitchRemoveModal.value = false
284
+ }
285
+
286
+ const isShowAdapterViewSettingsModal = ref<boolean>(false)
287
+ const onHideAdapterViewSettingsModal = (): void => {
288
+ isShowAdapterViewSettingsModal.value = false
289
+ }
290
+
291
+ const isShowNetworkViewSettingsModal = ref<boolean>(false)
292
+ const isShowNetworkEditSettingsModal = ref<boolean>(false)
293
+ const isShowNetworkRemoveModal = ref<boolean>(false)
294
+ const onHideNetworkViewSettingsModal = (): void => {
295
+ isShowNetworkViewSettingsModal.value = false
296
+ }
297
+ const onHideNetworkEditSettingsModal = (): void => {
298
+ isShowNetworkEditSettingsModal.value = false
299
+ }
300
+ const onHideNetworkRemoveModal = (): void => {
301
+ isShowNetworkRemoveModal.value = false
302
+ }
303
+
304
+ const isShowPortViewSettingsModal = ref<boolean>(false)
305
+ const isShowPortEditSettingsModal = ref<boolean>(false)
306
+ const isShowPortRemoveModal = ref<boolean>(false)
307
+ const onHidePortViewSettingsModal = (): void => {
308
+ isShowPortViewSettingsModal.value = false
309
+ }
310
+ const onHidePortEditSettingsModal = (): void => {
311
+ isShowPortEditSettingsModal.value = false
312
+ }
313
+ const onHidePortRemoveModal = (): void => {
314
+ isShowPortRemoveModal.value = false
315
+ }
316
+
317
+ const isShowVCenterViewSettingsModal = ref<boolean>(false)
318
+ const onHideVCenterViewSettingsModal = (): void => {
319
+ isShowVCenterViewSettingsModal.value = false
320
+ }
321
+ const isShowAddNetworkingModal = ref<boolean>(false)
322
+ const onHideAddNetworkingModal = (): void => {
323
+ isShowAddNetworkingModal.value = false
324
+ }
325
+ const isShowMigrateVmkernelAdapterModal = ref<boolean>(false)
326
+ const onHideMigrateVmkernelAdapterModal = (): void => {
327
+ isShowMigrateVmkernelAdapterModal.value = false
328
+ }
329
+
330
+ const selectedStandardSwitchId = ref<string>('')
331
+ const selectedSwitchId = ref<string>('')
332
+
333
+ const onShowModal = (
334
+ value: string,
335
+ properties: UI_I_ModalsInitialData
336
+ ): void => {
337
+ switch (value) {
338
+ case 'port-view-settings':
339
+ initialData.value = properties
340
+ isShowPortViewSettingsModal.value = true
341
+ break
342
+ case 'network-view-settings':
343
+ isShowNetworkViewSettingsModal.value = true
344
+ initialData.value = properties
345
+ break
346
+ case 'adapter-view-settings':
347
+ isShowAdapterViewSettingsModal.value = true
348
+ initialData.value = properties
349
+ break
350
+ case 'v-center-view-settings':
351
+ isShowVCenterViewSettingsModal.value = true
352
+ initialData.value = properties
353
+ break
354
+ case 'network-edit-settings':
355
+ isShowNetworkEditSettingsModal.value = true
356
+ initialData.value = properties
357
+ break
358
+ case 'port-edit-settings':
359
+ initialData.value = properties
360
+ isShowPortEditSettingsModal.value = true
361
+ break
362
+ case 'network-port-remove':
363
+ initialData.value = properties
364
+ isShowNetworkRemoveModal.value = true
365
+ break
366
+ case 'port-remove':
367
+ initialData.value = properties
368
+ isShowPortRemoveModal.value = true
369
+ break
370
+ case 'switch-edit':
371
+ isShowSwitchEditSettingsModal.value = true
372
+ initialData.value = useDeepCopy(switchInitialData.value)
373
+ break
374
+ case 'switch-manage-physical-adapters':
375
+ isShowSwitchManagePhysicalAdaptersModal.value = true
376
+ break
377
+ case 'add-networking':
378
+ isShowAddNetworkingModal.value = true
379
+ selectedStandardSwitchId.value = properties.switch_name
380
+ selectedSwitchId.value = properties.switch_name
381
+ break
382
+ case 'switch-view-settings':
383
+ isShowSwitchViewSettingsModal.value = true
384
+ initialData.value = useDeepCopy(switchInitialData.value)
385
+ break
386
+ case 'migrate-vmkernel-adapter':
387
+ isShowMigrateVmkernelAdapterModal.value = true
388
+ break
389
+ case 'switch-remove':
390
+ isShowSwitchRemoveModal.value = true
391
+ break
392
+ }
393
+ }
394
+
395
+ const onRemove = (id: string, type: string) => {
396
+ if (type === 'network' && selectedNetwork.value === id) {
397
+ selectedNetwork.value = '-1'
398
+ resetSelection()
399
+ } else if (type === 'port' && selectedPort.value.portId === id) {
400
+ selectedPort.value.networkId = '-1'
401
+ selectedPort.value.portId = '-1'
402
+ resetSelection()
403
+ }
404
+
405
+ const hideModal =
406
+ type === 'network'
407
+ ? onHideNetworkRemoveModal
408
+ : type === 'switch'
409
+ ? onHideSwitchRemoveModal
410
+ : onHidePortRemoveModal
411
+
412
+ emits('remove', id, type, hideModal)
413
+ }
414
+ const onChangeEditFieldsData = (newEditFieldsData: UI_I_EditFieldsData) => {
415
+ emits('change-edit-fields-data', newEditFieldsData)
416
+ }
417
+ const onCheckNetworkLabel = (
418
+ label: string,
419
+ sendMessage: (message: string) => void
420
+ ) => {
421
+ emits('check-network-label', label, sendMessage)
422
+ }
423
+ const onGetExistingStandardSwitches = () => {
424
+ emits('get-existing-standard-switches')
425
+ }
426
+ const onGetTcpStacks = () => {
427
+ emits('get-tcp-stacks')
428
+ }
429
+ const onGetFreeAdapters = (showModal: () => void) => {
430
+ emits('get-free-adapters', showModal)
431
+ }
432
+ const onSendNetworkData = (
433
+ data: UI_T_EditData,
434
+ type: string,
435
+ hideModal: () => void
436
+ ) => {
437
+ emits('send-add-networking-data', data, type, hideModal)
438
+ }
439
+ const onSendEditData = (type: string, hideModal: () => void, id?: string) => {
440
+ emits('send-edit-data', type, initialData.value, hideModal, id)
441
+ }
442
+ const isShowDiagram = ref<boolean>(true)
443
+ const onToggleDiagram = () => {
444
+ isShowDiagram.value = !isShowDiagram.value
445
+ }
446
+ const mainRectHeights = ref<UI_I_MainRectHeights>(
447
+ useDeepCopy(mainRectHeightsInitial)
448
+ )
449
+
450
+ const switchLine = ref<UI_I_SwitchLine>(useDeepCopy(switchLineInitial))
451
+ const mainSwitchLine = computed<UI_I_SwitchLine>(
452
+ () =>
453
+ (switchLine.value.ay && {
454
+ y1: Math.min(switchLine.value.y1, switchLine.value.ay),
455
+ y2: Math.max(switchLine.value.y2, switchLine.value.ay),
456
+ }) || { y1: 0, y2: 0 }
457
+ )
458
+
459
+ const selectedMainLine = ref(false)
460
+ const selectedPort = ref<UI_I_SelectedPort>(useDeepCopy(selectedPortInitial))
461
+ const selectedAdapter = ref<UI_I_SelectedAdapter>(
462
+ useDeepCopy(selectedAdapterInitial)
463
+ )
464
+ const selectedNetwork = ref<string>('-1')
465
+
466
+ const selectedSwitchLineY = ref<UI_I_SwitchLine>(
467
+ useDeepCopy(selectedSwitchLineYInitial)
468
+ )
469
+ const mainRectHeight = computed<number>(() =>
470
+ Math.max(
471
+ mainRectHeights.value.networksHeight,
472
+ mainRectHeights.value.adaptersHeight
473
+ )
474
+ )
475
+
476
+ const countNetworksPositions = (
477
+ newNetworks?: UI_I_Network[] | null
478
+ ): UI_I_NetworksWithPositions[] => {
479
+ let lastNetworkHeight = 0
480
+ let lastPosition = UI_E_PositionsY.DIAGRAM_TOP + UI_E_PositionsY.BETWEEN_RECTS
481
+ mainRectHeights.value.networksHeight =
482
+ UI_E_PositionsY.DIAGRAM_TOP + UI_E_PositionsY.BETWEEN_RECTS
483
+
484
+ const lastIndex = props.diagramData?.networks.findLastIndex(
485
+ (network: UI_I_Network) =>
486
+ network.activeAdapters.length > 0 && network.state.state !== 3
487
+ )
488
+
489
+ return (
490
+ (newNetworks ? newNetworks : props.diagramData?.networks)?.map(
491
+ (network: UI_I_Network, index: number) => {
492
+ let portsCount = 0
493
+ if (
494
+ network.networkType ===
495
+ (UI_E_NetworkType.VMPortsGroup || UI_E_NetworkType.VCenter)
496
+ ) {
497
+ portsCount = network.ports.length
498
+ } else {
499
+ portsCount = network.sysx ? 1 : 0
500
+ }
501
+ const portsHeight = network.toggle
502
+ ? network.networkType === UI_E_NetworkType.VCenter
503
+ ? portsCount * UI_E_PositionsY.SINGLE_V_CENTER_HEIGHT
504
+ : portsCount * UI_E_PositionsY.SINGLE_PORT_HEIGHT
505
+ : 0
506
+ const networkHeight =
507
+ UI_E_PositionsY.PORTS_FROM_RECT_TOP +
508
+ portsHeight +
509
+ (network.networkType === UI_E_NetworkType.VCenter
510
+ ? UI_E_PositionsY.SINGLE_V_CENTER_HEIGHT - 10
511
+ : UI_E_PositionsY.SINGLE_PORT_HEIGHT) +
512
+ UI_E_PositionsY.SPACE_FROM_RECT_BOTTOM
513
+
514
+ lastPosition +=
515
+ lastNetworkHeight + (index && UI_E_PositionsY.BETWEEN_RECTS)
516
+ lastNetworkHeight = networkHeight
517
+
518
+ const connectLineY = lastPosition + networkHeight / 2
519
+ const titlePosition = lastPosition + UI_E_PositionsY.TITLE_FROM_RECT_TOP
520
+ const vlanPosition = lastPosition + UI_E_PositionsY.VLAN_FROM_RECT_TOP
521
+ const portsPosition = lastPosition + UI_E_PositionsY.PORTS_FROM_RECT_TOP
522
+
523
+ const networkPortsName =
524
+ (network.networkType === UI_E_NetworkType.VMkernel &&
525
+ 'VMkernel Ports') ||
526
+ (network.networkType === UI_E_NetworkType.VMPortsGroup &&
527
+ 'Virtual Machines') ||
528
+ (network.networkType === UI_E_NetworkType.VCenter &&
529
+ 'Virtual Machines') ||
530
+ ''
531
+
532
+ lastIndex !== -1 && index === 0 && (switchLine.value.y1 = connectLineY)
533
+ lastIndex !== -1 &&
534
+ index === lastIndex &&
535
+ (switchLine.value.y2 = connectLineY)
536
+
537
+ mainRectHeights.value.networksHeight +=
538
+ networkHeight + UI_E_PositionsY.BETWEEN_RECTS
539
+
540
+ const networkWithPortsPositions =
541
+ network.networkType ===
542
+ (UI_E_NetworkType.VMPortsGroup || UI_E_NetworkType.VCenter)
543
+ ? network.ports.map((port, index) => {
544
+ const portPosition =
545
+ portsPosition +
546
+ (network.networkType === UI_E_NetworkType.VCenter
547
+ ? (index + 1) * UI_E_PositionsY.SINGLE_V_CENTER_HEIGHT - 10
548
+ : (index + 1) * UI_E_PositionsY.SINGLE_PORT_HEIGHT)
549
+
550
+ return {
551
+ ...port,
552
+ portPosition,
553
+ }
554
+ })
555
+ : (network.sysx && [
556
+ {
557
+ id: network.sysx?.id,
558
+ name: `${network.sysx?.id} ${
559
+ network.sysx.ipv4_settings.ipv4
560
+ ? `: ${network.sysx.ipv4_settings.ipv4}`
561
+ : ''
562
+ }`,
563
+ state: network.sysx.state,
564
+ portPosition:
565
+ portsPosition + UI_E_PositionsY.SINGLE_PORT_HEIGHT,
566
+ },
567
+ ]) ||
568
+ []
569
+
570
+ return {
571
+ ...network,
572
+ ports: networkWithPortsPositions,
573
+ portsCount,
574
+ portsHeight,
575
+ networkHeight,
576
+ rectPosition: lastPosition,
577
+ connectLineY,
578
+ titlePosition,
579
+ vlanPosition,
580
+ vlanId: network.vlanId || '--',
581
+ portsPosition,
582
+ networkPortsName,
583
+ }
584
+ }
585
+ ) || []
586
+ )
587
+ }
588
+ const networksWithPositions = ref<UI_I_NetworksWithPositions[]>(
589
+ countNetworksPositions()
590
+ )
591
+
592
+ const isPortToggled = ref<UI_I_PortToggleFlag>({
593
+ value: false,
594
+ id: '',
595
+ })
596
+
597
+ const countAdaptersPositions = (): UI_I_AdaptersWithPositions => {
598
+ const { height, toggle, adaptersCount } = countAdaptersHeight(
599
+ props.diagramData
600
+ )
601
+
602
+ mainRectHeights.value.adaptersHeight =
603
+ UI_E_PositionsY.DIAGRAM_TOP + UI_E_PositionsY.BETWEEN_RECTS * 2 + height
604
+
605
+ const { titlePosition, rectPosition, adaptersConnectLineY, adapters } =
606
+ getAdaptersPositions(props.diagramData, height)
607
+
608
+ switchLine.value.ay = adaptersConnectLineY
609
+
610
+ return {
611
+ toggle,
612
+ height,
613
+ adapters,
614
+ rectPosition,
615
+ adaptersConnectLineY,
616
+ titlePosition,
617
+ adaptersCount,
618
+ }
619
+ }
620
+
621
+ const adaptersWithPositions = computed<UI_I_AdaptersWithPositions>(() => {
622
+ return countAdaptersPositions()
623
+ })
624
+
625
+ const networksCount = computed<number>(
626
+ () =>
627
+ networksWithPositions.value.filter(
628
+ (networkWithPositions: UI_I_NetworksWithPositions) =>
629
+ networkWithPositions.activeAdapters.length > 0 &&
630
+ networkWithPositions.state.state !== 3
631
+ ).length
632
+ )
633
+
634
+ watch(
635
+ () => props.diagramData?.networks,
636
+ (newValue: UI_I_Network[] | null) => {
637
+ networksWithPositions.value = countNetworksPositions(newValue)
638
+
639
+ isPortToggled.value.value && handlePortToggle()
640
+
641
+ if (selectedAdapter.value.adapterId !== '-1') {
642
+ onSelectAdapter(selectedAdapter.value.adapterId)
643
+ return
644
+ }
645
+
646
+ if (selectedPort.value.portId !== '-1') {
647
+ onSelectPort(selectedPort.value.networkId, selectedPort.value.portId)
648
+ return
649
+ }
650
+
651
+ if (selectedNetwork.value !== '-1') {
652
+ cashedNetworkId.value = '-1'
653
+ onSelectNetwork(selectedNetwork.value)
654
+ return
655
+ }
656
+
657
+ if (selectedMainLine.value && networksCount.value === 0) {
658
+ selectedMainLine.value = false
659
+ return
660
+ }
661
+
662
+ if (selectedMainLine.value) return
663
+
664
+ resetSelection()
665
+ },
666
+ { deep: true }
667
+ )
668
+
669
+ const onSelectPort = (networkId: string, portId: string): void => {
670
+ const selectPortData = getSelectPortDataFunc(
671
+ networkId,
672
+ portId,
673
+ networksWithPositions.value,
674
+ adaptersWithPositions.value
675
+ )
676
+
677
+ if (!selectPortData) return
678
+
679
+ selectedSwitchLineY.value = selectPortData.selectedSwitchLineY
680
+ selectedPort.value = selectPortData.selectedPort
681
+ }
682
+
683
+ const cashedNetworkId = ref<string>('-1')
684
+
685
+ const onSelectNetwork = (networkId: string): void => {
686
+ if (cashedNetworkId.value === networkId) {
687
+ resetSelection()
688
+ cashedNetworkId.value = '-1'
689
+ return
690
+ }
691
+
692
+ selectedNetwork.value = networkId
693
+
694
+ const selectNetworkData = getSelectNetworkDataFunc(
695
+ networkId,
696
+ networksWithPositions.value,
697
+ adaptersWithPositions.value
698
+ )
699
+
700
+ cashedNetworkId.value = networkId
701
+
702
+ if (!selectNetworkData) return
703
+
704
+ selectedSwitchLineY.value = selectNetworkData.selectedSwitchLineY
705
+ selectedPort.value = selectNetworkData.selectedPort
706
+ }
707
+
708
+ const onSelectAdapter = (adapterId: string): void => {
709
+ const selectedNetworks: UI_I_NetworksWithPositions[] =
710
+ networksWithPositions.value?.filter(
711
+ (network: UI_I_NetworksWithPositions) =>
712
+ network.activeAdapters.includes(adapterId) && network.state.state !== 3
713
+ )
714
+
715
+ let pos: number[] = selectedNetworks?.reduce(networksPositions, [])
716
+ let selectedAdapterPosition: number | null =
717
+ adaptersWithPositions.value.adapters?.find(
718
+ (adapter: UI_T_Adapters) => adapter.id === adapterId
719
+ )?.adapterPosition || null
720
+
721
+ selectedAdapterPosition !== null &&
722
+ (selectedAdapterPosition += 7.5) &&
723
+ pos?.push(selectedAdapterPosition)
724
+
725
+ pos = pos?.sort((y1, y2) => y1 - y2)
726
+
727
+ if (pos) {
728
+ selectedSwitchLineY.value = {
729
+ y1: pos[0],
730
+ y2: pos[pos.length - 1],
731
+ }
732
+ }
733
+
734
+ selectedAdapter.value = {
735
+ adapterId,
736
+ connectedPorts:
737
+ selectedNetworks?.map((network: UI_I_Network) => ({
738
+ networkId: network.id,
739
+ ports: network.ports.map((port) => port.id),
740
+ })) || [],
741
+ }
742
+ }
743
+
744
+ const resetSelection = (): void => {
745
+ selectedPort.value = useDeepCopy(selectedPortInitial)
746
+ selectedSwitchLineY.value = useDeepCopy(selectedSwitchLineYInitial)
747
+ selectedAdapter.value = useDeepCopy(selectedAdapterInitial)
748
+ selectedNetwork.value = '-1'
749
+ selectedMainLine.value = false
750
+ }
751
+
752
+ const emits = defineEmits<{
753
+ (
754
+ event: 'toggle-ports',
755
+ payload: Omit<UI_I_ToggleDiagramPortsPayload, 'paths'>
756
+ ): void
757
+ (
758
+ event: 'toggle-adapters',
759
+ payload: Omit<UI_I_ToggleDiagramAdaptersPayload, 'paths'>
760
+ ): void
761
+ (event: 'get-existing-standard-switches'): void
762
+ (
763
+ event: 'send-add-networking-data',
764
+ data: UI_T_EditData,
765
+ type: string,
766
+ hideModal: () => void
767
+ ): void
768
+ (
769
+ event: 'add-networking-data-validate',
770
+ data: UI_T_EditData,
771
+ type: string,
772
+ setValidation: (message: UI_I_ArbitraryObject<string>) => void
773
+ ): void
774
+ (
775
+ event: 'check-network-label',
776
+ label: string,
777
+ sendMessage: (message: string) => void
778
+ ): void
779
+ (event: 'get-free-adapters', showModal: () => void): void
780
+ (
781
+ event: 'send-edit-data',
782
+ type: string,
783
+ initialData: UI_I_ModalsInitialData,
784
+ hideModal: () => void,
785
+ id?: string
786
+ ): void
787
+ (event: 'change-edit-fields-data', editFieldsData: UI_I_EditFieldsData): void
788
+ (event: 'remove', id: string, type: string, hideModal: () => void): void
789
+ (
790
+ event: 'send-manage-physical-adapters-data',
791
+ adapterStatus: UI_I_AdapterStatus,
792
+ switchName: string,
793
+ hideModal: () => void
794
+ ): void
795
+ (event: 'get-tcp-stacks'): void
796
+ }>()
797
+
798
+ const onTogglePorts = (
799
+ id: string,
800
+ isToggle: boolean,
801
+ diagramId: string
802
+ ): void => {
803
+ emits('toggle-ports', {
804
+ id,
805
+ isToggle,
806
+ diagramId,
807
+ })
808
+
809
+ isPortToggled.value = {
810
+ value: true,
811
+ id: id,
812
+ }
813
+ }
814
+
815
+ const handlePortToggle = () => {
816
+ cashedNetworkId.value = '-1'
817
+
818
+ selectedPort.value.portId !== '-1' &&
819
+ onSelectPort(selectedPort.value.networkId, selectedPort.value.portId)
820
+ selectedAdapter.value.adapterId !== '-1' &&
821
+ onSelectAdapter(selectedAdapter.value.adapterId)
822
+ selectedNetwork.value !== '-1' && onSelectNetwork(selectedNetwork.value)
823
+ hasPortAndNetwork(selectedPort.value, isPortToggled.value.id) &&
824
+ resetSelection()
825
+
826
+ isPortToggled.value = {
827
+ value: false,
828
+ id: '',
829
+ }
830
+ }
831
+
832
+ const onToggleAdapters = (): void => {
833
+ cashedNetworkId.value = '-1'
834
+
835
+ const newState = !adaptersWithPositions.value.toggle
836
+ const payload: Omit<UI_I_ToggleDiagramAdaptersPayload, 'paths'> = {
837
+ isToggle: newState,
838
+ diagramId: props.diagramData?.id || '',
839
+ }
840
+
841
+ emits('toggle-adapters', payload)
842
+
843
+ selectedPort.value.portId !== '-1' &&
844
+ onSelectPort(selectedPort.value.networkId, selectedPort.value.portId)
845
+ selectedAdapter.value.adapterId !== '-1' && resetSelection()
846
+ selectedNetwork.value !== '-1' && onSelectNetwork(selectedNetwork.value)
847
+ }
848
+
849
+ const onClickDiagram = (ev: MouseEvent): void => {
850
+ const target = ev.target as HTMLElement
851
+ const targetClassList = target.classList
852
+
853
+ if (!targetClassList.contains('network-title')) {
854
+ cashedNetworkId.value = '-1'
855
+ }
856
+
857
+ if (targetClassList.contains('main-line__handler')) {
858
+ resetSelection()
859
+ selectedMainLine.value = true
860
+ } else {
861
+ !(
862
+ target.closest('.diagram-block__toggle') ||
863
+ target.closest('.diagram-actions') ||
864
+ target.closest('.dropdown-actions-container')
865
+ ) && resetSelection()
866
+ }
867
+ }
868
+ </script>
869
+
870
+ <style scoped lang="scss">
871
+ .diagram {
872
+ &-min-width {
873
+ //min-width: 745px;
874
+ //min-width: 764px;
875
+ }
876
+ &-main-container {
877
+ padding-top: 5px;
878
+ }
879
+ }
880
+ </style>
881
+ <style lang="scss">
882
+ .diagram-main-actions__popup.navbar-dropdown-menu {
883
+ .btn {
884
+ border-radius: 3px;
885
+ border-bottom: none;
886
+ &:hover {
887
+ border-bottom: none;
888
+ }
889
+ span {
890
+ font-size: 14px;
891
+ }
892
+ &:active {
893
+ box-shadow: none;
894
+ }
895
+ }
896
+ }
897
+ </style>