bfg-common 1.5.377 → 1.5.379

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 (143) 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/assets/localization/local_be.json +33 -1
  7. package/assets/localization/local_en.json +33 -1
  8. package/assets/localization/local_hy.json +33 -1
  9. package/assets/localization/local_kk.json +33 -1
  10. package/assets/localization/local_ru.json +33 -1
  11. package/assets/localization/local_zh.json +33 -1
  12. package/components/atoms/TheIcon3.vue +50 -50
  13. package/components/atoms/collapse/CollapseNav.vue +170 -170
  14. package/components/atoms/collapse/CollapseNavItem.vue +226 -226
  15. package/components/atoms/nav/NavBar.vue +147 -147
  16. package/components/atoms/perPage/PerPage.vue +58 -58
  17. package/components/atoms/table/dataGrid/DataGrid.vue +1717 -1717
  18. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  19. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  20. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  21. package/components/common/backup/storage/actions/add/lib/config/steps.ts +168 -168
  22. package/components/common/backup/storage/actions/add/steps/hostAccessibility/HostAccessibility.vue +52 -52
  23. package/components/common/backup/storage/actions/add/steps/readyComplete/ReadyComplete.vue +45 -45
  24. package/components/common/backup/storage/actions/delete/Delete.vue +65 -65
  25. package/components/common/browse/blocks/Container.vue +234 -234
  26. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  27. package/components/common/context/lib/models/interfaces.ts +33 -33
  28. package/components/common/diagramMain/DiagramMain.vue +900 -897
  29. package/components/common/diagramMain/modals/lib/config/networkModal.ts +398 -398
  30. package/components/common/diagramMain/network/Network.vue +141 -141
  31. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  32. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  33. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  34. package/components/common/pages/home/headline/Headline.vue +45 -45
  35. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  36. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  37. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  38. package/components/common/pages/home/widgets/WidgetsNew.vue +88 -88
  39. package/components/common/pages/home/widgets/WidgetsOld.vue +36 -36
  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/Vms.vue +26 -26
  43. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  44. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  45. package/components/common/pages/packages/Packages.vue +208 -208
  46. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  47. package/components/common/readyToComplete/New.vue +129 -129
  48. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  49. package/components/common/recursionTree/RecursionTree.vue +223 -223
  50. package/components/common/select/button/ButtonDropdown.vue +112 -112
  51. package/components/common/spiceConsole/Drawer.vue +377 -377
  52. package/components/common/spiceConsole/SpiceConsole.vue +127 -127
  53. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  54. package/components/common/tools/Actions.vue +207 -207
  55. package/components/common/vm/actions/add/Old.vue +388 -388
  56. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  57. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  58. package/components/common/vm/actions/add/folderTreeView/Old.vue +50 -50
  59. package/components/common/vm/actions/clone/Clone.vue +823 -823
  60. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -291
  61. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  62. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +321 -321
  63. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +227 -227
  64. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +100 -100
  65. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +78 -78
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/tooltip/TooltipNew.vue +154 -154
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/dropdownItems.ts +155 -155
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +307 -307
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +385 -385
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationOld.vue +85 -85
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +288 -288
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +94 -94
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCard.vue +154 -154
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  94. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +155 -155
  95. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +130 -130
  96. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsOld.vue +113 -113
  97. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  98. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  99. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +174 -174
  100. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptions.vue +95 -95
  101. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsOld.vue +155 -155
  102. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  103. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapOld.vue +44 -44
  104. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  105. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  106. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  107. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  108. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +143 -143
  109. package/components/common/vm/actions/common/select/computeResource/New.vue +184 -184
  110. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +131 -131
  111. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  112. package/components/common/vm/actions/common/select/createType/lib/config/items.ts +48 -48
  113. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  114. package/components/common/vm/actions/common/select/name/Name.vue +174 -174
  115. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  116. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  117. package/components/common/vm/actions/common/select/storage/Storage.vue +155 -155
  118. package/components/common/vm/actions/common/select/storage/new/New.vue +300 -300
  119. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  120. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  121. package/components/common/vm/actions/editSettings/EditSettings.vue +242 -242
  122. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  123. package/components/common/vmt/actions/add/lib/models/interfaces.ts +23 -23
  124. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +104 -104
  125. package/components/common/wizards/network/add/steps/SelectedTargetDevice.vue +467 -467
  126. package/components/common/wizards/vm/migrate/Migrate.vue +349 -349
  127. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  128. package/components/common/wizards/vm/migrate/lib/config/steps.ts +157 -157
  129. package/components/common/wizards/vm/migrate/lib/validations.ts +68 -68
  130. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  131. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  132. package/components/common/wizards/vm/migrate/select/type/lib/config/typeOptions.ts +45 -45
  133. package/composables/productNameLocal.ts +30 -30
  134. package/composables/useAppVersion.ts +21 -21
  135. package/package.json +1 -1
  136. package/plugins/date.ts +233 -233
  137. package/plugins/panelStates.ts +70 -70
  138. package/plugins/text.ts +59 -59
  139. package/public/spice-console/lib/images/bitmap.js +203 -203
  140. package/public/spice-console/network/spicechannel.js +387 -387
  141. package/store/main/mutations.ts +7 -7
  142. package/store/main/state.ts +7 -7
  143. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -1,467 +1,467 @@
1
- <template>
2
- <div class="wizard-content-container add-networking-step">
3
- <div class="wizard-content">
4
- <atoms-alert
5
- v-if="props.alertMessages.length"
6
- :items="props.alertMessages"
7
- status="alert-danger"
8
- test-id="add-networking-selected-target-device"
9
- @remove="onHideAlert"
10
- />
11
- <form>
12
- <div v-show="props.connectionType === '0'">
13
- <div class="radio">
14
- <input
15
- id="existing-network"
16
- v-model="fields.selected"
17
- data-id="existing-network-radio"
18
- type="radio"
19
- value="0"
20
- name="target-device"
21
- />
22
- <label for="existing-network">
23
- {{ localization.common.selectExistingNetwork }}
24
- </label>
25
- </div>
26
- <fieldset
27
- :class="{
28
- disabled: fields.selected !== '0',
29
- }"
30
- >
31
- <div>
32
- <atoms-tooltip-error
33
- :has-error="
34
- fields.selected === '0' &&
35
- !!props.messagesFields.network.field
36
- "
37
- >
38
- <template #elem>
39
- <fieldset class="fieldset-block">
40
- <div>
41
- <input
42
- v-model="fields.network"
43
- :class="[
44
- 'tooltip-field show-arrow',
45
- {
46
- 'danger-not-valid':
47
- fields.selected === '0' &&
48
- props.messagesFields.network.field,
49
- },
50
- ]"
51
- data-id="network-input"
52
- type="text"
53
- disabled
54
- />
55
- <button
56
- type="button"
57
- class="btn btn-link"
58
- data-id="show-select-network-modal-button"
59
- @click="onShowModal('select-network')"
60
- >
61
- {{ localization.common.browseDoted }}
62
- </button>
63
- </div>
64
- </fieldset>
65
- </template>
66
- <template #content>
67
- {{ props.messagesFields.network.field }}
68
- </template>
69
- </atoms-tooltip-error>
70
- </div>
71
- </fieldset>
72
- </div>
73
-
74
- <div v-show="isConnectionTypeFirstTwo">
75
- <div class="radio">
76
- <input
77
- id="existing-standard-switch"
78
- v-model="fields.selected"
79
- data-id="existing-standard-switch-radio"
80
- type="radio"
81
- value="1"
82
- name="target-device"
83
- />
84
-
85
- <!-- :checked="isConnectionTypeFirstTwo"-->
86
- <label for="existing-standard-switch">
87
- {{ localization.common.selectExistingStandardSwitch }}
88
- </label>
89
- </div>
90
- <fieldset
91
- :class="{
92
- disabled: fields.selected !== '1',
93
- }"
94
- >
95
- <div>
96
- <atoms-tooltip-error
97
- :has-error="
98
- fields.selected === '1' && !!props.messagesFields.switch.field
99
- "
100
- >
101
- <template #elem>
102
- <fieldset class="fieldset-block">
103
- <div>
104
- <input
105
- v-model="fields.standardSwitch"
106
- :class="[
107
- 'tooltip-field show-arrow',
108
- {
109
- 'danger-not-valid':
110
- fields.selected === '1' &&
111
- props.messagesFields.switch.field,
112
- },
113
- ]"
114
- data-id="standard-switch-input"
115
- type="text"
116
- disabled
117
- />
118
- <button
119
- type="button"
120
- class="btn btn-link"
121
- data-id="show-select-standard-switch-button"
122
- @click="onShowModal('select-standard-switch')"
123
- >
124
- {{ localization.common.browseDoted }}
125
- </button>
126
- </div>
127
- </fieldset>
128
- </template>
129
- <template #content>
130
- {{ props.messagesFields.switch.field }}
131
- </template>
132
- </atoms-tooltip-error>
133
- </div>
134
- </fieldset>
135
- </div>
136
-
137
- <div v-show="props.connectionType === '2'">
138
- <div class="radio">
139
- <input
140
- id="existing-switch"
141
- v-model="fields.selected"
142
- data-id="existing-switch-radio"
143
- type="radio"
144
- value="2"
145
- name="target-device"
146
- />
147
- <!-- :checked="props.connectionType === '2'"-->
148
- <label for="existing-switch">
149
- {{ localization.common.selectExistingSwitch }}
150
- </label>
151
- </div>
152
- <fieldset
153
- :class="{
154
- disabled: fields.selected !== '2',
155
- }"
156
- >
157
- <div>
158
- <atoms-tooltip-error
159
- :has-error="
160
- fields.selected === '2' &&
161
- !!props.messagesFields.switch2.field
162
- "
163
- >
164
- <template #elem>
165
- <fieldset class="fieldset-block">
166
- <div>
167
- <input
168
- v-model="fields.switch"
169
- :class="[
170
- 'tooltip-field show-arrow',
171
- {
172
- 'danger-not-valid':
173
- fields.selected === '2' &&
174
- props.messagesFields.switch2.field,
175
- },
176
- ]"
177
- data-id="switch-input"
178
- type="text"
179
- disabled
180
- />
181
- <button
182
- type="button"
183
- data-id="show-select-switch-modal-button"
184
- class="btn btn-link"
185
- @click="onShowModal('select-switch')"
186
- >
187
- {{ localization.common.browseDoted }}
188
- </button>
189
- </div>
190
- </fieldset>
191
- </template>
192
- <template #content>
193
- {{ props.messagesFields.switch2.field }}
194
- </template>
195
- </atoms-tooltip-error>
196
- </div>
197
- </fieldset>
198
- </div>
199
-
200
- <div v-permission="'Networks.CreateSwitch'">
201
- <div class="radio">
202
- <input
203
- id="standard-switch"
204
- v-model="fields.selected"
205
- data-id="standard-switch-radio"
206
- type="radio"
207
- value="3"
208
- name="target-device"
209
- />
210
-
211
- <label for="standard-switch">
212
- {{ localization.common.newStandardSwitch }}
213
- </label>
214
- </div>
215
- <fieldset
216
- :class="{
217
- disabled: fields.selected !== '3',
218
- }"
219
- >
220
- <div class="horizontal-flex-container">
221
- <label class="property-label-group">
222
- {{ localization.common.mtuBytes }}
223
- </label>
224
- <div class="margin-left-property-value-group">
225
- <div class="property-value-group tooltip-field-container">
226
- <fieldset>
227
- <atoms-tooltip-error
228
- :has-error="
229
- !!props.messagesFields['new_switch.mtu'].field
230
- "
231
- >
232
- <template #elem>
233
- <input
234
- id="mtu"
235
- v-model="fields.mtu"
236
- :class="[
237
- 'tooltip-field show-arrow',
238
- {
239
- 'danger-not-valid':
240
- props.messagesFields['new_switch.mtu'].field,
241
- },
242
- ]"
243
- data-id="mtu-input"
244
- type="number"
245
- name="mtu"
246
- @click.stop
247
- />
248
- </template>
249
- <template #content>
250
- {{ props.messagesFields['new_switch.mtu'].field }}
251
- </template>
252
- </atoms-tooltip-error>
253
- </fieldset>
254
- </div>
255
- </div>
256
- </div>
257
- </fieldset>
258
- </div>
259
- </form>
260
- </div>
261
- </div>
262
- <teleport to="body">
263
- <common-wizards-network-add-modals-select-standard-switch
264
- modal-name="select-standard-switch-modal"
265
- view-name="select-standard-switch"
266
- width="576px"
267
- height="468px"
268
- :title="localization.common.selectSwitch"
269
- :standard-switches-initial="props.standardSwitchesInitial"
270
- :show="isShowStandardSwitchModal"
271
- @select-standard-switch="onSelectStandardSwitch"
272
- @hide="onHideStandardSwitchModal"
273
- />
274
- <common-wizards-network-add-modals-select-switch
275
- modal-name="select-switch-modal"
276
- view-name="select-switch"
277
- width="576px"
278
- height="468px"
279
- :title="localization.common.selectSwitch"
280
- :data="props.standardSwitchesInitial"
281
- :show="isShowSwitchModal"
282
- @select-switch="onSelectSwitch"
283
- @hide="onHideSwitchModal"
284
- />
285
- <common-wizards-network-add-modals-select-network
286
- modal-name="select-network-modal"
287
- view-name="select-network"
288
- width="576px"
289
- height="468px"
290
- :title="localization.common.selectNetwork"
291
- :data="[]"
292
- :show="isShowNetworkModal"
293
- @select-network="onSelectNetwork"
294
- @hide="onHideNetworkModal"
295
- />
296
- </teleport>
297
- </template>
298
-
299
- <script setup lang="ts">
300
- import type {
301
- UI_I_ArbitraryObject,
302
- UI_I_Localization,
303
- } from '~/lib/models/interfaces'
304
- import type {
305
- UI_I_TargetDevice,
306
- UI_I_Switch,
307
- } from '~/components/common/wizards/network/add/lib/models/interfaces'
308
- import type { UI_I_ErrorFields } from '~/components/atoms/wizard/lib/models/interfaces'
309
- import type Wizard from '~/components/atoms/wizard/lib/utils/utils'
310
- import { validateMtuTargetDeviceLocal } from '~/components/common/wizards/network/add/validations/validations'
311
-
312
- const props = withDefaults(
313
- defineProps<{
314
- targetDevice: UI_I_TargetDevice
315
- connectionType: string
316
- standardSwitchesInitial: UI_I_Switch[]
317
- alertMessages: string[]
318
- messagesFields: UI_I_ArbitraryObject<UI_I_ErrorFields>
319
- wizard: Wizard
320
- selectedStandardSwitchId?: string
321
- selectedSwitchId?: string
322
- }>(),
323
- {
324
- selectedStandardSwitchId: '',
325
- selectedSwitchId: '',
326
- }
327
- )
328
-
329
- const localization = computed<UI_I_Localization>(() => useLocal())
330
-
331
- const emits = defineEmits<{
332
- (event: 'change-target-device', targetDevice: UI_I_TargetDevice): void
333
- (event: 'hide-alert', stepId: 1): void
334
- }>()
335
-
336
- const isConnectionTypeFirstTwo = computed<boolean>(() =>
337
- ['0', '1'].includes(props.connectionType)
338
- )
339
-
340
- const fields = ref<UI_I_TargetDevice>(useDeepCopy(props.targetDevice))
341
-
342
- let prevMtu = fields.value.mtu
343
-
344
- watch(
345
- fields,
346
- (newFields: UI_I_TargetDevice) => {
347
- newFields.mtu !== prevMtu &&
348
- validateMtuTargetDeviceLocal(localization.value, newFields, props.wizard)
349
-
350
- prevMtu = newFields.mtu
351
-
352
- emits('change-target-device', newFields)
353
- },
354
- { deep: true }
355
- )
356
-
357
- // The switches selection modal hide and show functionality
358
- const isShowStandardSwitchModal = ref<boolean>(false)
359
- const onHideStandardSwitchModal = (): void => {
360
- isShowStandardSwitchModal.value = false
361
- }
362
- const isShowSwitchModal = ref<boolean>(false)
363
- const onHideSwitchModal = (): void => {
364
- isShowSwitchModal.value = false
365
- }
366
- const isShowNetworkModal = ref<boolean>(false)
367
- const onHideNetworkModal = (): void => {
368
- isShowNetworkModal.value = false
369
- }
370
-
371
- const onShowModal = (value: string): void => {
372
- switch (value) {
373
- case 'select-standard-switch':
374
- isShowStandardSwitchModal.value = true
375
- break
376
- case 'select-switch':
377
- isShowSwitchModal.value = true
378
- break
379
- case 'select-network':
380
- isShowNetworkModal.value = true
381
- break
382
- }
383
- }
384
-
385
- // Switches selection functionality
386
- const onSelectSwitch = (selectedSwitchId: string): void => {
387
- fields.value.switch = selectedSwitchId
388
- }
389
- const onSelectStandardSwitch = (selectedStandardSwitchId: string): void => {
390
- fields.value.standardSwitch = selectedStandardSwitchId
391
- }
392
- const onSelectNetwork = (_selectedNetworkId: string): void => {
393
- fields.value.network = ''
394
- }
395
-
396
- onMounted(() => {
397
- !fields.value.standardSwitch &&
398
- (fields.value.standardSwitch = props.selectedStandardSwitchId)
399
-
400
- !fields.value.switch && (fields.value.switch = props.selectedSwitchId)
401
- })
402
-
403
- const onHideAlert = (): void => {
404
- emits('hide-alert', 1)
405
- }
406
- </script>
407
-
408
- <style scoped lang="scss">
409
- .wizard-content-container {
410
- display: flex;
411
- flex-direction: column;
412
- align-items: stretch;
413
- flex: 1 1 100%;
414
- box-sizing: border-box;
415
- padding: 16px 15px 10px 10px;
416
- overflow-y: auto;
417
- color: #333;
418
- order: 2;
419
- width: 100%;
420
-
421
- .wizard-content {
422
- height: auto;
423
- width: inherit;
424
- margin: 0;
425
-
426
- fieldset {
427
- display: flex;
428
- flex-flow: column;
429
- padding-left: 23px;
430
-
431
- .fieldset-block {
432
- padding-left: 0;
433
- margin-right: 5px;
434
- }
435
-
436
- input[type='text'] {
437
- width: 390px;
438
-
439
- &:disabled {
440
- opacity: 0.5;
441
- cursor: not-allowed;
442
- }
443
- }
444
-
445
- button {
446
- text-transform: uppercase;
447
- }
448
- }
449
-
450
- .radio {
451
- min-height: 20px;
452
- margin: 10px 0;
453
-
454
- label {
455
- font-weight: 700;
456
- margin: 6px 12px 6px 0;
457
- }
458
- }
459
- }
460
- }
461
-
462
- :deep(.select-table-modal) {
463
- .table-top-margin-container {
464
- margin-top: 10px;
465
- }
466
- }
467
- </style>
1
+ <template>
2
+ <div class="wizard-content-container add-networking-step">
3
+ <div class="wizard-content">
4
+ <atoms-alert
5
+ v-if="props.alertMessages.length"
6
+ :items="props.alertMessages"
7
+ status="alert-danger"
8
+ test-id="add-networking-selected-target-device"
9
+ @remove="onHideAlert"
10
+ />
11
+ <form>
12
+ <div v-show="props.connectionType === '0'">
13
+ <div class="radio">
14
+ <input
15
+ id="existing-network"
16
+ v-model="fields.selected"
17
+ data-id="existing-network-radio"
18
+ type="radio"
19
+ value="0"
20
+ name="target-device"
21
+ />
22
+ <label for="existing-network">
23
+ {{ localization.common.selectExistingNetwork }}
24
+ </label>
25
+ </div>
26
+ <fieldset
27
+ :class="{
28
+ disabled: fields.selected !== '0',
29
+ }"
30
+ >
31
+ <div>
32
+ <atoms-tooltip-error
33
+ :has-error="
34
+ fields.selected === '0' &&
35
+ !!props.messagesFields.network.field
36
+ "
37
+ >
38
+ <template #elem>
39
+ <fieldset class="fieldset-block">
40
+ <div>
41
+ <input
42
+ v-model="fields.network"
43
+ :class="[
44
+ 'tooltip-field show-arrow',
45
+ {
46
+ 'danger-not-valid':
47
+ fields.selected === '0' &&
48
+ props.messagesFields.network.field,
49
+ },
50
+ ]"
51
+ data-id="network-input"
52
+ type="text"
53
+ disabled
54
+ />
55
+ <button
56
+ type="button"
57
+ class="btn btn-link"
58
+ data-id="show-select-network-modal-button"
59
+ @click="onShowModal('select-network')"
60
+ >
61
+ {{ localization.common.browseDoted }}
62
+ </button>
63
+ </div>
64
+ </fieldset>
65
+ </template>
66
+ <template #content>
67
+ {{ props.messagesFields.network.field }}
68
+ </template>
69
+ </atoms-tooltip-error>
70
+ </div>
71
+ </fieldset>
72
+ </div>
73
+
74
+ <div v-show="isConnectionTypeFirstTwo">
75
+ <div class="radio">
76
+ <input
77
+ id="existing-standard-switch"
78
+ v-model="fields.selected"
79
+ data-id="existing-standard-switch-radio"
80
+ type="radio"
81
+ value="1"
82
+ name="target-device"
83
+ />
84
+
85
+ <!-- :checked="isConnectionTypeFirstTwo"-->
86
+ <label for="existing-standard-switch">
87
+ {{ localization.common.selectExistingStandardSwitch }}
88
+ </label>
89
+ </div>
90
+ <fieldset
91
+ :class="{
92
+ disabled: fields.selected !== '1',
93
+ }"
94
+ >
95
+ <div>
96
+ <atoms-tooltip-error
97
+ :has-error="
98
+ fields.selected === '1' && !!props.messagesFields.switch.field
99
+ "
100
+ >
101
+ <template #elem>
102
+ <fieldset class="fieldset-block">
103
+ <div>
104
+ <input
105
+ v-model="fields.standardSwitch"
106
+ :class="[
107
+ 'tooltip-field show-arrow',
108
+ {
109
+ 'danger-not-valid':
110
+ fields.selected === '1' &&
111
+ props.messagesFields.switch.field,
112
+ },
113
+ ]"
114
+ data-id="standard-switch-input"
115
+ type="text"
116
+ disabled
117
+ />
118
+ <button
119
+ type="button"
120
+ class="btn btn-link"
121
+ data-id="show-select-standard-switch-button"
122
+ @click="onShowModal('select-standard-switch')"
123
+ >
124
+ {{ localization.common.browseDoted }}
125
+ </button>
126
+ </div>
127
+ </fieldset>
128
+ </template>
129
+ <template #content>
130
+ {{ props.messagesFields.switch.field }}
131
+ </template>
132
+ </atoms-tooltip-error>
133
+ </div>
134
+ </fieldset>
135
+ </div>
136
+
137
+ <div v-show="props.connectionType === '2'">
138
+ <div class="radio">
139
+ <input
140
+ id="existing-switch"
141
+ v-model="fields.selected"
142
+ data-id="existing-switch-radio"
143
+ type="radio"
144
+ value="2"
145
+ name="target-device"
146
+ />
147
+ <!-- :checked="props.connectionType === '2'"-->
148
+ <label for="existing-switch">
149
+ {{ localization.common.selectExistingSwitch }}
150
+ </label>
151
+ </div>
152
+ <fieldset
153
+ :class="{
154
+ disabled: fields.selected !== '2',
155
+ }"
156
+ >
157
+ <div>
158
+ <atoms-tooltip-error
159
+ :has-error="
160
+ fields.selected === '2' &&
161
+ !!props.messagesFields.switch2.field
162
+ "
163
+ >
164
+ <template #elem>
165
+ <fieldset class="fieldset-block">
166
+ <div>
167
+ <input
168
+ v-model="fields.switch"
169
+ :class="[
170
+ 'tooltip-field show-arrow',
171
+ {
172
+ 'danger-not-valid':
173
+ fields.selected === '2' &&
174
+ props.messagesFields.switch2.field,
175
+ },
176
+ ]"
177
+ data-id="switch-input"
178
+ type="text"
179
+ disabled
180
+ />
181
+ <button
182
+ type="button"
183
+ data-id="show-select-switch-modal-button"
184
+ class="btn btn-link"
185
+ @click="onShowModal('select-switch')"
186
+ >
187
+ {{ localization.common.browseDoted }}
188
+ </button>
189
+ </div>
190
+ </fieldset>
191
+ </template>
192
+ <template #content>
193
+ {{ props.messagesFields.switch2.field }}
194
+ </template>
195
+ </atoms-tooltip-error>
196
+ </div>
197
+ </fieldset>
198
+ </div>
199
+
200
+ <div v-permission="'Networks.CreateSwitch'">
201
+ <div class="radio">
202
+ <input
203
+ id="standard-switch"
204
+ v-model="fields.selected"
205
+ data-id="standard-switch-radio"
206
+ type="radio"
207
+ value="3"
208
+ name="target-device"
209
+ />
210
+
211
+ <label for="standard-switch">
212
+ {{ localization.common.newStandardSwitch }}
213
+ </label>
214
+ </div>
215
+ <fieldset
216
+ :class="{
217
+ disabled: fields.selected !== '3',
218
+ }"
219
+ >
220
+ <div class="horizontal-flex-container">
221
+ <label class="property-label-group">
222
+ {{ localization.common.mtuBytes }}
223
+ </label>
224
+ <div class="margin-left-property-value-group">
225
+ <div class="property-value-group tooltip-field-container">
226
+ <fieldset>
227
+ <atoms-tooltip-error
228
+ :has-error="
229
+ !!props.messagesFields['new_switch.mtu'].field
230
+ "
231
+ >
232
+ <template #elem>
233
+ <input
234
+ id="mtu"
235
+ v-model="fields.mtu"
236
+ :class="[
237
+ 'tooltip-field show-arrow',
238
+ {
239
+ 'danger-not-valid':
240
+ props.messagesFields['new_switch.mtu'].field,
241
+ },
242
+ ]"
243
+ data-id="mtu-input"
244
+ type="number"
245
+ name="mtu"
246
+ @click.stop
247
+ />
248
+ </template>
249
+ <template #content>
250
+ {{ props.messagesFields['new_switch.mtu'].field }}
251
+ </template>
252
+ </atoms-tooltip-error>
253
+ </fieldset>
254
+ </div>
255
+ </div>
256
+ </div>
257
+ </fieldset>
258
+ </div>
259
+ </form>
260
+ </div>
261
+ </div>
262
+ <teleport to="body">
263
+ <common-wizards-network-add-modals-select-standard-switch
264
+ modal-name="select-standard-switch-modal"
265
+ view-name="select-standard-switch"
266
+ width="576px"
267
+ height="468px"
268
+ :title="localization.common.selectSwitch"
269
+ :standard-switches-initial="props.standardSwitchesInitial"
270
+ :show="isShowStandardSwitchModal"
271
+ @select-standard-switch="onSelectStandardSwitch"
272
+ @hide="onHideStandardSwitchModal"
273
+ />
274
+ <common-wizards-network-add-modals-select-switch
275
+ modal-name="select-switch-modal"
276
+ view-name="select-switch"
277
+ width="576px"
278
+ height="468px"
279
+ :title="localization.common.selectSwitch"
280
+ :data="props.standardSwitchesInitial"
281
+ :show="isShowSwitchModal"
282
+ @select-switch="onSelectSwitch"
283
+ @hide="onHideSwitchModal"
284
+ />
285
+ <common-wizards-network-add-modals-select-network
286
+ modal-name="select-network-modal"
287
+ view-name="select-network"
288
+ width="576px"
289
+ height="468px"
290
+ :title="localization.common.selectNetwork"
291
+ :data="[]"
292
+ :show="isShowNetworkModal"
293
+ @select-network="onSelectNetwork"
294
+ @hide="onHideNetworkModal"
295
+ />
296
+ </teleport>
297
+ </template>
298
+
299
+ <script setup lang="ts">
300
+ import type {
301
+ UI_I_ArbitraryObject,
302
+ UI_I_Localization,
303
+ } from '~/lib/models/interfaces'
304
+ import type {
305
+ UI_I_TargetDevice,
306
+ UI_I_Switch,
307
+ } from '~/components/common/wizards/network/add/lib/models/interfaces'
308
+ import type { UI_I_ErrorFields } from '~/components/atoms/wizard/lib/models/interfaces'
309
+ import type Wizard from '~/components/atoms/wizard/lib/utils/utils'
310
+ import { validateMtuTargetDeviceLocal } from '~/components/common/wizards/network/add/validations/validations'
311
+
312
+ const props = withDefaults(
313
+ defineProps<{
314
+ targetDevice: UI_I_TargetDevice
315
+ connectionType: string
316
+ standardSwitchesInitial: UI_I_Switch[]
317
+ alertMessages: string[]
318
+ messagesFields: UI_I_ArbitraryObject<UI_I_ErrorFields>
319
+ wizard: Wizard
320
+ selectedStandardSwitchId?: string
321
+ selectedSwitchId?: string
322
+ }>(),
323
+ {
324
+ selectedStandardSwitchId: '',
325
+ selectedSwitchId: '',
326
+ }
327
+ )
328
+
329
+ const localization = computed<UI_I_Localization>(() => useLocal())
330
+
331
+ const emits = defineEmits<{
332
+ (event: 'change-target-device', targetDevice: UI_I_TargetDevice): void
333
+ (event: 'hide-alert', stepId: 1): void
334
+ }>()
335
+
336
+ const isConnectionTypeFirstTwo = computed<boolean>(() =>
337
+ ['0', '1'].includes(props.connectionType)
338
+ )
339
+
340
+ const fields = ref<UI_I_TargetDevice>(useDeepCopy(props.targetDevice))
341
+
342
+ let prevMtu = fields.value.mtu
343
+
344
+ watch(
345
+ fields,
346
+ (newFields: UI_I_TargetDevice) => {
347
+ newFields.mtu !== prevMtu &&
348
+ validateMtuTargetDeviceLocal(localization.value, newFields, props.wizard)
349
+
350
+ prevMtu = newFields.mtu
351
+
352
+ emits('change-target-device', newFields)
353
+ },
354
+ { deep: true }
355
+ )
356
+
357
+ // The switches selection modal hide and show functionality
358
+ const isShowStandardSwitchModal = ref<boolean>(false)
359
+ const onHideStandardSwitchModal = (): void => {
360
+ isShowStandardSwitchModal.value = false
361
+ }
362
+ const isShowSwitchModal = ref<boolean>(false)
363
+ const onHideSwitchModal = (): void => {
364
+ isShowSwitchModal.value = false
365
+ }
366
+ const isShowNetworkModal = ref<boolean>(false)
367
+ const onHideNetworkModal = (): void => {
368
+ isShowNetworkModal.value = false
369
+ }
370
+
371
+ const onShowModal = (value: string): void => {
372
+ switch (value) {
373
+ case 'select-standard-switch':
374
+ isShowStandardSwitchModal.value = true
375
+ break
376
+ case 'select-switch':
377
+ isShowSwitchModal.value = true
378
+ break
379
+ case 'select-network':
380
+ isShowNetworkModal.value = true
381
+ break
382
+ }
383
+ }
384
+
385
+ // Switches selection functionality
386
+ const onSelectSwitch = (selectedSwitchId: string): void => {
387
+ fields.value.switch = selectedSwitchId
388
+ }
389
+ const onSelectStandardSwitch = (selectedStandardSwitchId: string): void => {
390
+ fields.value.standardSwitch = selectedStandardSwitchId
391
+ }
392
+ const onSelectNetwork = (_selectedNetworkId: string): void => {
393
+ fields.value.network = ''
394
+ }
395
+
396
+ onMounted(() => {
397
+ !fields.value.standardSwitch &&
398
+ (fields.value.standardSwitch = props.selectedStandardSwitchId)
399
+
400
+ !fields.value.switch && (fields.value.switch = props.selectedSwitchId)
401
+ })
402
+
403
+ const onHideAlert = (): void => {
404
+ emits('hide-alert', 1)
405
+ }
406
+ </script>
407
+
408
+ <style scoped lang="scss">
409
+ .wizard-content-container {
410
+ display: flex;
411
+ flex-direction: column;
412
+ align-items: stretch;
413
+ flex: 1 1 100%;
414
+ box-sizing: border-box;
415
+ padding: 16px 15px 10px 10px;
416
+ overflow-y: auto;
417
+ color: #333;
418
+ order: 2;
419
+ width: 100%;
420
+
421
+ .wizard-content {
422
+ height: auto;
423
+ width: inherit;
424
+ margin: 0;
425
+
426
+ fieldset {
427
+ display: flex;
428
+ flex-flow: column;
429
+ padding-left: 23px;
430
+
431
+ .fieldset-block {
432
+ padding-left: 0;
433
+ margin-right: 5px;
434
+ }
435
+
436
+ input[type='text'] {
437
+ width: 390px;
438
+
439
+ &:disabled {
440
+ opacity: 0.5;
441
+ cursor: not-allowed;
442
+ }
443
+ }
444
+
445
+ button {
446
+ text-transform: uppercase;
447
+ }
448
+ }
449
+
450
+ .radio {
451
+ min-height: 20px;
452
+ margin: 10px 0;
453
+
454
+ label {
455
+ font-weight: 700;
456
+ margin: 6px 12px 6px 0;
457
+ }
458
+ }
459
+ }
460
+ }
461
+
462
+ :deep(.select-table-modal) {
463
+ .table-top-margin-container {
464
+ margin-top: 10px;
465
+ }
466
+ }
467
+ </style>