bfg-common 1.4.580 → 1.4.582

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 (67) hide show
  1. package/assets/img/icons/icons-sprite-dark-1.svg +437 -407
  2. package/assets/img/icons/icons-sprite-dark-2.svg +347 -343
  3. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  4. package/assets/img/icons/icons-sprite-dark-4.svg +259 -255
  5. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  6. package/assets/img/icons/icons-sprite-dark-6.svg +94 -94
  7. package/assets/img/icons/icons-sprite-light-1.svg +437 -407
  8. package/assets/img/icons/icons-sprite-light-2.svg +347 -343
  9. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  10. package/assets/img/icons/icons-sprite-light-4.svg +259 -255
  11. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  12. package/assets/img/icons/icons-sprite-light-6.svg +94 -94
  13. package/assets/scss/common/icons/icons-6.scss +156 -156
  14. package/assets/scss/common/theme.scss +321 -321
  15. package/components/common/browse/blocks/lib/models/types.ts +1 -1
  16. package/components/common/browse/lib/models/interfaces.ts +5 -5
  17. package/components/common/diagramMain/Diagram.vue +364 -377
  18. package/components/common/diagramMain/DiagramMain.vue +872 -894
  19. package/components/common/diagramMain/Header.vue +211 -211
  20. package/components/common/diagramMain/adapter/AdapterItem.vue +0 -2
  21. package/components/common/diagramMain/adapter/AdapterItems.vue +61 -61
  22. package/components/common/diagramMain/adapter/Contents.vue +189 -207
  23. package/components/common/diagramMain/lib/config/initial.ts +50 -50
  24. package/components/common/diagramMain/lib/config/positions.ts +194 -194
  25. package/components/common/diagramMain/lib/models/enums.ts +44 -44
  26. package/components/common/diagramMain/lib/models/types.ts +21 -21
  27. package/components/common/diagramMain/lib/utils/utils.ts +331 -331
  28. package/components/common/diagramMain/modals/ManagePhysicalAdaptersModal.vue +330 -330
  29. package/components/common/diagramMain/modals/editSettings/ConfirmTeamingSettingsModal.vue +40 -40
  30. package/components/common/diagramMain/modals/editSettings/EditSettings.vue +497 -497
  31. package/components/common/diagramMain/modals/editSettings/EditSettingsModal.vue +812 -812
  32. package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +214 -214
  33. package/components/common/diagramMain/modals/editSettings/tabs/Security.vue +189 -189
  34. package/components/common/diagramMain/modals/editSettings/tabs/SwitchProperties.vue +163 -163
  35. package/components/common/diagramMain/modals/editSettings/tabs/TeamingFailover.vue +175 -175
  36. package/components/common/diagramMain/modals/editSettings/tabs/TrafficShaping.vue +398 -398
  37. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +346 -346
  38. package/components/common/diagramMain/modals/editSettings/tabs/port/PortProperties.vue +205 -205
  39. package/components/common/diagramMain/modals/lib/config/diagramConfig.ts +23 -23
  40. package/components/common/diagramMain/modals/lib/config/initial.ts +180 -180
  41. package/components/common/diagramMain/modals/lib/config/vmKernelAdapter.ts +90 -90
  42. package/components/common/diagramMain/modals/lib/mappers/mappers.ts +87 -87
  43. package/components/common/diagramMain/modals/lib/utils/index.ts +24 -24
  44. package/components/common/diagramMain/modals/migrateVmkernelAdapter/MigrateVmkernelAdapter.vue +537 -537
  45. package/components/common/diagramMain/modals/migrateVmkernelAdapter/lib/config/steps.ts +114 -114
  46. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/ConnectionSettings.vue +169 -169
  47. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/SelectVmkernelAdapter.vue +159 -159
  48. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/common.ts +14 -14
  49. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/connectionSettings.ts +137 -137
  50. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/selectVmkernelAdapter.ts +52 -52
  51. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/validations.ts +19 -19
  52. package/components/common/diagramMain/modals/viewSettings/info/InfoNew.vue +155 -156
  53. package/components/common/diagramMain/modals/viewSettings/viewSettingsModal/ViewSettingsModalNew.vue +63 -68
  54. package/components/common/diagramMain/network/Contents.vue +488 -491
  55. package/components/common/diagramMain/network/noNetwork/NoNetworkNew.vue +1 -1
  56. package/components/common/diagramMain/port/Port.vue +0 -2
  57. package/components/common/diagramMain/port/Ports.vue +47 -47
  58. package/components/common/layout/theHeader/TheHeaderNew.vue +10 -4
  59. package/components/common/layout/theHeader/userMenu/userMenuNew/UserMenuNew.vue +4 -4
  60. package/components/common/layout/theHeader/userMenu/userMenuNew/lib/config/dropMenu.ts +1 -1
  61. package/components/common/pages/home/headline/HeadlineNew.vue +71 -48
  62. package/components/common/pages/home/resource/ResourceNew.vue +63 -58
  63. package/components/common/pages/home/widgets/WidgetsNew.vue +79 -74
  64. package/components/common/pages/shortcuts/block/BlockNew.vue +80 -71
  65. package/components/common/split/horizontal/HorizontalNew.vue +354 -331
  66. package/components/common/wizards/network/add/lib/config/steps.ts +464 -464
  67. package/package.json +2 -2
@@ -1,491 +1,488 @@
1
- <template>
2
- <g data-title="network-contents">
3
- <foreignObject
4
- data-title="network-icon"
5
- :width="positions.networkIconSize"
6
- :height="positions.networkIconSize"
7
- :x="positions.networkIconX"
8
- :y="positions.networkIconY"
9
- >
10
- <div :class="networkIcon" :title="errorText"></div>
11
- </foreignObject>
12
-
13
- <a
14
- :id="`network-${props.network.id}`"
15
- :data-id="`${props.network.testId}-link`"
16
- style="text-decoration: none"
17
- cursor="pointer"
18
- data-title="network-name-link"
19
- class="network-title-link"
20
- @click="onSelectNetwork(props.network.id)"
21
- >
22
- <foreignObject
23
- data-title="network-name-text"
24
- height="22"
25
- width="206"
26
- :x="positions.networkTitleX"
27
- :title="props.network.title"
28
- :y="networkTitlePosition"
29
- class="diagram__heading"
30
- >
31
- <span
32
- :class="[
33
- 'network-title text-ellipsis',
34
- {
35
- 'is-selected': props.isSelected,
36
- },
37
- ]"
38
- :title="props.network.title"
39
- :id="`network_${props.network.id}`"
40
- >
41
- {{ props.network.title }}
42
- </span>
43
- </foreignObject>
44
- </a>
45
-
46
- <foreignObject
47
- v-if="isNotShowNetworkActions"
48
- data-title="network-actions"
49
- width="18"
50
- height="18"
51
- :x="positions.actionX"
52
- :y="positions.actionY"
53
- cursor="pointer"
54
- >
55
- <div v-if="isNewView" class="dropdown-actions-container">
56
- <button
57
- :id="`dropdown-${props.network.id}`"
58
- :class="[
59
- 'action-button',
60
- { 'action-button-selected': isShowDropdown },
61
- ]"
62
- @click="isShowDropdown = !isShowDropdown"
63
- >
64
- <ui-icon name="horizontal-dotes" width="16" height="16" />
65
- </button>
66
- <Teleport to="body">
67
- <ui-dropdown
68
- :test-id="props.network.testId"
69
- :show="isShowDropdown"
70
- :items="networkPopupFields"
71
- :elem-id="`dropdown-${props.network.id}`"
72
- width="max-content"
73
- show-from-left
74
- @select="(value: string) => onShowModal(value, dataForSelectedNetwork)"
75
- @hide="onHide"
76
- ></ui-dropdown>
77
- </Teleport>
78
- </div>
79
- <div v-else class="diagram-actions">
80
- <atoms-collapse-nav
81
- class="diagram-actions__icon"
82
- value="-1"
83
- popup-class="diagram-actions__popup"
84
- :close-after-click="true"
85
- :items="networkPopupFields"
86
- :test-id="props.network.testId"
87
- @change="(value: string) => onShowModal(value, dataForSelectedNetwork)"
88
- />
89
- </div>
90
- </foreignObject>
91
-
92
- <text
93
- data-title="network-vlan-text"
94
- dy="11px"
95
- font-size="13"
96
- font-weight="400"
97
- :x="positions.contentX"
98
- :y="props.network.vlanPosition"
99
- class="vlan-id"
100
- >
101
- {{ localization.common.vlanId }}: {{ props.network.vlanId }}
102
- </text>
103
-
104
- <common-diagram-main-highlights
105
- data-title="ports-closed"
106
- type="main-orange"
107
- width="276"
108
- height="18"
109
- :x="positions.blockX"
110
- :y="closedPortsHighlightPosition"
111
- :hide="!props.isNetworkSelectedWithClosedPorts"
112
- />
113
-
114
- <foreignObject
115
- data-title="ports-toggle-icon"
116
- :width="positions.arrowSize"
117
- :height="positions.arrowSize"
118
- :x="positions.arrowX"
119
- :y="positions.portsArrowPosition"
120
- cursor="pointer"
121
- :data-id="`${props.network.testId}-toggle-ports`"
122
- :class="{
123
- disabled: !hasPorts && isNewView,
124
- hide: !hasPorts && !isNewView,
125
- }"
126
- @click="
127
- onTogglePorts(props.network.id, !props.network.toggle, props.diagramId)
128
- "
129
- >
130
- <div class="diagram-block__toggle">
131
- <ui-icon
132
- v-if="isNewView"
133
- name="arrow"
134
- width="16"
135
- height="16"
136
- :class="[
137
- 'virtual-switch__arrow-icon',
138
- {
139
- open: hasPorts ? props.network.toggle : false,
140
- },
141
- ]"
142
- />
143
- <atoms-the-icon
144
- v-else
145
- name="angle"
146
- :class="[
147
- 'virtual-switch__arrow-icon',
148
- {
149
- open: hasPorts ? props.network.toggle : false,
150
- },
151
- ]"
152
- />
153
- </div>
154
- </foreignObject>
155
-
156
- <text
157
- v-if="props.network.state.state !== 3"
158
- data-title="ports-main-text"
159
- dy="11px"
160
- font-size="13"
161
- font-weight="400"
162
- :x="positions.portX"
163
- :y="positions.portsY"
164
- class="port-group-header"
165
- >
166
- {{ props.network.networkPortsName }} ({{ props.network.portsCount }})
167
- </text>
168
- <foreignObject
169
- v-else
170
- dy="11px"
171
- font-size="13"
172
- font-weight="400"
173
- x="26"
174
- height="20"
175
- width="246"
176
- :y="props.network.portsPosition - 5"
177
- class="port-group-header"
178
- >
179
- <span class="error-text text-ellipsis" :title="errorText">
180
- {{ errorText }}
181
- </span>
182
- </foreignObject>
183
-
184
- <common-diagram-main-highlights
185
- data-title="ports-closed"
186
- type="line-orange"
187
- :x="positions.x1"
188
- :y="closedPortsLinePosition"
189
- :x2="positions.x2"
190
- :y2="closedPortsLinePosition"
191
- :hide="!props.isNetworkSelectedWithClosedPorts"
192
- />
193
- </g>
194
- </template>
195
-
196
- <script setup lang="ts">
197
- import type {
198
- UI_I_ModalsInitialData,
199
- UI_I_NetworkFullWithPositions,
200
- } from '~/components/common/diagramMain/lib/models/interfaces'
201
- import type {
202
- UI_I_Localization,
203
- UI_I_ArbitraryObject,
204
- } from '~/lib/models/interfaces'
205
- import {
206
- networkPopupFieldsFunc,
207
- networkPopupFieldsNewFunc,
208
- } from '~/components/common/diagramMain/modals/lib/config'
209
- import {
210
- dataForSelectedNetworkFunc,
211
- networkContentPositionsFunc,
212
- } from '~/components/common/diagramMain/lib/config'
213
-
214
- const props = defineProps<{
215
- network: UI_I_NetworkFullWithPositions
216
- inPortlet: boolean
217
- isNetworkSelectedWithClosedPorts: boolean
218
- diagramId: string
219
- testId?: string
220
- isSelected: boolean
221
- }>()
222
-
223
- const emits = defineEmits<{
224
- (event: 'select-network', networkId: string): void
225
- (
226
- event: 'show-modal',
227
- value: string,
228
- properties?: UI_I_ModalsInitialData
229
- ): void
230
- (
231
- event: 'toggle-ports',
232
- id: string,
233
- newState: boolean,
234
- diagramId: string
235
- ): void
236
- }>()
237
-
238
- const { $store }: any = useNuxtApp()
239
-
240
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
241
-
242
- const positions = computed<UI_I_ArbitraryObject<number>>(() =>
243
- networkContentPositionsFunc(
244
- isNewView.value,
245
- props.network.portsPosition,
246
- props.network.titlePosition
247
- )
248
- )
249
-
250
- const isShowDropdown = ref<boolean>(false)
251
- const onHide = (): void => {
252
- isShowDropdown.value = false
253
- }
254
-
255
- const localization = computed<UI_I_Localization>(() => useLocal())
256
-
257
- const networkIcon = computed<string>(() => {
258
- switch (props.network.state.state) {
259
- case 0:
260
- return 'vsphere-icon-network-error network-icon'
261
- case 3:
262
- return 'vsphere-icon-network-error network-icon'
263
- case 2:
264
- return 'vsphere-icon-network-warning network-icon'
265
- default:
266
- return 'vsphere-icon-network network-icon'
267
- }
268
- })
269
-
270
- const errorText = computed<string>(() =>
271
- props.network.state?.errors?.length > 0
272
- ? props.network.state?.errors.join(', ') ||
273
- localization.value.common.somethingWentWrong
274
- : ''
275
- )
276
-
277
- const networkPopupFields = computed(() =>
278
- isNewView.value
279
- ? networkPopupFieldsNewFunc(
280
- localization.value,
281
- props.network.networkType,
282
- props.network.testId,
283
- props.network.state.state,
284
- props.inPortlet
285
- )
286
- : networkPopupFieldsFunc(
287
- localization.value,
288
- props.network.networkType,
289
- props.network.testId,
290
- props.network.state.state,
291
- props.inPortlet
292
- )
293
- )
294
-
295
- const dataForSelectedNetwork = computed<UI_I_ModalsInitialData>(() =>
296
- dataForSelectedNetworkFunc(props.network)
297
- )
298
-
299
- const closedPortsHighlightPosition = computed<number>(
300
- () => props.network.portsPosition - 1.5
301
- )
302
-
303
- const hasPorts = computed<boolean>(() => props.network.portsCount > 0)
304
-
305
- const closedPortsLinePosition = computed<number>(
306
- () => props.network.portsPosition + 7.5
307
- )
308
-
309
- const networkTitlePosition = computed<number>(
310
- () => props.network.titlePosition - 5
311
- )
312
-
313
- const isNotShowNetworkActions = computed<boolean>(
314
- () => !(props.inPortlet && props.network.state.state === 3)
315
- )
316
-
317
- const onSelectNetwork = (networkId: string): void => {
318
- emits('select-network', networkId)
319
- }
320
- const onShowModal = (
321
- value: string,
322
- properties?: UI_I_ModalsInitialData
323
- ): void => {
324
- emits('show-modal', value, properties)
325
- }
326
- const onTogglePorts = (
327
- id: string,
328
- isToggle: boolean,
329
- diagramId: string
330
- ): void => {
331
- emits('toggle-ports', id, isToggle, diagramId)
332
- }
333
- </script>
334
-
335
- <style scoped lang="scss">
336
- @import '@/assets/scss/common/mixins.scss';
337
-
338
- :root.dark-theme {
339
- .diagram__heading,
340
- .vlan-id,
341
- .port-group-header {
342
- fill: #c1cdd4;
343
- }
344
-
345
- .text-ellipsis {
346
- color: #c1cdd4;
347
-
348
- &:hover {
349
- color: #c1cdd4;
350
- text-decoration: solid underline #c1cdd4 2px;
351
- }
352
- }
353
-
354
- .error-text {
355
- color: #e02200;
356
-
357
- &:hover {
358
- color: #e02200;
359
- text-decoration: unset;
360
- }
361
- }
362
- }
363
-
364
- .diagram {
365
- &__heading {
366
- @include text($fs: 14px, $fw: 500);
367
- fill: #565656;
368
- letter-spacing: normal;
369
- line-height: 1.2rem;
370
- }
371
-
372
- &__values {
373
- @include text($fs: 12px, $fw: 400);
374
- }
375
- &-actions {
376
- :deep(.diagram-actions__icon) {
377
- &.tabs-overflow {
378
- top: -12px;
379
- right: -13px;
380
- }
381
- .navbar-dropdown-menu {
382
- .navbar-dropdown-menu-item {
383
- background: red;
384
- }
385
- }
386
- }
387
- }
388
- }
389
-
390
- .virtual-switch__arrow-icon {
391
- width: 16px;
392
- height: 16px;
393
- margin-right: 4px;
394
- transform: rotate(90deg);
395
- align-self: center;
396
- fill: var(--triger-icon-color);
397
- cursor: pointer;
398
- &.open {
399
- transform: rotate(180deg);
400
- }
401
- }
402
-
403
- .text-ellipsis {
404
- display: block;
405
- max-width: 206px;
406
- text-overflow: ellipsis;
407
- overflow: hidden;
408
- white-space: nowrap;
409
- font-weight: 500;
410
- font-size: 14px;
411
- color: #565656;
412
- }
413
- .network-title {
414
- &:hover {
415
- color: #565656;
416
- text-decoration: solid underline #565656 2px;
417
- }
418
- }
419
-
420
- .error-text {
421
- font-weight: 400;
422
- font-size: 12px;
423
- max-width: 246px;
424
- color: #e02200;
425
-
426
- &:hover {
427
- color: #e02200;
428
- text-decoration: unset;
429
- }
430
- }
431
-
432
- :root.is-new-view {
433
- .network-title {
434
- user-select: none;
435
- -webkit-user-select: none;
436
- line-height: 26px;
437
- color: var(--diagram-content-text);
438
-
439
- &:hover {
440
- color: var(--diagram-content-text-hover);
441
- text-decoration: unset;
442
- }
443
- &.is-selected {
444
- color: var(--diagram-content-text-selected);
445
- &:hover {
446
- color: var(--diagram-content-text-selected-hover);
447
- text-decoration: unset;
448
- }
449
- }
450
- }
451
- .disabled {
452
- pointer-events: none;
453
- .virtual-switch__arrow-icon {
454
- fill: none;
455
- color: var(--diagram-content-second-disabled-text);
456
- }
457
- }
458
- .virtual-switch__arrow-icon {
459
- fill: none;
460
- color: var(--diagram-content-second-text);
461
- }
462
- .port-group-header {
463
- fill: var(--diagram-content-second-text);
464
- }
465
- .network-icon {
466
- color: var(--diagram-content-text);
467
- width: 20px;
468
- height: 20px;
469
- }
470
- .vlan-id {
471
- fill: var(--diagram-content-third-text);
472
- }
473
-
474
- .action-button {
475
- border: none;
476
- margin: 0;
477
- padding: 0;
478
- background: transparent;
479
- cursor: pointer;
480
- color: var(--diagram-content-text);
481
-
482
- &:hover {
483
- color: var(--diagram-content-text-hover);
484
- }
485
-
486
- &.action-button-selected {
487
- color: var(--diagram-content-text-selected);
488
- }
489
- }
490
- }
491
- </style>
1
+ <template>
2
+ <g data-title="network-contents">
3
+ <foreignObject
4
+ data-title="network-icon"
5
+ :width="positions.networkIconSize"
6
+ :height="positions.networkIconSize"
7
+ :x="positions.networkIconX"
8
+ :y="positions.networkIconY"
9
+ >
10
+ <div :class="networkIcon" :title="errorText"></div>
11
+ </foreignObject>
12
+
13
+ <a
14
+ :id="`network-${props.network.id}`"
15
+ :data-id="`${props.network.testId}-link`"
16
+ style="text-decoration: none"
17
+ cursor="pointer"
18
+ data-title="network-name-link"
19
+ @click="onSelectNetwork(props.network.id)"
20
+ >
21
+ <foreignObject
22
+ data-title="network-name-text"
23
+ height="22"
24
+ width="206"
25
+ :x="positions.networkTitleX"
26
+ :title="props.network.title"
27
+ :y="networkTitlePosition"
28
+ class="diagram__heading"
29
+ >
30
+ <span
31
+ :class="[
32
+ 'network-title text-ellipsis',
33
+ {
34
+ 'is-selected': props.isSelected,
35
+ },
36
+ ]"
37
+ :title="props.network.title"
38
+ :id="`network_${props.network.id}`"
39
+ >
40
+ {{ props.network.title }}
41
+ </span>
42
+ </foreignObject>
43
+ </a>
44
+
45
+ <foreignObject
46
+ v-if="isNotShowNetworkActions"
47
+ data-title="network-actions"
48
+ width="18"
49
+ height="18"
50
+ :x="positions.actionX"
51
+ :y="positions.actionY"
52
+ cursor="pointer"
53
+ >
54
+ <div v-if="isNewView" class="dropdown-actions-container">
55
+ <button
56
+ :id="`dropdown-${props.network.id}`"
57
+ :class="[
58
+ 'action-button',
59
+ { 'action-button-selected': isShowDropdown },
60
+ ]"
61
+ @click="isShowDropdown = !isShowDropdown"
62
+ >
63
+ <ui-icon name="horizontal-dotes" width="16" height="16" />
64
+ </button>
65
+ <Teleport to="body">
66
+ <ui-dropdown
67
+ :test-id="props.network.testId"
68
+ :show="isShowDropdown"
69
+ :items="networkPopupFields"
70
+ :elem-id="`dropdown-${props.network.id}`"
71
+ width="max-content"
72
+ show-from-left
73
+ @select="(value: string) => onShowModal(value, dataForSelectedNetwork)"
74
+ @hide="onHide"
75
+ ></ui-dropdown>
76
+ </Teleport>
77
+ </div>
78
+ <div v-else class="diagram-actions">
79
+ <atoms-collapse-nav
80
+ class="diagram-actions__icon"
81
+ value="-1"
82
+ popup-class="diagram-actions__popup"
83
+ :close-after-click="true"
84
+ :items="networkPopupFields"
85
+ :test-id="props.network.testId"
86
+ @change="(value: string) => onShowModal(value, dataForSelectedNetwork)"
87
+ />
88
+ </div>
89
+ </foreignObject>
90
+
91
+ <text
92
+ data-title="network-vlan-text"
93
+ dy="11px"
94
+ font-size="13"
95
+ font-weight="400"
96
+ :x="positions.contentX"
97
+ :y="props.network.vlanPosition"
98
+ class="vlan-id"
99
+ >
100
+ {{ localization.common.vlanId }}: {{ props.network.vlanId }}
101
+ </text>
102
+
103
+ <common-diagram-main-highlights
104
+ data-title="ports-closed"
105
+ type="main-orange"
106
+ width="276"
107
+ height="18"
108
+ :x="positions.blockX"
109
+ :y="closedPortsHighlightPosition"
110
+ :hide="!props.isNetworkSelectedWithClosedPorts"
111
+ />
112
+
113
+ <foreignObject
114
+ data-title="ports-toggle-icon"
115
+ :width="positions.arrowSize"
116
+ :height="positions.arrowSize"
117
+ :x="positions.arrowX"
118
+ :y="positions.portsArrowPosition"
119
+ cursor="pointer"
120
+ :data-id="`${props.network.testId}-toggle-ports`"
121
+ :class="{
122
+ disabled: !hasPorts && isNewView,
123
+ hide: !hasPorts && !isNewView,
124
+ }"
125
+ @click="
126
+ onTogglePorts(props.network.id, !props.network.toggle, props.diagramId)
127
+ "
128
+ >
129
+ <div class="diagram-block__toggle">
130
+ <ui-icon
131
+ v-if="isNewView"
132
+ name="arrow"
133
+ width="16"
134
+ height="16"
135
+ :class="[
136
+ 'virtual-switch__arrow-icon',
137
+ {
138
+ open: hasPorts ? props.network.toggle : false,
139
+ },
140
+ ]"
141
+ />
142
+ <atoms-the-icon
143
+ v-else
144
+ name="angle"
145
+ :class="[
146
+ 'virtual-switch__arrow-icon',
147
+ {
148
+ open: hasPorts ? props.network.toggle : false,
149
+ },
150
+ ]"
151
+ />
152
+ </div>
153
+ </foreignObject>
154
+
155
+ <text
156
+ v-if="props.network.state.state !== 3"
157
+ data-title="ports-main-text"
158
+ dy="11px"
159
+ font-size="13"
160
+ font-weight="400"
161
+ :x="positions.portX"
162
+ :y="positions.portsY"
163
+ class="port-group-header"
164
+ >
165
+ {{ props.network.networkPortsName }} ({{ props.network.portsCount }})
166
+ </text>
167
+ <foreignObject
168
+ v-else
169
+ dy="11px"
170
+ font-size="13"
171
+ font-weight="400"
172
+ x="26"
173
+ height="20"
174
+ width="246"
175
+ :y="props.network.portsPosition - 5"
176
+ class="port-group-header"
177
+ >
178
+ <span class="error-text text-ellipsis" :title="errorText">
179
+ {{ errorText }}
180
+ </span>
181
+ </foreignObject>
182
+
183
+ <common-diagram-main-highlights
184
+ data-title="ports-closed"
185
+ type="line-orange"
186
+ :x="positions.x1"
187
+ :y="closedPortsLinePosition"
188
+ :x2="positions.x2"
189
+ :y2="closedPortsLinePosition"
190
+ :hide="!props.isNetworkSelectedWithClosedPorts"
191
+ />
192
+ </g>
193
+ </template>
194
+
195
+ <script setup lang="ts">
196
+ import type {
197
+ UI_I_ModalsInitialData,
198
+ UI_I_NetworkFullWithPositions,
199
+ } from '~/components/common/diagramMain/lib/models/interfaces'
200
+ import type {
201
+ UI_I_Localization,
202
+ UI_I_ArbitraryObject,
203
+ } from '~/lib/models/interfaces'
204
+ import {
205
+ networkPopupFieldsFunc,
206
+ networkPopupFieldsNewFunc,
207
+ } from '~/components/common/diagramMain/modals/lib/config'
208
+ import {
209
+ dataForSelectedNetworkFunc,
210
+ networkContentPositionsFunc,
211
+ } from '~/components/common/diagramMain/lib/config'
212
+
213
+ const props = defineProps<{
214
+ network: UI_I_NetworkFullWithPositions
215
+ inPortlet: boolean
216
+ isNetworkSelectedWithClosedPorts: boolean
217
+ diagramId: string
218
+ testId?: string
219
+ isSelected: boolean
220
+ }>()
221
+
222
+ const emits = defineEmits<{
223
+ (event: 'select-network', networkId: string): void
224
+ (
225
+ event: 'show-modal',
226
+ value: string,
227
+ properties?: UI_I_ModalsInitialData
228
+ ): void
229
+ (
230
+ event: 'toggle-ports',
231
+ id: string,
232
+ newState: boolean,
233
+ diagramId: string
234
+ ): void
235
+ }>()
236
+
237
+ const { $store }: any = useNuxtApp()
238
+
239
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
240
+
241
+ const positions = computed<UI_I_ArbitraryObject<number>>(() =>
242
+ networkContentPositionsFunc(
243
+ isNewView.value,
244
+ props.network.portsPosition,
245
+ props.network.titlePosition
246
+ )
247
+ )
248
+
249
+ const isShowDropdown = ref<boolean>(false)
250
+ const onHide = (): void => {
251
+ isShowDropdown.value = false
252
+ }
253
+
254
+ const localization = computed<UI_I_Localization>(() => useLocal())
255
+
256
+ const networkIcon = computed<string>(() => {
257
+ switch (props.network.state.state) {
258
+ case 0:
259
+ return 'vsphere-icon-network-error network-icon'
260
+ case 3:
261
+ return 'vsphere-icon-network-error network-icon'
262
+ case 2:
263
+ return 'vsphere-icon-network-warning network-icon'
264
+ default:
265
+ return 'vsphere-icon-network network-icon'
266
+ }
267
+ })
268
+
269
+ const errorText = computed<string>(() =>
270
+ props.network.state?.errors?.length > 0
271
+ ? props.network.state?.errors.join(', ') ||
272
+ localization.value.common.somethingWentWrong
273
+ : ''
274
+ )
275
+
276
+ const networkPopupFields = computed(() =>
277
+ isNewView.value
278
+ ? networkPopupFieldsNewFunc(
279
+ localization.value,
280
+ props.network.networkType,
281
+ props.network.testId,
282
+ props.network.state.state,
283
+ props.inPortlet
284
+ )
285
+ : networkPopupFieldsFunc(
286
+ localization.value,
287
+ props.network.networkType,
288
+ props.network.testId,
289
+ props.network.state.state,
290
+ props.inPortlet
291
+ )
292
+ )
293
+
294
+ const dataForSelectedNetwork = computed<UI_I_ModalsInitialData>(() =>
295
+ dataForSelectedNetworkFunc(props.network)
296
+ )
297
+
298
+ const closedPortsHighlightPosition = computed<number>(
299
+ () => props.network.portsPosition - 1.5
300
+ )
301
+
302
+ const hasPorts = computed<boolean>(() => props.network.portsCount > 0)
303
+
304
+ const closedPortsLinePosition = computed<number>(
305
+ () => props.network.portsPosition + 7.5
306
+ )
307
+
308
+ const networkTitlePosition = computed<number>(
309
+ () => props.network.titlePosition - 5
310
+ )
311
+
312
+ const isNotShowNetworkActions = computed<boolean>(
313
+ () => !(props.inPortlet && props.network.state.state === 3)
314
+ )
315
+
316
+ const onSelectNetwork = (networkId: string): void => {
317
+ emits('select-network', networkId)
318
+ }
319
+ const onShowModal = (
320
+ value: string,
321
+ properties?: UI_I_ModalsInitialData
322
+ ): void => {
323
+ emits('show-modal', value, properties)
324
+ }
325
+ const onTogglePorts = (
326
+ id: string,
327
+ isToggle: boolean,
328
+ diagramId: string
329
+ ): void => {
330
+ emits('toggle-ports', id, isToggle, diagramId)
331
+ }
332
+ </script>
333
+
334
+ <style scoped lang="scss">
335
+ @import '@/assets/scss/common/mixins.scss';
336
+
337
+ :root.dark-theme {
338
+ .diagram__heading,
339
+ .vlan-id,
340
+ .port-group-header {
341
+ fill: #c1cdd4;
342
+ }
343
+
344
+ .text-ellipsis {
345
+ color: #c1cdd4;
346
+
347
+ &:hover {
348
+ color: #c1cdd4;
349
+ text-decoration: solid underline #c1cdd4 2px;
350
+ }
351
+ }
352
+
353
+ .error-text {
354
+ color: #e02200;
355
+
356
+ &:hover {
357
+ color: #e02200;
358
+ text-decoration: unset;
359
+ }
360
+ }
361
+ }
362
+
363
+ .diagram {
364
+ &__heading {
365
+ @include text($fs: 14px, $fw: 500);
366
+ fill: #565656;
367
+ letter-spacing: normal;
368
+ line-height: 1.2rem;
369
+ }
370
+
371
+ &__values {
372
+ @include text($fs: 12px, $fw: 400);
373
+ }
374
+ &-actions {
375
+ :deep(.diagram-actions__icon) {
376
+ &.tabs-overflow {
377
+ top: -12px;
378
+ right: -13px;
379
+ }
380
+ .navbar-dropdown-menu {
381
+ .navbar-dropdown-menu-item {
382
+ background: red;
383
+ }
384
+ }
385
+ }
386
+ }
387
+ }
388
+
389
+ .virtual-switch__arrow-icon {
390
+ width: 16px;
391
+ height: 16px;
392
+ margin-right: 4px;
393
+ transform: rotate(90deg);
394
+ align-self: center;
395
+ fill: var(--triger-icon-color);
396
+ cursor: pointer;
397
+ &.open {
398
+ transform: rotate(180deg);
399
+ }
400
+ }
401
+
402
+ .text-ellipsis {
403
+ display: block;
404
+ max-width: 206px;
405
+ text-overflow: ellipsis;
406
+ overflow: hidden;
407
+ white-space: nowrap;
408
+ font-weight: 500;
409
+ font-size: 14px;
410
+ color: #565656;
411
+ }
412
+ .network-title {
413
+ &:hover {
414
+ color: #565656;
415
+ text-decoration: solid underline #565656 2px;
416
+ }
417
+ }
418
+
419
+ .error-text {
420
+ font-weight: 400;
421
+ font-size: 12px;
422
+ max-width: 246px;
423
+ color: #e02200;
424
+
425
+ &:hover {
426
+ color: #e02200;
427
+ text-decoration: unset;
428
+ }
429
+ }
430
+
431
+ :root.is-new-view {
432
+ .network-title {
433
+ line-height: 26px;
434
+ color: var(--diagram-content-text);
435
+
436
+ &:hover {
437
+ color: var(--diagram-content-text-hover);
438
+ text-decoration: unset;
439
+ }
440
+ &.is-selected {
441
+ color: var(--diagram-content-text-selected);
442
+ &:hover {
443
+ color: var(--diagram-content-text-selected);
444
+ text-decoration: unset;
445
+ }
446
+ }
447
+ }
448
+ .disabled {
449
+ pointer-events: none;
450
+ .virtual-switch__arrow-icon {
451
+ fill: none;
452
+ color: var(--diagram-content-second-disabled-text);
453
+ }
454
+ }
455
+ .virtual-switch__arrow-icon {
456
+ fill: none;
457
+ color: var(--diagram-content-second-text);
458
+ }
459
+ .port-group-header {
460
+ fill: var(--diagram-content-second-text);
461
+ }
462
+ .network-icon {
463
+ color: var(--diagram-content-text);
464
+ width: 20px;
465
+ height: 20px;
466
+ }
467
+ .vlan-id {
468
+ fill: var(--diagram-content-third-text);
469
+ }
470
+
471
+ .action-button {
472
+ border: none;
473
+ margin: 0;
474
+ padding: 0;
475
+ background: transparent;
476
+ cursor: pointer;
477
+ color: var(--diagram-content-text);
478
+
479
+ &:hover {
480
+ color: var(--diagram-content-text-hover);
481
+ }
482
+
483
+ &.action-button-selected {
484
+ color: var(--diagram-content-text-selected);
485
+ }
486
+ }
487
+ }
488
+ </style>