bfg-common 1.5.539 → 1.5.540

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 (158) 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/perPage/PerPage.vue +58 -58
  9. package/components/atoms/table/dataGrid/DataGrid.vue +1718 -1718
  10. package/components/atoms/table/dataGrid/DataGridPagination.vue +97 -97
  11. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  12. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  13. package/components/common/backup/storage/actions/add/Add.vue +251 -251
  14. package/components/common/backup/storage/actions/add/lib/utils.ts +51 -51
  15. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  16. package/components/common/diagramMain/modals/lib/config/portModal.ts +251 -251
  17. package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
  18. package/components/common/diagramMain/port/Port.vue +580 -580
  19. package/components/common/layout/theHeader/helpMenu/About.vue +79 -79
  20. package/components/common/layout/theHeader/helpMenu/aboutOld/AboutOld.vue +79 -79
  21. package/components/common/pages/backups/DetailView.vue +52 -52
  22. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  23. package/components/common/pages/backups/modals/Modals.vue +243 -243
  24. package/components/common/pages/backups/modals/createBackup/CreateBackup.vue +195 -195
  25. package/components/common/pages/backups/modals/createBackup/configuration/backupWindow/BackupWindow.vue +29 -29
  26. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/MaxBandwidth.vue +69 -69
  27. package/components/common/pages/backups/modals/createBackup/configuration/strategy/Strategy.vue +38 -38
  28. package/components/common/pages/backups/modals/createBackup/datastores/tableView/new/TableView.vue +3 -3
  29. package/components/common/pages/backups/modals/createBackup/disks/tableView/new/lib/config/table.ts +1 -0
  30. package/components/common/pages/backups/modals/createBackup/lib/config/readyToCompleteOptions.ts +69 -69
  31. package/components/common/pages/backups/modals/createBackup/lib/models/interfaces.ts +8 -8
  32. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  33. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  34. package/components/common/pages/backups/modals/restore/Restore.vue +78 -196
  35. package/components/common/pages/backups/modals/restore/RestoreNew.vue +289 -0
  36. package/components/common/pages/backups/modals/restore/RestoreOld.vue +173 -0
  37. package/components/common/pages/backups/modals/restore/disks/Disks.vue +32 -27
  38. package/components/common/pages/backups/modals/restore/disks/DisksNew.vue +17 -0
  39. package/components/common/pages/backups/modals/restore/disks/DisksOld.vue +21 -0
  40. package/components/common/pages/backups/modals/restore/disks/tableView/new/Table.vue +126 -0
  41. package/components/common/pages/backups/modals/restore/disks/tableView/new/lib/config/table.ts +175 -0
  42. package/components/common/pages/backups/modals/restore/disks/tableView/{TableView.vue → old/Table.vue} +6 -3
  43. package/components/common/pages/backups/modals/restore/disks/tableView/{lib → old/lib}/config/keys.ts +1 -1
  44. package/components/common/pages/backups/modals/restore/disks/tableView/{lib → old/lib}/config/table.ts +117 -117
  45. package/components/common/pages/backups/modals/restore/disks/tableView/{lib → old/lib}/models/types.ts +1 -1
  46. package/components/common/pages/backups/modals/restore/lib/config/readyToCompleteOptions.ts +62 -0
  47. package/components/common/pages/backups/modals/restore/lib/config/steps.ts +21 -21
  48. package/components/common/pages/backups/modals/restore/name/Name.vue +31 -166
  49. package/components/common/pages/backups/modals/restore/name/NameNew.vue +98 -0
  50. package/components/common/pages/backups/modals/restore/name/NameOld.vue +86 -0
  51. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  52. package/components/common/pages/backups/modals/restore/networks/Networks.vue +63 -70
  53. package/components/common/pages/backups/modals/restore/networks/NetworksNew.vue +78 -0
  54. package/components/common/pages/backups/modals/restore/networks/NetworksOld.vue +48 -0
  55. package/components/common/pages/backups/modals/restore/networks/table/new/Table.vue +269 -0
  56. package/components/common/pages/backups/modals/restore/networks/table/new/lib/config/table.ts +127 -0
  57. package/components/common/pages/backups/modals/restore/networks/table/{Table.vue → old/Table.vue} +219 -214
  58. package/components/common/pages/backups/modals/restore/networks/table/{adapterType → old/adapterType}/AdapterType.vue +1 -1
  59. package/components/common/pages/backups/modals/restore/networks/table/{lib → old/lib}/config/networkTable.ts +1 -1
  60. package/components/common/pages/backups/modals/restore/networks/table/old/lib/config/tableKeys.ts +8 -0
  61. package/components/common/pages/backups/modals/restore/types/Types.vue +9 -50
  62. package/components/common/pages/backups/modals/restore/types/TypesNew.vue +95 -0
  63. package/components/common/pages/backups/modals/restore/types/TypesOld.vue +61 -0
  64. package/components/common/pages/backups/modals/restore/types/lib/config/descriptions.ts +1 -0
  65. package/components/common/pages/backups/modals/restore/types/lib/config/typeOptions.ts +25 -25
  66. package/components/common/pages/backups/modals/restore/validation/validation.ts +108 -0
  67. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  68. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  69. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  70. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  71. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  72. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  73. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  74. package/components/common/select/radio/RadioGroup.vue +137 -137
  75. package/components/common/spiceConsole/Drawer.vue +420 -420
  76. package/components/common/spiceConsole/SpiceConsole.vue +184 -184
  77. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  78. package/components/common/tools/Actions.vue +207 -207
  79. package/components/common/treeView/TreeView.vue +52 -52
  80. package/components/common/vm/actions/add/Add.vue +949 -950
  81. package/components/common/vm/actions/add/New.vue +689 -690
  82. package/components/common/vm/actions/add/Old.vue +400 -402
  83. package/components/common/vm/actions/add/lib/config/steps.ts +347 -347
  84. package/components/common/vm/actions/clone/Clone.vue +808 -809
  85. package/components/common/vm/actions/clone/new/New.vue +454 -457
  86. package/components/common/vm/actions/clone/old/Old.vue +378 -378
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +368 -368
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +427 -427
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  96. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  97. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  98. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +174 -174
  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/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/select/compatibility/Old.vue +107 -107
  103. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  104. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  105. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  106. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  107. package/components/common/vm/actions/common/select/storage/Old.vue +132 -125
  108. package/components/common/vm/actions/common/select/storage/Storage.vue +167 -178
  109. package/components/common/vm/actions/common/select/storage/new/New.vue +330 -311
  110. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  111. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  112. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  113. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  114. package/components/common/vm/actions/register/Register.vue +352 -352
  115. package/components/common/vm/actions/register/lib/config/steps.ts +86 -86
  116. package/components/common/wizards/common/steps/computeResource/ComputeResource.vue +85 -86
  117. package/components/common/wizards/common/steps/computeResource/New.vue +92 -93
  118. package/components/common/wizards/common/steps/computeResource/Old.vue +102 -103
  119. package/components/common/wizards/common/{compatibility → steps/computeResource/compatibility}/Compatibility.vue +31 -35
  120. package/components/common/wizards/common/{compatibility → steps/computeResource/compatibility}/New.vue +98 -99
  121. package/components/common/wizards/common/{compatibility → steps/computeResource/compatibility}/Old.vue +54 -53
  122. package/components/common/wizards/common/{compatibility → steps/computeResource/compatibility}/lib/models/enums.ts +1 -1
  123. package/components/common/wizards/common/steps/name/Name.vue +178 -178
  124. package/components/common/wizards/common/steps/name/New.vue +221 -221
  125. package/components/common/wizards/common/steps/name/Old.vue +121 -121
  126. package/components/common/wizards/common/steps/name/lib/models/interfaces.ts +4 -4
  127. package/components/common/wizards/common/steps/name/location/Location.vue +85 -85
  128. package/components/common/wizards/common/steps/name/location/New.vue +40 -40
  129. package/components/common/wizards/datastore/add/Add.vue +228 -228
  130. package/components/common/wizards/datastore/add/lib/utils.ts +85 -85
  131. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  132. package/components/common/wizards/vm/migrate/select/computeResource/ComputeResource.vue +195 -205
  133. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  134. package/components/common/wizards/vm/migrate/select/storage/Storage.vue +1 -1
  135. package/composables/useAppVersion.ts +21 -21
  136. package/composables/useLocal.ts +6 -6
  137. package/composables/useLocalCommon.ts +39 -39
  138. package/package.json +1 -1
  139. package/plugins/console.ts +21 -21
  140. package/plugins/date.ts +233 -233
  141. package/plugins/mouse.ts +21 -21
  142. package/plugins/panelStates.ts +70 -70
  143. package/plugins/text.ts +59 -59
  144. package/public/spice-console/application/clientgui.js +854 -854
  145. package/public/spice-console/application/packetfactory.js +211 -211
  146. package/public/spice-console/application/virtualmouse.js +147 -147
  147. package/public/spice-console/lib/images/bitmap.js +203 -203
  148. package/public/spice-console/network/spicechannel.js +440 -440
  149. package/public/spice-console/process/cursorprocess.js +121 -121
  150. package/public/spice-console/process/inputprocess.js +227 -227
  151. package/public/spice-console/process/mainprocess.js +210 -210
  152. package/public/spice-console/run.js +210 -210
  153. package/store/main/mutations.ts +7 -7
  154. package/store/main/state.ts +7 -7
  155. package/components/common/pages/backups/modals/restore/networks/table/lib/config/tableKeys.ts +0 -10
  156. package/components/common/wizards/common/compatibility/lib/models/types.ts +0 -1
  157. /package/components/common/pages/backups/modals/restore/networks/table/{adapterType → old/adapterType}/lib/config/options.ts +0 -0
  158. /package/components/common/pages/backups/modals/restore/networks/table/{lib → old/lib}/models/types.ts +0 -0
@@ -1,178 +1,178 @@
1
- <template>
2
- <common-wizards-common-steps-name-new
3
- v-if="isNewView"
4
- v-model:name="name"
5
- v-model:location="location"
6
- :has-location="props.hasLocation"
7
- :errors="errors"
8
- :location-nodes="props.locationNodes"
9
- :test-ids="props.testIds"
10
- @remove-validation-errors="onRemoveValidationErrors"
11
- />
12
- <common-wizards-common-steps-name-old
13
- v-else
14
- v-model:name="name"
15
- v-model:location="location"
16
- :has-location="props.hasLocation"
17
- :errors="errors"
18
- :location-nodes="props.locationNodes"
19
- :location-description="props.locationDescription"
20
- :test-ids="props.testIds"
21
- @remove-validation-errors="onRemoveValidationErrors"
22
- />
23
- </template>
24
-
25
- <script setup lang="ts">
26
- import type { API_UI_I_Error } from '~/lib/models/store/interfaces'
27
- import type { UI_I_Localization } from '~/lib/models/interfaces'
28
- import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
29
- import type { UI_I_NameTestIds } from '~/components/common/wizards/common/steps/name/lib/models/interfaces'
30
-
31
- const name = defineModel<string>('name', { required: true })
32
- const location = defineModel<UI_I_TreeNode | null>('location') // для сферы
33
-
34
- const props = withDefaults(
35
- defineProps<{
36
- show: boolean
37
- nameFormSubmit: null | Function
38
- nameRequestUrl: string
39
- nameExistValidationDescription: string
40
- testIds: UI_I_NameTestIds
41
- validationDescription?: string
42
- hasLocation?: boolean
43
- validateEmptyName?: boolean
44
- locationNodes?: UI_I_TreeNode[]
45
- locationDescription?: string
46
- allowedLocationKinds?: number[]
47
- }>(),
48
- {
49
- hasLocation: false,
50
- validateEmptyName: false,
51
- locationDescription: '',
52
- locationNodes: () => [],
53
- allowedLocationKinds: () => [],
54
- }
55
- )
56
- const emits = defineEmits<{
57
- (event: 'submit', value: [string, UI_I_TreeNode | null]): void
58
- (event: 'has-errors', value: boolean): void
59
- }>()
60
-
61
- const { $store }: any = useNuxtApp()
62
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
63
-
64
- const localization = computed<UI_I_Localization>(() => useLocal())
65
-
66
- watch(
67
- () => props.nameFormSubmit,
68
- (newValue) => {
69
- newValue && submit(newValue)
70
- }
71
- )
72
-
73
- // TODO defineExpose({
74
- // submit,
75
- // })
76
- const submit = async (cb: Function): Promise<void> => {
77
- if (props.validateEmptyName && name.value === '') {
78
- showValidationErrors([
79
- localization.value.common.emptyNameValidationDescription,
80
- ])
81
- cb(false)
82
- return
83
- }
84
- if (name.value !== '') {
85
- const isNameValid = await checkNameIsValid(name.value)
86
- if (!isNameValid) {
87
- cb(false)
88
- return
89
- }
90
- }
91
-
92
- if (props.hasLocation) {
93
- if (
94
- !location.value ||
95
- (location.value &&
96
- !props.allowedLocationKinds.includes(location.value.kind))
97
- ) {
98
- showValidationErrors([
99
- props.validationDescription,
100
- ])
101
- cb(false)
102
- return
103
- }
104
- }
105
-
106
- onRemoveValidationErrors()
107
- emits('submit', [name.value, location.value])
108
- cb(true)
109
- }
110
- const checkNameIsValid = async (nameLocal: string): Promise<boolean> => {
111
- const nameRequestUrlLocal = props.nameRequestUrl.replace('{name}', nameLocal)
112
- const { error } = await useMyFetch<null, API_UI_I_Error>(
113
- nameRequestUrlLocal,
114
- {
115
- method: 'GET',
116
- }
117
- )
118
- const status = error.value?.statusCode || 200
119
- switch (status) {
120
- case 400: // Empty name
121
- showValidationErrors([
122
- localization.value.common.emptyNameValidationDescription,
123
- ])
124
- return false
125
- case 405: // Invalid kind
126
- showValidationErrors([
127
- localization.value.common.kindValidationDescription,
128
- ])
129
- return false
130
- case 406: // Invalid name
131
- showValidationErrors([
132
- localization.value.common.nameValidationDescription,
133
- ])
134
- return false
135
- case 409: // Name exist
136
- showValidationErrors([
137
- props.nameExistValidationDescription,
138
- ])
139
- return false
140
- }
141
-
142
- return true
143
- }
144
-
145
- const errors = ref<string[]>([])
146
- const showValidationErrors = (data: string[]): void => {
147
- errors.value = data
148
- }
149
- const onRemoveValidationErrors = (): void => {
150
- errors.value = []
151
- }
152
- watch(
153
- errors,
154
- (newValue) => {
155
- emits('has-errors', !newValue.length)
156
- },
157
- { immediate: true, deep: true }
158
- )
159
-
160
- // TODO defineExpose({
161
- // focusNameInput,
162
- // })
163
- watch(
164
- () => props.show,
165
- (newValue) => {
166
- if (!newValue) return
167
-
168
- const input = document.getElementById('virtual-machine-name')
169
- if (!input) return
170
-
171
- setTimeout(() => {
172
- input.focus()
173
- }, 0)
174
- }
175
- )
176
- </script>
177
-
178
- <style scoped lang="scss"></style>
1
+ <template>
2
+ <common-wizards-common-steps-name-new
3
+ v-if="isNewView"
4
+ v-model:name="name"
5
+ v-model:location="location"
6
+ :has-location="props.hasLocation"
7
+ :errors="errors"
8
+ :location-nodes="props.locationNodes"
9
+ :test-ids="props.testIds"
10
+ @remove-validation-errors="onRemoveValidationErrors"
11
+ />
12
+ <common-wizards-common-steps-name-old
13
+ v-else
14
+ v-model:name="name"
15
+ v-model:location="location"
16
+ :has-location="props.hasLocation"
17
+ :errors="errors"
18
+ :location-nodes="props.locationNodes"
19
+ :location-description="props.locationDescription"
20
+ :test-ids="props.testIds"
21
+ @remove-validation-errors="onRemoveValidationErrors"
22
+ />
23
+ </template>
24
+
25
+ <script setup lang="ts">
26
+ import type { API_UI_I_Error } from '~/lib/models/store/interfaces'
27
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
28
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
29
+ import type { UI_I_NameTestIds } from '~/components/common/wizards/common/steps/name/lib/models/interfaces'
30
+
31
+ const name = defineModel<string>('name', { required: true })
32
+ const location = defineModel<UI_I_TreeNode | null>('location') // для сферы
33
+
34
+ const props = withDefaults(
35
+ defineProps<{
36
+ show: boolean
37
+ nameFormSubmit: null | Function
38
+ nameRequestUrl: string
39
+ nameExistValidationDescription: string
40
+ testIds: UI_I_NameTestIds
41
+ validationDescription?: string
42
+ hasLocation?: boolean
43
+ validateEmptyName?: boolean
44
+ locationNodes?: UI_I_TreeNode[]
45
+ locationDescription?: string
46
+ allowedLocationKinds?: number[]
47
+ }>(),
48
+ {
49
+ hasLocation: false,
50
+ validateEmptyName: false,
51
+ locationDescription: '',
52
+ locationNodes: () => [],
53
+ allowedLocationKinds: () => [],
54
+ }
55
+ )
56
+ const emits = defineEmits<{
57
+ (event: 'submit', value: [string, UI_I_TreeNode | null]): void
58
+ (event: 'has-errors', value: boolean): void
59
+ }>()
60
+
61
+ const { $store }: any = useNuxtApp()
62
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
63
+
64
+ const localization = computed<UI_I_Localization>(() => useLocal())
65
+
66
+ watch(
67
+ () => props.nameFormSubmit,
68
+ (newValue) => {
69
+ newValue && submit(newValue)
70
+ }
71
+ )
72
+
73
+ // TODO defineExpose({
74
+ // submit,
75
+ // })
76
+ const submit = async (cb: Function): Promise<void> => {
77
+ if (props.validateEmptyName && name.value === '') {
78
+ showValidationErrors([
79
+ localization.value.common.emptyNameValidationDescription,
80
+ ])
81
+ cb(false)
82
+ return
83
+ }
84
+ if (name.value !== '') {
85
+ const isNameValid = await checkNameIsValid(name.value)
86
+ if (!isNameValid) {
87
+ cb(false)
88
+ return
89
+ }
90
+ }
91
+
92
+ if (props.hasLocation) {
93
+ if (
94
+ !location.value ||
95
+ (location.value &&
96
+ !props.allowedLocationKinds.includes(location.value.kind))
97
+ ) {
98
+ showValidationErrors([
99
+ props.validationDescription,
100
+ ])
101
+ cb(false)
102
+ return
103
+ }
104
+ }
105
+
106
+ onRemoveValidationErrors()
107
+ emits('submit', [name.value, location.value])
108
+ cb(true)
109
+ }
110
+ const checkNameIsValid = async (nameLocal: string): Promise<boolean> => {
111
+ const nameRequestUrlLocal = props.nameRequestUrl.replace('{name}', nameLocal)
112
+ const { error } = await useMyFetch<null, API_UI_I_Error>(
113
+ nameRequestUrlLocal,
114
+ {
115
+ method: 'GET',
116
+ }
117
+ )
118
+ const status = error.value?.statusCode || 200
119
+ switch (status) {
120
+ case 400: // Empty name
121
+ showValidationErrors([
122
+ localization.value.common.emptyNameValidationDescription,
123
+ ])
124
+ return false
125
+ case 405: // Invalid kind
126
+ showValidationErrors([
127
+ localization.value.common.kindValidationDescription,
128
+ ])
129
+ return false
130
+ case 406: // Invalid name
131
+ showValidationErrors([
132
+ localization.value.common.nameValidationDescription,
133
+ ])
134
+ return false
135
+ case 409: // Name exist
136
+ showValidationErrors([
137
+ props.nameExistValidationDescription,
138
+ ])
139
+ return false
140
+ }
141
+
142
+ return true
143
+ }
144
+
145
+ const errors = ref<string[]>([])
146
+ const showValidationErrors = (data: string[]): void => {
147
+ errors.value = data
148
+ }
149
+ const onRemoveValidationErrors = (): void => {
150
+ errors.value = []
151
+ }
152
+ watch(
153
+ errors,
154
+ (newValue) => {
155
+ emits('has-errors', !newValue.length)
156
+ },
157
+ { immediate: true, deep: true }
158
+ )
159
+
160
+ // TODO defineExpose({
161
+ // focusNameInput,
162
+ // })
163
+ watch(
164
+ () => props.show,
165
+ (newValue) => {
166
+ if (!newValue) return
167
+
168
+ const input = document.getElementById('virtual-machine-name')
169
+ if (!input) return
170
+
171
+ setTimeout(() => {
172
+ input.focus()
173
+ }, 0)
174
+ }
175
+ )
176
+ </script>
177
+
178
+ <style scoped lang="scss"></style>