bfg-common 1.5.351 → 1.5.353

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 (139) 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/collapse/CollapseNavItem.vue +226 -226
  9. package/components/atoms/nav/NavBar.vue +2 -10
  10. package/components/atoms/perPage/PerPage.vue +58 -58
  11. package/components/atoms/table/dataGrid/DataGrid.vue +1717 -1717
  12. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  13. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  14. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  15. package/components/common/backup/storage/actions/add/lib/config/steps.ts +168 -168
  16. package/components/common/backup/storage/actions/add/steps/hostAccessibility/HostAccessibility.vue +52 -52
  17. package/components/common/backup/storage/actions/add/steps/readyComplete/ReadyComplete.vue +45 -45
  18. package/components/common/backup/storage/actions/delete/Delete.vue +65 -65
  19. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  20. package/components/common/context/lib/models/interfaces.ts +33 -33
  21. package/components/common/diagramMain/DiagramMain.vue +897 -897
  22. package/components/common/diagramMain/modals/lib/config/networkModal.ts +398 -398
  23. package/components/common/diagramMain/network/Network.vue +141 -141
  24. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  25. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  26. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  27. package/components/common/pages/home/headline/Headline.vue +45 -45
  28. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  29. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  30. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  31. package/components/common/pages/home/widgets/WidgetsNew.vue +88 -88
  32. package/components/common/pages/home/widgets/WidgetsOld.vue +36 -36
  33. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  34. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  35. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  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/packages/Packages.vue +208 -208
  39. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  40. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  41. package/components/common/recursionTree/RecursionTree.vue +223 -223
  42. package/components/common/select/button/ButtonDropdown.vue +112 -112
  43. package/components/common/select/radio/RadioGroup.vue +135 -135
  44. package/components/common/spiceConsole/Drawer.vue +377 -377
  45. package/components/common/spiceConsole/SpiceConsole.vue +127 -127
  46. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  47. package/components/common/tools/Actions.vue +207 -207
  48. package/components/common/vm/actions/add/Old.vue +388 -388
  49. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  50. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  51. package/components/common/vm/actions/add/folderTreeView/Old.vue +50 -50
  52. package/components/common/vm/actions/clone/Clone.vue +823 -823
  53. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -291
  54. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  55. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +321 -321
  56. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +227 -227
  57. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +100 -100
  58. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  60. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  61. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +78 -78
  62. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  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/cpu/tooltip/TooltipNew.vue +154 -154
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/dropdownItems.ts +155 -155
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +307 -307
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +385 -385
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationOld.vue +85 -85
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/{StorageModalNew.vue → storageModal/new/New.vue} +5 -1
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/storageModal/new/lib/config/table.ts +15 -0
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +288 -288
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +19 -12
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -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/Storage.vue +155 -152
  112. package/components/common/vm/actions/common/select/storage/new/New.vue +294 -290
  113. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  114. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  115. package/components/common/vm/actions/editSettings/EditSettings.vue +242 -242
  116. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  117. package/components/common/vmt/actions/add/lib/models/interfaces.ts +23 -23
  118. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +104 -104
  119. package/components/common/wizards/network/add/steps/SelectedTargetDevice.vue +467 -467
  120. package/components/common/wizards/vm/migrate/Migrate.vue +349 -349
  121. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  122. package/components/common/wizards/vm/migrate/lib/config/steps.ts +157 -157
  123. package/components/common/wizards/vm/migrate/lib/validations.ts +68 -68
  124. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  125. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  126. package/components/common/wizards/vm/migrate/select/type/lib/config/typeOptions.ts +45 -45
  127. package/composables/productNameLocal.ts +30 -30
  128. package/composables/useAppVersion.ts +21 -21
  129. package/package.json +1 -1
  130. package/plugins/date.ts +233 -233
  131. package/plugins/panelStates.ts +70 -70
  132. package/plugins/text.ts +59 -59
  133. package/public/spice-console/lib/images/bitmap.js +203 -203
  134. package/public/spice-console/network/spicechannel.js +387 -387
  135. package/store/main/mutations.ts +7 -7
  136. package/store/main/state.ts +7 -7
  137. package/store/tasks/mappers/recentTasks.ts +64 -64
  138. /package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/{StorageModalOld.vue → storageModal/Old.vue} +0 -0
  139. /package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/{StorageModal.vue → storageModal/StorageModal.vue} +0 -0
@@ -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>