bfg-common 1.6.64 → 1.6.66

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