bfg-common 1.5.446 → 1.5.447

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 (125) 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/layout/theHeader/helpMenu/About.vue +82 -82
  21. package/components/common/layout/theHeader/userMenu/UserMenu.vue +1 -1
  22. package/components/common/layout/theHeader/userMenu/modals/preferences/Preferences.vue +1 -1
  23. package/components/common/layout/theHeader/userMenu/modals/preferences/PreferencesOld.vue +1 -0
  24. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/ChangeLanguage.vue +4 -2
  25. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/ChangeLanguageOld.vue +5 -4
  26. package/components/common/pages/backups/Backups.vue +102 -102
  27. package/components/common/pages/backups/DetailView.vue +52 -52
  28. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  29. package/components/common/pages/backups/modals/createBackup/configuration/Configuration.vue +29 -29
  30. package/components/common/pages/backups/modals/createBackup/configuration/backupWindow/BackupWindow.vue +26 -26
  31. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/MaxBandwidth.vue +66 -66
  32. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
  33. package/components/common/pages/backups/modals/createBackup/configuration/strategy/Strategy.vue +35 -35
  34. package/components/common/pages/backups/modals/createBackup/datastores/Datastores.vue +59 -59
  35. package/components/common/pages/backups/modals/createBackup/datastores/tableView/TableView.vue +95 -95
  36. package/components/common/pages/backups/modals/createBackup/disks/tableView/lib/config/table.ts +117 -117
  37. package/components/common/pages/backups/modals/createBackup/general/General.vue +135 -135
  38. package/components/common/pages/backups/modals/createBackup/lib/config/strategyOptions.ts +12 -12
  39. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  40. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  41. package/components/common/pages/backups/modals/restore/disks/Disks.vue +27 -27
  42. package/components/common/pages/backups/modals/restore/disks/tableView/TableView.vue +102 -102
  43. package/components/common/pages/backups/modals/restore/disks/tableView/lib/config/table.ts +117 -117
  44. package/components/common/pages/backups/modals/restore/name/Name.vue +160 -160
  45. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  46. package/components/common/pages/backups/modals/restore/networks/Networks.vue +67 -67
  47. package/components/common/pages/backups/modals/restore/networks/table/Table.vue +214 -214
  48. package/components/common/pages/backups/modals/restore/types/lib/config/typeOptions.ts +25 -25
  49. package/components/common/pages/backups/tools/Tools.vue +75 -75
  50. package/components/common/pages/backups/tools/lib/config/tabs.ts +36 -36
  51. package/components/common/pages/home/headline/Headline.vue +9 -4
  52. package/components/common/pages/home/headline/HeadlineNew.vue +9 -4
  53. package/components/common/pages/home/headline/HeadlineOld.vue +47 -42
  54. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  55. package/components/common/pages/home/widgets/Widgets.vue +1 -0
  56. package/components/common/pages/home/widgets/WidgetsOld.vue +7 -1
  57. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  58. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  59. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  60. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  61. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  62. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  63. package/components/common/select/radio/RadioGroup.vue +137 -137
  64. package/components/common/spiceConsole/Drawer.vue +381 -381
  65. package/components/common/spiceConsole/SpiceConsole.vue +127 -127
  66. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  67. package/components/common/split/vertical/VerticalOld.vue +6 -4
  68. package/components/common/tools/Actions.vue +207 -207
  69. package/components/common/treeView/TreeView.vue +52 -52
  70. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  71. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +78 -78
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationOld.vue +85 -85
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/maximumSize/MaximumSize.vue +23 -23
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/Table.vue +99 -99
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  92. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  93. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  94. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +174 -174
  95. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  96. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapOld.vue +44 -44
  97. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  98. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  99. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  100. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  101. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +143 -143
  102. package/components/common/vm/actions/common/select/computeResource/New.vue +184 -184
  103. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +131 -131
  104. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  105. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  106. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  107. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  108. package/components/common/vm/actions/common/select/storage/new/New.vue +320 -320
  109. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  110. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  111. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  112. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  113. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  114. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  115. package/components/common/wizards/vm/migrate/select/type/lib/config/typeOptions.ts +45 -45
  116. package/composables/productNameLocal.ts +30 -30
  117. package/composables/useAppVersion.ts +21 -21
  118. package/package.json +2 -2
  119. package/plugins/date.ts +233 -233
  120. package/plugins/panelStates.ts +70 -70
  121. package/plugins/text.ts +59 -59
  122. package/public/spice-console/lib/images/bitmap.js +203 -203
  123. package/public/spice-console/network/spicechannel.js +390 -390
  124. package/store/main/mutations.ts +7 -7
  125. package/store/main/state.ts +7 -7
@@ -1,117 +1,117 @@
1
- import type { UI_I_Localization } from '~/lib/models/interfaces'
2
- import type {
3
- UI_I_HeadItem,
4
- UI_I_ColumnKey,
5
- UI_I_BodyItem,
6
- } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
7
- import type { UI_I_Pvm } 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/createBackup/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_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_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 { UI_I_Localization } from '~/lib/models/interfaces'
2
+ import type {
3
+ UI_I_HeadItem,
4
+ UI_I_ColumnKey,
5
+ UI_I_BodyItem,
6
+ } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
7
+ import type { UI_I_Pvm } 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/createBackup/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_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_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,135 +1,135 @@
1
- <template>
2
- <div class="general">
3
- <form @submit.prevent>
4
- <div class="field flex pt-4">
5
- <label for="general-name">{{ localization.common.name }}:</label>
6
- <input
7
- id="general-name"
8
- v-model.trim="model.name"
9
- data-id="general-name-input"
10
- type="text"
11
- />
12
- </div>
13
- <div class="field flex pt-4">
14
- <label for="general-description"
15
- >{{ localization.common.description }} ({{
16
- localization.common.optional
17
- }}):</label
18
- >
19
- <textarea
20
- id="general-description"
21
- v-model="model.description"
22
- data-id="general-description-textarea"
23
- />
24
- </div>
25
- </form>
26
- </div>
27
- </template>
28
-
29
- <script lang="ts" setup>
30
- import type { UI_I_Localization } from '~/lib/models/interfaces'
31
- import type { UI_I_CreateBackupForm } from '~/components/common/pages/backups/modals/lib/models/interfaces'
32
- import type { UI_I_NameCheck } from '~/components/common/pages/backups/modals/restore/name/lib/models/interfaces'
33
-
34
- const model = defineModel<UI_I_CreateBackupForm>({ required: true })
35
-
36
- const props = defineProps<{
37
- show: boolean
38
- generalSubmit: null | Function
39
- }>()
40
- const emits = defineEmits<{
41
- (event: 'check-name', value: UI_I_NameCheck): void
42
- }>()
43
-
44
- const localization = computed<UI_I_Localization>(() => useLocal())
45
-
46
- watch(
47
- () => props.generalSubmit,
48
- (newValue) => {
49
- newValue && submit(newValue)
50
- }
51
- )
52
- const submit = async (cb: Function): Promise<void> => {
53
- const name = model.value.name
54
-
55
- if (name !== '') {
56
- const isNameValid = await checkNameIsValid(name)
57
- if (!isNameValid) {
58
- // @ts-ignore
59
- cb(false)
60
- return
61
- }
62
- }
63
-
64
- onRemoveValidationErrors()
65
- // @ts-ignore
66
- cb(true)
67
- }
68
-
69
- const checkNameIsValid = async (name: string): Promise<boolean> => {
70
- return new Promise((resolve) => {
71
- emits('check-name', {
72
- name,
73
- cb: (error): void => {
74
- const status = error?.statusCode || 200
75
- switch (status) {
76
- case 405: // Invalid kind
77
- showValidationErrors([
78
- localization.value.common.kindValidationDescription,
79
- ])
80
- resolve(false)
81
- break
82
- case 406: // Invalid name
83
- showValidationErrors([
84
- localization.value.common.vmNameValidationDescription,
85
- ])
86
- resolve(false)
87
- break
88
- case 409: // Name exist
89
- showValidationErrors([
90
- localization.value.common.vmNameExistInSelectedLocation,
91
- ])
92
- resolve(false)
93
- break
94
- }
95
-
96
- resolve(true)
97
- },
98
- })
99
- })
100
- }
101
-
102
- const errors = ref<string[]>([])
103
- const showValidationErrors = (data: string[]): void => {
104
- errors.value = data
105
- }
106
- const onRemoveValidationErrors = (): void => {
107
- errors.value = []
108
- }
109
-
110
- watch(
111
- () => props.show,
112
- (newValue) => {
113
- if (!newValue) return
114
-
115
- const input = document.getElementById('general-name')
116
- if (!input) return
117
-
118
- setTimeout(() => {
119
- input.focus()
120
- }, 0)
121
- }
122
- )
123
- </script>
124
-
125
- <style lang="scss" scoped>
126
- .field {
127
- label {
128
- width: 216px;
129
- }
130
- input,
131
- textarea {
132
- width: 345px;
133
- }
134
- }
135
- </style>
1
+ <template>
2
+ <div class="general">
3
+ <form @submit.prevent>
4
+ <div class="field flex pt-4">
5
+ <label for="general-name">{{ localization.common.name }}:</label>
6
+ <input
7
+ id="general-name"
8
+ v-model.trim="model.name"
9
+ data-id="general-name-input"
10
+ type="text"
11
+ />
12
+ </div>
13
+ <div class="field flex pt-4">
14
+ <label for="general-description"
15
+ >{{ localization.common.description }} ({{
16
+ localization.common.optional
17
+ }}):</label
18
+ >
19
+ <textarea
20
+ id="general-description"
21
+ v-model="model.description"
22
+ data-id="general-description-textarea"
23
+ />
24
+ </div>
25
+ </form>
26
+ </div>
27
+ </template>
28
+
29
+ <script lang="ts" setup>
30
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
31
+ import type { UI_I_CreateBackupForm } from '~/components/common/pages/backups/modals/lib/models/interfaces'
32
+ import type { UI_I_NameCheck } from '~/components/common/pages/backups/modals/restore/name/lib/models/interfaces'
33
+
34
+ const model = defineModel<UI_I_CreateBackupForm>({ required: true })
35
+
36
+ const props = defineProps<{
37
+ show: boolean
38
+ generalSubmit: null | Function
39
+ }>()
40
+ const emits = defineEmits<{
41
+ (event: 'check-name', value: UI_I_NameCheck): void
42
+ }>()
43
+
44
+ const localization = computed<UI_I_Localization>(() => useLocal())
45
+
46
+ watch(
47
+ () => props.generalSubmit,
48
+ (newValue) => {
49
+ newValue && submit(newValue)
50
+ }
51
+ )
52
+ const submit = async (cb: Function): Promise<void> => {
53
+ const name = model.value.name
54
+
55
+ if (name !== '') {
56
+ const isNameValid = await checkNameIsValid(name)
57
+ if (!isNameValid) {
58
+ // @ts-ignore
59
+ cb(false)
60
+ return
61
+ }
62
+ }
63
+
64
+ onRemoveValidationErrors()
65
+ // @ts-ignore
66
+ cb(true)
67
+ }
68
+
69
+ const checkNameIsValid = async (name: string): Promise<boolean> => {
70
+ return new Promise((resolve) => {
71
+ emits('check-name', {
72
+ name,
73
+ cb: (error): void => {
74
+ const status = error?.statusCode || 200
75
+ switch (status) {
76
+ case 405: // Invalid kind
77
+ showValidationErrors([
78
+ localization.value.common.kindValidationDescription,
79
+ ])
80
+ resolve(false)
81
+ break
82
+ case 406: // Invalid name
83
+ showValidationErrors([
84
+ localization.value.common.vmNameValidationDescription,
85
+ ])
86
+ resolve(false)
87
+ break
88
+ case 409: // Name exist
89
+ showValidationErrors([
90
+ localization.value.common.vmNameExistInSelectedLocation,
91
+ ])
92
+ resolve(false)
93
+ break
94
+ }
95
+
96
+ resolve(true)
97
+ },
98
+ })
99
+ })
100
+ }
101
+
102
+ const errors = ref<string[]>([])
103
+ const showValidationErrors = (data: string[]): void => {
104
+ errors.value = data
105
+ }
106
+ const onRemoveValidationErrors = (): void => {
107
+ errors.value = []
108
+ }
109
+
110
+ watch(
111
+ () => props.show,
112
+ (newValue) => {
113
+ if (!newValue) return
114
+
115
+ const input = document.getElementById('general-name')
116
+ if (!input) return
117
+
118
+ setTimeout(() => {
119
+ input.focus()
120
+ }, 0)
121
+ }
122
+ )
123
+ </script>
124
+
125
+ <style lang="scss" scoped>
126
+ .field {
127
+ label {
128
+ width: 216px;
129
+ }
130
+ input,
131
+ textarea {
132
+ width: 345px;
133
+ }
134
+ }
135
+ </style>
@@ -1,12 +1,12 @@
1
- import type { UI_I_Localization } from '~/lib/models/interfaces'
2
- import type { UI_I_SelectInputItem } from '~/components/common/select/input/lib/models/interfaces'
3
-
4
- export const strategyOptionsFunc = (
5
- localization: UI_I_Localization
6
- ): UI_I_SelectInputItem[] => {
7
- return [
8
- { label: localization.common.fullBackup, value: 0 },
9
- { label: localization.common.incrementalBackup, value: 1 },
10
- { label: localization.common.differentialBackup, value: 2 },
11
- ]
12
- }
1
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
2
+ import type { UI_I_SelectInputItem } from '~/components/common/select/input/lib/models/interfaces'
3
+
4
+ export const strategyOptionsFunc = (
5
+ localization: UI_I_Localization
6
+ ): UI_I_SelectInputItem[] => {
7
+ return [
8
+ { label: localization.common.fullBackup, value: 0 },
9
+ { label: localization.common.incrementalBackup, value: 1 },
10
+ { label: localization.common.differentialBackup, value: 2 },
11
+ ]
12
+ }