bfg-common 1.5.293 → 1.5.294

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/localization/local_en.json +1 -1
  7. package/components/atoms/TheIcon3.vue +50 -50
  8. package/components/atoms/perPage/PerPage.vue +58 -58
  9. package/components/atoms/table/dataGrid/DataGrid.vue +1717 -1717
  10. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  11. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  12. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  13. package/components/common/backup/storage/actions/add/lib/config/steps.ts +168 -168
  14. package/components/common/backup/storage/actions/add/steps/hostAccessibility/HostAccessibility.vue +52 -52
  15. package/components/common/backup/storage/actions/add/steps/nameAndConfigure/NameAndConfigure.vue +42 -42
  16. package/components/common/backup/storage/actions/add/steps/readyComplete/ReadyComplete.vue +45 -45
  17. package/components/common/backup/storage/actions/add/steps/readyComplete/lib/config/propertiesDetails.ts +243 -243
  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 +31 -31
  21. package/components/common/diagramMain/DiagramMain.vue +897 -897
  22. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  23. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  24. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  25. package/components/common/pages/home/headline/Headline.vue +45 -45
  26. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  27. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  28. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  29. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  30. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  31. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  32. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  33. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  34. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  35. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  36. package/components/common/pages/packages/Packages.vue +208 -208
  37. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  38. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  39. package/components/common/recursionTree/RecursionTree.vue +223 -223
  40. package/components/common/select/button/ButtonDropdown.vue +108 -108
  41. package/components/common/spiceConsole/Drawer.vue +377 -377
  42. package/components/common/spiceConsole/SpiceConsole.vue +127 -127
  43. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  44. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  45. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  46. package/components/common/vm/actions/add/folderTreeView/Old.vue +50 -50
  47. package/components/common/vm/actions/clone/Clone.vue +817 -817
  48. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -291
  49. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  50. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +321 -321
  51. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +227 -227
  52. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +100 -100
  53. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  54. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +3 -3
  55. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  56. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  57. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +78 -78
  58. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/model/ModelNew.vue +26 -24
  60. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  61. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  62. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/tooltip/TooltipNew.vue +154 -154
  63. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  64. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +307 -307
  65. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +385 -385
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +3 -3
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/file/FileNew.vue +1 -1
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationOld.vue +85 -85
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/maximumSize/MaximumSizeNew.vue +6 -0
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +288 -288
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +94 -94
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +1 -1
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/inputDevices/InputDevicesNew.vue +45 -40
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCard.vue +154 -154
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplaysNew.vue +1 -1
  89. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  90. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/DelayNew.vue +1 -1
  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/firmware/FirmwareNew.vue +1 -1
  93. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +1 -1
  94. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +174 -174
  95. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +3 -3
  96. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +31 -31
  97. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +31 -31
  98. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +1 -1
  99. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  100. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +1 -1
  101. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  102. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +128 -128
  103. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  104. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +1 -1
  105. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  106. package/components/common/vm/actions/common/customizeHardware/vmoptions/tools/ToolsNew.vue +1 -1
  107. package/components/common/vm/actions/common/lib/utils/capabilities.ts +52 -52
  108. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  109. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +118 -118
  110. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  111. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  112. package/components/common/vm/actions/common/select/name/Name.vue +174 -174
  113. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  114. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  115. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  116. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  117. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  118. package/components/common/vmt/actions/add/Add.vue +641 -641
  119. package/components/common/vmt/actions/add/lib/config/steps.ts +107 -107
  120. package/components/common/vmt/actions/add/lib/models/interfaces.ts +23 -23
  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/composables/productNameLocal.ts +30 -30
  127. package/composables/useAppVersion.ts +21 -21
  128. package/package.json +2 -2
  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,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>