bfg-common 1.5.26 → 1.5.28

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 (168) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/scss/common/normalize.scss +339 -339
  3. package/components/atoms/TheIcon3.vue +50 -50
  4. package/components/atoms/collapse/CollapseNav.vue +165 -165
  5. package/components/atoms/dropdown/dropdown/Dropdown.vue +168 -168
  6. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  7. package/components/atoms/perPage/PerPage.vue +58 -58
  8. package/components/atoms/stack/StackBlock.vue +185 -185
  9. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  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/atoms/tooltip/Signpost.vue +227 -227
  14. package/components/atoms/tooltip/Signpost.vue~ +229 -229
  15. package/components/common/accordion/Recursion.vue +222 -222
  16. package/components/common/browse/BrowseNew.vue +237 -237
  17. package/components/common/browse/BrowseOld.vue +217 -217
  18. package/components/common/browse/blocks/contents/Files.vue +37 -37
  19. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  20. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  21. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  22. package/components/common/context/Context.vue +111 -111
  23. package/components/common/context/lib/models/interfaces.ts +31 -31
  24. package/components/common/context/recursion/Recursion.vue +87 -87
  25. package/components/common/context/recursion/RecursionNew.vue +238 -238
  26. package/components/common/context/recursion/RecursionOld.vue +228 -228
  27. package/components/common/details/DetailsItem.vue +109 -109
  28. package/components/common/diagramMain/DiagramMain.vue +897 -897
  29. package/components/common/diagramMain/Header.vue +214 -214
  30. package/components/common/graph/Graph.vue +104 -120
  31. package/components/common/graph/GraphNew.vue +179 -0
  32. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  33. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  34. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  35. package/components/common/mainNavigationPanel/MainNavigationPanelNew.vue +336 -336
  36. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +311 -311
  37. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  38. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/lib/config/utils.ts +1040 -1040
  39. package/components/common/monitor/overview/Overview.vue +0 -1
  40. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  41. package/components/common/pages/home/StatusContent.vue +49 -49
  42. package/components/common/pages/home/headline/Headline.vue +45 -45
  43. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  44. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  45. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  46. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  47. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  48. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  49. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  50. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  51. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  52. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  53. package/components/common/pages/packages/Packages.vue +208 -208
  54. package/components/common/pages/shortcuts/block/BlockNew.vue +96 -96
  55. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  56. package/components/common/portlets/customAttributes/Portlet.vue +667 -667
  57. package/components/common/portlets/tag/Portlet.vue +433 -433
  58. package/components/common/recursionTree/RecursionTree.vue +223 -223
  59. package/components/common/select/button/ButtonDropdown.vue +108 -108
  60. package/components/common/spiceConsole/Drawer.vue +370 -370
  61. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  62. package/components/common/split/horizontal/HorizontalNew.vue +376 -376
  63. package/components/common/split/horizontal/HorizontalOld.vue +337 -337
  64. package/components/common/split/vertical/Vertical.vue +160 -160
  65. package/components/common/tools/Actions.vue +188 -188
  66. package/components/common/vm/actions/add/Add.vue +622 -622
  67. package/components/common/vm/actions/clone/Clone.vue +639 -639
  68. package/components/common/vm/actions/clone/lib/config/steps.ts +129 -129
  69. package/components/common/vm/actions/clone/toTemplate/ToTemplate.vue +634 -634
  70. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  71. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +275 -275
  72. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +274 -274
  73. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +177 -177
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +698 -698
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +410 -410
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +319 -319
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +99 -99
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +164 -164
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +368 -368
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +232 -232
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +250 -250
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +286 -286
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  117. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  118. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  119. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  120. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  121. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  122. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  123. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  124. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  125. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  126. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  127. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  128. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  129. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  130. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  131. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  132. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  133. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  134. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  135. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  136. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  137. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  138. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  139. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  140. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  141. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  142. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  143. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  144. package/components/common/wizards/datastore/add/lib/config/steps.ts +138 -138
  145. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +60 -60
  146. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +92 -92
  147. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +105 -105
  148. package/components/common/wizards/vm/migrate/Migrate.vue +302 -302
  149. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  150. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  151. package/components/common/wizards/vm/migrate/select/network/table/network/Network.vue +150 -150
  152. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  153. package/components/common/wizards/vm/migrate/select/priority/Priority.vue +43 -43
  154. package/composables/productNameLocal.ts +30 -30
  155. package/composables/useAppVersion.ts +21 -21
  156. package/package.json +3 -3
  157. package/package.json~ +3 -3
  158. package/plugins/date.ts +233 -233
  159. package/plugins/directives.ts +24 -24
  160. package/public/spice-console/lib/images/bitmap.js +203 -203
  161. package/public/spice-console/network/spicechannel.js +383 -383
  162. package/store/main/mutations.ts +7 -7
  163. package/store/main/state.ts +7 -7
  164. package/store/tasks/mappers/recentTasks.ts +64 -64
  165. package/components/common/graph/Graph.vue~ +0 -104
  166. package/components/common/graph/graphNew/GraphNew.vue +0 -194
  167. package/components/common/graph/graphNew/lib/models/enums.ts +0 -9
  168. package/components/common/monitor/overview/Overview.vue~ +0 -132
@@ -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>