bfg-common 1.5.343 → 1.5.345

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 (171) 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_en.json +3 -3
  7. package/components/atoms/TheIcon3.vue +50 -50
  8. package/components/atoms/collapse/CollapseNav.vue +170 -170
  9. package/components/atoms/collapse/CollapseNavItem.vue +226 -226
  10. package/components/atoms/nav/NavBar.vue +147 -147
  11. package/components/atoms/perPage/PerPage.vue +58 -58
  12. package/components/atoms/table/dataGrid/DataGrid.vue +1717 -1717
  13. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  14. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  15. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  16. package/components/common/backup/storage/actions/add/lib/config/steps.ts +168 -168
  17. package/components/common/backup/storage/actions/add/steps/hostAccessibility/HostAccessibility.vue +52 -52
  18. package/components/common/backup/storage/actions/add/steps/readyComplete/ReadyComplete.vue +45 -45
  19. package/components/common/backup/storage/actions/delete/Delete.vue +65 -65
  20. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  21. package/components/common/browse/blocks/lib/models/types.ts +1 -1
  22. package/components/common/browse/lib/models/interfaces.ts +5 -5
  23. package/components/common/context/lib/models/interfaces.ts +33 -33
  24. package/components/common/diagramMain/DiagramMain.vue +897 -897
  25. package/components/common/diagramMain/adapter/AdapterItems.vue +61 -61
  26. package/components/common/diagramMain/lib/config/initial.ts +50 -50
  27. package/components/common/diagramMain/lib/models/types.ts +21 -21
  28. package/components/common/diagramMain/lib/utils/utils.ts +331 -331
  29. package/components/common/diagramMain/modals/editSettings/ConfirmTeamingSettingsModal.vue +40 -40
  30. package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +214 -214
  31. package/components/common/diagramMain/modals/editSettings/tabs/Security.vue +189 -189
  32. package/components/common/diagramMain/modals/editSettings/tabs/SwitchProperties.vue +163 -163
  33. package/components/common/diagramMain/modals/editSettings/tabs/TeamingFailover.vue +175 -175
  34. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +346 -346
  35. package/components/common/diagramMain/modals/lib/config/initial.ts +180 -180
  36. package/components/common/diagramMain/modals/lib/config/networkModal.ts +398 -398
  37. package/components/common/diagramMain/modals/lib/config/vmKernelAdapter.ts +90 -90
  38. package/components/common/diagramMain/modals/lib/mappers/mappers.ts +87 -87
  39. package/components/common/diagramMain/modals/lib/utils/index.ts +24 -24
  40. package/components/common/diagramMain/modals/migrateVmkernelAdapter/lib/config/steps.ts +114 -114
  41. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/ConnectionSettings.vue +169 -169
  42. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/SelectVmkernelAdapter.vue +159 -159
  43. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/common.ts +14 -14
  44. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/connectionSettings.ts +137 -137
  45. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/selectVmkernelAdapter.ts +52 -52
  46. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/validations.ts +19 -19
  47. package/components/common/diagramMain/network/Network.vue +141 -141
  48. package/components/common/diagramMain/port/Ports.vue +47 -47
  49. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  50. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  51. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  52. package/components/common/pages/home/headline/Headline.vue +45 -45
  53. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  54. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  55. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  56. package/components/common/pages/home/widgets/WidgetsNew.vue +88 -88
  57. package/components/common/pages/home/widgets/WidgetsOld.vue +36 -36
  58. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  59. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  60. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  61. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  62. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  63. package/components/common/pages/packages/Packages.vue +208 -208
  64. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  65. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  66. package/components/common/recursionTree/RecursionTree.vue +223 -223
  67. package/components/common/select/button/ButtonDropdown.vue +112 -112
  68. package/components/common/select/radio/RadioGroup.vue +135 -135
  69. package/components/common/spiceConsole/Drawer.vue +377 -377
  70. package/components/common/spiceConsole/SpiceConsole.vue +127 -127
  71. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  72. package/components/common/tools/Actions.vue +207 -207
  73. package/components/common/vm/actions/add/Add.vue +5 -5
  74. package/components/common/vm/actions/add/New.vue +3 -5
  75. package/components/common/vm/actions/add/Old.vue +388 -388
  76. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  77. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  78. package/components/common/vm/actions/add/folderTreeView/Old.vue +50 -50
  79. package/components/common/vm/actions/add/lib/config/steps.ts +50 -6
  80. package/components/common/vm/actions/clone/Clone.vue +823 -823
  81. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -291
  82. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +321 -321
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +227 -227
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +100 -100
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +78 -78
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/tooltip/TooltipNew.vue +154 -154
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/dropdownItems.ts +155 -155
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +307 -307
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +385 -385
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationOld.vue +85 -85
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +288 -288
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +94 -94
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCard.vue +154 -154
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  115. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +155 -155
  116. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +130 -130
  117. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsOld.vue +113 -113
  118. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  119. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  120. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +174 -174
  121. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptions.vue +95 -95
  122. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsOld.vue +155 -155
  123. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  124. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapOld.vue +44 -44
  125. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  126. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  127. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  128. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  129. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +118 -118
  130. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  131. package/components/common/vm/actions/common/select/createType/lib/config/items.ts +48 -48
  132. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  133. package/components/common/vm/actions/common/select/name/Name.vue +174 -174
  134. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  135. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  136. package/components/common/vm/actions/common/select/storage/new/New.vue +1 -0
  137. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  138. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  139. package/components/common/vm/actions/common/select/template/Template.vue +1 -1
  140. package/components/common/vm/actions/common/select/template/TemplateTreeView.vue +1 -1
  141. package/components/common/vm/actions/editSettings/EditSettings.vue +242 -242
  142. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  143. package/components/common/vmt/actions/add/lib/models/interfaces.ts +23 -23
  144. package/components/common/wizards/datastore/add/steps/hostAccessibility/table/new/New.vue +1 -14
  145. package/components/common/wizards/datastore/add/steps/hostAccessibility/table/new/lib/config/compatibleTable.ts +1 -0
  146. package/components/common/wizards/datastore/add/steps/nameAndDevice/NameAndDeviceNew.vue +0 -4
  147. package/components/common/wizards/datastore/add/steps/nameAndDevice/table/new/New.vue +33 -29
  148. package/components/common/wizards/datastore/add/steps/nameAndDevice/table/new/lib/config/lunDiskTable.ts +1 -2
  149. package/components/common/wizards/datastore/add/steps/readyComplete/ReadyCompleteNew.vue +7 -1
  150. package/components/common/wizards/datastore/add/steps/typeMode/TypeModeNew.vue +9 -9
  151. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +104 -104
  152. package/components/common/wizards/network/add/steps/SelectedTargetDevice.vue +467 -467
  153. package/components/common/wizards/vm/migrate/Migrate.vue +349 -349
  154. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  155. package/components/common/wizards/vm/migrate/lib/config/steps.ts +157 -157
  156. package/components/common/wizards/vm/migrate/lib/validations.ts +68 -68
  157. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  158. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  159. package/components/common/wizards/vm/migrate/select/type/lib/config/typeOptions.ts +45 -45
  160. package/composables/productNameLocal.ts +30 -30
  161. package/composables/useAppVersion.ts +21 -21
  162. package/package.json +1 -1
  163. package/plugins/date.ts +233 -233
  164. package/plugins/panelStates.ts +70 -70
  165. package/plugins/recursion.ts +31 -0
  166. package/plugins/text.ts +59 -59
  167. package/public/spice-console/lib/images/bitmap.js +203 -203
  168. package/public/spice-console/network/spicechannel.js +387 -387
  169. package/store/main/mutations.ts +7 -7
  170. package/store/main/state.ts +7 -7
  171. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -1,220 +1,220 @@
1
- <template>
2
- <common-vm-actions-common-customize-hardware-virtual-hardware-limit-new
3
- v-if="isNewView"
4
- v-model:limit="limitLocalByLocalization"
5
- v-model:limit-type="limitTypeLocal"
6
- :limit-errors-texts="limitLocalAndApiErrorsTexts"
7
- :component-type="props.componentType"
8
- :limit-options="limitOptionsLocal"
9
- :limit-type-options="limitTypeOptions"
10
- :disabled="props.disabled"
11
- @select-limit="onSelectLimit"
12
- @remove-error="onRemoveValidationError"
13
- />
14
- <common-vm-actions-common-customize-hardware-virtual-hardware-limit-old
15
- v-else
16
- v-model:limit="limitLocalByLocalization"
17
- v-model:limit-type="limitTypeLocal"
18
- :limit-errors-texts="limitLocalAndApiErrorsTexts"
19
- :component-type="props.componentType"
20
- :limit-options="limitOptionsLocal"
21
- :limit-type-options="limitTypeOptions"
22
- :disabled="props.disabled"
23
- @select-limit="onSelectLimit"
24
- @remove-error="onRemoveValidationError"
25
- />
26
- </template>
27
-
28
- <script setup lang="ts">
29
- import type { UI_I_Localization } from '~/lib/models/interfaces'
30
- import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
31
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
32
- import {
33
- limitOptionsFunc,
34
- limitTypeOptionsFunc,
35
- } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/lib/config/options'
36
-
37
- const props = withDefaults(
38
- defineProps<{
39
- limit: string
40
- limitType: string
41
- type: 'mb' | 'mhz'
42
- componentType: string
43
- errorValidationFields: UI_I_ErrorValidationField<string>[]
44
- disabled?: boolean
45
- limitOptions?: UI_I_OptionItem[]
46
- multiply?: number
47
- }>(),
48
- {
49
- limitOptions: undefined,
50
- multiply: 1,
51
- }
52
- )
53
- const emits = defineEmits<{
54
- (event: 'update:limit', value: string): void
55
- (event: 'update:limit-type', value: string): void
56
- (event: 'invalid', value: boolean): void
57
- (event: 'remove-error-by-title', value: string): void
58
- }>()
59
-
60
- const { $store }: any = useNuxtApp()
61
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
62
-
63
- const localization = computed<UI_I_Localization>(() => useLocal())
64
-
65
- const typeError = computed<string>(() => `${props.componentType}.limit_mb`)
66
-
67
- const apiErrorLocal = computed<string>(() => {
68
- return (
69
- props.errorValidationFields?.find(
70
- (message) => message.field === typeError.value
71
- )?.error_message || ''
72
- )
73
- })
74
-
75
- const binaryKeys: [string, string] =
76
- props.type === 'mb' ? ['mb', 'gb'] : ['mhz', 'ghz']
77
-
78
- const limitOptionsLocal = computed<UI_I_OptionItem[]>(
79
- () => props.limitOptions || limitOptionsFunc(localization.value, binaryKeys)
80
- )
81
- const limitTypeOptions = ref<UI_I_OptionItem[]>(
82
- limitTypeOptionsFunc(localization.value, binaryKeys)
83
- )
84
-
85
- const limitLocalByLocalization = computed<string>({
86
- get() {
87
- return limitLocal.value === 'Unlimited'
88
- ? localization.value.common.unlimited
89
- : limitLocal.value
90
- },
91
- set(newValue) {
92
- limitLocal.value =
93
- newValue === localization.value.common.unlimited ? 'Unlimited' : newValue
94
- },
95
- })
96
- const limitLocal = computed<string>({
97
- get() {
98
- return props.limit
99
- },
100
- set(newValue) {
101
- emits('update:limit', '' + newValue)
102
- },
103
- })
104
- const limitTypeLocal = computed<string>({
105
- get() {
106
- return props.limitType
107
- },
108
- set(newValue) {
109
- emits('update:limit-type', newValue)
110
- },
111
- })
112
-
113
- const { $binary } = useNuxtApp()
114
- const onSelectLimit = ({
115
- value,
116
- type,
117
- }: {
118
- value: number | 'Unlimited'
119
- type: string
120
- }): void => {
121
- limitLocal.value = '' + value
122
- if (limitTypeLocal.value !== type) {
123
- limitTypeLocal.value = type
124
- }
125
-
126
- // if (limitTypeLocal.value === binaryKeys[0] || value === 'Unlimited') {
127
- // limitLocal.value = '' + value
128
- // return
129
- // }
130
- //
131
- // limitLocal.value =
132
- // '' + $binary.universalFromTo(value, binaryKeys[0], binaryKeys[1], 8)
133
- }
134
-
135
- const limitErrorLocalText = computed<string>(() => {
136
- const valueForMin = $binary.universalFromTo(
137
- +limitLocal.value,
138
- limitTypeLocal.value,
139
- limitOptionsLocal.value[0].value.type,
140
- 0
141
- )
142
- const valueForMax = $binary.universalFromTo(
143
- +limitLocal.value,
144
- limitTypeLocal.value,
145
- limitOptionsLocal.value[1].value.type,
146
- 0
147
- )
148
- const minValue = limitOptionsLocal.value[0].value.value
149
- const maxValue = limitOptionsLocal.value[1].value.value
150
- if (valueForMin < minValue) {
151
- const minUnit =
152
- localization.value.common[limitOptionsLocal.value[0].value.type]
153
- return localization.value.common.limitMustBe.replace(
154
- '{0}',
155
- `${minValue} ${minUnit}`
156
- )
157
- }
158
- if (props.limitOptions && valueForMax > maxValue) {
159
- const maxUnit =
160
- localization.value.common[limitOptionsLocal.value[1].value.type]
161
- return localization.value.common.limitMustBeMax.replace(
162
- '{0}',
163
- `${maxValue} ${maxUnit}`
164
- )
165
- }
166
-
167
- const validValue = /^\d+(\.\d+)?$/.test(limitLocal.value)
168
- if (
169
- !validValue &&
170
- (limitLocal.value !== limitOptionsLocal.value[1].value.value ||
171
- props.limitOptions)
172
- ) {
173
- return localization.value.common.inputContainsInvalidCharacters
174
- }
175
-
176
- if (limitLocal.value !== 'Unlimited') {
177
- const value = $binary.universalFromTo(
178
- +limitLocal.value,
179
- limitTypeLocal.value,
180
- binaryKeys[0],
181
- 0
182
- )
183
- if (value % props.multiply !== 0) {
184
- return localization.value.common.valueShouldMultiple.replace(
185
- '{0}',
186
- `${props.multiply} ${binaryKeys[0].toUpperCase()}`
187
- )
188
- }
189
- }
190
-
191
- return ''
192
- })
193
- const limitInvalid = computed<boolean>(() => !!limitErrorLocalText.value)
194
- watch(
195
- limitInvalid,
196
- (newValue) => {
197
- emits('invalid', newValue)
198
- },
199
- { immediate: true }
200
- )
201
-
202
- const limitLocalAndApiErrorsTexts = computed<string>(() => {
203
- const localError = limitErrorLocalText.value
204
- const apiError = apiErrorLocal.value
205
-
206
- let result = ''
207
- if (localError && !apiError) result = localError
208
- if (!localError && apiError) result = apiError
209
- if (localError && apiError) result = localError + ', ' + apiError
210
- if (!localError && apiError) result = apiError
211
-
212
- return result
213
- })
214
-
215
- const onRemoveValidationError = (): void => {
216
- emits('remove-error-by-title', typeError.value)
217
- }
218
- </script>
219
-
220
- <style scoped></style>
1
+ <template>
2
+ <common-vm-actions-common-customize-hardware-virtual-hardware-limit-new
3
+ v-if="isNewView"
4
+ v-model:limit="limitLocalByLocalization"
5
+ v-model:limit-type="limitTypeLocal"
6
+ :limit-errors-texts="limitLocalAndApiErrorsTexts"
7
+ :component-type="props.componentType"
8
+ :limit-options="limitOptionsLocal"
9
+ :limit-type-options="limitTypeOptions"
10
+ :disabled="props.disabled"
11
+ @select-limit="onSelectLimit"
12
+ @remove-error="onRemoveValidationError"
13
+ />
14
+ <common-vm-actions-common-customize-hardware-virtual-hardware-limit-old
15
+ v-else
16
+ v-model:limit="limitLocalByLocalization"
17
+ v-model:limit-type="limitTypeLocal"
18
+ :limit-errors-texts="limitLocalAndApiErrorsTexts"
19
+ :component-type="props.componentType"
20
+ :limit-options="limitOptionsLocal"
21
+ :limit-type-options="limitTypeOptions"
22
+ :disabled="props.disabled"
23
+ @select-limit="onSelectLimit"
24
+ @remove-error="onRemoveValidationError"
25
+ />
26
+ </template>
27
+
28
+ <script setup lang="ts">
29
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
30
+ import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
31
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
32
+ import {
33
+ limitOptionsFunc,
34
+ limitTypeOptionsFunc,
35
+ } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/lib/config/options'
36
+
37
+ const props = withDefaults(
38
+ defineProps<{
39
+ limit: string
40
+ limitType: string
41
+ type: 'mb' | 'mhz'
42
+ componentType: string
43
+ errorValidationFields: UI_I_ErrorValidationField<string>[]
44
+ disabled?: boolean
45
+ limitOptions?: UI_I_OptionItem[]
46
+ multiply?: number
47
+ }>(),
48
+ {
49
+ limitOptions: undefined,
50
+ multiply: 1,
51
+ }
52
+ )
53
+ const emits = defineEmits<{
54
+ (event: 'update:limit', value: string): void
55
+ (event: 'update:limit-type', value: string): void
56
+ (event: 'invalid', value: boolean): void
57
+ (event: 'remove-error-by-title', value: string): void
58
+ }>()
59
+
60
+ const { $store }: any = useNuxtApp()
61
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
62
+
63
+ const localization = computed<UI_I_Localization>(() => useLocal())
64
+
65
+ const typeError = computed<string>(() => `${props.componentType}.limit_mb`)
66
+
67
+ const apiErrorLocal = computed<string>(() => {
68
+ return (
69
+ props.errorValidationFields?.find(
70
+ (message) => message.field === typeError.value
71
+ )?.error_message || ''
72
+ )
73
+ })
74
+
75
+ const binaryKeys: [string, string] =
76
+ props.type === 'mb' ? ['mb', 'gb'] : ['mhz', 'ghz']
77
+
78
+ const limitOptionsLocal = computed<UI_I_OptionItem[]>(
79
+ () => props.limitOptions || limitOptionsFunc(localization.value, binaryKeys)
80
+ )
81
+ const limitTypeOptions = ref<UI_I_OptionItem[]>(
82
+ limitTypeOptionsFunc(localization.value, binaryKeys)
83
+ )
84
+
85
+ const limitLocalByLocalization = computed<string>({
86
+ get() {
87
+ return limitLocal.value === 'Unlimited'
88
+ ? localization.value.common.unlimited
89
+ : limitLocal.value
90
+ },
91
+ set(newValue) {
92
+ limitLocal.value =
93
+ newValue === localization.value.common.unlimited ? 'Unlimited' : newValue
94
+ },
95
+ })
96
+ const limitLocal = computed<string>({
97
+ get() {
98
+ return props.limit
99
+ },
100
+ set(newValue) {
101
+ emits('update:limit', '' + newValue)
102
+ },
103
+ })
104
+ const limitTypeLocal = computed<string>({
105
+ get() {
106
+ return props.limitType
107
+ },
108
+ set(newValue) {
109
+ emits('update:limit-type', newValue)
110
+ },
111
+ })
112
+
113
+ const { $binary } = useNuxtApp()
114
+ const onSelectLimit = ({
115
+ value,
116
+ type,
117
+ }: {
118
+ value: number | 'Unlimited'
119
+ type: string
120
+ }): void => {
121
+ limitLocal.value = '' + value
122
+ if (limitTypeLocal.value !== type) {
123
+ limitTypeLocal.value = type
124
+ }
125
+
126
+ // if (limitTypeLocal.value === binaryKeys[0] || value === 'Unlimited') {
127
+ // limitLocal.value = '' + value
128
+ // return
129
+ // }
130
+ //
131
+ // limitLocal.value =
132
+ // '' + $binary.universalFromTo(value, binaryKeys[0], binaryKeys[1], 8)
133
+ }
134
+
135
+ const limitErrorLocalText = computed<string>(() => {
136
+ const valueForMin = $binary.universalFromTo(
137
+ +limitLocal.value,
138
+ limitTypeLocal.value,
139
+ limitOptionsLocal.value[0].value.type,
140
+ 0
141
+ )
142
+ const valueForMax = $binary.universalFromTo(
143
+ +limitLocal.value,
144
+ limitTypeLocal.value,
145
+ limitOptionsLocal.value[1].value.type,
146
+ 0
147
+ )
148
+ const minValue = limitOptionsLocal.value[0].value.value
149
+ const maxValue = limitOptionsLocal.value[1].value.value
150
+ if (valueForMin < minValue) {
151
+ const minUnit =
152
+ localization.value.common[limitOptionsLocal.value[0].value.type]
153
+ return localization.value.common.limitMustBe.replace(
154
+ '{0}',
155
+ `${minValue} ${minUnit}`
156
+ )
157
+ }
158
+ if (props.limitOptions && valueForMax > maxValue) {
159
+ const maxUnit =
160
+ localization.value.common[limitOptionsLocal.value[1].value.type]
161
+ return localization.value.common.limitMustBeMax.replace(
162
+ '{0}',
163
+ `${maxValue} ${maxUnit}`
164
+ )
165
+ }
166
+
167
+ const validValue = /^\d+(\.\d+)?$/.test(limitLocal.value)
168
+ if (
169
+ !validValue &&
170
+ (limitLocal.value !== limitOptionsLocal.value[1].value.value ||
171
+ props.limitOptions)
172
+ ) {
173
+ return localization.value.common.inputContainsInvalidCharacters
174
+ }
175
+
176
+ if (limitLocal.value !== 'Unlimited') {
177
+ const value = $binary.universalFromTo(
178
+ +limitLocal.value,
179
+ limitTypeLocal.value,
180
+ binaryKeys[0],
181
+ 0
182
+ )
183
+ if (value % props.multiply !== 0) {
184
+ return localization.value.common.valueShouldMultiple.replace(
185
+ '{0}',
186
+ `${props.multiply} ${binaryKeys[0].toUpperCase()}`
187
+ )
188
+ }
189
+ }
190
+
191
+ return ''
192
+ })
193
+ const limitInvalid = computed<boolean>(() => !!limitErrorLocalText.value)
194
+ watch(
195
+ limitInvalid,
196
+ (newValue) => {
197
+ emits('invalid', newValue)
198
+ },
199
+ { immediate: true }
200
+ )
201
+
202
+ const limitLocalAndApiErrorsTexts = computed<string>(() => {
203
+ const localError = limitErrorLocalText.value
204
+ const apiError = apiErrorLocal.value
205
+
206
+ let result = ''
207
+ if (localError && !apiError) result = localError
208
+ if (!localError && apiError) result = apiError
209
+ if (localError && apiError) result = localError + ', ' + apiError
210
+ if (!localError && apiError) result = apiError
211
+
212
+ return result
213
+ })
214
+
215
+ const onRemoveValidationError = (): void => {
216
+ emits('remove-error-by-title', typeError.value)
217
+ }
218
+ </script>
219
+
220
+ <style scoped></style>