bfg-common 1.4.579 → 1.4.580

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 (66) hide show
  1. package/assets/img/icons/icons-sprite-dark-1.svg +407 -437
  2. package/assets/img/icons/icons-sprite-dark-2.svg +343 -347
  3. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  4. package/assets/img/icons/icons-sprite-dark-4.svg +255 -259
  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 +407 -437
  8. package/assets/img/icons/icons-sprite-light-2.svg +343 -347
  9. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  10. package/assets/img/icons/icons-sprite-light-4.svg +255 -259
  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 +377 -364
  18. package/components/common/diagramMain/DiagramMain.vue +894 -872
  19. package/components/common/diagramMain/Header.vue +211 -211
  20. package/components/common/diagramMain/adapter/AdapterItem.vue +2 -0
  21. package/components/common/diagramMain/adapter/AdapterItems.vue +61 -61
  22. package/components/common/diagramMain/adapter/Contents.vue +207 -189
  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 +156 -155
  53. package/components/common/diagramMain/modals/viewSettings/viewSettingsModal/ViewSettingsModalNew.vue +68 -63
  54. package/components/common/diagramMain/network/Contents.vue +491 -488
  55. package/components/common/diagramMain/network/noNetwork/NoNetworkNew.vue +1 -1
  56. package/components/common/diagramMain/port/Port.vue +2 -0
  57. package/components/common/diagramMain/port/Ports.vue +47 -47
  58. package/components/common/layout/theHeader/TheHeaderNew.vue +4 -10
  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 +48 -71
  62. package/components/common/pages/home/resource/ResourceNew.vue +58 -63
  63. package/components/common/pages/home/widgets/WidgetsNew.vue +74 -79
  64. package/components/common/split/horizontal/HorizontalNew.vue +331 -354
  65. package/components/common/wizards/network/add/lib/config/steps.ts +464 -464
  66. package/package.json +2 -2
@@ -1,488 +1,491 @@
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>
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>