bfg-common 1.5.487 → 1.5.489

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 (191) 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/localization/local_be.json +7 -1
  7. package/assets/localization/local_en.json +17 -11
  8. package/assets/localization/local_hy.json +7 -1
  9. package/assets/localization/local_kk.json +7 -1
  10. package/assets/localization/local_ru.json +7 -1
  11. package/assets/localization/local_zh.json +7 -1
  12. package/components/atoms/TheIcon3.vue +50 -50
  13. package/components/atoms/collapse/CollapseNav.vue +170 -170
  14. package/components/atoms/perPage/PerPage.vue +58 -58
  15. package/components/atoms/table/dataGrid/DataGridPagination.vue +97 -97
  16. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  17. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  18. package/components/common/adapterManager/AdapterManager.vue +189 -545
  19. package/components/common/adapterManager/AdapterManagerNew.vue +300 -0
  20. package/components/common/adapterManager/AdapterManagerOld.vue +498 -0
  21. package/components/common/adapterManager/addAdapterModal/AddAdapterModal.vue +70 -0
  22. package/components/common/adapterManager/addAdapterModal/AddAdapterModalNew.vue +77 -0
  23. package/components/common/adapterManager/{AddAdapterModal.vue → addAdapterModal/AddAdapterModalOld.vue} +16 -46
  24. package/components/common/adapterManager/addAdapterWarningModal/AddAdapterWarningModal.vue +32 -0
  25. package/components/common/adapterManager/addAdapterWarningModal/AddAdapterWarningModalNew.vue +38 -0
  26. package/components/common/adapterManager/{AddAdapterWarningModal.vue → addAdapterWarningModal/AddAdapterWarningModalOld.vue} +5 -14
  27. package/components/common/adapterManager/noActiveAdaptersModal/NoActiveAdaptersModal.vue +31 -0
  28. package/components/common/adapterManager/noActiveAdaptersModal/NoActiveAdaptersModalNew.vue +34 -0
  29. package/components/common/adapterManager/{NoActiveAdaptersModal.vue → noActiveAdaptersModal/NoActiveAdaptersModalOld.vue} +2 -6
  30. package/components/common/adapterManager/noConnectedActiveAdaptersModal/NoConnectedActiveAdaptersModal.vue +31 -0
  31. package/components/common/adapterManager/noConnectedActiveAdaptersModal/NoConnectedActiveAdaptersModalNew.vue +34 -0
  32. package/components/common/adapterManager/{NoConnectedActiveAdaptersModal.vue → noConnectedActiveAdaptersModal/NoConnectedActiveAdaptersModalOld.vue} +2 -6
  33. package/components/common/adapterManager/ui/actions/bar/Bar.vue +57 -0
  34. package/components/common/adapterManager/ui/actions/bar/BarNew.vue +38 -0
  35. package/components/common/adapterManager/ui/actions/moveDownAdapterButton/MoveDownAdapterButton.vue +28 -0
  36. package/components/common/adapterManager/ui/actions/moveDownAdapterButton/MoveDownAdapterButtonNew.vue +75 -0
  37. package/components/common/adapterManager/ui/actions/{MoveDownAdapterButton.vue → moveDownAdapterButton/MoveDownAdapterButtonOld.vue} +3 -9
  38. package/components/common/adapterManager/ui/actions/moveUpAdapterButton/MoveUpAdapterButton.vue +28 -0
  39. package/components/common/adapterManager/ui/actions/moveUpAdapterButton/MoveUpAdapterButtonNew.vue +76 -0
  40. package/components/common/adapterManager/ui/actions/{MoveUpAdapterButton.vue → moveUpAdapterButton/MoveUpAdapterButtonOld.vue} +3 -9
  41. package/components/common/adapterManager/ui/noSelectedAdapter/NoSelectedAdapter.vue +24 -0
  42. package/components/common/adapterManager/ui/noSelectedAdapter/NoSelectedAdapterNew.vue +13 -0
  43. package/components/common/adapterManager/ui/secondTitle/SecondTitle.vue +31 -0
  44. package/components/common/adapterManager/ui/secondTitle/SecondTitleNew.vue +36 -0
  45. package/components/common/adapterManager/ui/{SecondTitle.vue → secondTitle/SecondTitleOld.vue} +0 -1
  46. package/components/common/adapterManager/ui/table/Table.vue +59 -133
  47. package/components/common/adapterManager/ui/table/TableNew.vue +136 -0
  48. package/components/common/adapterManager/ui/table/TableOld.vue +141 -0
  49. package/components/common/adapterManager/ui/table/adapters/Adapters.vue +44 -0
  50. package/components/common/adapterManager/ui/table/adapters/AdaptersNew.vue +153 -0
  51. package/components/common/adapterManager/ui/table/{Adapters.vue → adapters/AdaptersOld.vue} +5 -10
  52. package/components/common/adapterManager/ui/table/header/Header.vue +57 -0
  53. package/components/common/adapterManager/ui/table/header/HeaderNew.vue +77 -0
  54. package/components/common/adapterManager/ui/table/{Header.vue → header/HeaderOld.vue} +3 -20
  55. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  56. package/components/common/browse/blocks/lib/models/types.ts +1 -1
  57. package/components/common/browse/lib/models/interfaces.ts +5 -5
  58. package/components/common/context/lib/models/interfaces.ts +33 -33
  59. package/components/common/diagramMain/DiagramMain.vue +905 -900
  60. package/components/common/diagramMain/lib/models/interfaces.ts +5 -2
  61. package/components/common/diagramMain/modals/ManagePhysicalAdaptersModal.vue +6 -5
  62. package/components/common/diagramMain/modals/Modals.vue +19 -1
  63. package/components/common/diagramMain/modals/lib/config/adapterModal.ts +23 -20
  64. package/components/common/diagramMain/modals/lib/config/networkModal.ts +401 -398
  65. package/components/common/diagramMain/modals/lib/config/switchModal.ts +3 -0
  66. package/components/common/diagramMain/modals/remove/RemoveModal.vue +8 -0
  67. package/components/common/diagramMain/modals/remove/RemoveModalNew.vue +106 -95
  68. package/components/common/diagramMain/modals/remove/RemoveModalOld.vue +12 -1
  69. package/components/common/diagramMain/modals/viewSettings/info/Info.vue +0 -2
  70. package/components/common/diagramMain/modals/viewSettings/viewSettings/ViewSettings.vue +6 -0
  71. package/components/common/diagramMain/modals/viewSettings/viewSettings/ViewSettingsNew.vue +140 -71
  72. package/components/common/diagramMain/modals/viewSettings/viewSettings/ViewSettingsOld.vue +4 -4
  73. package/components/common/diagramMain/network/Contents.vue +497 -497
  74. package/components/common/layout/theHeader/helpMenu/About.vue +79 -79
  75. package/components/common/layout/theHeader/helpMenu/aboutOld/AboutOld.vue +79 -79
  76. package/components/common/pages/backups/DetailView.vue +52 -52
  77. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  78. package/components/common/pages/backups/modals/Modals.vue +243 -243
  79. package/components/common/pages/backups/modals/createBackup/configuration/Configuration.vue +29 -29
  80. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
  81. package/components/common/pages/backups/modals/createBackup/datastores/tableView/TableView.vue +95 -95
  82. package/components/common/pages/backups/modals/createBackup/general/General.vue +141 -141
  83. package/components/common/pages/backups/modals/createBackup/lib/config/strategyOptions.ts +12 -12
  84. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  85. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  86. package/components/common/pages/backups/modals/restore/disks/Disks.vue +27 -27
  87. package/components/common/pages/backups/modals/restore/disks/tableView/lib/config/table.ts +117 -117
  88. package/components/common/pages/backups/modals/restore/name/Name.vue +166 -166
  89. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  90. package/components/common/pages/backups/modals/restore/networks/Networks.vue +67 -67
  91. package/components/common/pages/backups/modals/restore/networks/table/Table.vue +214 -214
  92. package/components/common/pages/backups/modals/restore/types/lib/config/typeOptions.ts +25 -25
  93. package/components/common/pages/backups/tools/Tools.vue +75 -75
  94. package/components/common/pages/backups/tools/lib/config/tabs.ts +36 -36
  95. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  96. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  97. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  98. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  99. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  100. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  101. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  102. package/components/common/select/radio/RadioGroup.vue +137 -137
  103. package/components/common/spiceConsole/Drawer.vue +392 -392
  104. package/components/common/spiceConsole/SpiceConsole.vue +184 -184
  105. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  106. package/components/common/tools/Actions.vue +207 -207
  107. package/components/common/treeView/TreeView.vue +52 -52
  108. package/components/common/vm/actions/add/Add.vue +877 -877
  109. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  110. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +368 -368
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/Table.vue +99 -99
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  117. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  118. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  119. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  120. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  121. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  122. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +174 -174
  123. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  124. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  125. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  126. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  127. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +143 -143
  128. package/components/common/vm/actions/common/select/computeResource/New.vue +184 -184
  129. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +131 -131
  130. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  131. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  132. package/components/common/vm/actions/common/select/name/Name.vue +200 -200
  133. package/components/common/vm/actions/common/select/name/Old.vue +131 -131
  134. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  135. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  136. package/components/common/vm/actions/common/select/storage/new/New.vue +320 -320
  137. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  138. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  139. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  140. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  141. package/components/common/vm/actions/register/Register.vue +267 -267
  142. package/components/common/vm/actions/register/lib/config/steps.ts +86 -86
  143. package/components/common/vmt/actions/add/Add.vue +549 -549
  144. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  145. package/components/common/wizards/network/add/Add.vue +9 -3
  146. package/components/common/wizards/network/add/AddNew.vue +291 -354
  147. package/components/common/wizards/network/add/AddOld.vue +0 -3
  148. package/components/common/wizards/network/add/lib/config/config.ts +1 -0
  149. package/components/common/wizards/network/add/lib/config/initialData.ts +9 -0
  150. package/components/common/wizards/network/add/lib/config/steps.ts +35 -5
  151. package/components/common/wizards/network/add/lib/models/interfaces.ts +12 -2
  152. package/components/common/wizards/network/add/steps/connectionSettings/ConnectionSettings.vue +83 -0
  153. package/components/common/wizards/network/add/steps/connectionSettings/ConnectionSettingsNew.vue +114 -0
  154. package/components/common/wizards/network/add/steps/{ConnectionSettings.vue → connectionSettings/ConnectionSettingsOld.vue} +11 -42
  155. package/components/common/wizards/network/add/steps/createStandardSwitch/CreateStandardSwitch.vue +99 -0
  156. package/components/common/wizards/network/add/steps/createStandardSwitch/CreateStandardSwitchNew.vue +80 -0
  157. package/components/common/wizards/network/add/steps/{CreateStandardSwitch.vue → createStandardSwitch/CreateStandardSwitchOld.vue} +24 -33
  158. package/components/common/wizards/network/add/steps/ipFourSettings/IpFourSettings.vue +143 -0
  159. package/components/common/wizards/network/add/steps/ipFourSettings/IpFourSettingsNew.vue +224 -0
  160. package/components/common/wizards/network/add/steps/{IpFourSettings.vue → ipFourSettings/IpFourSettingsOld.vue} +13 -101
  161. package/components/common/wizards/network/add/steps/portProperties/PortProperties.vue +214 -0
  162. package/components/common/wizards/network/add/steps/portProperties/PortPropertiesNew.vue +289 -0
  163. package/components/common/wizards/network/add/steps/{PortProperties.vue → portProperties/PortPropertiesOld.vue} +19 -166
  164. package/components/common/wizards/network/add/steps/readyComplete/ReadyComplete.vue +22 -0
  165. package/components/common/wizards/network/add/steps/readyComplete/ReadyCompleteNew.vue +30 -0
  166. package/components/common/wizards/network/add/steps/selectTargetDevice/SelectTargetDevice.vue +7 -2
  167. package/components/common/wizards/network/add/steps/selectTargetDevice/SelectTargetDeviceNew.vue +1 -3
  168. package/components/common/wizards/network/add/steps/selectTargetDevice/SelectTargetDeviceOld.vue +0 -2
  169. package/components/common/wizards/network/add/validations/common.ts +1 -2
  170. package/components/common/wizards/network/add/validations/connectionSettings.ts +14 -7
  171. package/components/common/wizards/network/add/validations/ipFourSettings.ts +24 -10
  172. package/components/common/wizards/network/add/validations/networkValidation.ts +1 -1
  173. package/components/common/wizards/network/add/validations/portProperties.ts +52 -20
  174. package/components/common/wizards/network/add/validations/targetDevice.ts +18 -4
  175. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  176. package/composables/useAppVersion.ts +21 -21
  177. package/composables/useLocal.ts +6 -6
  178. package/composables/useLocalCommon.ts +39 -39
  179. package/package.json +2 -2
  180. package/plugins/date.ts +233 -233
  181. package/plugins/panelStates.ts +70 -70
  182. package/plugins/text.ts +59 -59
  183. package/public/spice-console/lib/images/bitmap.js +203 -203
  184. package/public/spice-console/network/spicechannel.js +440 -440
  185. package/public/spice-console/run.js +210 -210
  186. package/store/main/mutations.ts +7 -7
  187. package/store/main/state.ts +7 -7
  188. package/components/common/wizards/network/add/steps/PhysicalAdapter.vue +0 -13
  189. /package/components/common/adapterManager/ui/actions/{ActionsBar.vue → bar/BarOld.vue} +0 -0
  190. /package/components/common/adapterManager/ui/{NoSelectedAdapter.vue → noSelectedAdapter/NoSelectedAdapterOld.vue} +0 -0
  191. /package/components/common/wizards/network/add/steps/{ReadyComplete.vue → readyComplete/ReadyCompleteOld.vue} +0 -0
@@ -1,900 +1,905 @@
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
- initialData.value,
270
- hideModal
271
- )
272
- }
273
-
274
- const isShowSwitchViewSettingsModal = ref<boolean>(false)
275
- const isShowSwitchEditSettingsModal = ref<boolean>(false)
276
- const isShowSwitchRemoveModal = ref<boolean>(false)
277
- const onHideSwitchViewSettingsModal = (): void => {
278
- isShowSwitchViewSettingsModal.value = false
279
- }
280
- const onHideSwitchEditSettingsModal = (): void => {
281
- isShowSwitchEditSettingsModal.value = false
282
- }
283
- const onHideSwitchRemoveModal = (): void => {
284
- isShowSwitchRemoveModal.value = false
285
- }
286
-
287
- const isShowAdapterViewSettingsModal = ref<boolean>(false)
288
- const onHideAdapterViewSettingsModal = (): void => {
289
- isShowAdapterViewSettingsModal.value = false
290
- }
291
-
292
- const isShowNetworkViewSettingsModal = ref<boolean>(false)
293
- const isShowNetworkEditSettingsModal = ref<boolean>(false)
294
- const isShowNetworkRemoveModal = ref<boolean>(false)
295
- const onHideNetworkViewSettingsModal = (): void => {
296
- isShowNetworkViewSettingsModal.value = false
297
- }
298
- const onHideNetworkEditSettingsModal = (): void => {
299
- isShowNetworkEditSettingsModal.value = false
300
- }
301
- const onHideNetworkRemoveModal = (): void => {
302
- isShowNetworkRemoveModal.value = false
303
- }
304
-
305
- const isShowPortViewSettingsModal = ref<boolean>(false)
306
- const isShowPortEditSettingsModal = ref<boolean>(false)
307
- const isShowPortRemoveModal = ref<boolean>(false)
308
- const onHidePortViewSettingsModal = (): void => {
309
- isShowPortViewSettingsModal.value = false
310
- }
311
- const onHidePortEditSettingsModal = (): void => {
312
- isShowPortEditSettingsModal.value = false
313
- }
314
- const onHidePortRemoveModal = (): void => {
315
- isShowPortRemoveModal.value = false
316
- }
317
-
318
- const isShowVCenterViewSettingsModal = ref<boolean>(false)
319
- const onHideVCenterViewSettingsModal = (): void => {
320
- isShowVCenterViewSettingsModal.value = false
321
- }
322
- const isShowAddNetworkingModal = ref<boolean>(false)
323
- const onHideAddNetworkingModal = (): void => {
324
- isShowAddNetworkingModal.value = false
325
- }
326
- const isShowMigrateVmkernelAdapterModal = ref<boolean>(false)
327
- const onHideMigrateVmkernelAdapterModal = (): void => {
328
- isShowMigrateVmkernelAdapterModal.value = false
329
- }
330
-
331
- const selectedStandardSwitchId = ref<string>('')
332
- const selectedSwitchId = ref<string>('')
333
-
334
- const onShowModal = (
335
- value: string,
336
- properties: UI_I_ModalsInitialData
337
- ): void => {
338
- switch (value) {
339
- case 'port-view-settings':
340
- initialData.value = properties
341
- isShowPortViewSettingsModal.value = true
342
- break
343
- case 'network-view-settings':
344
- isShowNetworkViewSettingsModal.value = true
345
- initialData.value = properties
346
- break
347
- case 'adapter-view-settings':
348
- isShowAdapterViewSettingsModal.value = true
349
- initialData.value = properties
350
- break
351
- case 'v-center-view-settings':
352
- isShowVCenterViewSettingsModal.value = true
353
- initialData.value = properties
354
- break
355
- case 'network-edit-settings':
356
- isShowNetworkEditSettingsModal.value = true
357
- initialData.value = properties
358
- break
359
- case 'port-edit-settings':
360
- initialData.value = properties
361
- isShowPortEditSettingsModal.value = true
362
- break
363
- case 'network-port-remove':
364
- initialData.value = properties
365
- isShowNetworkRemoveModal.value = true
366
- break
367
- case 'port-remove':
368
- initialData.value = properties
369
- isShowPortRemoveModal.value = true
370
- break
371
- case 'switch-edit':
372
- isShowSwitchEditSettingsModal.value = true
373
- initialData.value = useDeepCopy(switchInitialData.value)
374
- break
375
- case 'switch-manage-physical-adapters':
376
- isShowSwitchManagePhysicalAdaptersModal.value = true
377
- initialData.value = useDeepCopy(switchInitialData.value)
378
- break
379
- case 'add-networking':
380
- isShowAddNetworkingModal.value = true
381
- selectedStandardSwitchId.value = properties.switch_name
382
- selectedSwitchId.value = properties.switch_name
383
- break
384
- case 'switch-view-settings':
385
- isShowSwitchViewSettingsModal.value = true
386
- initialData.value = useDeepCopy(switchInitialData.value)
387
- break
388
- case 'migrate-vmkernel-adapter':
389
- isShowMigrateVmkernelAdapterModal.value = true
390
- break
391
- case 'switch-remove':
392
- isShowSwitchRemoveModal.value = true
393
- break
394
- }
395
- }
396
-
397
- const onRemove = (id: string, type: string) => {
398
- if (type === 'network' && selectedNetwork.value === id) {
399
- selectedNetwork.value = '-1'
400
- resetSelection()
401
- } else if (type === 'port' && selectedPort.value.portId === id) {
402
- selectedPort.value.networkId = '-1'
403
- selectedPort.value.portId = '-1'
404
- resetSelection()
405
- }
406
-
407
- const hideModal =
408
- type === 'network'
409
- ? onHideNetworkRemoveModal
410
- : type === 'switch'
411
- ? onHideSwitchRemoveModal
412
- : onHidePortRemoveModal
413
-
414
- emits('remove', id, type, hideModal)
415
- }
416
- const onChangeEditFieldsData = (newEditFieldsData: UI_I_EditFieldsData) => {
417
- emits('change-edit-fields-data', newEditFieldsData)
418
- }
419
- const onCheckNetworkLabel = (
420
- label: string,
421
- sendMessage: (message: string) => void
422
- ) => {
423
- emits('check-network-label', label, sendMessage)
424
- }
425
- const onGetExistingStandardSwitches = () => {
426
- emits('get-existing-standard-switches')
427
- }
428
- const onGetTcpStacks = () => {
429
- emits('get-tcp-stacks')
430
- }
431
- const onGetFreeAdapters = (showModal: () => void) => {
432
- emits('get-free-adapters', showModal)
433
- }
434
- const onSendNetworkData = (
435
- data: UI_T_EditData,
436
- type: string,
437
- hideModal: () => void
438
- ) => {
439
- emits('send-add-networking-data', data, type, hideModal)
440
- }
441
- const onSendEditData = (type: string, hideModal: () => void, id?: string) => {
442
- emits('send-edit-data', type, initialData.value, hideModal, id)
443
- }
444
- const isShowDiagram = ref<boolean>(true)
445
- const onToggleDiagram = () => {
446
- isShowDiagram.value = !isShowDiagram.value
447
- }
448
- const mainRectHeights = ref<UI_I_MainRectHeights>(
449
- useDeepCopy(mainRectHeightsInitial)
450
- )
451
-
452
- const switchLine = ref<UI_I_SwitchLine>(useDeepCopy(switchLineInitial))
453
- const mainSwitchLine = computed<UI_I_SwitchLine>(
454
- () =>
455
- (switchLine.value.ay && {
456
- y1: Math.min(switchLine.value.y1, switchLine.value.ay),
457
- y2: Math.max(switchLine.value.y2, switchLine.value.ay),
458
- }) || { y1: 0, y2: 0 }
459
- )
460
-
461
- const selectedMainLine = ref(false)
462
- const selectedPort = ref<UI_I_SelectedPort>(useDeepCopy(selectedPortInitial))
463
- const selectedAdapter = ref<UI_I_SelectedAdapter>(
464
- useDeepCopy(selectedAdapterInitial)
465
- )
466
- const selectedNetwork = ref<string>('-1')
467
-
468
- const selectedSwitchLineY = ref<UI_I_SwitchLine>(
469
- useDeepCopy(selectedSwitchLineYInitial)
470
- )
471
- const mainRectHeight = computed<number>(() =>
472
- Math.max(
473
- mainRectHeights.value.networksHeight,
474
- mainRectHeights.value.adaptersHeight
475
- )
476
- )
477
-
478
- const countNetworksPositions = (
479
- newNetworks?: UI_I_Network[] | null
480
- ): UI_I_NetworksWithPositions[] => {
481
- let lastNetworkHeight = 0
482
- let lastPosition = UI_E_PositionsY.DIAGRAM_TOP + UI_E_PositionsY.BETWEEN_RECTS
483
- mainRectHeights.value.networksHeight =
484
- UI_E_PositionsY.DIAGRAM_TOP + UI_E_PositionsY.BETWEEN_RECTS
485
-
486
- const lastIndex = props.diagramData?.networks.findLastIndex(
487
- (network: UI_I_Network) =>
488
- network.activeAdapters.length > 0 && network.state.state !== 3
489
- )
490
-
491
- return (
492
- (newNetworks ? newNetworks : props.diagramData?.networks)?.map(
493
- (network: UI_I_Network, index: number) => {
494
- let portsCount = 0
495
- if (
496
- network.networkType ===
497
- (UI_E_NetworkType.VMPortsGroup || UI_E_NetworkType.VCenter)
498
- ) {
499
- portsCount = network.ports.length
500
- } else {
501
- portsCount = network.sysx ? 1 : 0
502
- }
503
- const portsHeight = network.toggle
504
- ? network.networkType === UI_E_NetworkType.VCenter
505
- ? portsCount * UI_E_PositionsY.SINGLE_V_CENTER_HEIGHT
506
- : portsCount * UI_E_PositionsY.SINGLE_PORT_HEIGHT
507
- : 0
508
- const networkHeight =
509
- UI_E_PositionsY.PORTS_FROM_RECT_TOP +
510
- portsHeight +
511
- (network.networkType === UI_E_NetworkType.VCenter
512
- ? UI_E_PositionsY.SINGLE_V_CENTER_HEIGHT - 10
513
- : UI_E_PositionsY.SINGLE_PORT_HEIGHT) +
514
- UI_E_PositionsY.SPACE_FROM_RECT_BOTTOM
515
-
516
- lastPosition +=
517
- lastNetworkHeight + (index && UI_E_PositionsY.BETWEEN_RECTS)
518
- lastNetworkHeight = networkHeight
519
-
520
- const connectLineY = lastPosition + networkHeight / 2
521
- const titlePosition = lastPosition + UI_E_PositionsY.TITLE_FROM_RECT_TOP
522
- const vlanPosition = lastPosition + UI_E_PositionsY.VLAN_FROM_RECT_TOP
523
- const portsPosition = lastPosition + UI_E_PositionsY.PORTS_FROM_RECT_TOP
524
-
525
- const networkPortsName =
526
- (network.networkType === UI_E_NetworkType.VMkernel &&
527
- 'VMkernel Ports') ||
528
- (network.networkType === UI_E_NetworkType.VMPortsGroup &&
529
- 'Virtual Machines') ||
530
- (network.networkType === UI_E_NetworkType.VCenter &&
531
- 'Virtual Machines') ||
532
- ''
533
-
534
- lastIndex !== -1 && index === 0 && (switchLine.value.y1 = connectLineY)
535
- lastIndex !== -1 &&
536
- index === lastIndex &&
537
- (switchLine.value.y2 = connectLineY)
538
-
539
- mainRectHeights.value.networksHeight +=
540
- networkHeight + UI_E_PositionsY.BETWEEN_RECTS
541
-
542
- const networkWithPortsPositions =
543
- network.networkType ===
544
- (UI_E_NetworkType.VMPortsGroup || UI_E_NetworkType.VCenter)
545
- ? network.ports.map((port, index) => {
546
- const portPosition =
547
- portsPosition +
548
- (network.networkType === UI_E_NetworkType.VCenter
549
- ? (index + 1) * UI_E_PositionsY.SINGLE_V_CENTER_HEIGHT - 10
550
- : (index + 1) * UI_E_PositionsY.SINGLE_PORT_HEIGHT)
551
-
552
- return {
553
- ...port,
554
- portPosition,
555
- }
556
- })
557
- : (network.sysx && [
558
- {
559
- id: network.sysx?.id,
560
- name: `${network.sysx?.id} ${
561
- network.sysx.ipv4_settings.ipv4
562
- ? `: ${network.sysx.ipv4_settings.ipv4}`
563
- : ''
564
- }`,
565
- state: network.sysx.state,
566
- portPosition:
567
- portsPosition + UI_E_PositionsY.SINGLE_PORT_HEIGHT,
568
- },
569
- ]) ||
570
- []
571
-
572
- return {
573
- ...network,
574
- ports: networkWithPortsPositions,
575
- portsCount,
576
- portsHeight,
577
- networkHeight,
578
- rectPosition: lastPosition,
579
- connectLineY,
580
- titlePosition,
581
- vlanPosition,
582
- vlanId: network.vlanId || '--',
583
- portsPosition,
584
- networkPortsName,
585
- }
586
- }
587
- ) || []
588
- )
589
- }
590
- const networksWithPositions = ref<UI_I_NetworksWithPositions[]>(
591
- countNetworksPositions()
592
- )
593
-
594
- const isPortToggled = ref<UI_I_PortToggleFlag>({
595
- value: false,
596
- id: '',
597
- })
598
-
599
- const countAdaptersPositions = (): UI_I_AdaptersWithPositions => {
600
- const { height, toggle, adaptersCount } = countAdaptersHeight(
601
- props.diagramData
602
- )
603
-
604
- mainRectHeights.value.adaptersHeight =
605
- UI_E_PositionsY.DIAGRAM_TOP + UI_E_PositionsY.BETWEEN_RECTS * 2 + height
606
-
607
- const { titlePosition, rectPosition, adaptersConnectLineY, adapters } =
608
- getAdaptersPositions(props.diagramData, height)
609
-
610
- switchLine.value.ay = adaptersConnectLineY
611
-
612
- return {
613
- toggle,
614
- height,
615
- adapters,
616
- rectPosition,
617
- adaptersConnectLineY,
618
- titlePosition,
619
- adaptersCount,
620
- }
621
- }
622
-
623
- const adaptersWithPositions = computed<UI_I_AdaptersWithPositions>(() => {
624
- return countAdaptersPositions()
625
- })
626
-
627
- const networksCount = computed<number>(
628
- () =>
629
- networksWithPositions.value.filter(
630
- (networkWithPositions: UI_I_NetworksWithPositions) =>
631
- networkWithPositions.activeAdapters.length > 0 &&
632
- networkWithPositions.state.state !== 3
633
- ).length
634
- )
635
-
636
- watch(
637
- () => props.diagramData?.networks,
638
- (newValue: UI_I_Network[] | null) => {
639
- networksWithPositions.value = countNetworksPositions(newValue)
640
-
641
- isPortToggled.value.value && handlePortToggle()
642
-
643
- if (selectedAdapter.value.adapterId !== '-1') {
644
- onSelectAdapter(selectedAdapter.value.adapterId)
645
- return
646
- }
647
-
648
- if (selectedPort.value.portId !== '-1') {
649
- onSelectPort(selectedPort.value.networkId, selectedPort.value.portId)
650
- return
651
- }
652
-
653
- if (selectedNetwork.value !== '-1') {
654
- cashedNetworkId.value = '-1'
655
- onSelectNetwork(selectedNetwork.value)
656
- return
657
- }
658
-
659
- if (selectedMainLine.value && networksCount.value === 0) {
660
- selectedMainLine.value = false
661
- return
662
- }
663
-
664
- if (selectedMainLine.value) return
665
-
666
- resetSelection()
667
- },
668
- { deep: true }
669
- )
670
-
671
- const onSelectPort = (networkId: string, portId: string): void => {
672
- const selectPortData = getSelectPortDataFunc(
673
- networkId,
674
- portId,
675
- networksWithPositions.value,
676
- adaptersWithPositions.value
677
- )
678
-
679
- if (!selectPortData) return
680
-
681
- selectedSwitchLineY.value = selectPortData.selectedSwitchLineY
682
- selectedPort.value = selectPortData.selectedPort
683
- }
684
-
685
- const cashedNetworkId = ref<string>('-1')
686
-
687
- const onSelectNetwork = (networkId: string): void => {
688
- if (cashedNetworkId.value === networkId) {
689
- resetSelection()
690
- cashedNetworkId.value = '-1'
691
- return
692
- }
693
-
694
- selectedNetwork.value = networkId
695
-
696
- const selectNetworkData = getSelectNetworkDataFunc(
697
- networkId,
698
- networksWithPositions.value,
699
- adaptersWithPositions.value
700
- )
701
-
702
- cashedNetworkId.value = networkId
703
-
704
- if (!selectNetworkData) return
705
-
706
- selectedSwitchLineY.value = selectNetworkData.selectedSwitchLineY
707
- selectedPort.value = selectNetworkData.selectedPort
708
- }
709
-
710
- const onSelectAdapter = (adapterId: string): void => {
711
- const selectedNetworks: UI_I_NetworksWithPositions[] =
712
- networksWithPositions.value?.filter(
713
- (network: UI_I_NetworksWithPositions) =>
714
- network.activeAdapters.includes(adapterId) && network.state.state !== 3
715
- )
716
-
717
- let pos: number[] = selectedNetworks?.reduce(networksPositions, [])
718
- let selectedAdapterPosition: number | null =
719
- adaptersWithPositions.value.adapters?.find(
720
- (adapter: UI_T_Adapters) => adapter.id === adapterId
721
- )?.adapterPosition || null
722
-
723
- selectedAdapterPosition !== null &&
724
- (selectedAdapterPosition += 7.5) &&
725
- pos?.push(selectedAdapterPosition)
726
-
727
- pos = pos?.sort((y1, y2) => y1 - y2)
728
-
729
- if (pos) {
730
- selectedSwitchLineY.value = {
731
- y1: pos[0],
732
- y2: pos[pos.length - 1],
733
- }
734
- }
735
-
736
- selectedAdapter.value = {
737
- adapterId,
738
- connectedPorts:
739
- selectedNetworks?.map((network: UI_I_Network) => ({
740
- networkId: network.id,
741
- ports: network.ports.map((port) => port.id),
742
- })) || [],
743
- }
744
- }
745
-
746
- const resetSelection = (): void => {
747
- selectedPort.value = useDeepCopy(selectedPortInitial)
748
- selectedSwitchLineY.value = useDeepCopy(selectedSwitchLineYInitial)
749
- selectedAdapter.value = useDeepCopy(selectedAdapterInitial)
750
- selectedNetwork.value = '-1'
751
- selectedMainLine.value = false
752
- }
753
-
754
- const emits = defineEmits<{
755
- (
756
- event: 'toggle-ports',
757
- payload: Omit<UI_I_ToggleDiagramPortsPayload, 'paths'>
758
- ): void
759
- (
760
- event: 'toggle-adapters',
761
- payload: Omit<UI_I_ToggleDiagramAdaptersPayload, 'paths'>
762
- ): void
763
- (event: 'get-existing-standard-switches'): void
764
- (
765
- event: 'send-add-networking-data',
766
- data: UI_T_EditData,
767
- type: string,
768
- hideModal: () => void
769
- ): void
770
- (
771
- event: 'add-networking-data-validate',
772
- data: UI_T_EditData,
773
- type: string,
774
- setValidation: (message: UI_I_ArbitraryObject<string>) => void
775
- ): void
776
- (
777
- event: 'check-network-label',
778
- label: string,
779
- sendMessage: (message: string) => void
780
- ): void
781
- (event: 'get-free-adapters', showModal: () => void): void
782
- (
783
- event: 'send-edit-data',
784
- type: string,
785
- initialData: UI_I_ModalsInitialData,
786
- hideModal: () => void,
787
- id?: string
788
- ): void
789
- (event: 'change-edit-fields-data', editFieldsData: UI_I_EditFieldsData): void
790
- (event: 'remove', id: string, type: string, hideModal: () => void): void
791
- (
792
- event: 'send-manage-physical-adapters-data',
793
- adapterStatus: UI_I_AdapterStatus,
794
- switchName: string,
795
- initialData: UI_I_ModalsInitialData,
796
- hideModal: () => void
797
- ): void
798
- (event: 'get-tcp-stacks'): void
799
- }>()
800
-
801
- const onTogglePorts = (
802
- id: string,
803
- isToggle: boolean,
804
- diagramId: string
805
- ): void => {
806
- emits('toggle-ports', {
807
- id,
808
- isToggle,
809
- diagramId,
810
- })
811
-
812
- isPortToggled.value = {
813
- value: true,
814
- id: id,
815
- }
816
- }
817
-
818
- const handlePortToggle = () => {
819
- cashedNetworkId.value = '-1'
820
-
821
- selectedPort.value.portId !== '-1' &&
822
- onSelectPort(selectedPort.value.networkId, selectedPort.value.portId)
823
- selectedAdapter.value.adapterId !== '-1' &&
824
- onSelectAdapter(selectedAdapter.value.adapterId)
825
- selectedNetwork.value !== '-1' && onSelectNetwork(selectedNetwork.value)
826
- hasPortAndNetwork(selectedPort.value, isPortToggled.value.id) &&
827
- resetSelection()
828
-
829
- isPortToggled.value = {
830
- value: false,
831
- id: '',
832
- }
833
- }
834
-
835
- const onToggleAdapters = (): void => {
836
- cashedNetworkId.value = '-1'
837
-
838
- const newState = !adaptersWithPositions.value.toggle
839
- const payload: Omit<UI_I_ToggleDiagramAdaptersPayload, 'paths'> = {
840
- isToggle: newState,
841
- diagramId: props.diagramData?.id || '',
842
- }
843
-
844
- emits('toggle-adapters', payload)
845
-
846
- selectedPort.value.portId !== '-1' &&
847
- onSelectPort(selectedPort.value.networkId, selectedPort.value.portId)
848
- selectedAdapter.value.adapterId !== '-1' && resetSelection()
849
- selectedNetwork.value !== '-1' && onSelectNetwork(selectedNetwork.value)
850
- }
851
-
852
- const onClickDiagram = (ev: MouseEvent): void => {
853
- const target = ev.target as HTMLElement
854
- const targetClassList = target.classList
855
-
856
- if (!targetClassList.contains('network-title')) {
857
- cashedNetworkId.value = '-1'
858
- }
859
-
860
- if (targetClassList.contains('main-line__handler')) {
861
- resetSelection()
862
- selectedMainLine.value = true
863
- } else {
864
- !(
865
- target.closest('.diagram-block__toggle') ||
866
- target.closest('.diagram-actions') ||
867
- target.closest('.dropdown-actions-container')
868
- ) && resetSelection()
869
- }
870
- }
871
- </script>
872
-
873
- <style scoped lang="scss">
874
- .diagram {
875
- &-min-width {
876
- //min-width: 745px;
877
- //min-width: 764px;
878
- }
879
- &-main-container {
880
- padding-top: 5px;
881
- }
882
- }
883
- </style>
884
- <style lang="scss">
885
- .diagram-main-actions__popup.navbar-dropdown-menu {
886
- .btn {
887
- border-radius: 3px;
888
- border-bottom: none;
889
- &:hover {
890
- border-bottom: none;
891
- }
892
- span {
893
- font-size: 14px;
894
- }
895
- &:active {
896
- box-shadow: none;
897
- }
898
- }
899
- }
900
- </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
+ :project="props.project"
81
+ @hide-port-view-settings-modal="onHidePortViewSettingsModal"
82
+ @hide-network-view-settings-modal="onHideNetworkViewSettingsModal"
83
+ @hide-adapter-view-settings-modal="onHideAdapterViewSettingsModal"
84
+ @hide-vcenter-view-settings-modal="onHideVCenterViewSettingsModal"
85
+ @hide-switch-view-settings-modal="onHideSwitchViewSettingsModal"
86
+ @hide-network-remove-modal="onHideNetworkRemoveModal"
87
+ @hide-switch-remove-modal="onHideSwitchRemoveModal"
88
+ @hide-port-remove-modal="onHidePortRemoveModal"
89
+ @hide-network-edit-settings-modal="onHideNetworkEditSettingsModal"
90
+ @hide-port-edit-settings-modal="onHidePortEditSettingsModal"
91
+ @hide-switch-edit-settings-modal="onHideSwitchEditSettingsModal"
92
+ @hide-switch-manage-physical-adapters-modal="
93
+ onHideSwitchManagePhysicalAdaptersModal
94
+ "
95
+ @hide-add-networking-modal="onHideAddNetworkingModal"
96
+ @hide-migrate-vmkernel-adapter-modal="onHideMigrateVmkernelAdapterModal"
97
+ @remove="onRemove"
98
+ @send-edit-data="onSendEditData"
99
+ @change-edit-fields-data="onChangeEditFieldsData"
100
+ @check-network-label="onCheckNetworkLabel"
101
+ @send-manage-physical-adapters-data="onSendManagePhysicalAdaptersData"
102
+ @change-adapter-status="onChangeManagePhysicalAdapterStatus"
103
+ @get-free-adapters="onGetFreeAdapters"
104
+ @get-existing-standard-switches="onGetExistingStandardSwitches"
105
+ @get-tcp-stacks="onGetTcpStacks"
106
+ @send-add-networking-data="onSendNetworkData"
107
+ @add-networking-data-validate="onValidateBeforeSending"
108
+ />
109
+ </div>
110
+ </template>
111
+
112
+ <script setup lang="ts">
113
+ import type {
114
+ UI_I_Adapter,
115
+ UI_I_AdapterStatus,
116
+ UI_I_AdaptersWithPositions,
117
+ UI_I_MainRectHeights,
118
+ UI_I_ModalsInitialData,
119
+ UI_I_Network,
120
+ UI_I_EditFieldsData,
121
+ UI_I_NetworksWithPositions,
122
+ UI_I_SelectedAdapter,
123
+ UI_I_SelectedPort,
124
+ UI_I_SwitchLine,
125
+ UI_I_ToggleDiagramAdaptersPayload,
126
+ UI_I_ToggleDiagramPortsPayload,
127
+ UI_I_PortToggleFlag,
128
+ UI_I_DiagramData,
129
+ UI_I_SwitchAdapterItem,
130
+ } from '~/components/common/diagramMain/lib/models/interfaces'
131
+ import type {
132
+ UI_I_ArbitraryObject,
133
+ UI_I_ItemsWithTotalCounts,
134
+ } from '~/lib/models/interfaces'
135
+ import type {
136
+ UI_I_Switch,
137
+ UI_I_TCPStack,
138
+ } from '~/components/common/wizards/network/add/lib/models/interfaces'
139
+ import type { UI_T_EditData } from '~/components/common/wizards/network/add/lib/models/types'
140
+ import type { UI_T_Adapters } from '~/components/common/diagramMain/lib/models/types'
141
+ import type { UI_T_Project } from '~/lib/models/types'
142
+ import { UI_E_NetworkType, UI_E_PositionsY } from './lib/models/enums'
143
+ import {
144
+ managePhysicalAdapterStatusInitial,
145
+ mainRectHeightsInitial,
146
+ switchLineInitial,
147
+ selectedPortInitial,
148
+ selectedSwitchLineYInitial,
149
+ selectedAdapterInitial,
150
+ } from '~/components/common/diagramMain/lib/config'
151
+ import {
152
+ hasPortAndNetwork,
153
+ networksPositions,
154
+ getSelectNetworkDataFunc,
155
+ getSelectPortDataFunc,
156
+ countAdaptersHeight,
157
+ getAdaptersPositions,
158
+ } from '~/components/common/diagramMain/lib/utils/utils'
159
+
160
+ const props = withDefaults(
161
+ defineProps<{
162
+ diagramData: UI_I_DiagramData
163
+ project?: UI_T_Project
164
+ inPortlet?: boolean
165
+ standardSwitchesInitial?: UI_I_Switch[]
166
+ hostName?: string
167
+ adapters?: UI_I_ItemsWithTotalCounts<UI_I_SwitchAdapterItem>
168
+ freeAdapters?: UI_I_Adapter[]
169
+ networksList?: UI_I_Network[]
170
+ isDarkMode: boolean
171
+ tcpStacks?: UI_I_TCPStack[]
172
+ diagramsData?: UI_I_DiagramData[]
173
+ isManageAdaptersModalLoading?: boolean
174
+ isNetworkingLoading?: boolean
175
+ isRemoveModalLoading?: boolean
176
+ isEditModalLoading?: boolean
177
+ isMigrateAdapterLoading?: boolean
178
+ }>(),
179
+ {
180
+ project: 'procurator',
181
+ diagramData: null,
182
+ inPortlet: false,
183
+ standardSwitchesInitial: () => [],
184
+ hostName: '',
185
+ adapters: () => ({
186
+ total_items: 0,
187
+ total_pages: 0,
188
+ items: [],
189
+ }),
190
+ freeAdapters: () => [],
191
+ networksList: () => [],
192
+ tcpStacks: () => [],
193
+ diagramsData: [],
194
+ isManageAdaptersModalLoading: false,
195
+ isNetworkingLoading: false,
196
+ isRemoveModalLoading: false,
197
+ isEditModalLoading: false,
198
+ isMigrateAdapterLoading: false,
199
+ }
200
+ )
201
+
202
+ const initialData = ref<UI_I_ModalsInitialData>({})
203
+ const switchInitialData = ref<UI_I_ModalsInitialData>({})
204
+
205
+ watch(
206
+ () => props.diagramData?.networking,
207
+ (initial: UI_I_ModalsInitialData | undefined) => {
208
+ if (initial) {
209
+ initialData.value = initial
210
+ switchInitialData.value = initial
211
+ }
212
+ },
213
+ { deep: true, immediate: true }
214
+ )
215
+
216
+ const onValidateBeforeSending = (
217
+ data: UI_T_EditData,
218
+ type: string,
219
+ setValidation: (messages: UI_I_ArbitraryObject<string>) => void
220
+ ) => {
221
+ emits('add-networking-data-validate', data, type, setValidation)
222
+ }
223
+
224
+ let initialManagePhysicalAdapterStatus = ref<UI_I_AdapterStatus>(
225
+ managePhysicalAdapterStatusInitial
226
+ )
227
+
228
+ const managePhysicalAdapterStatus = ref<UI_I_AdapterStatus>(
229
+ useDeepCopy(initialManagePhysicalAdapterStatus.value)
230
+ )
231
+
232
+ watch(
233
+ () => props.diagramData,
234
+ (newValue: UI_I_DiagramData) => {
235
+ if (newValue?.networking) {
236
+ initialManagePhysicalAdapterStatus.value = {
237
+ active: useDeepCopy(props.diagramData?.networking?.activeAdapters),
238
+ standby: useDeepCopy(props.diagramData?.networking?.standbyAdapters),
239
+ unused: useDeepCopy(props.diagramData?.networking?.unusedAdapters),
240
+ }
241
+
242
+ managePhysicalAdapterStatus.value = useDeepCopy(
243
+ initialManagePhysicalAdapterStatus.value
244
+ )
245
+ }
246
+ },
247
+ { deep: true, immediate: true }
248
+ )
249
+
250
+ const onChangeManagePhysicalAdapterStatus = (
251
+ adapterStatusNew: UI_I_AdapterStatus
252
+ ) => {
253
+ managePhysicalAdapterStatus.value = adapterStatusNew
254
+ }
255
+
256
+ const isShowSwitchManagePhysicalAdaptersModal = ref<boolean>(false)
257
+ const onHideSwitchManagePhysicalAdaptersModal = (): void => {
258
+ isShowSwitchManagePhysicalAdaptersModal.value = false
259
+ }
260
+
261
+ const onSendManagePhysicalAdaptersData = (
262
+ adapterStatus: UI_I_AdapterStatus,
263
+ switchName: string,
264
+ hideModal: () => void
265
+ ) => {
266
+ emits(
267
+ 'send-manage-physical-adapters-data',
268
+ adapterStatus,
269
+ switchName,
270
+ initialData.value,
271
+ hideModal
272
+ )
273
+ }
274
+
275
+ const isShowSwitchViewSettingsModal = ref<boolean>(false)
276
+ const isShowSwitchEditSettingsModal = ref<boolean>(false)
277
+ const isShowSwitchRemoveModal = ref<boolean>(false)
278
+ const onHideSwitchViewSettingsModal = (): void => {
279
+ isShowSwitchViewSettingsModal.value = false
280
+ }
281
+ const onHideSwitchEditSettingsModal = (): void => {
282
+ isShowSwitchEditSettingsModal.value = false
283
+ }
284
+ const onHideSwitchRemoveModal = (): void => {
285
+ isShowSwitchRemoveModal.value = false
286
+ }
287
+
288
+ const isShowAdapterViewSettingsModal = ref<boolean>(false)
289
+ const onHideAdapterViewSettingsModal = (): void => {
290
+ isShowAdapterViewSettingsModal.value = false
291
+ }
292
+
293
+ const isShowNetworkViewSettingsModal = ref<boolean>(false)
294
+ const isShowNetworkEditSettingsModal = ref<boolean>(false)
295
+ const isShowNetworkRemoveModal = ref<boolean>(false)
296
+ const onHideNetworkViewSettingsModal = (): void => {
297
+ isShowNetworkViewSettingsModal.value = false
298
+ }
299
+ const onHideNetworkEditSettingsModal = (): void => {
300
+ isShowNetworkEditSettingsModal.value = false
301
+ }
302
+ const onHideNetworkRemoveModal = (): void => {
303
+ isShowNetworkRemoveModal.value = false
304
+ }
305
+
306
+ const isShowPortViewSettingsModal = ref<boolean>(false)
307
+ const isShowPortEditSettingsModal = ref<boolean>(false)
308
+ const isShowPortRemoveModal = ref<boolean>(false)
309
+ const onHidePortViewSettingsModal = (): void => {
310
+ isShowPortViewSettingsModal.value = false
311
+ }
312
+ const onHidePortEditSettingsModal = (): void => {
313
+ isShowPortEditSettingsModal.value = false
314
+ }
315
+ const onHidePortRemoveModal = (): void => {
316
+ isShowPortRemoveModal.value = false
317
+ }
318
+
319
+ const isShowVCenterViewSettingsModal = ref<boolean>(false)
320
+ const onHideVCenterViewSettingsModal = (): void => {
321
+ isShowVCenterViewSettingsModal.value = false
322
+ }
323
+ const isShowAddNetworkingModal = ref<boolean>(false)
324
+ const onHideAddNetworkingModal = (): void => {
325
+ isShowAddNetworkingModal.value = false
326
+ }
327
+ const isShowMigrateVmkernelAdapterModal = ref<boolean>(false)
328
+ const onHideMigrateVmkernelAdapterModal = (): void => {
329
+ isShowMigrateVmkernelAdapterModal.value = false
330
+ }
331
+
332
+ const selectedStandardSwitchId = ref<string>('')
333
+ const selectedSwitchId = ref<string>('')
334
+
335
+ const onShowModal = (
336
+ value: string,
337
+ properties: UI_I_ModalsInitialData
338
+ ): void => {
339
+ switch (value) {
340
+ case 'port-view-settings':
341
+ initialData.value = properties
342
+ isShowPortViewSettingsModal.value = true
343
+ break
344
+ case 'network-view-settings':
345
+ isShowNetworkViewSettingsModal.value = true
346
+ initialData.value = properties
347
+ break
348
+ case 'adapter-view-settings':
349
+ isShowAdapterViewSettingsModal.value = true
350
+ initialData.value = properties
351
+ break
352
+ case 'v-center-view-settings':
353
+ isShowVCenterViewSettingsModal.value = true
354
+ initialData.value = properties
355
+ break
356
+ case 'network-edit-settings':
357
+ isShowNetworkEditSettingsModal.value = true
358
+ initialData.value = properties
359
+ break
360
+ case 'port-edit-settings':
361
+ initialData.value = properties
362
+ isShowPortEditSettingsModal.value = true
363
+ break
364
+ case 'network-port-remove':
365
+ initialData.value = properties
366
+ isShowNetworkRemoveModal.value = true
367
+ break
368
+ case 'port-remove':
369
+ initialData.value = properties
370
+ isShowPortRemoveModal.value = true
371
+ break
372
+ case 'switch-edit':
373
+ isShowSwitchEditSettingsModal.value = true
374
+ initialData.value = useDeepCopy(switchInitialData.value)
375
+ break
376
+ case 'switch-manage-physical-adapters':
377
+ isShowSwitchManagePhysicalAdaptersModal.value = true
378
+ initialData.value = useDeepCopy(switchInitialData.value)
379
+ break
380
+ case 'add-networking':
381
+ isShowAddNetworkingModal.value = true
382
+ selectedStandardSwitchId.value = properties.switch_name
383
+ selectedSwitchId.value = properties.switch_name
384
+ break
385
+ case 'switch-view-settings':
386
+ isShowSwitchViewSettingsModal.value = true
387
+ initialData.value = useDeepCopy(switchInitialData.value)
388
+ break
389
+ case 'migrate-vmkernel-adapter':
390
+ isShowMigrateVmkernelAdapterModal.value = true
391
+ break
392
+ case 'switch-remove':
393
+ isShowSwitchRemoveModal.value = true
394
+ break
395
+ }
396
+ }
397
+
398
+ const onRemove = (id: string, type: string) => {
399
+ if (
400
+ (type === 'network' || type === 'network1' || type === 'network2') &&
401
+ selectedNetwork.value === id
402
+ ) {
403
+ selectedNetwork.value = '-1'
404
+ resetSelection()
405
+ } else if (type === 'port' && selectedPort.value.portId === id) {
406
+ selectedPort.value.networkId = '-1'
407
+ selectedPort.value.portId = '-1'
408
+ resetSelection()
409
+ }
410
+
411
+ const hideModal =
412
+ type === 'network' || type === 'network1' || type === 'network2'
413
+ ? onHideNetworkRemoveModal
414
+ : type === 'switch'
415
+ ? onHideSwitchRemoveModal
416
+ : onHidePortRemoveModal
417
+
418
+ emits('remove', id, type, hideModal)
419
+ }
420
+ const onChangeEditFieldsData = (newEditFieldsData: UI_I_EditFieldsData) => {
421
+ emits('change-edit-fields-data', newEditFieldsData)
422
+ }
423
+ const onCheckNetworkLabel = (
424
+ label: string,
425
+ sendMessage: (message: string) => void
426
+ ) => {
427
+ emits('check-network-label', label, sendMessage)
428
+ }
429
+ const onGetExistingStandardSwitches = () => {
430
+ emits('get-existing-standard-switches')
431
+ }
432
+ const onGetTcpStacks = () => {
433
+ emits('get-tcp-stacks')
434
+ }
435
+ const onGetFreeAdapters = (showModal: () => void) => {
436
+ emits('get-free-adapters', showModal)
437
+ }
438
+ const onSendNetworkData = (
439
+ data: UI_T_EditData,
440
+ type: string,
441
+ hideModal: () => void
442
+ ) => {
443
+ emits('send-add-networking-data', data, type, hideModal)
444
+ }
445
+ const onSendEditData = (type: string, hideModal: () => void, id?: string) => {
446
+ emits('send-edit-data', type, initialData.value, hideModal, id)
447
+ }
448
+ const isShowDiagram = ref<boolean>(true)
449
+ const onToggleDiagram = () => {
450
+ isShowDiagram.value = !isShowDiagram.value
451
+ }
452
+ const mainRectHeights = ref<UI_I_MainRectHeights>(
453
+ useDeepCopy(mainRectHeightsInitial)
454
+ )
455
+
456
+ const switchLine = ref<UI_I_SwitchLine>(useDeepCopy(switchLineInitial))
457
+ const mainSwitchLine = computed<UI_I_SwitchLine>(
458
+ () =>
459
+ (switchLine.value.ay && {
460
+ y1: Math.min(switchLine.value.y1, switchLine.value.ay),
461
+ y2: Math.max(switchLine.value.y2, switchLine.value.ay),
462
+ }) || { y1: 0, y2: 0 }
463
+ )
464
+
465
+ const selectedMainLine = ref(false)
466
+ const selectedPort = ref<UI_I_SelectedPort>(useDeepCopy(selectedPortInitial))
467
+ const selectedAdapter = ref<UI_I_SelectedAdapter>(
468
+ useDeepCopy(selectedAdapterInitial)
469
+ )
470
+ const selectedNetwork = ref<string>('-1')
471
+
472
+ const selectedSwitchLineY = ref<UI_I_SwitchLine>(
473
+ useDeepCopy(selectedSwitchLineYInitial)
474
+ )
475
+ const mainRectHeight = computed<number>(() =>
476
+ Math.max(
477
+ mainRectHeights.value.networksHeight,
478
+ mainRectHeights.value.adaptersHeight
479
+ )
480
+ )
481
+
482
+ const countNetworksPositions = (
483
+ newNetworks?: UI_I_Network[] | null
484
+ ): UI_I_NetworksWithPositions[] => {
485
+ let lastNetworkHeight = 0
486
+ let lastPosition = UI_E_PositionsY.DIAGRAM_TOP + UI_E_PositionsY.BETWEEN_RECTS
487
+ mainRectHeights.value.networksHeight =
488
+ UI_E_PositionsY.DIAGRAM_TOP + UI_E_PositionsY.BETWEEN_RECTS
489
+
490
+ const lastIndex = props.diagramData?.networks.findLastIndex(
491
+ (network: UI_I_Network) =>
492
+ network.activeAdapters.length > 0 && network.state.state !== 3
493
+ )
494
+
495
+ return (
496
+ (newNetworks ? newNetworks : props.diagramData?.networks)?.map(
497
+ (network: UI_I_Network, index: number) => {
498
+ let portsCount = 0
499
+ if (
500
+ network.networkType ===
501
+ (UI_E_NetworkType.VMPortsGroup || UI_E_NetworkType.VCenter)
502
+ ) {
503
+ portsCount = network.ports.length
504
+ } else {
505
+ portsCount = network.sysx ? 1 : 0
506
+ }
507
+ const portsHeight = network.toggle
508
+ ? network.networkType === UI_E_NetworkType.VCenter
509
+ ? portsCount * UI_E_PositionsY.SINGLE_V_CENTER_HEIGHT
510
+ : portsCount * UI_E_PositionsY.SINGLE_PORT_HEIGHT
511
+ : 0
512
+ const networkHeight =
513
+ UI_E_PositionsY.PORTS_FROM_RECT_TOP +
514
+ portsHeight +
515
+ (network.networkType === UI_E_NetworkType.VCenter
516
+ ? UI_E_PositionsY.SINGLE_V_CENTER_HEIGHT - 10
517
+ : UI_E_PositionsY.SINGLE_PORT_HEIGHT) +
518
+ UI_E_PositionsY.SPACE_FROM_RECT_BOTTOM
519
+
520
+ lastPosition +=
521
+ lastNetworkHeight + (index && UI_E_PositionsY.BETWEEN_RECTS)
522
+ lastNetworkHeight = networkHeight
523
+
524
+ const connectLineY = lastPosition + networkHeight / 2
525
+ const titlePosition = lastPosition + UI_E_PositionsY.TITLE_FROM_RECT_TOP
526
+ const vlanPosition = lastPosition + UI_E_PositionsY.VLAN_FROM_RECT_TOP
527
+ const portsPosition = lastPosition + UI_E_PositionsY.PORTS_FROM_RECT_TOP
528
+
529
+ const networkPortsName =
530
+ (network.networkType === UI_E_NetworkType.VMkernel &&
531
+ 'VMkernel Ports') ||
532
+ (network.networkType === UI_E_NetworkType.VMPortsGroup &&
533
+ 'Virtual Machines') ||
534
+ (network.networkType === UI_E_NetworkType.VCenter &&
535
+ 'Virtual Machines') ||
536
+ ''
537
+
538
+ lastIndex !== -1 && index === 0 && (switchLine.value.y1 = connectLineY)
539
+ lastIndex !== -1 &&
540
+ index === lastIndex &&
541
+ (switchLine.value.y2 = connectLineY)
542
+
543
+ mainRectHeights.value.networksHeight +=
544
+ networkHeight + UI_E_PositionsY.BETWEEN_RECTS
545
+
546
+ const networkWithPortsPositions =
547
+ network.networkType ===
548
+ (UI_E_NetworkType.VMPortsGroup || UI_E_NetworkType.VCenter)
549
+ ? network.ports.map((port, index) => {
550
+ const portPosition =
551
+ portsPosition +
552
+ (network.networkType === UI_E_NetworkType.VCenter
553
+ ? (index + 1) * UI_E_PositionsY.SINGLE_V_CENTER_HEIGHT - 10
554
+ : (index + 1) * UI_E_PositionsY.SINGLE_PORT_HEIGHT)
555
+
556
+ return {
557
+ ...port,
558
+ portPosition,
559
+ }
560
+ })
561
+ : (network.sysx && [
562
+ {
563
+ id: network.sysx?.id,
564
+ name: `${network.sysx?.id} ${
565
+ network.sysx.ipv4_settings.ipv4
566
+ ? `: ${network.sysx.ipv4_settings.ipv4}`
567
+ : ''
568
+ }`,
569
+ state: network.sysx.state,
570
+ testId: `network-port-${index}`,
571
+ portPosition:
572
+ portsPosition + UI_E_PositionsY.SINGLE_PORT_HEIGHT,
573
+ },
574
+ ]) ||
575
+ []
576
+
577
+ return {
578
+ ...network,
579
+ ports: networkWithPortsPositions,
580
+ portsCount,
581
+ portsHeight,
582
+ networkHeight,
583
+ rectPosition: lastPosition,
584
+ connectLineY,
585
+ titlePosition,
586
+ vlanPosition,
587
+ vlanId: network.vlanId || '--',
588
+ portsPosition,
589
+ networkPortsName,
590
+ }
591
+ }
592
+ ) || []
593
+ )
594
+ }
595
+ const networksWithPositions = ref<UI_I_NetworksWithPositions[]>(
596
+ countNetworksPositions()
597
+ )
598
+
599
+ const isPortToggled = ref<UI_I_PortToggleFlag>({
600
+ value: false,
601
+ id: '',
602
+ })
603
+
604
+ const countAdaptersPositions = (): UI_I_AdaptersWithPositions => {
605
+ const { height, toggle, adaptersCount } = countAdaptersHeight(
606
+ props.diagramData
607
+ )
608
+
609
+ mainRectHeights.value.adaptersHeight =
610
+ UI_E_PositionsY.DIAGRAM_TOP + UI_E_PositionsY.BETWEEN_RECTS * 2 + height
611
+
612
+ const { titlePosition, rectPosition, adaptersConnectLineY, adapters } =
613
+ getAdaptersPositions(props.diagramData, height)
614
+
615
+ switchLine.value.ay = adaptersConnectLineY
616
+
617
+ return {
618
+ toggle,
619
+ height,
620
+ adapters,
621
+ rectPosition,
622
+ adaptersConnectLineY,
623
+ titlePosition,
624
+ adaptersCount,
625
+ }
626
+ }
627
+
628
+ const adaptersWithPositions = computed<UI_I_AdaptersWithPositions>(() => {
629
+ return countAdaptersPositions()
630
+ })
631
+
632
+ const networksCount = computed<number>(
633
+ () =>
634
+ networksWithPositions.value.filter(
635
+ (networkWithPositions: UI_I_NetworksWithPositions) =>
636
+ networkWithPositions.activeAdapters.length > 0 &&
637
+ networkWithPositions.state.state !== 3
638
+ ).length
639
+ )
640
+
641
+ watch(
642
+ () => props.diagramData?.networks,
643
+ (newValue: UI_I_Network[] | null) => {
644
+ networksWithPositions.value = countNetworksPositions(newValue)
645
+
646
+ isPortToggled.value.value && handlePortToggle()
647
+
648
+ if (selectedAdapter.value.adapterId !== '-1') {
649
+ onSelectAdapter(selectedAdapter.value.adapterId)
650
+ return
651
+ }
652
+
653
+ if (selectedPort.value.portId !== '-1') {
654
+ onSelectPort(selectedPort.value.networkId, selectedPort.value.portId)
655
+ return
656
+ }
657
+
658
+ if (selectedNetwork.value !== '-1') {
659
+ cashedNetworkId.value = '-1'
660
+ onSelectNetwork(selectedNetwork.value)
661
+ return
662
+ }
663
+
664
+ if (selectedMainLine.value && networksCount.value === 0) {
665
+ selectedMainLine.value = false
666
+ return
667
+ }
668
+
669
+ if (selectedMainLine.value) return
670
+
671
+ resetSelection()
672
+ },
673
+ { deep: true }
674
+ )
675
+
676
+ const onSelectPort = (networkId: string, portId: string): void => {
677
+ const selectPortData = getSelectPortDataFunc(
678
+ networkId,
679
+ portId,
680
+ networksWithPositions.value,
681
+ adaptersWithPositions.value
682
+ )
683
+
684
+ if (!selectPortData) return
685
+
686
+ selectedSwitchLineY.value = selectPortData.selectedSwitchLineY
687
+ selectedPort.value = selectPortData.selectedPort
688
+ }
689
+
690
+ const cashedNetworkId = ref<string>('-1')
691
+
692
+ const onSelectNetwork = (networkId: string): void => {
693
+ if (cashedNetworkId.value === networkId) {
694
+ resetSelection()
695
+ cashedNetworkId.value = '-1'
696
+ return
697
+ }
698
+
699
+ selectedNetwork.value = networkId
700
+
701
+ const selectNetworkData = getSelectNetworkDataFunc(
702
+ networkId,
703
+ networksWithPositions.value,
704
+ adaptersWithPositions.value
705
+ )
706
+
707
+ cashedNetworkId.value = networkId
708
+
709
+ if (!selectNetworkData) return
710
+
711
+ selectedSwitchLineY.value = selectNetworkData.selectedSwitchLineY
712
+ selectedPort.value = selectNetworkData.selectedPort
713
+ }
714
+
715
+ const onSelectAdapter = (adapterId: string): void => {
716
+ const selectedNetworks: UI_I_NetworksWithPositions[] =
717
+ networksWithPositions.value?.filter(
718
+ (network: UI_I_NetworksWithPositions) =>
719
+ network.activeAdapters.includes(adapterId) && network.state.state !== 3
720
+ )
721
+
722
+ let pos: number[] = selectedNetworks?.reduce(networksPositions, [])
723
+ let selectedAdapterPosition: number | null =
724
+ adaptersWithPositions.value.adapters?.find(
725
+ (adapter: UI_T_Adapters) => adapter.id === adapterId
726
+ )?.adapterPosition || null
727
+
728
+ selectedAdapterPosition !== null &&
729
+ (selectedAdapterPosition += 7.5) &&
730
+ pos?.push(selectedAdapterPosition)
731
+
732
+ pos = pos?.sort((y1, y2) => y1 - y2)
733
+
734
+ if (pos) {
735
+ selectedSwitchLineY.value = {
736
+ y1: pos[0],
737
+ y2: pos[pos.length - 1],
738
+ }
739
+ }
740
+
741
+ selectedAdapter.value = {
742
+ adapterId,
743
+ connectedPorts:
744
+ selectedNetworks?.map((network: UI_I_Network) => ({
745
+ networkId: network.id,
746
+ ports: network.ports.map((port) => port.id),
747
+ })) || [],
748
+ }
749
+ }
750
+
751
+ const resetSelection = (): void => {
752
+ selectedPort.value = useDeepCopy(selectedPortInitial)
753
+ selectedSwitchLineY.value = useDeepCopy(selectedSwitchLineYInitial)
754
+ selectedAdapter.value = useDeepCopy(selectedAdapterInitial)
755
+ selectedNetwork.value = '-1'
756
+ selectedMainLine.value = false
757
+ }
758
+
759
+ const emits = defineEmits<{
760
+ (
761
+ event: 'toggle-ports',
762
+ payload: Omit<UI_I_ToggleDiagramPortsPayload, 'paths'>
763
+ ): void
764
+ (
765
+ event: 'toggle-adapters',
766
+ payload: Omit<UI_I_ToggleDiagramAdaptersPayload, 'paths'>
767
+ ): void
768
+ (event: 'get-existing-standard-switches'): void
769
+ (
770
+ event: 'send-add-networking-data',
771
+ data: UI_T_EditData,
772
+ type: string,
773
+ hideModal: () => void
774
+ ): void
775
+ (
776
+ event: 'add-networking-data-validate',
777
+ data: UI_T_EditData,
778
+ type: string,
779
+ setValidation: (message: UI_I_ArbitraryObject<string>) => void
780
+ ): void
781
+ (
782
+ event: 'check-network-label',
783
+ label: string,
784
+ sendMessage: (message: string) => void
785
+ ): void
786
+ (event: 'get-free-adapters', showModal: () => void): void
787
+ (
788
+ event: 'send-edit-data',
789
+ type: string,
790
+ initialData: UI_I_ModalsInitialData,
791
+ hideModal: () => void,
792
+ id?: string
793
+ ): void
794
+ (event: 'change-edit-fields-data', editFieldsData: UI_I_EditFieldsData): void
795
+ (event: 'remove', id: string, type: string, hideModal: () => void): void
796
+ (
797
+ event: 'send-manage-physical-adapters-data',
798
+ adapterStatus: UI_I_AdapterStatus,
799
+ switchName: string,
800
+ initialData: UI_I_ModalsInitialData,
801
+ hideModal: () => void
802
+ ): void
803
+ (event: 'get-tcp-stacks'): void
804
+ }>()
805
+
806
+ const onTogglePorts = (
807
+ id: string,
808
+ isToggle: boolean,
809
+ diagramId: string
810
+ ): void => {
811
+ emits('toggle-ports', {
812
+ id,
813
+ isToggle,
814
+ diagramId,
815
+ })
816
+
817
+ isPortToggled.value = {
818
+ value: true,
819
+ id: id,
820
+ }
821
+ }
822
+
823
+ const handlePortToggle = () => {
824
+ cashedNetworkId.value = '-1'
825
+
826
+ selectedPort.value.portId !== '-1' &&
827
+ onSelectPort(selectedPort.value.networkId, selectedPort.value.portId)
828
+ selectedAdapter.value.adapterId !== '-1' &&
829
+ onSelectAdapter(selectedAdapter.value.adapterId)
830
+ selectedNetwork.value !== '-1' && onSelectNetwork(selectedNetwork.value)
831
+ hasPortAndNetwork(selectedPort.value, isPortToggled.value.id) &&
832
+ resetSelection()
833
+
834
+ isPortToggled.value = {
835
+ value: false,
836
+ id: '',
837
+ }
838
+ }
839
+
840
+ const onToggleAdapters = (): void => {
841
+ cashedNetworkId.value = '-1'
842
+
843
+ const newState = !adaptersWithPositions.value.toggle
844
+ const payload: Omit<UI_I_ToggleDiagramAdaptersPayload, 'paths'> = {
845
+ isToggle: newState,
846
+ diagramId: props.diagramData?.id || '',
847
+ }
848
+
849
+ emits('toggle-adapters', payload)
850
+
851
+ selectedPort.value.portId !== '-1' &&
852
+ onSelectPort(selectedPort.value.networkId, selectedPort.value.portId)
853
+ selectedAdapter.value.adapterId !== '-1' && resetSelection()
854
+ selectedNetwork.value !== '-1' && onSelectNetwork(selectedNetwork.value)
855
+ }
856
+
857
+ const onClickDiagram = (ev: MouseEvent): void => {
858
+ const target = ev.target as HTMLElement
859
+ const targetClassList = target.classList
860
+
861
+ if (!targetClassList.contains('network-title')) {
862
+ cashedNetworkId.value = '-1'
863
+ }
864
+
865
+ if (targetClassList.contains('main-line__handler')) {
866
+ resetSelection()
867
+ selectedMainLine.value = true
868
+ } else {
869
+ !(
870
+ target.closest('.diagram-block__toggle') ||
871
+ target.closest('.diagram-actions') ||
872
+ target.closest('.dropdown-actions-container')
873
+ ) && resetSelection()
874
+ }
875
+ }
876
+ </script>
877
+
878
+ <style scoped lang="scss">
879
+ .diagram {
880
+ &-min-width {
881
+ //min-width: 745px;
882
+ //min-width: 764px;
883
+ }
884
+ &-main-container {
885
+ padding-top: 5px;
886
+ }
887
+ }
888
+ </style>
889
+ <style lang="scss">
890
+ .diagram-main-actions__popup.navbar-dropdown-menu {
891
+ .btn {
892
+ border-radius: 3px;
893
+ border-bottom: none;
894
+ &:hover {
895
+ border-bottom: none;
896
+ }
897
+ span {
898
+ font-size: 14px;
899
+ }
900
+ &:active {
901
+ box-shadow: none;
902
+ }
903
+ }
904
+ }
905
+ </style>