bfg-common 1.5.446 → 1.5.448

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 (129) 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 +1694 -1694
  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/browse/blocks/Container.vue +235 -235
  14. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  15. package/components/common/context/lib/models/interfaces.ts +33 -33
  16. package/components/common/diagramMain/modals/lib/config/networkModal.ts +398 -398
  17. package/components/common/diagramMain/modals/lib/config/portModal.ts +251 -251
  18. package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
  19. package/components/common/diagramMain/port/Port.vue +580 -580
  20. package/components/common/feedback/Buttons.vue +2 -1
  21. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  22. package/components/common/layout/theHeader/modals/reconnect/Reconnect.vue +2 -4
  23. package/components/common/layout/theHeader/modals/reconnect/ReconnectNew.vue +1 -2
  24. package/components/common/layout/theHeader/modals/reconnect/ReconnectOld.vue +1 -2
  25. package/components/common/layout/theHeader/userMenu/UserMenu.vue +1 -1
  26. package/components/common/layout/theHeader/userMenu/modals/preferences/Preferences.vue +1 -1
  27. package/components/common/layout/theHeader/userMenu/modals/preferences/PreferencesOld.vue +1 -0
  28. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/ChangeLanguage.vue +4 -2
  29. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/ChangeLanguageOld.vue +5 -4
  30. package/components/common/pages/backups/Backups.vue +102 -102
  31. package/components/common/pages/backups/DetailView.vue +52 -52
  32. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  33. package/components/common/pages/backups/modals/createBackup/configuration/Configuration.vue +29 -29
  34. package/components/common/pages/backups/modals/createBackup/configuration/backupWindow/BackupWindow.vue +26 -26
  35. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/MaxBandwidth.vue +66 -66
  36. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
  37. package/components/common/pages/backups/modals/createBackup/configuration/strategy/Strategy.vue +35 -35
  38. package/components/common/pages/backups/modals/createBackup/datastores/Datastores.vue +59 -59
  39. package/components/common/pages/backups/modals/createBackup/datastores/tableView/TableView.vue +95 -95
  40. package/components/common/pages/backups/modals/createBackup/disks/tableView/lib/config/table.ts +117 -117
  41. package/components/common/pages/backups/modals/createBackup/general/General.vue +135 -135
  42. package/components/common/pages/backups/modals/createBackup/lib/config/strategyOptions.ts +12 -12
  43. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  44. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  45. package/components/common/pages/backups/modals/restore/disks/Disks.vue +27 -27
  46. package/components/common/pages/backups/modals/restore/disks/tableView/TableView.vue +102 -102
  47. package/components/common/pages/backups/modals/restore/disks/tableView/lib/config/table.ts +117 -117
  48. package/components/common/pages/backups/modals/restore/name/Name.vue +160 -160
  49. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  50. package/components/common/pages/backups/modals/restore/networks/Networks.vue +67 -67
  51. package/components/common/pages/backups/modals/restore/networks/table/Table.vue +214 -214
  52. package/components/common/pages/backups/modals/restore/types/lib/config/typeOptions.ts +25 -25
  53. package/components/common/pages/backups/tools/Tools.vue +75 -75
  54. package/components/common/pages/backups/tools/lib/config/tabs.ts +36 -36
  55. package/components/common/pages/home/headline/Headline.vue +9 -4
  56. package/components/common/pages/home/headline/HeadlineNew.vue +9 -4
  57. package/components/common/pages/home/headline/HeadlineOld.vue +47 -42
  58. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  59. package/components/common/pages/home/widgets/Widgets.vue +1 -0
  60. package/components/common/pages/home/widgets/WidgetsOld.vue +7 -1
  61. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  62. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  63. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  64. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  65. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  66. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  67. package/components/common/select/radio/RadioGroup.vue +137 -137
  68. package/components/common/spiceConsole/Drawer.vue +381 -381
  69. package/components/common/spiceConsole/SpiceConsole.vue +127 -127
  70. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  71. package/components/common/split/vertical/VerticalOld.vue +6 -4
  72. package/components/common/tools/Actions.vue +207 -207
  73. package/components/common/treeView/TreeView.vue +52 -52
  74. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  75. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +78 -78
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationOld.vue +85 -85
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/maximumSize/MaximumSize.vue +23 -23
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/Table.vue +99 -99
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  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/keymap/KeymapOld.vue +44 -44
  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/usbRedirection/UsbRedirection.vue +28 -28
  103. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  104. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  105. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +143 -143
  106. package/components/common/vm/actions/common/select/computeResource/New.vue +184 -184
  107. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +131 -131
  108. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  109. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  110. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  111. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  112. package/components/common/vm/actions/common/select/storage/new/New.vue +320 -320
  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/common/select/template/old/Old.vue +50 -50
  116. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  117. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  118. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  119. package/components/common/wizards/vm/migrate/select/type/lib/config/typeOptions.ts +45 -45
  120. package/composables/productNameLocal.ts +30 -30
  121. package/composables/useAppVersion.ts +21 -21
  122. package/package.json +2 -2
  123. package/plugins/date.ts +233 -233
  124. package/plugins/panelStates.ts +70 -70
  125. package/plugins/text.ts +59 -59
  126. package/public/spice-console/lib/images/bitmap.js +203 -203
  127. package/public/spice-console/network/spicechannel.js +390 -390
  128. package/store/main/mutations.ts +7 -7
  129. package/store/main/state.ts +7 -7
@@ -1,117 +1,117 @@
1
- import type {
2
- UI_I_HeadItem,
3
- UI_I_ColumnKey,
4
- UI_I_BodyItem,
5
- } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
6
- import type { UI_I_Localization } from '~/lib/models/interfaces'
7
- import type { UI_I_RestoreForm } from '~/components/common/pages/backups/modals/lib/models/interfaces'
8
- import {
9
- constructHeadItem,
10
- constructColumnKey,
11
- } from '~/components/atoms/table/dataGrid/lib/utils/constructDataTable'
12
- import { tableKeys } from '~/components/common/pages/backups/modals/restore/disks/tableView/lib/config/keys'
13
-
14
- const getItems = (
15
- localization: UI_I_Localization
16
- ): [string, boolean, string, string][] => {
17
- return [
18
- [localization.common.source, true, '180px', tableKeys[0]],
19
- [localization.common.deviceType, true, '180px', tableKeys[1]],
20
- [localization.common.bus, true, '180px', tableKeys[2]],
21
- [localization.common.target, true, '180px', tableKeys[3]],
22
- [localization.common.capacity, true, '180px', tableKeys[4]],
23
- [localization.common.used, true, '180px', tableKeys[5]],
24
- [localization.common.free, true, '180px', tableKeys[6]],
25
- [localization.common.volumePath, true, '180px', tableKeys[7]],
26
- ]
27
- }
28
- export const columnKeys = (
29
- localization: UI_I_Localization
30
- ): UI_I_ColumnKey[] => {
31
- const result: UI_I_ColumnKey[] = []
32
- getItems(localization).forEach((item, i) => {
33
- result.push(
34
- constructColumnKey(`col${i}`, item[0], item[1], `show-column-${item[3]}`)
35
- )
36
- })
37
- return result
38
- }
39
- export const headItems = (localization: UI_I_Localization): UI_I_HeadItem[] => {
40
- const result: UI_I_HeadItem[] = []
41
- getItems(localization).forEach((item, i) => {
42
- result.push(
43
- constructHeadItem(
44
- `col${i}`,
45
- item[0],
46
- item[3],
47
- true,
48
- item[2],
49
- undefined,
50
- item[3]
51
- )
52
- )
53
- })
54
- return result
55
- }
56
-
57
- export const bodyItems = (
58
- data: UI_I_RestoreForm['pvm']['disk_devices']
59
- ): UI_I_BodyItem[][] => {
60
- const { $binary }: any = useNuxtApp()
61
- const lang = useLocalStorage('lang') === 'ru_RU' ? 'ru' : 'en'
62
-
63
- const bodyItems: UI_I_BodyItem[][] = []
64
- data.forEach((disk: UI_I_RestoreForm['pvm']['disk_devices'][0]) => {
65
- bodyItems.push([
66
- {
67
- key: 'col0',
68
- text: disk[tableKeys[0]],
69
- id: disk.source,
70
- data: {
71
- location: disk.source,
72
- target: disk.target,
73
- },
74
- },
75
- {
76
- key: 'col1',
77
- text: disk[tableKeys[1]],
78
- id: disk.source,
79
- },
80
- {
81
- key: 'col2',
82
- text: disk[tableKeys[2]],
83
- id: disk.source,
84
- },
85
- {
86
- key: 'col3',
87
- text: disk[tableKeys[3]],
88
- id: disk.source,
89
- },
90
- {
91
- key: 'col4',
92
- text: $binary.round(disk[tableKeys[4]], false, lang),
93
- id: disk.source,
94
- },
95
- {
96
- key: 'col5',
97
- text: $binary.round(
98
- disk[tableKeys[4]] - disk[tableKeys[6]],
99
- false,
100
- lang
101
- ),
102
- id: disk.source,
103
- },
104
- {
105
- key: 'col6',
106
- text: $binary.round(disk[tableKeys[6]], false, lang),
107
- id: disk.source,
108
- },
109
- {
110
- key: 'col7',
111
- text: disk[tableKeys[7]],
112
- id: disk.source,
113
- },
114
- ])
115
- })
116
- return bodyItems
117
- }
1
+ import type {
2
+ UI_I_HeadItem,
3
+ UI_I_ColumnKey,
4
+ UI_I_BodyItem,
5
+ } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
6
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
7
+ import type { UI_I_RestoreForm } from '~/components/common/pages/backups/modals/lib/models/interfaces'
8
+ import {
9
+ constructHeadItem,
10
+ constructColumnKey,
11
+ } from '~/components/atoms/table/dataGrid/lib/utils/constructDataTable'
12
+ import { tableKeys } from '~/components/common/pages/backups/modals/restore/disks/tableView/lib/config/keys'
13
+
14
+ const getItems = (
15
+ localization: UI_I_Localization
16
+ ): [string, boolean, string, string][] => {
17
+ return [
18
+ [localization.common.source, true, '180px', tableKeys[0]],
19
+ [localization.common.deviceType, true, '180px', tableKeys[1]],
20
+ [localization.common.bus, true, '180px', tableKeys[2]],
21
+ [localization.common.target, true, '180px', tableKeys[3]],
22
+ [localization.common.capacity, true, '180px', tableKeys[4]],
23
+ [localization.common.used, true, '180px', tableKeys[5]],
24
+ [localization.common.free, true, '180px', tableKeys[6]],
25
+ [localization.common.volumePath, true, '180px', tableKeys[7]],
26
+ ]
27
+ }
28
+ export const columnKeys = (
29
+ localization: UI_I_Localization
30
+ ): UI_I_ColumnKey[] => {
31
+ const result: UI_I_ColumnKey[] = []
32
+ getItems(localization).forEach((item, i) => {
33
+ result.push(
34
+ constructColumnKey(`col${i}`, item[0], item[1], `show-column-${item[3]}`)
35
+ )
36
+ })
37
+ return result
38
+ }
39
+ export const headItems = (localization: UI_I_Localization): UI_I_HeadItem[] => {
40
+ const result: UI_I_HeadItem[] = []
41
+ getItems(localization).forEach((item, i) => {
42
+ result.push(
43
+ constructHeadItem(
44
+ `col${i}`,
45
+ item[0],
46
+ item[3],
47
+ true,
48
+ item[2],
49
+ undefined,
50
+ item[3]
51
+ )
52
+ )
53
+ })
54
+ return result
55
+ }
56
+
57
+ export const bodyItems = (
58
+ data: UI_I_RestoreForm['pvm']['disk_devices']
59
+ ): UI_I_BodyItem[][] => {
60
+ const { $binary }: any = useNuxtApp()
61
+ const lang = useLocalStorage('lang') === 'ru_RU' ? 'ru' : 'en'
62
+
63
+ const bodyItems: UI_I_BodyItem[][] = []
64
+ data.forEach((disk: UI_I_RestoreForm['pvm']['disk_devices'][0]) => {
65
+ bodyItems.push([
66
+ {
67
+ key: 'col0',
68
+ text: disk[tableKeys[0]],
69
+ id: disk.source,
70
+ data: {
71
+ location: disk.source,
72
+ target: disk.target,
73
+ },
74
+ },
75
+ {
76
+ key: 'col1',
77
+ text: disk[tableKeys[1]],
78
+ id: disk.source,
79
+ },
80
+ {
81
+ key: 'col2',
82
+ text: disk[tableKeys[2]],
83
+ id: disk.source,
84
+ },
85
+ {
86
+ key: 'col3',
87
+ text: disk[tableKeys[3]],
88
+ id: disk.source,
89
+ },
90
+ {
91
+ key: 'col4',
92
+ text: $binary.round(disk[tableKeys[4]], false, lang),
93
+ id: disk.source,
94
+ },
95
+ {
96
+ key: 'col5',
97
+ text: $binary.round(
98
+ disk[tableKeys[4]] - disk[tableKeys[6]],
99
+ false,
100
+ lang
101
+ ),
102
+ id: disk.source,
103
+ },
104
+ {
105
+ key: 'col6',
106
+ text: $binary.round(disk[tableKeys[6]], false, lang),
107
+ id: disk.source,
108
+ },
109
+ {
110
+ key: 'col7',
111
+ text: disk[tableKeys[7]],
112
+ id: disk.source,
113
+ },
114
+ ])
115
+ })
116
+ return bodyItems
117
+ }
@@ -1,160 +1,160 @@
1
- <template>
2
- <div class="select-name">
3
- <atoms-alert
4
- v-show="errors.length"
5
- :items="errors"
6
- status="alert-danger"
7
- test-id="name-alert"
8
- @remove="onRemoveValidationErrors"
9
- />
10
-
11
- <form
12
- id="virtual-machine-form"
13
- class="flex items-center pt-5"
14
- @submit.prevent
15
- >
16
- <label for="virtual-machine-name"
17
- >{{ localization.common.virtualMachineName }}:</label
18
- >
19
- <input
20
- id="virtual-machine-name"
21
- v-model.trim="model.pvm.name"
22
- data-id="virtual-machine-name-input"
23
- type="text"
24
- maxlength="54"
25
- />
26
- </form>
27
- </div>
28
- </template>
29
-
30
- <script setup lang="ts">
31
- import type { UI_I_Localization } from '~/lib/models/interfaces'
32
- import type { UI_I_NameCheck } from '~/components/common/pages/backups/modals/restore/name/lib/models/interfaces'
33
- import type { UI_I_RestoreForm } from '~/components/common/pages/backups/modals/lib/models/interfaces'
34
-
35
- const model = defineModel<UI_I_RestoreForm>({ required: true })
36
-
37
- const props = defineProps<{
38
- show: boolean
39
- nameFormSubmit: null | Function
40
- }>()
41
- const emits = defineEmits<{
42
- (event: 'check-name', value: UI_I_NameCheck): void
43
- }>()
44
-
45
- const localization = computed<UI_I_Localization>(() => useLocal())
46
-
47
- watch(
48
- () => props.nameFormSubmit,
49
- (newValue) => {
50
- newValue && submit(newValue)
51
- }
52
- )
53
-
54
- const submit = async (cb: Function): Promise<void> => {
55
- const name = model.value.pvm.name
56
-
57
- if (name !== '') {
58
- const isNameValid = await checkNameIsValid(name)
59
- if (!isNameValid) {
60
- // @ts-ignore
61
- cb(false)
62
- return
63
- }
64
- }
65
-
66
- onRemoveValidationErrors()
67
- // @ts-ignore
68
- cb(true)
69
- }
70
- const checkNameIsValid = async (name: string): Promise<boolean> => {
71
- return new Promise((resolve) => {
72
- emits('check-name', {
73
- name,
74
- cb: (error): void => {
75
- const status = error?.statusCode || 200
76
- switch (status) {
77
- case 405: // Invalid kind
78
- showValidationErrors([
79
- localization.value.common.kindValidationDescription,
80
- ])
81
- resolve(false)
82
- break
83
- case 406: // Invalid name
84
- showValidationErrors([
85
- localization.value.common.vmNameValidationDescription,
86
- ])
87
- resolve(false)
88
- break
89
- case 409: // Name exist
90
- showValidationErrors([
91
- localization.value.common.vmNameExistInSelectedLocation,
92
- ])
93
- resolve(false)
94
- break
95
- }
96
-
97
- resolve(true)
98
- },
99
- })
100
- })
101
- }
102
-
103
- const errors = ref<string[]>([])
104
- const showValidationErrors = (data: string[]): void => {
105
- errors.value = data
106
- }
107
- const onRemoveValidationErrors = (): void => {
108
- errors.value = []
109
- }
110
-
111
- watch(
112
- () => props.show,
113
- (newValue) => {
114
- if (!newValue) return
115
-
116
- const input = document.getElementById('virtual-machine-name')
117
- if (!input) return
118
-
119
- setTimeout(() => {
120
- input.focus()
121
- }, 0)
122
- }
123
- )
124
- </script>
125
-
126
- <style scoped lang="scss">
127
- .select-name {
128
- form {
129
- label {
130
- width: 216px;
131
- }
132
- input {
133
- width: 345px;
134
- }
135
- }
136
-
137
- .tree-view-wrap {
138
- position: relative;
139
- border: 1px solid #000;
140
- padding: 5px;
141
- max-height: 300px;
142
- min-height: 200px;
143
- overflow: auto;
144
- margin-bottom: 10px;
145
- }
146
- }
147
- .content-signpost {
148
- .icon-show-help {
149
- cursor: pointer;
150
- }
151
-
152
- .help-title {
153
- font-size: 22px;
154
- margin-bottom: 24px;
155
- }
156
- .signpost {
157
- max-width: 360px;
158
- }
159
- }
160
- </style>
1
+ <template>
2
+ <div class="select-name">
3
+ <atoms-alert
4
+ v-show="errors.length"
5
+ :items="errors"
6
+ status="alert-danger"
7
+ test-id="name-alert"
8
+ @remove="onRemoveValidationErrors"
9
+ />
10
+
11
+ <form
12
+ id="virtual-machine-form"
13
+ class="flex items-center pt-5"
14
+ @submit.prevent
15
+ >
16
+ <label for="virtual-machine-name"
17
+ >{{ localization.common.virtualMachineName }}:</label
18
+ >
19
+ <input
20
+ id="virtual-machine-name"
21
+ v-model.trim="model.pvm.name"
22
+ data-id="virtual-machine-name-input"
23
+ type="text"
24
+ maxlength="54"
25
+ />
26
+ </form>
27
+ </div>
28
+ </template>
29
+
30
+ <script setup lang="ts">
31
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
32
+ import type { UI_I_NameCheck } from '~/components/common/pages/backups/modals/restore/name/lib/models/interfaces'
33
+ import type { UI_I_RestoreForm } from '~/components/common/pages/backups/modals/lib/models/interfaces'
34
+
35
+ const model = defineModel<UI_I_RestoreForm>({ required: true })
36
+
37
+ const props = defineProps<{
38
+ show: boolean
39
+ nameFormSubmit: null | Function
40
+ }>()
41
+ const emits = defineEmits<{
42
+ (event: 'check-name', value: UI_I_NameCheck): void
43
+ }>()
44
+
45
+ const localization = computed<UI_I_Localization>(() => useLocal())
46
+
47
+ watch(
48
+ () => props.nameFormSubmit,
49
+ (newValue) => {
50
+ newValue && submit(newValue)
51
+ }
52
+ )
53
+
54
+ const submit = async (cb: Function): Promise<void> => {
55
+ const name = model.value.pvm.name
56
+
57
+ if (name !== '') {
58
+ const isNameValid = await checkNameIsValid(name)
59
+ if (!isNameValid) {
60
+ // @ts-ignore
61
+ cb(false)
62
+ return
63
+ }
64
+ }
65
+
66
+ onRemoveValidationErrors()
67
+ // @ts-ignore
68
+ cb(true)
69
+ }
70
+ const checkNameIsValid = async (name: string): Promise<boolean> => {
71
+ return new Promise((resolve) => {
72
+ emits('check-name', {
73
+ name,
74
+ cb: (error): void => {
75
+ const status = error?.statusCode || 200
76
+ switch (status) {
77
+ case 405: // Invalid kind
78
+ showValidationErrors([
79
+ localization.value.common.kindValidationDescription,
80
+ ])
81
+ resolve(false)
82
+ break
83
+ case 406: // Invalid name
84
+ showValidationErrors([
85
+ localization.value.common.vmNameValidationDescription,
86
+ ])
87
+ resolve(false)
88
+ break
89
+ case 409: // Name exist
90
+ showValidationErrors([
91
+ localization.value.common.vmNameExistInSelectedLocation,
92
+ ])
93
+ resolve(false)
94
+ break
95
+ }
96
+
97
+ resolve(true)
98
+ },
99
+ })
100
+ })
101
+ }
102
+
103
+ const errors = ref<string[]>([])
104
+ const showValidationErrors = (data: string[]): void => {
105
+ errors.value = data
106
+ }
107
+ const onRemoveValidationErrors = (): void => {
108
+ errors.value = []
109
+ }
110
+
111
+ watch(
112
+ () => props.show,
113
+ (newValue) => {
114
+ if (!newValue) return
115
+
116
+ const input = document.getElementById('virtual-machine-name')
117
+ if (!input) return
118
+
119
+ setTimeout(() => {
120
+ input.focus()
121
+ }, 0)
122
+ }
123
+ )
124
+ </script>
125
+
126
+ <style scoped lang="scss">
127
+ .select-name {
128
+ form {
129
+ label {
130
+ width: 216px;
131
+ }
132
+ input {
133
+ width: 345px;
134
+ }
135
+ }
136
+
137
+ .tree-view-wrap {
138
+ position: relative;
139
+ border: 1px solid #000;
140
+ padding: 5px;
141
+ max-height: 300px;
142
+ min-height: 200px;
143
+ overflow: auto;
144
+ margin-bottom: 10px;
145
+ }
146
+ }
147
+ .content-signpost {
148
+ .icon-show-help {
149
+ cursor: pointer;
150
+ }
151
+
152
+ .help-title {
153
+ font-size: 22px;
154
+ margin-bottom: 24px;
155
+ }
156
+ .signpost {
157
+ max-width: 360px;
158
+ }
159
+ }
160
+ </style>
@@ -1,6 +1,6 @@
1
- import type { API_UI_I_Error } from '~/lib/models/store/interfaces'
2
-
3
- export interface UI_I_NameCheck {
4
- name: string
5
- cb: (error: API_UI_I_Error) => void
6
- }
1
+ import type { API_UI_I_Error } from '~/lib/models/store/interfaces'
2
+
3
+ export interface UI_I_NameCheck {
4
+ name: string
5
+ cb: (error: API_UI_I_Error) => void
6
+ }