bfg-common 1.6.66 → 1.6.68

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