bfg-common 1.5.488 → 1.5.490

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 (101) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  3. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  4. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  5. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  6. package/components/atoms/TheIcon3.vue +50 -50
  7. package/components/atoms/collapse/CollapseNav.vue +170 -170
  8. package/components/atoms/perPage/PerPage.vue +58 -58
  9. package/components/atoms/table/dataGrid/DataGridPagination.vue +97 -97
  10. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  11. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  12. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  13. package/components/common/browse/blocks/lib/models/types.ts +1 -1
  14. package/components/common/browse/lib/models/interfaces.ts +5 -5
  15. package/components/common/context/lib/models/interfaces.ts +33 -33
  16. package/components/common/diagramMain/DiagramMain.vue +5 -2
  17. package/components/common/diagramMain/network/Contents.vue +497 -497
  18. package/components/common/layout/theHeader/helpMenu/About.vue +79 -79
  19. package/components/common/layout/theHeader/helpMenu/aboutOld/AboutOld.vue +79 -79
  20. package/components/common/pages/backups/DetailView.vue +52 -52
  21. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  22. package/components/common/pages/backups/modals/Modals.vue +243 -243
  23. package/components/common/pages/backups/modals/createBackup/configuration/Configuration.vue +29 -29
  24. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
  25. package/components/common/pages/backups/modals/createBackup/datastores/tableView/TableView.vue +95 -95
  26. package/components/common/pages/backups/modals/createBackup/general/General.vue +141 -141
  27. package/components/common/pages/backups/modals/createBackup/lib/config/strategyOptions.ts +12 -12
  28. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  29. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  30. package/components/common/pages/backups/modals/restore/disks/Disks.vue +27 -27
  31. package/components/common/pages/backups/modals/restore/disks/tableView/lib/config/table.ts +117 -117
  32. package/components/common/pages/backups/modals/restore/name/Name.vue +166 -166
  33. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  34. package/components/common/pages/backups/modals/restore/networks/Networks.vue +67 -67
  35. package/components/common/pages/backups/modals/restore/networks/table/Table.vue +214 -214
  36. package/components/common/pages/backups/modals/restore/types/lib/config/typeOptions.ts +25 -25
  37. package/components/common/pages/backups/tools/Tools.vue +75 -75
  38. package/components/common/pages/backups/tools/lib/config/tabs.ts +36 -36
  39. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  40. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  41. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  42. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  43. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  44. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  45. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  46. package/components/common/select/radio/RadioGroup.vue +137 -137
  47. package/components/common/spiceConsole/Drawer.vue +392 -392
  48. package/components/common/spiceConsole/SpiceConsole.vue +184 -184
  49. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  50. package/components/common/tools/Actions.vue +207 -207
  51. package/components/common/treeView/TreeView.vue +52 -52
  52. package/components/common/vm/actions/add/Add.vue +877 -877
  53. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  54. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  55. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +368 -368
  56. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  57. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  58. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/Table.vue +99 -99
  60. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  61. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  62. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  63. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  64. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  65. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  66. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +174 -174
  67. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  68. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  69. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  70. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  71. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +143 -143
  72. package/components/common/vm/actions/common/select/computeResource/New.vue +184 -184
  73. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +131 -131
  74. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  75. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  76. package/components/common/vm/actions/common/select/name/Name.vue +200 -200
  77. package/components/common/vm/actions/common/select/name/Old.vue +131 -131
  78. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  79. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  80. package/components/common/vm/actions/common/select/storage/new/New.vue +320 -320
  81. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  82. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  83. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  84. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  85. package/components/common/vm/actions/register/Register.vue +267 -267
  86. package/components/common/vm/actions/register/lib/config/steps.ts +86 -86
  87. package/components/common/vmt/actions/add/Add.vue +549 -549
  88. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  89. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  90. package/composables/useAppVersion.ts +21 -21
  91. package/composables/useLocal.ts +6 -6
  92. package/composables/useLocalCommon.ts +39 -39
  93. package/package.json +1 -1
  94. package/plugins/date.ts +233 -233
  95. package/plugins/panelStates.ts +70 -70
  96. package/plugins/text.ts +59 -59
  97. package/public/spice-console/lib/images/bitmap.js +203 -203
  98. package/public/spice-console/network/spicechannel.js +440 -440
  99. package/public/spice-console/run.js +210 -210
  100. package/store/main/mutations.ts +7 -7
  101. package/store/main/state.ts +7 -7
@@ -1,497 +1,497 @@
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
- :margin-between-trigger="0"
75
- @select="(value: string) => onShowModal(value, dataForSelectedNetwork)"
76
- @hide="onHide"
77
- ></ui-dropdown>
78
- </Teleport>
79
- </div>
80
- <div v-else class="diagram-actions">
81
- <atoms-collapse-nav
82
- class="diagram-actions__icon"
83
- value="-1"
84
- popup-class="diagram-actions__popup"
85
- :close-after-click="true"
86
- :items="networkPopupFields"
87
- :test-id="props.network.testId"
88
- @change="(value: string) => onShowModal(value, dataForSelectedNetwork)"
89
- />
90
- </div>
91
- </foreignObject>
92
-
93
- <text
94
- data-title="network-vlan-text"
95
- dy="11px"
96
- font-size="13"
97
- font-weight="400"
98
- :x="positions.contentX"
99
- :y="props.network.vlanPosition"
100
- class="vlan-id"
101
- >
102
- {{ localization.common.vlanId }}: {{ props.network.vlanId }}
103
- </text>
104
-
105
- <common-diagram-main-highlights
106
- data-title="ports-closed"
107
- type="main-orange"
108
- width="276"
109
- height="18"
110
- :x="positions.blockX"
111
- :y="closedPortsHighlightPosition"
112
- :hide="!props.isNetworkSelectedWithClosedPorts"
113
- />
114
-
115
- <foreignObject
116
- data-title="ports-toggle-icon"
117
- :width="positions.arrowSize"
118
- :height="positions.arrowSize"
119
- :x="positions.arrowX"
120
- :y="positions.portsArrowPosition"
121
- cursor="pointer"
122
- :data-id="`${props.network.testId}-toggle-ports`"
123
- :class="{
124
- disabled: !hasPorts && isNewView,
125
- hide: !hasPorts && !isNewView,
126
- }"
127
- @click="
128
- onTogglePorts(props.network.id, !props.network.toggle, props.diagramId)
129
- "
130
- >
131
- <div class="diagram-block__toggle">
132
- <ui-icon
133
- v-if="isNewView"
134
- name="arrow"
135
- width="16"
136
- height="16"
137
- :class="[
138
- 'virtual-switch__arrow-icon',
139
- {
140
- open: hasPorts ? props.network.toggle : false,
141
- },
142
- ]"
143
- />
144
- <atoms-the-icon
145
- v-else
146
- name="angle"
147
- :class="[
148
- 'virtual-switch__arrow-icon',
149
- {
150
- open: hasPorts ? props.network.toggle : false,
151
- },
152
- ]"
153
- />
154
- </div>
155
- </foreignObject>
156
-
157
- <text
158
- v-if="props.network.state.state !== 3"
159
- data-title="ports-main-text"
160
- dy="11px"
161
- font-size="13"
162
- font-weight="400"
163
- :x="positions.portX"
164
- :y="positions.portsY"
165
- class="port-group-header"
166
- >
167
- {{ props.network.networkPortsName }} ({{ props.network.portsCount }})
168
- </text>
169
- <foreignObject
170
- v-else
171
- dy="11px"
172
- font-size="13"
173
- font-weight="400"
174
- x="26"
175
- height="20"
176
- width="246"
177
- :y="props.network.portsPosition - 5"
178
- class="port-group-header"
179
- >
180
- <span class="error-text text-ellipsis" :title="errorText">
181
- {{ errorText }}
182
- </span>
183
- </foreignObject>
184
-
185
- <common-diagram-main-highlights
186
- data-title="ports-closed"
187
- type="line-orange"
188
- :x="positions.x1"
189
- :y="closedPortsLinePosition"
190
- :x2="positions.x2"
191
- :y2="closedPortsLinePosition"
192
- :hide="!props.isNetworkSelectedWithClosedPorts"
193
- />
194
- </g>
195
- </template>
196
-
197
- <script setup lang="ts">
198
- import type {
199
- UI_I_ModalsInitialData,
200
- UI_I_NetworkFullWithPositions,
201
- } from '~/components/common/diagramMain/lib/models/interfaces'
202
- import type {
203
- UI_I_Localization,
204
- UI_I_ArbitraryObject,
205
- } from '~/lib/models/interfaces'
206
- import {
207
- networkPopupFieldsFunc,
208
- networkPopupFieldsNewFunc,
209
- } from '~/components/common/diagramMain/modals/lib/config'
210
- import {
211
- dataForSelectedNetworkFunc,
212
- networkContentPositionsFunc,
213
- } from '~/components/common/diagramMain/lib/config'
214
-
215
- const props = withDefaults(
216
- defineProps<{
217
- network: UI_I_NetworkFullWithPositions
218
- inPortlet: boolean
219
- isNetworkSelectedWithClosedPorts: boolean
220
- diagramId: string
221
- isSelected: boolean
222
- testId?: string
223
- }>(),
224
- {
225
- testId: '',
226
- }
227
- )
228
-
229
- const emits = defineEmits<{
230
- (event: 'select-network', networkId: string): void
231
- (
232
- event: 'show-modal',
233
- value: string,
234
- properties?: UI_I_ModalsInitialData
235
- ): void
236
- (
237
- event: 'toggle-ports',
238
- id: string,
239
- newState: boolean,
240
- diagramId: string
241
- ): void
242
- }>()
243
-
244
- const { $store }: any = useNuxtApp()
245
-
246
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
247
-
248
- const positions = computed<UI_I_ArbitraryObject<number>>(() =>
249
- networkContentPositionsFunc(
250
- isNewView.value,
251
- props.network.portsPosition,
252
- props.network.titlePosition
253
- )
254
- )
255
-
256
- const isShowDropdown = ref<boolean>(false)
257
- const onHide = (): void => {
258
- isShowDropdown.value = false
259
- }
260
-
261
- const localization = computed<UI_I_Localization>(() => useLocal())
262
-
263
- const networkIcon = computed<string>(() => {
264
- switch (props.network.state.state) {
265
- case 0:
266
- return 'vsphere-icon-network-error network-icon'
267
- case 3:
268
- return 'vsphere-icon-network-error network-icon'
269
- case 2:
270
- return 'vsphere-icon-network-warning network-icon'
271
- default:
272
- return 'vsphere-icon-network network-icon'
273
- }
274
- })
275
-
276
- const errorText = computed<string>(() =>
277
- props.network.state?.errors?.length > 0
278
- ? props.network.state?.errors.join(', ') ||
279
- localization.value.common.somethingWentWrong
280
- : ''
281
- )
282
-
283
- const networkPopupFields = computed(() =>
284
- isNewView.value
285
- ? networkPopupFieldsNewFunc(
286
- localization.value,
287
- props.network.networkType,
288
- props.network.testId,
289
- props.network.state.state,
290
- props.inPortlet
291
- )
292
- : networkPopupFieldsFunc(
293
- localization.value,
294
- props.network.networkType,
295
- props.network.testId,
296
- props.network.state.state,
297
- props.inPortlet
298
- )
299
- )
300
-
301
- const dataForSelectedNetwork = computed<UI_I_ModalsInitialData>(() =>
302
- dataForSelectedNetworkFunc(props.network)
303
- )
304
-
305
- const closedPortsHighlightPosition = computed<number>(
306
- () => props.network.portsPosition - 1.5
307
- )
308
-
309
- const hasPorts = computed<boolean>(() => props.network.portsCount > 0)
310
-
311
- const closedPortsLinePosition = computed<number>(
312
- () => props.network.portsPosition + 7.5
313
- )
314
-
315
- const networkTitlePosition = computed<number>(
316
- () => props.network.titlePosition - 5
317
- )
318
-
319
- const isNotShowNetworkActions = computed<boolean>(
320
- () => !(props.inPortlet && props.network.state.state === 3)
321
- )
322
-
323
- const onSelectNetwork = (networkId: string): void => {
324
- emits('select-network', networkId)
325
- }
326
- const onShowModal = (
327
- value: string,
328
- properties?: UI_I_ModalsInitialData
329
- ): void => {
330
- emits('show-modal', value, properties)
331
- }
332
- const onTogglePorts = (
333
- id: string,
334
- isToggle: boolean,
335
- diagramId: string
336
- ): void => {
337
- emits('toggle-ports', id, isToggle, diagramId)
338
- }
339
- </script>
340
-
341
- <style scoped lang="scss">
342
- @import '@/assets/scss/common/mixins.scss';
343
-
344
- :root.dark-theme {
345
- .diagram__heading,
346
- .vlan-id,
347
- .port-group-header {
348
- fill: #c1cdd4;
349
- }
350
-
351
- .text-ellipsis {
352
- color: #c1cdd4;
353
-
354
- &:hover {
355
- color: #c1cdd4;
356
- text-decoration: solid underline #c1cdd4 2px;
357
- }
358
- }
359
-
360
- .error-text {
361
- color: #e02200;
362
-
363
- &:hover {
364
- color: #e02200;
365
- text-decoration: unset;
366
- }
367
- }
368
- }
369
-
370
- .diagram {
371
- &__heading {
372
- @include text($fs: 14px, $fw: 500);
373
- fill: #565656;
374
- letter-spacing: normal;
375
- line-height: 1.2rem;
376
- }
377
-
378
- &__values {
379
- @include text($fs: 12px, $fw: 400);
380
- }
381
- &-actions {
382
- :deep(.diagram-actions__icon) {
383
- &.tabs-overflow {
384
- top: -12px;
385
- right: -13px;
386
- }
387
- .navbar-dropdown-menu {
388
- .navbar-dropdown-menu-item {
389
- background: red;
390
- }
391
- }
392
- }
393
- }
394
- }
395
-
396
- .virtual-switch__arrow-icon {
397
- width: 16px;
398
- height: 16px;
399
- margin-right: 4px;
400
- transform: rotate(90deg);
401
- align-self: center;
402
- fill: var(--triger-icon-color);
403
- cursor: pointer;
404
- &.open {
405
- transform: rotate(180deg);
406
- }
407
- }
408
-
409
- .text-ellipsis {
410
- display: block;
411
- max-width: 206px;
412
- text-overflow: ellipsis;
413
- overflow: hidden;
414
- white-space: nowrap;
415
- font-weight: 500;
416
- font-size: 14px;
417
- color: #565656;
418
- }
419
- .network-title {
420
- &:hover {
421
- color: #565656;
422
- text-decoration: solid underline #565656 2px;
423
- }
424
- }
425
-
426
- .error-text {
427
- font-weight: 400;
428
- font-size: 12px;
429
- max-width: 246px;
430
- color: #e02200;
431
-
432
- &:hover {
433
- color: #e02200;
434
- text-decoration: unset;
435
- }
436
- }
437
-
438
- :root.is-new-view {
439
- .network-title {
440
- user-select: none;
441
- -webkit-user-select: none;
442
- line-height: 26px;
443
- color: var(--diagram-content-text);
444
-
445
- &:hover {
446
- color: var(--diagram-content-text-hover);
447
- text-decoration: unset;
448
- }
449
- &.is-selected {
450
- color: var(--diagram-content-text-selected);
451
- &:hover {
452
- color: var(--diagram-content-text-selected-hover);
453
- text-decoration: unset;
454
- }
455
- }
456
- }
457
- .disabled {
458
- pointer-events: none;
459
- .virtual-switch__arrow-icon {
460
- fill: none;
461
- color: var(--diagram-content-second-disabled-text);
462
- }
463
- }
464
- .virtual-switch__arrow-icon {
465
- fill: none;
466
- color: var(--diagram-content-second-text);
467
- }
468
- .port-group-header {
469
- fill: var(--diagram-content-second-text);
470
- }
471
- .network-icon {
472
- color: var(--diagram-content-text);
473
- width: 20px;
474
- height: 20px;
475
- }
476
- .vlan-id {
477
- fill: var(--diagram-content-third-text);
478
- }
479
-
480
- .action-button {
481
- border: none;
482
- margin: 0;
483
- padding: 0;
484
- background: transparent;
485
- cursor: pointer;
486
- color: var(--diagram-content-text);
487
-
488
- &:hover {
489
- color: var(--diagram-content-text-hover);
490
- }
491
-
492
- &.action-button-selected {
493
- color: var(--diagram-content-text-selected);
494
- }
495
- }
496
- }
497
- </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
+ :margin-between-trigger="0"
75
+ @select="(value: string) => onShowModal(value, dataForSelectedNetwork)"
76
+ @hide="onHide"
77
+ ></ui-dropdown>
78
+ </Teleport>
79
+ </div>
80
+ <div v-else class="diagram-actions">
81
+ <atoms-collapse-nav
82
+ class="diagram-actions__icon"
83
+ value="-1"
84
+ popup-class="diagram-actions__popup"
85
+ :close-after-click="true"
86
+ :items="networkPopupFields"
87
+ :test-id="props.network.testId"
88
+ @change="(value: string) => onShowModal(value, dataForSelectedNetwork)"
89
+ />
90
+ </div>
91
+ </foreignObject>
92
+
93
+ <text
94
+ data-title="network-vlan-text"
95
+ dy="11px"
96
+ font-size="13"
97
+ font-weight="400"
98
+ :x="positions.contentX"
99
+ :y="props.network.vlanPosition"
100
+ class="vlan-id"
101
+ >
102
+ {{ localization.common.vlanId }}: {{ props.network.vlanId }}
103
+ </text>
104
+
105
+ <common-diagram-main-highlights
106
+ data-title="ports-closed"
107
+ type="main-orange"
108
+ width="276"
109
+ height="18"
110
+ :x="positions.blockX"
111
+ :y="closedPortsHighlightPosition"
112
+ :hide="!props.isNetworkSelectedWithClosedPorts"
113
+ />
114
+
115
+ <foreignObject
116
+ data-title="ports-toggle-icon"
117
+ :width="positions.arrowSize"
118
+ :height="positions.arrowSize"
119
+ :x="positions.arrowX"
120
+ :y="positions.portsArrowPosition"
121
+ cursor="pointer"
122
+ :data-id="`${props.network.testId}-toggle-ports`"
123
+ :class="{
124
+ disabled: !hasPorts && isNewView,
125
+ hide: !hasPorts && !isNewView,
126
+ }"
127
+ @click="
128
+ onTogglePorts(props.network.id, !props.network.toggle, props.diagramId)
129
+ "
130
+ >
131
+ <div class="diagram-block__toggle">
132
+ <ui-icon
133
+ v-if="isNewView"
134
+ name="arrow"
135
+ width="16"
136
+ height="16"
137
+ :class="[
138
+ 'virtual-switch__arrow-icon',
139
+ {
140
+ open: hasPorts ? props.network.toggle : false,
141
+ },
142
+ ]"
143
+ />
144
+ <atoms-the-icon
145
+ v-else
146
+ name="angle"
147
+ :class="[
148
+ 'virtual-switch__arrow-icon',
149
+ {
150
+ open: hasPorts ? props.network.toggle : false,
151
+ },
152
+ ]"
153
+ />
154
+ </div>
155
+ </foreignObject>
156
+
157
+ <text
158
+ v-if="props.network.state.state !== 3"
159
+ data-title="ports-main-text"
160
+ dy="11px"
161
+ font-size="13"
162
+ font-weight="400"
163
+ :x="positions.portX"
164
+ :y="positions.portsY"
165
+ class="port-group-header"
166
+ >
167
+ {{ props.network.networkPortsName }} ({{ props.network.portsCount }})
168
+ </text>
169
+ <foreignObject
170
+ v-else
171
+ dy="11px"
172
+ font-size="13"
173
+ font-weight="400"
174
+ x="26"
175
+ height="20"
176
+ width="246"
177
+ :y="props.network.portsPosition - 5"
178
+ class="port-group-header"
179
+ >
180
+ <span class="error-text text-ellipsis" :title="errorText">
181
+ {{ errorText }}
182
+ </span>
183
+ </foreignObject>
184
+
185
+ <common-diagram-main-highlights
186
+ data-title="ports-closed"
187
+ type="line-orange"
188
+ :x="positions.x1"
189
+ :y="closedPortsLinePosition"
190
+ :x2="positions.x2"
191
+ :y2="closedPortsLinePosition"
192
+ :hide="!props.isNetworkSelectedWithClosedPorts"
193
+ />
194
+ </g>
195
+ </template>
196
+
197
+ <script setup lang="ts">
198
+ import type {
199
+ UI_I_ModalsInitialData,
200
+ UI_I_NetworkFullWithPositions,
201
+ } from '~/components/common/diagramMain/lib/models/interfaces'
202
+ import type {
203
+ UI_I_Localization,
204
+ UI_I_ArbitraryObject,
205
+ } from '~/lib/models/interfaces'
206
+ import {
207
+ networkPopupFieldsFunc,
208
+ networkPopupFieldsNewFunc,
209
+ } from '~/components/common/diagramMain/modals/lib/config'
210
+ import {
211
+ dataForSelectedNetworkFunc,
212
+ networkContentPositionsFunc,
213
+ } from '~/components/common/diagramMain/lib/config'
214
+
215
+ const props = withDefaults(
216
+ defineProps<{
217
+ network: UI_I_NetworkFullWithPositions
218
+ inPortlet: boolean
219
+ isNetworkSelectedWithClosedPorts: boolean
220
+ diagramId: string
221
+ isSelected: boolean
222
+ testId?: string
223
+ }>(),
224
+ {
225
+ testId: '',
226
+ }
227
+ )
228
+
229
+ const emits = defineEmits<{
230
+ (event: 'select-network', networkId: string): void
231
+ (
232
+ event: 'show-modal',
233
+ value: string,
234
+ properties?: UI_I_ModalsInitialData
235
+ ): void
236
+ (
237
+ event: 'toggle-ports',
238
+ id: string,
239
+ newState: boolean,
240
+ diagramId: string
241
+ ): void
242
+ }>()
243
+
244
+ const { $store }: any = useNuxtApp()
245
+
246
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
247
+
248
+ const positions = computed<UI_I_ArbitraryObject<number>>(() =>
249
+ networkContentPositionsFunc(
250
+ isNewView.value,
251
+ props.network.portsPosition,
252
+ props.network.titlePosition
253
+ )
254
+ )
255
+
256
+ const isShowDropdown = ref<boolean>(false)
257
+ const onHide = (): void => {
258
+ isShowDropdown.value = false
259
+ }
260
+
261
+ const localization = computed<UI_I_Localization>(() => useLocal())
262
+
263
+ const networkIcon = computed<string>(() => {
264
+ switch (props.network.state.state) {
265
+ case 0:
266
+ return 'vsphere-icon-network-error network-icon'
267
+ case 3:
268
+ return 'vsphere-icon-network-error network-icon'
269
+ case 2:
270
+ return 'vsphere-icon-network-warning network-icon'
271
+ default:
272
+ return 'vsphere-icon-network network-icon'
273
+ }
274
+ })
275
+
276
+ const errorText = computed<string>(() =>
277
+ props.network.state?.errors?.length > 0
278
+ ? props.network.state?.errors.join(', ') ||
279
+ localization.value.common.somethingWentWrong
280
+ : ''
281
+ )
282
+
283
+ const networkPopupFields = computed(() =>
284
+ isNewView.value
285
+ ? networkPopupFieldsNewFunc(
286
+ localization.value,
287
+ props.network.networkType,
288
+ props.network.testId,
289
+ props.network.state.state,
290
+ props.inPortlet
291
+ )
292
+ : networkPopupFieldsFunc(
293
+ localization.value,
294
+ props.network.networkType,
295
+ props.network.testId,
296
+ props.network.state.state,
297
+ props.inPortlet
298
+ )
299
+ )
300
+
301
+ const dataForSelectedNetwork = computed<UI_I_ModalsInitialData>(() =>
302
+ dataForSelectedNetworkFunc(props.network)
303
+ )
304
+
305
+ const closedPortsHighlightPosition = computed<number>(
306
+ () => props.network.portsPosition - 1.5
307
+ )
308
+
309
+ const hasPorts = computed<boolean>(() => props.network.portsCount > 0)
310
+
311
+ const closedPortsLinePosition = computed<number>(
312
+ () => props.network.portsPosition + 7.5
313
+ )
314
+
315
+ const networkTitlePosition = computed<number>(
316
+ () => props.network.titlePosition - 5
317
+ )
318
+
319
+ const isNotShowNetworkActions = computed<boolean>(
320
+ () => !(props.inPortlet && props.network.state.state === 3)
321
+ )
322
+
323
+ const onSelectNetwork = (networkId: string): void => {
324
+ emits('select-network', networkId)
325
+ }
326
+ const onShowModal = (
327
+ value: string,
328
+ properties?: UI_I_ModalsInitialData
329
+ ): void => {
330
+ emits('show-modal', value, properties)
331
+ }
332
+ const onTogglePorts = (
333
+ id: string,
334
+ isToggle: boolean,
335
+ diagramId: string
336
+ ): void => {
337
+ emits('toggle-ports', id, isToggle, diagramId)
338
+ }
339
+ </script>
340
+
341
+ <style scoped lang="scss">
342
+ @import '@/assets/scss/common/mixins.scss';
343
+
344
+ :root.dark-theme {
345
+ .diagram__heading,
346
+ .vlan-id,
347
+ .port-group-header {
348
+ fill: #c1cdd4;
349
+ }
350
+
351
+ .text-ellipsis {
352
+ color: #c1cdd4;
353
+
354
+ &:hover {
355
+ color: #c1cdd4;
356
+ text-decoration: solid underline #c1cdd4 2px;
357
+ }
358
+ }
359
+
360
+ .error-text {
361
+ color: #e02200;
362
+
363
+ &:hover {
364
+ color: #e02200;
365
+ text-decoration: unset;
366
+ }
367
+ }
368
+ }
369
+
370
+ .diagram {
371
+ &__heading {
372
+ @include text($fs: 14px, $fw: 500);
373
+ fill: #565656;
374
+ letter-spacing: normal;
375
+ line-height: 1.2rem;
376
+ }
377
+
378
+ &__values {
379
+ @include text($fs: 12px, $fw: 400);
380
+ }
381
+ &-actions {
382
+ :deep(.diagram-actions__icon) {
383
+ &.tabs-overflow {
384
+ top: -12px;
385
+ right: -13px;
386
+ }
387
+ .navbar-dropdown-menu {
388
+ .navbar-dropdown-menu-item {
389
+ background: red;
390
+ }
391
+ }
392
+ }
393
+ }
394
+ }
395
+
396
+ .virtual-switch__arrow-icon {
397
+ width: 16px;
398
+ height: 16px;
399
+ margin-right: 4px;
400
+ transform: rotate(90deg);
401
+ align-self: center;
402
+ fill: var(--triger-icon-color);
403
+ cursor: pointer;
404
+ &.open {
405
+ transform: rotate(180deg);
406
+ }
407
+ }
408
+
409
+ .text-ellipsis {
410
+ display: block;
411
+ max-width: 206px;
412
+ text-overflow: ellipsis;
413
+ overflow: hidden;
414
+ white-space: nowrap;
415
+ font-weight: 500;
416
+ font-size: 14px;
417
+ color: #565656;
418
+ }
419
+ .network-title {
420
+ &:hover {
421
+ color: #565656;
422
+ text-decoration: solid underline #565656 2px;
423
+ }
424
+ }
425
+
426
+ .error-text {
427
+ font-weight: 400;
428
+ font-size: 12px;
429
+ max-width: 246px;
430
+ color: #e02200;
431
+
432
+ &:hover {
433
+ color: #e02200;
434
+ text-decoration: unset;
435
+ }
436
+ }
437
+
438
+ :root.is-new-view {
439
+ .network-title {
440
+ user-select: none;
441
+ -webkit-user-select: none;
442
+ line-height: 26px;
443
+ color: var(--diagram-content-text);
444
+
445
+ &:hover {
446
+ color: var(--diagram-content-text-hover);
447
+ text-decoration: unset;
448
+ }
449
+ &.is-selected {
450
+ color: var(--diagram-content-text-selected);
451
+ &:hover {
452
+ color: var(--diagram-content-text-selected-hover);
453
+ text-decoration: unset;
454
+ }
455
+ }
456
+ }
457
+ .disabled {
458
+ pointer-events: none;
459
+ .virtual-switch__arrow-icon {
460
+ fill: none;
461
+ color: var(--diagram-content-second-disabled-text);
462
+ }
463
+ }
464
+ .virtual-switch__arrow-icon {
465
+ fill: none;
466
+ color: var(--diagram-content-second-text);
467
+ }
468
+ .port-group-header {
469
+ fill: var(--diagram-content-second-text);
470
+ }
471
+ .network-icon {
472
+ color: var(--diagram-content-text);
473
+ width: 20px;
474
+ height: 20px;
475
+ }
476
+ .vlan-id {
477
+ fill: var(--diagram-content-third-text);
478
+ }
479
+
480
+ .action-button {
481
+ border: none;
482
+ margin: 0;
483
+ padding: 0;
484
+ background: transparent;
485
+ cursor: pointer;
486
+ color: var(--diagram-content-text);
487
+
488
+ &:hover {
489
+ color: var(--diagram-content-text-hover);
490
+ }
491
+
492
+ &.action-button-selected {
493
+ color: var(--diagram-content-text-selected);
494
+ }
495
+ }
496
+ }
497
+ </style>