bfg-common 1.6.68 → 1.6.69

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.
@@ -1,935 +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
- '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>
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>