bfg-common 1.5.574 → 1.5.575

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 (163) 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/DataGrid.vue +1718 -1718
  10. package/components/atoms/table/dataGrid/DataGridPagination.vue +97 -97
  11. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  12. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  13. package/components/common/backup/storage/actions/add/Add.vue +3 -2
  14. package/components/common/backup/storage/actions/add/New.vue +3 -2
  15. package/components/common/backup/storage/actions/add/Old.vue +5 -4
  16. package/components/common/backup/storage/actions/add/lib/utils.ts +51 -51
  17. package/components/common/backup/storage/actions/add/steps/readyComplete/ReadyComplete.vue +45 -45
  18. package/components/common/backup/storage/actions/add/steps/readyComplete/lib/config/propertiesDetails.ts +7 -7
  19. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  20. package/components/common/diagramMain/modals/lib/config/portModal.ts +251 -251
  21. package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
  22. package/components/common/diagramMain/port/Port.vue +580 -580
  23. package/components/common/layout/theHeader/helpMenu/About.vue +79 -79
  24. package/components/common/layout/theHeader/helpMenu/aboutOld/AboutOld.vue +79 -79
  25. package/components/common/pages/backups/DetailView.vue +52 -52
  26. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  27. package/components/common/pages/backups/modals/Modals.vue +243 -243
  28. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
  29. package/components/common/pages/backups/modals/createBackup/lib/config/readyToCompleteOptions.ts +69 -69
  30. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  31. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  32. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  33. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  34. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  35. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  36. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  37. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  38. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  39. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  40. package/components/common/select/radio/RadioGroup.vue +137 -137
  41. package/components/common/spiceConsole/Drawer.vue +420 -420
  42. package/components/common/spiceConsole/SpiceConsole.vue +184 -184
  43. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  44. package/components/common/tools/Actions.vue +207 -207
  45. package/components/common/treeView/TreeView.vue +52 -52
  46. package/components/common/vm/actions/add/Add.vue +120 -46
  47. package/components/common/vm/actions/add/New.vue +54 -16
  48. package/components/common/vm/actions/add/Old.vue +55 -16
  49. package/components/common/vm/actions/add/lib/config/steps.ts +347 -347
  50. package/components/common/vm/actions/clone/Clone.vue +115 -43
  51. package/components/common/vm/actions/clone/new/New.vue +50 -14
  52. package/components/common/vm/actions/clone/old/Old.vue +52 -16
  53. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +81 -14
  54. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +56 -7
  55. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +56 -8
  56. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +206 -211
  57. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +120 -225
  58. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +118 -220
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +53 -66
  60. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +159 -139
  61. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/CpuNew.vue +15 -8
  62. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/CpuOld.vue +13 -8
  63. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  64. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  65. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +75 -62
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/MemoryNew.vue +158 -158
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/MemoryOld.vue +155 -155
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +149 -241
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +4 -3
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +3 -2
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +100 -62
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbController.vue +17 -6
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +3 -6
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerOld.vue +3 -6
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCard.vue +39 -17
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +5 -6
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +5 -6
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/lib/config/options.ts +4 -4
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  84. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +93 -6
  85. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +60 -8
  86. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsOld.vue +58 -8
  87. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptions.vue +69 -5
  88. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +32 -12
  89. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsOld.vue +33 -12
  90. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  91. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  92. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +132 -114
  93. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +6 -41
  94. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderOld.vue +6 -44
  95. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptions.vue +23 -8
  96. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +31 -21
  97. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsOld.vue +34 -26
  98. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +34 -28
  99. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/Old.vue +30 -24
  100. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/RemoteConsoleOptions.vue +112 -8
  101. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +3 -3
  102. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/{New.vue → KeymapNew.vue} +6 -6
  103. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/{Old.vue → KeymapOld.vue} +5 -5
  104. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +7 -6
  105. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  106. package/components/common/vm/actions/common/customizeHardware/vmoptions/tools/Tools.vue +60 -42
  107. package/components/common/vm/actions/common/lib/models/interfaces.ts +25 -58
  108. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  109. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  110. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  111. package/components/common/vm/actions/common/select/storage/Old.vue +125 -125
  112. package/components/common/vm/actions/common/select/storage/Storage.vue +178 -178
  113. package/components/common/vm/actions/common/select/storage/new/New.vue +311 -311
  114. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  115. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  116. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  117. package/components/common/vm/actions/editSettings/EditSettings.vue +90 -32
  118. package/components/common/vm/actions/editSettings/EditSettingsOld.vue +41 -14
  119. package/components/common/vm/actions/editSettings/new/New.vue +41 -14
  120. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  121. package/components/common/vm/actions/lib/models/interfaces.ts +29 -4
  122. package/components/common/vm/actions/lib/utils.ts +36 -64
  123. package/components/common/vm/actions/register/Register.vue +352 -352
  124. package/components/common/vm/actions/register/lib/config/steps.ts +86 -86
  125. package/components/common/wizards/common/compatibility/Compatibility.vue +35 -35
  126. package/components/common/wizards/common/compatibility/New.vue +99 -99
  127. package/components/common/wizards/common/compatibility/Old.vue +53 -53
  128. package/components/common/wizards/common/steps/computeResource/ComputeResource.vue +86 -86
  129. package/components/common/wizards/common/steps/computeResource/New.vue +93 -93
  130. package/components/common/wizards/common/steps/computeResource/Old.vue +103 -103
  131. package/components/common/wizards/common/steps/name/Name.vue +178 -178
  132. package/components/common/wizards/common/steps/name/New.vue +221 -221
  133. package/components/common/wizards/common/steps/name/Old.vue +121 -121
  134. package/components/common/wizards/common/steps/name/lib/models/interfaces.ts +4 -4
  135. package/components/common/wizards/common/steps/name/location/Location.vue +85 -85
  136. package/components/common/wizards/common/steps/name/location/New.vue +40 -40
  137. package/components/common/wizards/datastore/add/Add.vue +228 -228
  138. package/components/common/wizards/datastore/add/lib/utils.ts +85 -85
  139. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  140. package/components/common/wizards/vm/migrate/select/computeResource/ComputeResource.vue +205 -205
  141. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  142. package/composables/useAppVersion.ts +21 -21
  143. package/composables/useLocal.ts +6 -6
  144. package/composables/useLocalCommon.ts +39 -39
  145. package/package.json +1 -1
  146. package/plugins/console.ts +21 -21
  147. package/plugins/date.ts +233 -233
  148. package/plugins/mouse.ts +21 -21
  149. package/plugins/panelStates.ts +70 -70
  150. package/plugins/text.ts +59 -59
  151. package/public/spice-console/application/clientgui.js +854 -854
  152. package/public/spice-console/application/packetfactory.js +211 -211
  153. package/public/spice-console/application/virtualmouse.js +147 -147
  154. package/public/spice-console/lib/images/bitmap.js +203 -203
  155. package/public/spice-console/network/spicechannel.js +440 -440
  156. package/public/spice-console/process/cursorprocess.js +121 -121
  157. package/public/spice-console/process/inputprocess.js +227 -227
  158. package/public/spice-console/process/mainprocess.js +210 -210
  159. package/public/spice-console/run.js +210 -210
  160. package/store/main/mutations.ts +7 -7
  161. package/store/main/state.ts +7 -7
  162. /package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/{New.vue → PasswordNew.vue} +0 -0
  163. /package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/{Old.vue → PasswordOld.vue} +0 -0
@@ -1,154 +1,154 @@
1
- <template>
2
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-location-new
3
- v-if="isNewView"
4
- v-model:selected-location="selectedLocation"
5
- :index="props.index"
6
- :datastore="props.datastore"
7
- :is-datastore-loading="props.isDatastoreLoading"
8
- :get-datastore-table-func="props.getDatastoreTableFunc"
9
- :api-error="apiError"
10
- :location-options="locationOptions"
11
- :storage-modal-is-show="storageModalIsShow"
12
- :storage-submit="storageSubmit"
13
- @change-location="onChangeLocation"
14
- @change-storage="onChangeStorage"
15
- @hide-storage-modal="onHideStorageModal"
16
- @submit-storage-modal="onSubmitStorageModal"
17
- @remove-validation-error="onRemoveValidationError"
18
- />
19
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-location-old
20
- v-else
21
- v-model:selected-location="selectedLocation"
22
- :index="props.index"
23
- :datastore="props.datastore"
24
- :is-datastore-loading="props.isDatastoreLoading"
25
- :get-datastore-table-func="props.getDatastoreTableFunc"
26
- :api-error="apiError"
27
- :location-options="locationOptions"
28
- :storage-modal-is-show="storageModalIsShow"
29
- :storage-submit="storageSubmit"
30
- @change-location="onChangeLocation"
31
- @change-storage="onChangeStorage"
32
- @hide-storage-modal="onHideStorageModal"
33
- @submit-storage-modal="onSubmitStorageModal"
34
- @remove-validation-error="onRemoveValidationError"
35
- />
36
- </template>
37
-
38
- <script setup lang="ts">
39
- import type {
40
- UI_I_HTMLSelectElement,
41
- UI_I_Localization,
42
- } from '~/lib/models/interfaces'
43
- import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
44
- import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
45
- import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
46
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
47
-
48
- const props = defineProps<{
49
- location: UI_I_DatastoreTableItem | null
50
- index: number
51
- errorValidationFields: UI_I_ErrorValidationField[]
52
- datastore: UI_I_DatastoreTableItem[]
53
- isDatastoreLoading: boolean
54
- getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
55
- }>()
56
- const emits = defineEmits<{
57
- (event: 'change', value: UI_I_DatastoreTableItem): void
58
- (event: 'remove-error-by-title', value: string): void
59
- }>()
60
-
61
- const { $store }: any = useNuxtApp()
62
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
63
-
64
- const localization = computed<UI_I_Localization>(() => useLocal())
65
-
66
- const selectedLocation = ref<string>(props.location?.id || '')
67
-
68
- const storages = ref<UI_I_DatastoreTableItem[]>([])
69
- const addStorage = (storage: UI_I_DatastoreTableItem): void => {
70
- const hasStorage = storages.value.some((item) => item.id === storage.id)
71
- if (hasStorage) {
72
- return
73
- }
74
-
75
- storages.value.push(storage)
76
- }
77
- const locationOptions = ref<UI_I_OptionItem[]>([])
78
-
79
- watch(
80
- () => props.location,
81
- (newValue) => {
82
- if (locationOptions.value.length || !newValue) {
83
- return
84
- }
85
-
86
- locationOptions.value = [
87
- {
88
- text: localization.value.common.storeWithVirtualMachine,
89
- value: newValue.id,
90
- },
91
- { text: `${localization.value.common.browse}...`, value: -1 },
92
- ]
93
- selectedLocation.value = newValue.id
94
- storages.value.push(newValue)
95
- addStorage(newValue)
96
- },
97
- { immediate: true }
98
- )
99
-
100
- const storageSubmit = ref<null | Function>(null)
101
- const onSubmitStorageModal = (): void => {
102
- storageSubmit.value = (_isValid: boolean): void => {
103
- storageSubmit.value = null
104
- }
105
- }
106
- const storageModalIsShow = ref<boolean>(false)
107
- const onHideStorageModal = (): void => {
108
- storageModalIsShow.value = false
109
- if (selectedLocation.value === -1)
110
- selectedLocation.value = locationOptions.value[0].value
111
- }
112
- const onChangeStorage = (storage: UI_I_DatastoreTableItem): void => {
113
- locationOptions.value = [
114
- locationOptions.value[0],
115
- { text: storage.name, value: storage.id },
116
- // @ts-ignore
117
- locationOptions.value.at(-1),
118
- ]
119
-
120
- selectedLocation.value = storage.id
121
- emits('change', storage)
122
- addStorage(storage)
123
- onHideStorageModal()
124
- }
125
- const onChangeLocation = (event: UI_I_HTMLSelectElement): void => {
126
- const value = +event.target.value
127
- if (value === -1) {
128
- storageModalIsShow.value = true
129
- return
130
- }
131
-
132
- selectedLocation.value = event.target.value
133
- const storage = storages.value.find((item) => item.id === event.target.value)
134
- storage && emits('change', storage)
135
- }
136
-
137
- const typeError = computed<string>(
138
- () => `disk_devices[${props.index}].location`
139
- )
140
-
141
- const apiError = computed<string>(() => {
142
- return (
143
- props.errorValidationFields?.find(
144
- (message) => message.field === typeError.value
145
- )?.error_message || ''
146
- )
147
- })
148
-
149
- const onRemoveValidationError = (): void => {
150
- emits('remove-error-by-title', typeError.value)
151
- }
152
- </script>
153
-
154
- <style scoped lang="scss"></style>
1
+ <template>
2
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-location-new
3
+ v-if="isNewView"
4
+ v-model:selected-location="selectedLocation"
5
+ :index="props.index"
6
+ :datastore="props.datastore"
7
+ :is-datastore-loading="props.isDatastoreLoading"
8
+ :get-datastore-table-func="props.getDatastoreTableFunc"
9
+ :api-error="apiError"
10
+ :location-options="locationOptions"
11
+ :storage-modal-is-show="storageModalIsShow"
12
+ :storage-submit="storageSubmit"
13
+ @change-location="onChangeLocation"
14
+ @change-storage="onChangeStorage"
15
+ @hide-storage-modal="onHideStorageModal"
16
+ @submit-storage-modal="onSubmitStorageModal"
17
+ @remove-validation-error="onRemoveValidationError"
18
+ />
19
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-location-old
20
+ v-else
21
+ v-model:selected-location="selectedLocation"
22
+ :index="props.index"
23
+ :datastore="props.datastore"
24
+ :is-datastore-loading="props.isDatastoreLoading"
25
+ :get-datastore-table-func="props.getDatastoreTableFunc"
26
+ :api-error="apiError"
27
+ :location-options="locationOptions"
28
+ :storage-modal-is-show="storageModalIsShow"
29
+ :storage-submit="storageSubmit"
30
+ @change-location="onChangeLocation"
31
+ @change-storage="onChangeStorage"
32
+ @hide-storage-modal="onHideStorageModal"
33
+ @submit-storage-modal="onSubmitStorageModal"
34
+ @remove-validation-error="onRemoveValidationError"
35
+ />
36
+ </template>
37
+
38
+ <script setup lang="ts">
39
+ import type {
40
+ UI_I_HTMLSelectElement,
41
+ UI_I_Localization,
42
+ } from '~/lib/models/interfaces'
43
+ import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
44
+ import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
45
+ import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
46
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
47
+
48
+ const props = defineProps<{
49
+ location: UI_I_DatastoreTableItem | null
50
+ index: number
51
+ errorValidationFields: UI_I_ErrorValidationField[]
52
+ datastore: UI_I_DatastoreTableItem[]
53
+ isDatastoreLoading: boolean
54
+ getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
55
+ }>()
56
+ const emits = defineEmits<{
57
+ (event: 'change', value: UI_I_DatastoreTableItem): void
58
+ (event: 'remove-error-by-title', value: string): void
59
+ }>()
60
+
61
+ const { $store }: any = useNuxtApp()
62
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
63
+
64
+ const localization = computed<UI_I_Localization>(() => useLocal())
65
+
66
+ const selectedLocation = ref<string>(props.location?.id || '')
67
+
68
+ const storages = ref<UI_I_DatastoreTableItem[]>([])
69
+ const addStorage = (storage: UI_I_DatastoreTableItem): void => {
70
+ const hasStorage = storages.value.some((item) => item.id === storage.id)
71
+ if (hasStorage) {
72
+ return
73
+ }
74
+
75
+ storages.value.push(storage)
76
+ }
77
+ const locationOptions = ref<UI_I_OptionItem[]>([])
78
+
79
+ watch(
80
+ () => props.location,
81
+ (newValue) => {
82
+ if (locationOptions.value.length || !newValue) {
83
+ return
84
+ }
85
+
86
+ locationOptions.value = [
87
+ {
88
+ text: localization.value.common.storeWithVirtualMachine,
89
+ value: newValue.id,
90
+ },
91
+ { text: `${localization.value.common.browse}...`, value: -1 },
92
+ ]
93
+ selectedLocation.value = newValue.id
94
+ storages.value.push(newValue)
95
+ addStorage(newValue)
96
+ },
97
+ { immediate: true }
98
+ )
99
+
100
+ const storageSubmit = ref<null | Function>(null)
101
+ const onSubmitStorageModal = (): void => {
102
+ storageSubmit.value = (_isValid: boolean): void => {
103
+ storageSubmit.value = null
104
+ }
105
+ }
106
+ const storageModalIsShow = ref<boolean>(false)
107
+ const onHideStorageModal = (): void => {
108
+ storageModalIsShow.value = false
109
+ if (selectedLocation.value === -1)
110
+ selectedLocation.value = locationOptions.value[0].value
111
+ }
112
+ const onChangeStorage = (storage: UI_I_DatastoreTableItem): void => {
113
+ locationOptions.value = [
114
+ locationOptions.value[0],
115
+ { text: storage.name, value: storage.id },
116
+ // @ts-ignore
117
+ locationOptions.value.at(-1),
118
+ ]
119
+
120
+ selectedLocation.value = storage.id
121
+ emits('change', storage)
122
+ addStorage(storage)
123
+ onHideStorageModal()
124
+ }
125
+ const onChangeLocation = (event: UI_I_HTMLSelectElement): void => {
126
+ const value = +event.target.value
127
+ if (value === -1) {
128
+ storageModalIsShow.value = true
129
+ return
130
+ }
131
+
132
+ selectedLocation.value = event.target.value
133
+ const storage = storages.value.find((item) => item.id === event.target.value)
134
+ storage && emits('change', storage)
135
+ }
136
+
137
+ const typeError = computed<string>(
138
+ () => `disk_devices[${props.index}].location`
139
+ )
140
+
141
+ const apiError = computed<string>(() => {
142
+ return (
143
+ props.errorValidationFields?.find(
144
+ (message) => message.field === typeError.value
145
+ )?.error_message || ''
146
+ )
147
+ })
148
+
149
+ const onRemoveValidationError = (): void => {
150
+ emits('remove-error-by-title', typeError.value)
151
+ }
152
+ </script>
153
+
154
+ <style scoped lang="scss"></style>
@@ -1,9 +1,9 @@
1
1
  <template>
2
2
  <common-vm-actions-common-customize-hardware-virtual-hardware-new-network-new
3
3
  v-if="isNewView"
4
- v-model:selected-location="networkValue"
5
- v-model:adapter-type="model"
6
- v-model:mac-address="mac"
4
+ v-model:selected-location="selectedLocation"
5
+ v-model:adapter-type="adapterType"
6
+ v-model:mac-address="macAddress"
7
7
  v-model:mac-address-type="macAddressType"
8
8
  v-model:new-network-invalid="newNetworkInvalid"
9
9
  :index="props.index"
@@ -26,9 +26,9 @@
26
26
  />
27
27
  <common-vm-actions-common-customize-hardware-virtual-hardware-new-network-old
28
28
  v-else
29
- v-model:selected-location="networkValue"
30
- v-model:adapter-type="model"
31
- v-model:mac-address="mac"
29
+ v-model:selected-location="selectedLocation"
30
+ v-model:adapter-type="adapterType"
31
+ v-model:mac-address="macAddress"
32
32
  v-model:mac-address-type="macAddressType"
33
33
  v-model:new-network-invalid="newNetworkInvalid"
34
34
  :index="props.index"
@@ -56,38 +56,23 @@ import type { UI_T_Project } from '~/lib/models/types'
56
56
  import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
57
57
  import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
58
58
  import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
59
+ import type { UI_I_SendDataNewNetwork } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
59
60
  import type { UI_T_NetworkType } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/types'
60
61
  import type {
61
62
  UI_I_Localization,
62
63
  UI_I_HTMLSelectElement,
63
64
  } from '~/lib/models/interfaces'
64
65
  import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
65
- import type { UI_I_CreateVmData } from '~/components/common/vm/actions/common/lib/models/interfaces'
66
-
67
- const network = defineModel<UI_I_CreateVmData['network_devices'][0]['network']>(
68
- 'network',
69
- { required: true }
70
- )
71
-
72
- const mac = defineModel<UI_I_CreateVmData['network_devices'][0]['mac']>('mac', {
73
- required: true,
74
- })
75
- const model = defineModel<UI_I_CreateVmData['network_devices'][0]['model']>(
76
- 'model',
77
- {
78
- required: true,
79
- }
80
- )
81
66
 
82
67
  const props = withDefaults(
83
68
  defineProps<{
84
69
  project: UI_T_Project
85
70
  index: number
86
71
  type: UI_T_NetworkType
72
+ network: UI_I_SendDataNewNetwork
87
73
  networksTable: UI_I_NetworkTableItem[]
88
74
  errorValidationFields: UI_I_ErrorValidationField[]
89
75
  isEdit: boolean
90
- networkValueProp: 'network' | 'net_bridge'
91
76
  state?: string | number
92
77
  }>(),
93
78
  {
@@ -95,27 +80,18 @@ const props = withDefaults(
95
80
  }
96
81
  )
97
82
  const emits = defineEmits<{
83
+ (event: 'send-data', value: UI_I_SendDataNewNetwork): void
98
84
  (event: 'invalid', value: boolean): void
99
85
  (event: 'remove'): void
100
86
  (event: 'remove-error-by-title', value: string): void
101
87
  (event: 'get-networks-table', value: UI_I_TablePayload): void
102
88
  }>()
103
89
 
104
- const networkValue = defineModel<
105
- UI_I_CreateVmData['network_devices'][0][props.networkValueProp]
106
- >('networkValue', { required: true })
107
- watch(networkValue, (newValue) => {
108
- const selectedOption = locationOptions.value.find(
109
- (option) => option.value === newValue
110
- )
111
- if (selectedOption) {
112
- network.value = selectedOption.text
113
- }
114
- })
115
-
116
90
  const { $store }: any = useNuxtApp()
117
91
  const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
118
92
 
93
+ const valueProp = props.project === 'sphere' ? 'network' : 'net_bridge'
94
+
119
95
  const localization = computed<UI_I_Localization>(() => useLocal())
120
96
 
121
97
  const isRunning = computed<boolean>(() => {
@@ -126,7 +102,7 @@ const isRemovable = computed<boolean>(() => {
126
102
  return (
127
103
  !props.isEdit ||
128
104
  !isRunning.value ||
129
- (isRunning.value && model.value === 'virtio')
105
+ (isRunning.value && adapterType.value === 'virtio')
130
106
  )
131
107
  })
132
108
 
@@ -142,15 +118,9 @@ const label = computed<string>(() => {
142
118
  // }
143
119
 
144
120
  const selectedLocationOld = ref<string>('')
121
+ const selectedLocation = ref<string>('')
145
122
  const locationOptions = ref<UI_I_OptionItem[]>([])
146
123
 
147
- if (networkValue.value) {
148
- locationOptions.value = [
149
- { text: network.value, value: networkValue.value },
150
- { text: `${localization.value.common.browse}...`, value: '' },
151
- ]
152
- }
153
-
154
124
  const getNetworks = (): void => {
155
125
  // if (props.networksTable.length) return // Из-за этого кода был баг. Открыть визард вм -> создать сеть -> открыть визард вм и в списке сетей нету новой сети
156
126
 
@@ -179,8 +149,9 @@ watch(
179
149
  watch(
180
150
  () => props.networksTable,
181
151
  (newValue) => {
182
- if (!newValue.length && props.type !== 'new') return
183
-
152
+ const isExistValue = newValue.some(
153
+ (network) => network[valueProp] === selectedLocation.value
154
+ )
184
155
  if (!newValue.length) {
185
156
  locationOptions.value = [
186
157
  {
@@ -188,33 +159,29 @@ watch(
188
159
  value: 'noAvailableNetworks',
189
160
  },
190
161
  ]
191
- networkValue.value = 'noAvailableNetworks'
162
+ selectedLocation.value = 'noAvailableNetworks'
192
163
  newNetworkInvalid.value = true
193
164
  return
194
165
  }
195
166
  newNetworkInvalid.value = false
196
167
 
197
- const isExistValue = newValue.some(
198
- (networkLocal) => networkLocal[props.networkValueProp] === networkValue.value
199
- )
200
-
201
168
  if (props.type === 'edit' || isExistValue) return
202
169
 
203
- selectedLocationOld.value = newValue[0][props.networkValueProp] || ''
204
- networkValue.value = newValue[0][props.networkValueProp] || ''
170
+ selectedLocationOld.value = newValue[0][valueProp] || ''
171
+ selectedLocation.value = newValue[0][valueProp] || ''
205
172
 
206
173
  locationOptions.value = [
207
- { text: newValue[0].name, value: newValue[0][props.networkValueProp] },
174
+ { text: newValue[0].name, value: newValue[0][valueProp] },
208
175
  { text: `${localization.value.common.browse}...`, value: '' },
209
176
  ]
210
177
  },
211
- { immediate: true, deep: true }
178
+ { immediate: true }
212
179
  )
213
180
 
214
181
  const locationModalIsShow = ref<boolean>(false)
215
182
  const onHideLocationModal = (): void => {
216
183
  locationModalIsShow.value = false
217
- networkValue.value = selectedLocationOld.value
184
+ selectedLocation.value = selectedLocationOld.value
218
185
  }
219
186
  const changeLocation = (event: UI_I_HTMLSelectElement): void => {
220
187
  const value = event.target.value
@@ -224,16 +191,17 @@ const changeLocation = (event: UI_I_HTMLSelectElement): void => {
224
191
  }
225
192
 
226
193
  selectedLocationOld.value = value
227
- networkValue.value = value
194
+ selectedLocation.value = value
195
+ // netBridge.value = value
228
196
  }
229
- const onSelectLocation = (networkLocal: UI_I_NetworkTableItem): void => {
197
+ const onSelectLocation = (network: UI_I_NetworkTableItem): void => {
230
198
  locationModalIsShow.value = false
231
199
 
232
- selectedLocationOld.value = networkLocal[props.networkValueProp]
233
- networkValue.value = networkLocal[props.networkValueProp]
200
+ selectedLocationOld.value = network[valueProp]
201
+ selectedLocation.value = network[valueProp]
234
202
 
235
203
  const hasNetwork = locationOptions.value.some(
236
- (option) => option.value === networkLocal[props.networkValueProp]
204
+ (option) => option.value === network[valueProp]
237
205
  )
238
206
  if (hasNetwork) {
239
207
  return
@@ -241,17 +209,87 @@ const onSelectLocation = (networkLocal: UI_I_NetworkTableItem): void => {
241
209
 
242
210
  locationOptions.value = [
243
211
  ...locationOptions.value.slice(0, -1),
244
- { text: networkLocal.name, value: networkLocal[props.networkValueProp] },
212
+ { text: network.name, value: network[valueProp] },
245
213
  locationOptions.value[locationOptions.value.length - 1],
246
214
  ]
247
215
  }
216
+
217
+ // const adapterType = ref<string>('rtl8139')
218
+ const adapterType = ref<string>('virtio') // Семён попросил
219
+
220
+ const target = ref<string>('')
221
+
222
+ const macAddress = ref<string>('')
248
223
  const macAddressType = ref<string>('automatic')
249
224
 
225
+ let cashNetwork = {
226
+ network: '',
227
+ mac: '',
228
+ }
229
+ if (props.network.mac) {
230
+ cashNetwork.network = props.network[valueProp]
231
+ cashNetwork.mac = props.network.mac
232
+ }
233
+ watch(selectedLocation, (newValue) => {
234
+ if (newValue !== cashNetwork.network) {
235
+ macAddressType.value = 'automatic'
236
+ macAddress.value = ''
237
+ } else {
238
+ macAddressType.value = cashNetwork.mac ? 'manual' : 'automatic'
239
+ setTimeout(() => {
240
+ macAddress.value = cashNetwork.mac
241
+ },0)
242
+ }
243
+ })
244
+
245
+ watch(
246
+ [selectedLocation, adapterType, macAddress, macAddressType, locationOptions],
247
+ () => {
248
+ const option = locationOptions.value.find(
249
+ (option) => option.value === selectedLocation.value
250
+ )
251
+ if (!option) return
252
+
253
+ emits('send-data', {
254
+ network: option.text,
255
+ // net_bridge: props.project === 'procurator' ? option.value : '',
256
+ net_bridge: option.value,
257
+ target: target.value,
258
+ model: adapterType.value,
259
+ mac: macAddress.value,
260
+ boot_order: props.network.boot_order,
261
+ })
262
+ },
263
+ { immediate: true }
264
+ )
265
+
266
+ // Добавляем данные для редактирования
267
+ watch(
268
+ () => props.network,
269
+ (newValue) => {
270
+ // if (props.type !== 'edit') return
271
+ if (props.type !== 'edit' && props.type !== 'clone') return
272
+
273
+ locationOptions.value = [
274
+ { text: newValue.network, value: newValue[valueProp] },
275
+ { text: `${localization.value.common.browse}...`, value: '' },
276
+ ]
277
+ selectedLocation.value = newValue[valueProp]
278
+
279
+ adapterType.value = newValue.model
280
+ target.value = newValue.target
281
+ // Сбрасываем mac address при клонировании
282
+ macAddress.value = props.type === 'clone' ? '' : newValue.mac
283
+ macAddressType.value = props.type === 'clone' ? 'automatic' : 'manual'
284
+ },
285
+ { immediate: true }
286
+ )
287
+
250
288
  watch(
251
289
  isRunning,
252
290
  (newValue) => {
253
291
  if (newValue && props.type === 'new') {
254
- model.value = 'virtio'
292
+ adapterType.value = 'virtio'
255
293
  }
256
294
  },
257
295
  { immediate: true }