bfg-common 1.5.40 → 1.5.41

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 (194) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  3. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  4. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  5. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  6. package/assets/scss/common/normalize.scss +339 -339
  7. package/components/atoms/TheIcon3.vue +50 -50
  8. package/components/atoms/collapse/CollapseNav.vue +165 -165
  9. package/components/atoms/dropdown/dropdown/Dropdown.vue +168 -168
  10. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  11. package/components/atoms/perPage/PerPage.vue +58 -58
  12. package/components/atoms/stack/StackBlock.vue +185 -185
  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/VerticalTabs.vue +105 -105
  17. package/components/atoms/tooltip/Signpost.vue +227 -227
  18. package/components/common/accordion/Recursion.vue +222 -222
  19. package/components/common/browse/BrowseNew.vue +237 -237
  20. package/components/common/browse/BrowseOld.vue +217 -217
  21. package/components/common/browse/blocks/contents/Files.vue +37 -37
  22. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  23. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  24. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  25. package/components/common/browse/blocks/lib/models/types.ts +1 -1
  26. package/components/common/browse/lib/models/interfaces.ts +5 -5
  27. package/components/common/context/Context.vue +111 -111
  28. package/components/common/context/lib/models/interfaces.ts +31 -31
  29. package/components/common/context/recursion/Recursion.vue +87 -87
  30. package/components/common/context/recursion/RecursionNew.vue +238 -238
  31. package/components/common/context/recursion/RecursionOld.vue +228 -228
  32. package/components/common/details/DetailsItem.vue +109 -109
  33. package/components/common/diagramMain/DiagramMain.vue +897 -897
  34. package/components/common/diagramMain/Header.vue +214 -214
  35. package/components/common/diagramMain/adapter/AdapterItems.vue +61 -61
  36. package/components/common/diagramMain/lib/config/initial.ts +50 -50
  37. package/components/common/diagramMain/lib/models/types.ts +21 -21
  38. package/components/common/diagramMain/lib/utils/utils.ts +331 -331
  39. package/components/common/diagramMain/modals/editSettings/ConfirmTeamingSettingsModal.vue +40 -40
  40. package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +214 -214
  41. package/components/common/diagramMain/modals/editSettings/tabs/Security.vue +189 -189
  42. package/components/common/diagramMain/modals/editSettings/tabs/SwitchProperties.vue +163 -163
  43. package/components/common/diagramMain/modals/editSettings/tabs/TeamingFailover.vue +175 -175
  44. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +346 -346
  45. package/components/common/diagramMain/modals/editSettings/tabs/port/PortProperties.vue +205 -205
  46. package/components/common/diagramMain/modals/lib/config/initial.ts +180 -180
  47. package/components/common/diagramMain/modals/lib/config/vmKernelAdapter.ts +90 -90
  48. package/components/common/diagramMain/modals/lib/mappers/mappers.ts +87 -87
  49. package/components/common/diagramMain/modals/lib/utils/index.ts +24 -24
  50. package/components/common/diagramMain/modals/migrateVmkernelAdapter/lib/config/steps.ts +114 -114
  51. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/ConnectionSettings.vue +169 -169
  52. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/SelectVmkernelAdapter.vue +159 -159
  53. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/common.ts +14 -14
  54. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/connectionSettings.ts +137 -137
  55. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/selectVmkernelAdapter.ts +52 -52
  56. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/validations.ts +19 -19
  57. package/components/common/diagramMain/port/Ports.vue +47 -47
  58. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  59. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  60. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  61. package/components/common/mainNavigationPanel/MainNavigationPanelNew.vue +336 -336
  62. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +311 -311
  63. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  64. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  65. package/components/common/pages/home/StatusContent.vue +49 -49
  66. package/components/common/pages/home/headline/Headline.vue +45 -45
  67. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  68. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  69. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  70. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  71. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  72. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  73. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  74. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  75. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  76. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  77. package/components/common/pages/packages/Packages.vue +208 -208
  78. package/components/common/pages/shortcuts/block/BlockNew.vue +96 -96
  79. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  80. package/components/common/portlets/customAttributes/Portlet.vue +667 -667
  81. package/components/common/portlets/tag/Portlet.vue +433 -433
  82. package/components/common/recursionTree/RecursionTree.vue +223 -223
  83. package/components/common/select/button/ButtonDropdown.vue +108 -108
  84. package/components/common/spiceConsole/Drawer.vue +370 -370
  85. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  86. package/components/common/split/horizontal/HorizontalNew.vue +376 -376
  87. package/components/common/split/horizontal/HorizontalOld.vue +337 -337
  88. package/components/common/split/vertical/Vertical.vue +160 -160
  89. package/components/common/tools/Actions.vue +188 -188
  90. package/components/common/vm/actions/add/Add.vue +774 -772
  91. package/components/common/vm/actions/add/lib/config/steps.ts +247 -247
  92. package/components/common/vm/actions/clone/Clone.vue +798 -668
  93. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -178
  94. package/components/common/vm/actions/clone/toTemplate/ToTemplate.vue +634 -634
  95. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  96. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +275 -275
  97. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +274 -274
  98. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +177 -177
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +698 -698
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +410 -410
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +319 -319
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +99 -99
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +164 -164
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +368 -368
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +232 -232
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +250 -250
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  117. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  118. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +286 -286
  119. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  120. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  121. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  122. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  123. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  124. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  125. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  126. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  127. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  128. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  129. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  130. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  131. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  132. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  133. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  134. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  135. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  136. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  137. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  138. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  139. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  140. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  141. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  142. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  143. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  144. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  145. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  146. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  147. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  148. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  149. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  150. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  151. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  152. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  153. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  154. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  155. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  156. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  157. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  158. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  159. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  160. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  161. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  162. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  163. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  164. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  165. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  166. package/components/common/vm/actions/common/lib/models/interfaces.ts +1 -0
  167. package/components/common/vm/actions/common/lib/utils/capabilities.ts +52 -51
  168. package/components/common/vm/actions/common/select/createType/CreateType.vue +74 -74
  169. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  170. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  171. package/components/common/vm/actions/common/select/template/Template.vue +65 -65
  172. package/components/common/vm/actions/common/select/template/TemplateTreeView.vue +88 -88
  173. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  174. package/components/common/wizards/datastore/add/lib/config/steps.ts +138 -138
  175. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +60 -60
  176. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +92 -92
  177. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +105 -105
  178. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  179. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  180. package/components/common/wizards/vm/migrate/select/network/table/network/Network.vue +150 -150
  181. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  182. package/components/common/wizards/vm/migrate/select/priority/Priority.vue +43 -43
  183. package/composables/productNameLocal.ts +30 -30
  184. package/composables/useAppVersion.ts +21 -21
  185. package/lib/models/store/interfaces.ts +1 -0
  186. package/lib/models/store/vm/interfaces.ts +2 -0
  187. package/package.json +1 -1
  188. package/plugins/date.ts +233 -233
  189. package/plugins/directives.ts +24 -24
  190. package/public/spice-console/lib/images/bitmap.js +203 -203
  191. package/public/spice-console/network/spicechannel.js +383 -383
  192. package/store/main/mutations.ts +7 -7
  193. package/store/main/state.ts +7 -7
  194. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -1,897 +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
- :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>
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>