bfg-common 1.5.335 → 1.5.336

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 (136) 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/scss/common/icons/icons-1.scss +3 -3
  7. package/assets/scss/common/icons/icons-5.scss +5 -5
  8. package/components/atoms/TheIcon3.vue +50 -50
  9. package/components/atoms/collapse/CollapseNav.vue +170 -170
  10. package/components/atoms/collapse/CollapseNavItem.vue +226 -226
  11. package/components/atoms/nav/NavBar.vue +147 -147
  12. package/components/atoms/perPage/PerPage.vue +58 -58
  13. package/components/atoms/table/dataGrid/DataGrid.vue +1717 -1717
  14. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  15. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  16. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  17. package/components/common/backup/storage/actions/add/lib/config/steps.ts +168 -168
  18. package/components/common/backup/storage/actions/add/steps/hostAccessibility/HostAccessibility.vue +52 -52
  19. package/components/common/backup/storage/actions/add/steps/readyComplete/ReadyComplete.vue +45 -45
  20. package/components/common/backup/storage/actions/delete/Delete.vue +65 -65
  21. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  22. package/components/common/context/lib/models/interfaces.ts +33 -33
  23. package/components/common/diagramMain/DiagramMain.vue +897 -897
  24. package/components/common/diagramMain/modals/lib/config/networkModal.ts +398 -398
  25. package/components/common/diagramMain/network/Network.vue +141 -141
  26. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  27. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  28. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  29. package/components/common/pages/home/headline/Headline.vue +45 -45
  30. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  31. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  32. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  33. package/components/common/pages/home/widgets/WidgetsNew.vue +88 -88
  34. package/components/common/pages/home/widgets/WidgetsOld.vue +36 -36
  35. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  36. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  37. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  38. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  39. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  40. package/components/common/pages/packages/Packages.vue +208 -208
  41. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  42. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  43. package/components/common/recursionTree/RecursionTree.vue +223 -223
  44. package/components/common/select/button/ButtonDropdown.vue +112 -112
  45. package/components/common/select/radio/RadioGroup.vue +135 -135
  46. package/components/common/spiceConsole/Drawer.vue +377 -377
  47. package/components/common/spiceConsole/SpiceConsole.vue +127 -127
  48. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  49. package/components/common/tools/Actions.vue +207 -207
  50. package/components/common/vm/actions/add/New.vue +647 -647
  51. package/components/common/vm/actions/add/Old.vue +388 -388
  52. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  53. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  54. package/components/common/vm/actions/add/folderTreeView/Old.vue +50 -50
  55. package/components/common/vm/actions/clone/Clone.vue +823 -823
  56. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -291
  57. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  58. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +321 -321
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +227 -227
  60. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +100 -100
  61. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  62. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  63. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  64. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +78 -78
  65. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/tooltip/TooltipNew.vue +154 -154
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/dropdownItems.ts +155 -155
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +307 -307
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +385 -385
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationOld.vue +85 -85
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +288 -288
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +94 -94
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCard.vue +154 -154
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  90. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +155 -155
  91. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +130 -130
  92. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsOld.vue +113 -113
  93. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  94. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  95. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +174 -174
  96. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptions.vue +95 -95
  97. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsOld.vue +155 -155
  98. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  99. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapOld.vue +44 -44
  100. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  101. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  102. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  103. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  104. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +118 -118
  105. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  106. package/components/common/vm/actions/common/select/createType/lib/config/items.ts +48 -48
  107. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  108. package/components/common/vm/actions/common/select/name/Name.vue +174 -174
  109. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  110. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  111. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  112. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  113. package/components/common/vm/actions/editSettings/EditSettings.vue +242 -242
  114. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  115. package/components/common/vmt/actions/add/lib/models/interfaces.ts +23 -23
  116. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +104 -104
  117. package/components/common/wizards/network/add/steps/SelectedTargetDevice.vue +467 -467
  118. package/components/common/wizards/vm/migrate/Migrate.vue +349 -349
  119. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  120. package/components/common/wizards/vm/migrate/lib/config/steps.ts +157 -157
  121. package/components/common/wizards/vm/migrate/lib/validations.ts +68 -68
  122. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  123. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  124. package/components/common/wizards/vm/migrate/select/type/lib/config/typeOptions.ts +45 -45
  125. package/composables/productNameLocal.ts +30 -30
  126. package/composables/useAppVersion.ts +21 -21
  127. package/composables/useLocalStorage.ts +1 -1
  128. package/package.json +1 -1
  129. package/plugins/date.ts +233 -233
  130. package/plugins/panelStates.ts +70 -70
  131. package/plugins/text.ts +59 -59
  132. package/public/spice-console/lib/images/bitmap.js +203 -203
  133. package/public/spice-console/network/spicechannel.js +387 -387
  134. package/store/main/mutations.ts +7 -7
  135. package/store/main/state.ts +7 -7
  136. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -1,307 +1,307 @@
1
- <template>
2
- <common-vm-actions-common-customize-hardware-virtual-hardware-memory-new
3
- v-if="isNewView"
4
- v-model:selected-memory="selectedMemory"
5
- v-model:memory-type="memoryType"
6
- v-model:reservation="reservation"
7
- v-model:reservation-type="reservationType"
8
- v-model:reserve-guest-memory="reserveGuestMemory"
9
- v-model:reservation-invalid="reservationInvalid"
10
- v-model:limit="limit"
11
- v-model:limit-type="limitType"
12
- v-model:limit-invalid="limitInvalid"
13
- v-model:memory-hot-plug="memoryHotPlug"
14
- :error-validation-fields="props.errorValidationFields"
15
- :memory-invalid="memoryInvalid"
16
- :error-text="memorySizeLocalAndApiErrorsTexts"
17
- :memory-options="memoryOptions"
18
- :is-memory-disabled="isMemoryDisabled"
19
- :memory-type-options="memoryTypeOptions"
20
- :is-disabled="isDisabled"
21
- :limit-options="limitOptions"
22
- :is-disabled-memory-hot-plug="isDisabledMemoryHotPlug"
23
- @select-memory="onSelectMemory"
24
- @remove-error="onRemoveValidationError"
25
- @remove-error-by-title="emits('remove-error-by-title', $event)"
26
- />
27
- <common-vm-actions-common-customize-hardware-virtual-hardware-memory-old
28
- v-else
29
- v-model:selected-memory="selectedMemory"
30
- v-model:memory-type="memoryType"
31
- v-model:reservation="reservation"
32
- v-model:reservation-type="reservationType"
33
- v-model:reserve-guest-memory="reserveGuestMemory"
34
- v-model:reservation-invalid="reservationInvalid"
35
- v-model:limit="limit"
36
- v-model:limit-type="limitType"
37
- v-model:limit-invalid="limitInvalid"
38
- v-model:memory-hot-plug="memoryHotPlug"
39
- :error-validation-fields="props.errorValidationFields"
40
- :memory-invalid="memoryInvalid"
41
- :error-text="memorySizeLocalAndApiErrorsTexts"
42
- :memory-options="memoryOptions"
43
- :is-memory-disabled="isMemoryDisabled"
44
- :memory-type-options="memoryTypeOptions"
45
- :is-disabled="isDisabled"
46
- :limit-options="limitOptions"
47
- :is-disabled-memory-hot-plug="isDisabledMemoryHotPlug"
48
- @select-memory="onSelectMemory"
49
- @remove-error="onRemoveValidationError"
50
- @remove-error-by-title="emits('remove-error-by-title', $event)"
51
- />
52
- </template>
53
-
54
- <script setup lang="ts">
55
- import type { API_UI_I_VmEditMemory } from '~/lib/models/store/vm/interfaces'
56
- import type { UI_I_SendDataMemory } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
57
- import type { UI_I_Localization } from '~/lib/models/interfaces'
58
- import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
59
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
60
- import {
61
- memoryOptionsFunc,
62
- memoryTypeOptionsFunc,
63
- } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/lib/config/memoryOptions'
64
-
65
- const props = defineProps<{
66
- maxMemory: number
67
- isEdit: boolean
68
- errorValidationFields: UI_I_ErrorValidationField[]
69
- state?: string | number
70
- memory?: API_UI_I_VmEditMemory
71
- }>()
72
- const emits = defineEmits<{
73
- (event: 'send-data', value: UI_I_SendDataMemory): void
74
- (event: 'invalid', value: boolean): void
75
- (event: 'remove-error-by-title', value: string): void
76
- }>()
77
-
78
- const { $store, $binary }: any = useNuxtApp()
79
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
80
-
81
- const localization = computed<UI_I_Localization>(() => useLocal())
82
-
83
- const minMemoryInMb = 128
84
- watch(
85
- () => props.maxMemory,
86
- (newValue) => {
87
- memoryOptions.value = memoryOptionsFunc(
88
- localization.value,
89
- minMemoryInMb,
90
- newValue
91
- )
92
- }
93
- )
94
-
95
- const isDisabled = computed<boolean>(() => {
96
- return props.state === 2
97
- })
98
-
99
- const isMemoryDisabled = computed<boolean>(
100
- () => isDisabled.value && !memoryHotPlug.value
101
- )
102
-
103
- const selectedMemory = ref<number>(4)
104
- watch(selectedMemory, (newValue) => {
105
- const valueInt = parseInt('' + newValue)
106
- selectedMemory.value = isNaN(valueInt) ? 0 : valueInt
107
- })
108
- const memoryType = ref<string>('gb')
109
- const memoryTypeOptions = ref<UI_I_OptionItem[]>(
110
- memoryTypeOptionsFunc(localization.value)
111
- )
112
- const memoryInMb = computed<number>(() => {
113
- if (memoryType.value === 'mb') {
114
- return +selectedMemory.value
115
- }
116
-
117
- return $binary.universalFromTo(+selectedMemory.value, memoryType.value, 'mb')
118
- })
119
-
120
- const memoryOptions = ref<UI_I_OptionItem[]>(
121
- memoryOptionsFunc(localization.value, minMemoryInMb, props.maxMemory)
122
- )
123
- const onSelectMemory = ({
124
- value,
125
- type,
126
- }: {
127
- value: number
128
- type: string
129
- }): void => {
130
- selectedMemory.value = value
131
- if (memoryType.value !== type) {
132
- memoryType.value = type
133
- }
134
- // if (memoryType.value === 'mb') {
135
- // selectedMemory.value = mb
136
- // return
137
- // }
138
- //
139
- // selectedMemory.value = $binary.universalFromTo(mb, 'mb', memoryType.value, 12)
140
- }
141
-
142
- const memoryErrorLocalText = computed<string>(() => {
143
- const validValue = /^\d+(\.\d+)?$/.test(selectedMemory.value + '')
144
- if (!validValue) {
145
- return localization.value.common.inputContainsInvalidCharacters
146
- }
147
-
148
- const maxMemoryInGb = $binary.mbToGb(props.maxMemory)
149
- if (memoryInMb.value < minMemoryInMb || memoryInMb.value > props.maxMemory) {
150
- return localization.value.common.memoryMustBe
151
- .replace('{0}', `${minMemoryInMb} ${localization.value.common.mb}`)
152
- .replace('{1}', `${maxMemoryInGb} ${localization.value.common.gb}`)
153
- }
154
-
155
- if (memoryInMb.value % 2 !== 0) {
156
- return localization.value.common.valueShouldMultiple.replace(
157
- '{0}',
158
- `${2} ${localization.value.common.mb}`
159
- )
160
- }
161
- return ''
162
- })
163
-
164
- const apiErrorLocal = computed<string>(() => {
165
- return (
166
- props.errorValidationFields?.find(
167
- (message) => message.field === 'memory.size_mb'
168
- )?.error_message || ''
169
- )
170
- })
171
-
172
- const memorySizeLocalAndApiErrorsTexts = computed<string>(() => {
173
- const localError = memoryErrorLocalText.value
174
- const apiError = apiErrorLocal.value
175
-
176
- let result = ''
177
- if (localError && !apiError) result = localError
178
- if (apiError && !localError) result = apiError
179
- if (localError && apiError) result = localError + ', ' + apiError
180
- if (!localError && apiError) result = apiError
181
-
182
- return result
183
- })
184
-
185
- const reservationInvalid = ref<boolean>(false)
186
- const limitInvalid = ref<boolean>(false)
187
- const memoryInvalid = computed<boolean>(
188
- () =>
189
- !!memorySizeLocalAndApiErrorsTexts.value ||
190
- reservationInvalid.value ||
191
- limitInvalid.value
192
- )
193
- watch(
194
- memoryInvalid,
195
- (newValue) => {
196
- emits('invalid', newValue)
197
- },
198
- { immediate: true }
199
- )
200
-
201
- const reservation = ref<string>('2')
202
- watch(reservation, (newValue) => {
203
- const valueInt = parseInt('' + newValue)
204
- reservation.value = isNaN(valueInt) ? '0' : '' + valueInt
205
- })
206
- const reservationType = ref<string>('mb')
207
- const reserveGuestMemory = ref<boolean>(false)
208
-
209
- const limit = ref<string>('Unlimited')
210
- watch(limit, (newValue) => {
211
- const valueInt = parseInt('' + newValue)
212
- limit.value !== 'Unlimited' &&
213
- (limit.value = isNaN(valueInt) ? '0' : '' + valueInt)
214
- })
215
- const limitType = ref<string>('mb')
216
- const limitOptions = computed<UI_I_OptionItem[] | undefined>(() => {
217
- if (memoryHotPlug.value)
218
- return memoryOptionsFunc(
219
- localization.value,
220
- memoryInMb.value,
221
- props.maxMemory
222
- )
223
- })
224
-
225
- const memoryHotPlug = ref<boolean>(false)
226
- const isDisabledMemoryHotPlug = computed<boolean>(
227
- () => memoryInMb.value >= props.maxMemory || isDisabled.value
228
- )
229
- watch(isDisabledMemoryHotPlug, (newValue) => {
230
- if (newValue) memoryHotPlug.value = false
231
- })
232
-
233
- watch(
234
- [memoryInMb, memoryHotPlug, reservation, reservationType, limit, limitType],
235
- () => {
236
- const reservationInMb =
237
- reservationType.value === 'mb'
238
- ? reservation.value
239
- : '' +
240
- $binary.universalFromTo(
241
- reservation.value,
242
- reservationType.value,
243
- 'mb',
244
- 12
245
- )
246
- const limitInMb =
247
- limit.value === 'Unlimited'
248
- ? limit.value
249
- : limitType.value === 'gb'
250
- ? $binary.gbToMb(+limit.value)
251
- : +limit.value
252
- emits('send-data', {
253
- memory: '' + memoryInMb.value,
254
- hotplug: memoryHotPlug.value,
255
- reservation_mb: reservationInMb,
256
- limit_mb: limitInMb,
257
- })
258
- },
259
- { immediate: true }
260
- )
261
-
262
- // Добавляем данные для редактирования
263
- watch(
264
- () => props.memory,
265
- (newValue) => {
266
- if (!newValue) return
267
-
268
- const sizeInGb = $binary.mbToGb(newValue.size_mb)
269
- if (sizeInGb < 1) {
270
- selectedMemory.value = newValue.size_mb
271
- memoryType.value = 'mb'
272
- } else {
273
- selectedMemory.value = sizeInGb
274
- }
275
-
276
- const reservationInGb = $binary.mbToGb(newValue.reservation_mb)
277
- if (reservationInGb < 1) {
278
- reservation.value = newValue.reservation_mb
279
- reservationType.value = 'mb'
280
- } else {
281
- reservation.value = reservationInGb
282
- reservationType.value = 'gb'
283
- }
284
-
285
- if (typeof newValue.limit_mb === 'string') limit.value = newValue.limit_mb
286
- else {
287
- const limitInGb = $binary.mbToGb(newValue.limit_mb)
288
- if (limitInGb < 1) {
289
- limit.value = newValue.limit_mb
290
- limitType.value = 'mb'
291
- } else {
292
- limit.value = limitInGb
293
- limitType.value = 'gb'
294
- }
295
- }
296
-
297
- memoryHotPlug.value = newValue.hotplug
298
- },
299
- { immediate: true }
300
- )
301
-
302
- const onRemoveValidationError = (): void => {
303
- emits('remove-error-by-title', 'memory.size_mb')
304
- }
305
- </script>
306
-
307
- <style scoped lang="scss"></style>
1
+ <template>
2
+ <common-vm-actions-common-customize-hardware-virtual-hardware-memory-new
3
+ v-if="isNewView"
4
+ v-model:selected-memory="selectedMemory"
5
+ v-model:memory-type="memoryType"
6
+ v-model:reservation="reservation"
7
+ v-model:reservation-type="reservationType"
8
+ v-model:reserve-guest-memory="reserveGuestMemory"
9
+ v-model:reservation-invalid="reservationInvalid"
10
+ v-model:limit="limit"
11
+ v-model:limit-type="limitType"
12
+ v-model:limit-invalid="limitInvalid"
13
+ v-model:memory-hot-plug="memoryHotPlug"
14
+ :error-validation-fields="props.errorValidationFields"
15
+ :memory-invalid="memoryInvalid"
16
+ :error-text="memorySizeLocalAndApiErrorsTexts"
17
+ :memory-options="memoryOptions"
18
+ :is-memory-disabled="isMemoryDisabled"
19
+ :memory-type-options="memoryTypeOptions"
20
+ :is-disabled="isDisabled"
21
+ :limit-options="limitOptions"
22
+ :is-disabled-memory-hot-plug="isDisabledMemoryHotPlug"
23
+ @select-memory="onSelectMemory"
24
+ @remove-error="onRemoveValidationError"
25
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
26
+ />
27
+ <common-vm-actions-common-customize-hardware-virtual-hardware-memory-old
28
+ v-else
29
+ v-model:selected-memory="selectedMemory"
30
+ v-model:memory-type="memoryType"
31
+ v-model:reservation="reservation"
32
+ v-model:reservation-type="reservationType"
33
+ v-model:reserve-guest-memory="reserveGuestMemory"
34
+ v-model:reservation-invalid="reservationInvalid"
35
+ v-model:limit="limit"
36
+ v-model:limit-type="limitType"
37
+ v-model:limit-invalid="limitInvalid"
38
+ v-model:memory-hot-plug="memoryHotPlug"
39
+ :error-validation-fields="props.errorValidationFields"
40
+ :memory-invalid="memoryInvalid"
41
+ :error-text="memorySizeLocalAndApiErrorsTexts"
42
+ :memory-options="memoryOptions"
43
+ :is-memory-disabled="isMemoryDisabled"
44
+ :memory-type-options="memoryTypeOptions"
45
+ :is-disabled="isDisabled"
46
+ :limit-options="limitOptions"
47
+ :is-disabled-memory-hot-plug="isDisabledMemoryHotPlug"
48
+ @select-memory="onSelectMemory"
49
+ @remove-error="onRemoveValidationError"
50
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
51
+ />
52
+ </template>
53
+
54
+ <script setup lang="ts">
55
+ import type { API_UI_I_VmEditMemory } from '~/lib/models/store/vm/interfaces'
56
+ import type { UI_I_SendDataMemory } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
57
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
58
+ import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
59
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
60
+ import {
61
+ memoryOptionsFunc,
62
+ memoryTypeOptionsFunc,
63
+ } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/lib/config/memoryOptions'
64
+
65
+ const props = defineProps<{
66
+ maxMemory: number
67
+ isEdit: boolean
68
+ errorValidationFields: UI_I_ErrorValidationField[]
69
+ state?: string | number
70
+ memory?: API_UI_I_VmEditMemory
71
+ }>()
72
+ const emits = defineEmits<{
73
+ (event: 'send-data', value: UI_I_SendDataMemory): void
74
+ (event: 'invalid', value: boolean): void
75
+ (event: 'remove-error-by-title', value: string): void
76
+ }>()
77
+
78
+ const { $store, $binary }: any = useNuxtApp()
79
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
80
+
81
+ const localization = computed<UI_I_Localization>(() => useLocal())
82
+
83
+ const minMemoryInMb = 128
84
+ watch(
85
+ () => props.maxMemory,
86
+ (newValue) => {
87
+ memoryOptions.value = memoryOptionsFunc(
88
+ localization.value,
89
+ minMemoryInMb,
90
+ newValue
91
+ )
92
+ }
93
+ )
94
+
95
+ const isDisabled = computed<boolean>(() => {
96
+ return props.state === 2
97
+ })
98
+
99
+ const isMemoryDisabled = computed<boolean>(
100
+ () => isDisabled.value && !memoryHotPlug.value
101
+ )
102
+
103
+ const selectedMemory = ref<number>(4)
104
+ watch(selectedMemory, (newValue) => {
105
+ const valueInt = parseInt('' + newValue)
106
+ selectedMemory.value = isNaN(valueInt) ? 0 : valueInt
107
+ })
108
+ const memoryType = ref<string>('gb')
109
+ const memoryTypeOptions = ref<UI_I_OptionItem[]>(
110
+ memoryTypeOptionsFunc(localization.value)
111
+ )
112
+ const memoryInMb = computed<number>(() => {
113
+ if (memoryType.value === 'mb') {
114
+ return +selectedMemory.value
115
+ }
116
+
117
+ return $binary.universalFromTo(+selectedMemory.value, memoryType.value, 'mb')
118
+ })
119
+
120
+ const memoryOptions = ref<UI_I_OptionItem[]>(
121
+ memoryOptionsFunc(localization.value, minMemoryInMb, props.maxMemory)
122
+ )
123
+ const onSelectMemory = ({
124
+ value,
125
+ type,
126
+ }: {
127
+ value: number
128
+ type: string
129
+ }): void => {
130
+ selectedMemory.value = value
131
+ if (memoryType.value !== type) {
132
+ memoryType.value = type
133
+ }
134
+ // if (memoryType.value === 'mb') {
135
+ // selectedMemory.value = mb
136
+ // return
137
+ // }
138
+ //
139
+ // selectedMemory.value = $binary.universalFromTo(mb, 'mb', memoryType.value, 12)
140
+ }
141
+
142
+ const memoryErrorLocalText = computed<string>(() => {
143
+ const validValue = /^\d+(\.\d+)?$/.test(selectedMemory.value + '')
144
+ if (!validValue) {
145
+ return localization.value.common.inputContainsInvalidCharacters
146
+ }
147
+
148
+ const maxMemoryInGb = $binary.mbToGb(props.maxMemory)
149
+ if (memoryInMb.value < minMemoryInMb || memoryInMb.value > props.maxMemory) {
150
+ return localization.value.common.memoryMustBe
151
+ .replace('{0}', `${minMemoryInMb} ${localization.value.common.mb}`)
152
+ .replace('{1}', `${maxMemoryInGb} ${localization.value.common.gb}`)
153
+ }
154
+
155
+ if (memoryInMb.value % 2 !== 0) {
156
+ return localization.value.common.valueShouldMultiple.replace(
157
+ '{0}',
158
+ `${2} ${localization.value.common.mb}`
159
+ )
160
+ }
161
+ return ''
162
+ })
163
+
164
+ const apiErrorLocal = computed<string>(() => {
165
+ return (
166
+ props.errorValidationFields?.find(
167
+ (message) => message.field === 'memory.size_mb'
168
+ )?.error_message || ''
169
+ )
170
+ })
171
+
172
+ const memorySizeLocalAndApiErrorsTexts = computed<string>(() => {
173
+ const localError = memoryErrorLocalText.value
174
+ const apiError = apiErrorLocal.value
175
+
176
+ let result = ''
177
+ if (localError && !apiError) result = localError
178
+ if (apiError && !localError) result = apiError
179
+ if (localError && apiError) result = localError + ', ' + apiError
180
+ if (!localError && apiError) result = apiError
181
+
182
+ return result
183
+ })
184
+
185
+ const reservationInvalid = ref<boolean>(false)
186
+ const limitInvalid = ref<boolean>(false)
187
+ const memoryInvalid = computed<boolean>(
188
+ () =>
189
+ !!memorySizeLocalAndApiErrorsTexts.value ||
190
+ reservationInvalid.value ||
191
+ limitInvalid.value
192
+ )
193
+ watch(
194
+ memoryInvalid,
195
+ (newValue) => {
196
+ emits('invalid', newValue)
197
+ },
198
+ { immediate: true }
199
+ )
200
+
201
+ const reservation = ref<string>('2')
202
+ watch(reservation, (newValue) => {
203
+ const valueInt = parseInt('' + newValue)
204
+ reservation.value = isNaN(valueInt) ? '0' : '' + valueInt
205
+ })
206
+ const reservationType = ref<string>('mb')
207
+ const reserveGuestMemory = ref<boolean>(false)
208
+
209
+ const limit = ref<string>('Unlimited')
210
+ watch(limit, (newValue) => {
211
+ const valueInt = parseInt('' + newValue)
212
+ limit.value !== 'Unlimited' &&
213
+ (limit.value = isNaN(valueInt) ? '0' : '' + valueInt)
214
+ })
215
+ const limitType = ref<string>('mb')
216
+ const limitOptions = computed<UI_I_OptionItem[] | undefined>(() => {
217
+ if (memoryHotPlug.value)
218
+ return memoryOptionsFunc(
219
+ localization.value,
220
+ memoryInMb.value,
221
+ props.maxMemory
222
+ )
223
+ })
224
+
225
+ const memoryHotPlug = ref<boolean>(false)
226
+ const isDisabledMemoryHotPlug = computed<boolean>(
227
+ () => memoryInMb.value >= props.maxMemory || isDisabled.value
228
+ )
229
+ watch(isDisabledMemoryHotPlug, (newValue) => {
230
+ if (newValue) memoryHotPlug.value = false
231
+ })
232
+
233
+ watch(
234
+ [memoryInMb, memoryHotPlug, reservation, reservationType, limit, limitType],
235
+ () => {
236
+ const reservationInMb =
237
+ reservationType.value === 'mb'
238
+ ? reservation.value
239
+ : '' +
240
+ $binary.universalFromTo(
241
+ reservation.value,
242
+ reservationType.value,
243
+ 'mb',
244
+ 12
245
+ )
246
+ const limitInMb =
247
+ limit.value === 'Unlimited'
248
+ ? limit.value
249
+ : limitType.value === 'gb'
250
+ ? $binary.gbToMb(+limit.value)
251
+ : +limit.value
252
+ emits('send-data', {
253
+ memory: '' + memoryInMb.value,
254
+ hotplug: memoryHotPlug.value,
255
+ reservation_mb: reservationInMb,
256
+ limit_mb: limitInMb,
257
+ })
258
+ },
259
+ { immediate: true }
260
+ )
261
+
262
+ // Добавляем данные для редактирования
263
+ watch(
264
+ () => props.memory,
265
+ (newValue) => {
266
+ if (!newValue) return
267
+
268
+ const sizeInGb = $binary.mbToGb(newValue.size_mb)
269
+ if (sizeInGb < 1) {
270
+ selectedMemory.value = newValue.size_mb
271
+ memoryType.value = 'mb'
272
+ } else {
273
+ selectedMemory.value = sizeInGb
274
+ }
275
+
276
+ const reservationInGb = $binary.mbToGb(newValue.reservation_mb)
277
+ if (reservationInGb < 1) {
278
+ reservation.value = newValue.reservation_mb
279
+ reservationType.value = 'mb'
280
+ } else {
281
+ reservation.value = reservationInGb
282
+ reservationType.value = 'gb'
283
+ }
284
+
285
+ if (typeof newValue.limit_mb === 'string') limit.value = newValue.limit_mb
286
+ else {
287
+ const limitInGb = $binary.mbToGb(newValue.limit_mb)
288
+ if (limitInGb < 1) {
289
+ limit.value = newValue.limit_mb
290
+ limitType.value = 'mb'
291
+ } else {
292
+ limit.value = limitInGb
293
+ limitType.value = 'gb'
294
+ }
295
+ }
296
+
297
+ memoryHotPlug.value = newValue.hotplug
298
+ },
299
+ { immediate: true }
300
+ )
301
+
302
+ const onRemoveValidationError = (): void => {
303
+ emits('remove-error-by-title', 'memory.size_mb')
304
+ }
305
+ </script>
306
+
307
+ <style scoped lang="scss"></style>