bfg-common 1.5.417 → 1.5.419

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 (61) hide show
  1. package/components/common/modals/confirmation/ConfirmationNew.vue +1 -1
  2. package/components/common/pages/backups/Backups.vue +102 -0
  3. package/components/common/pages/backups/DetailView.vue +52 -0
  4. package/components/common/pages/backups/lib/models/interfaces.ts +24 -0
  5. package/components/common/pages/backups/lib/models/types.ts +7 -0
  6. package/components/common/pages/backups/modals/Modals.vue +229 -0
  7. package/components/common/pages/backups/modals/createBackup/CreateBackup.vue +371 -0
  8. package/components/common/pages/backups/modals/createBackup/configuration/Configuration.vue +29 -0
  9. package/components/common/pages/backups/modals/createBackup/configuration/backupWindow/BackupWindow.vue +26 -0
  10. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/MaxBandwidth.vue +65 -0
  11. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -0
  12. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/models/types.ts +1 -0
  13. package/components/common/pages/backups/modals/createBackup/configuration/strategy/Strategy.vue +36 -0
  14. package/components/common/pages/backups/modals/createBackup/datastores/Datastores.vue +58 -0
  15. package/components/common/pages/backups/modals/createBackup/datastores/tableView/TableView.vue +94 -0
  16. package/components/common/pages/backups/modals/createBackup/datastores/tableView/lib/config/keys.ts +14 -0
  17. package/components/common/pages/backups/modals/createBackup/datastores/tableView/lib/config/table.ts +117 -0
  18. package/components/common/pages/backups/modals/createBackup/datastores/tableView/lib/models/types.ts +10 -0
  19. package/components/common/pages/backups/modals/createBackup/disks/Disks.vue +28 -0
  20. package/components/common/pages/backups/modals/createBackup/disks/tableView/TableView.vue +105 -0
  21. package/components/common/pages/backups/modals/createBackup/disks/tableView/lib/config/keys.ts +12 -0
  22. package/components/common/pages/backups/modals/createBackup/disks/tableView/lib/config/table.ts +117 -0
  23. package/components/common/pages/backups/modals/createBackup/disks/tableView/lib/models/interfaces.ts +4 -0
  24. package/components/common/pages/backups/modals/createBackup/disks/tableView/lib/models/types.ts +10 -0
  25. package/components/common/pages/backups/modals/createBackup/general/General.vue +48 -0
  26. package/components/common/pages/backups/modals/createBackup/lib/config/createBackup.ts +14 -0
  27. package/components/common/pages/backups/modals/createBackup/lib/config/steps.ts +117 -0
  28. package/components/common/pages/backups/modals/createBackup/lib/config/strategyOptions.ts +12 -0
  29. package/components/common/pages/backups/modals/createBackup/lib/models/interfaces.ts +8 -0
  30. package/components/common/pages/backups/modals/createBackup/readyToComplete/ReadyToComplete.vue +15 -0
  31. package/components/common/pages/backups/modals/lib/config/createBackup.ts +16 -0
  32. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -0
  33. package/components/common/pages/backups/modals/lib/models/interfaces.ts +164 -0
  34. package/components/common/pages/backups/modals/restore/Restore.vue +388 -0
  35. package/components/common/pages/backups/modals/restore/disks/Disks.vue +28 -0
  36. package/components/common/pages/backups/modals/restore/disks/tableView/TableView.vue +101 -0
  37. package/components/common/pages/backups/modals/restore/disks/tableView/lib/config/keys.ts +14 -0
  38. package/components/common/pages/backups/modals/restore/disks/tableView/lib/config/table.ts +114 -0
  39. package/components/common/pages/backups/modals/restore/disks/tableView/lib/models/interfaces.ts +4 -0
  40. package/components/common/pages/backups/modals/restore/disks/tableView/lib/models/types.ts +10 -0
  41. package/components/common/pages/backups/modals/restore/lib/config/steps.ts +92 -0
  42. package/components/common/pages/backups/modals/restore/name/Name.vue +159 -0
  43. package/components/common/pages/backups/modals/restore/networks/Networks.vue +67 -0
  44. package/components/common/pages/backups/modals/restore/networks/table/Table.vue +216 -0
  45. package/components/common/pages/backups/modals/restore/networks/table/adapterType/AdapterType.vue +32 -0
  46. package/components/common/pages/backups/modals/restore/networks/table/adapterType/lib/config/options.ts +8 -0
  47. package/components/common/pages/backups/modals/restore/networks/table/lib/config/networkTable.ts +82 -0
  48. package/components/common/pages/backups/modals/restore/networks/table/lib/config/tableKeys.ts +10 -0
  49. package/components/common/pages/backups/modals/restore/networks/table/lib/models/types.ts +6 -0
  50. package/components/common/pages/backups/modals/restore/types/Types.vue +61 -0
  51. package/components/common/pages/backups/modals/restore/types/lib/config/descriptions.ts +7 -0
  52. package/components/common/pages/backups/modals/restore/types/lib/config/typeOptions.ts +24 -0
  53. package/components/common/pages/backups/tools/Tools.vue +75 -0
  54. package/components/common/pages/backups/tools/lib/config/tabs.ts +36 -0
  55. package/components/common/pages/scheduledTasks/lib/models/interfaces.ts +35 -0
  56. package/components/common/pages/scheduledTasks/lib/models/types.ts +16 -0
  57. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -0
  58. package/components/common/treeView/TreeView.vue +52 -0
  59. package/lib/models/interfaces.ts +1 -1
  60. package/package.json +1 -1
  61. /package/components/common/{backup/actions → pages/backups/modals}/deleteBackup/DeleteBackup.vue +0 -0
@@ -0,0 +1,216 @@
1
+ <template>
2
+ <div class="table-view-wrapper flex flex-col">
3
+ <atoms-table-data-grid
4
+ v-model:page-size="pagination.pageSize"
5
+ v-model:page="pagination.page"
6
+ :head-items="headItems"
7
+ :body-items="bodyItems"
8
+ :total-items="bodyItems.length"
9
+ :total-pages="1"
10
+ :loading="props.loading"
11
+ off-select-by-row
12
+ class="networks-table flex flex-col"
13
+ server-off
14
+ hide-footer
15
+ hide-page-size
16
+ >
17
+ <template #select="data">
18
+ <div class="select networks-table__select">
19
+ <div v-if="data.item.data.type === 'select-network'" class="select">
20
+ <select
21
+ id="import-vms-network-field"
22
+ v-model="selectedLocation"
23
+ :disabled="false"
24
+ data-id="import-vms-network-field"
25
+ class="import-vms-network-field input-text-color"
26
+ @click.stop
27
+ @change="changeLocation($event, data.item.data.key)"
28
+ >
29
+ <option
30
+ v-for="(item, key) in locationOptions"
31
+ :key="key"
32
+ :value="item.value"
33
+ >
34
+ {{ item.text }}
35
+ </option>
36
+ </select>
37
+ </div>
38
+
39
+ <common-pages-backups-modals-restore-networks-table-adapter-type
40
+ v-if="data.item.data.type === 'select-adapter'"
41
+ v-model="model.pvm.network_devices[data.item.data.key].model"
42
+ />
43
+ </div>
44
+ </template>
45
+ </atoms-table-data-grid>
46
+
47
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-network-location
48
+ :location-modal-is-show="selectedNetworkKeyForLocation !== -1"
49
+ :networks-table="props.sourceNetworks"
50
+ @hide="onHideLocationModal"
51
+ @select="onSelectLocation"
52
+ />
53
+ </div>
54
+ </template>
55
+
56
+ <script lang="ts" setup>
57
+ import type {
58
+ UI_I_Localization,
59
+ UI_I_HTMLSelectElement,
60
+ } from '~/lib/models/interfaces'
61
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
62
+ import type { UI_I_Pagination } from '~/lib/models/table/interfaces'
63
+ import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
64
+ import type {
65
+ UI_I_HeadItem,
66
+ UI_I_BodyItem,
67
+ } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
68
+ import type { UI_I_Pvm } from '~/lib/models/store/vm/interfaces'
69
+ // import type { I_RestoreForm } from '~/components/common/pages/backups/modals/lib/models/interfaces'
70
+ // import type { I_Pvm } from '~/store/modules/inventory/modules/backup/lib/models/interfaces'
71
+ import * as table from '~/components/common/pages/backups/modals/restore/networks/table/lib/config/networkTable'
72
+
73
+ const model = defineModel<I_RestoreForm>({ required: true })
74
+ const props = defineProps<{
75
+ networksTable: UI_I_Pvm['network_devices']
76
+ sourceNetworks: UI_I_NetworkTableItem[]
77
+ loading: boolean
78
+ }>()
79
+
80
+ const localization = computed<UI_I_Localization>(() => useLocal())
81
+
82
+ const pagination = ref<UI_I_Pagination>({
83
+ page: 1,
84
+ pageSize: 100,
85
+ })
86
+
87
+ const headItems = computed<UI_I_HeadItem[]>(() =>
88
+ table.headItems(localization.value)
89
+ )
90
+
91
+ const bodyItems = computed<UI_I_BodyItem[][]>(() => {
92
+ return table.bodyItems(props.networksTable)
93
+ })
94
+
95
+ const selectedLocationOld = ref<string>('')
96
+ const selectedLocation = ref<string>('')
97
+ const locationOptions = ref<UI_I_OptionItem[]>([])
98
+ const selectedNetworkKeyForLocation = ref<number>(-1)
99
+ const onHideLocationModal = (): void => {
100
+ selectedLocation.value = selectedLocationOld.value
101
+ const network = findNetwork(selectedLocationOld.value)
102
+ model.value.pvm.network_devices[selectedNetworkKeyForLocation.value].network =
103
+ network.name
104
+ model.value.pvm.network_devices[
105
+ selectedNetworkKeyForLocation.value
106
+ ].net_bridge = selectedLocationOld.value
107
+ selectedNetworkKeyForLocation.value = -1
108
+ }
109
+
110
+ const changeLocation = (event: UI_I_HTMLSelectElement, key: number): void => {
111
+ const value = event.target.value
112
+
113
+ if (value === 'browser') {
114
+ selectedNetworkKeyForLocation.value = key
115
+ return
116
+ }
117
+
118
+ selectedLocationOld.value = value
119
+ selectedLocation.value = value
120
+ const network = findNetwork(value)
121
+ model.value.pvm.network_devices[key].network = network.name || ''
122
+ model.value.pvm.network_devices[key].net_bridge = value
123
+ }
124
+
125
+ const onSelectLocation = (network: any): void => {
126
+ selectedLocationOld.value = network.net_bridge
127
+ selectedLocation.value = network.net_bridge
128
+ model.value.pvm.network_devices[selectedNetworkKeyForLocation.value].network =
129
+ network.name
130
+ model.value.pvm.network_devices[
131
+ selectedNetworkKeyForLocation.value
132
+ ].net_bridge = network.net_bridge
133
+ selectedNetworkKeyForLocation.value = -1
134
+
135
+ const hasNetwork = locationOptions.value.some(
136
+ (option) => option.value === network.name
137
+ )
138
+ if (hasNetwork) {
139
+ return
140
+ }
141
+
142
+ locationOptions.value = [
143
+ ...locationOptions.value.slice(0, -1),
144
+ { text: network.name, value: network.net_bridge },
145
+ locationOptions.value[locationOptions.value.length - 1],
146
+ ]
147
+ }
148
+
149
+ watch(
150
+ (): any => props.sourceNetworks,
151
+ (newValue) => {
152
+ if (!props.networksTable?.length || !newValue.length) {
153
+ return
154
+ }
155
+ // selectedLocationOld.value = props.sourceNetworks[0].name
156
+ // selectedLocation.value = props.sourceNetworks[0].net_bridge
157
+
158
+ let selectedNetwork: any = null
159
+ model.value.pvm.network_devices = model.value.pvm.network_devices.map(
160
+ (network) => {
161
+ selectedNetwork =
162
+ newValue.find((net) => net.net_bridge === network.net_bridge) ||
163
+ newValue[0]
164
+
165
+ network.network = selectedNetwork.name
166
+ // network.model = props.networksTable[0].model
167
+ // network.network = props.sourceNetworks[0].name
168
+ // network.net_bridge = props.sourceNetworks[0].net_bridge
169
+ return network
170
+ }
171
+ )
172
+ selectedLocationOld.value = selectedNetwork.net_bridge
173
+ selectedLocation.value = selectedNetwork.net_bridge
174
+
175
+ locationOptions.value = [
176
+ {
177
+ text: selectedNetwork.name,
178
+ value: selectedNetwork.net_bridge,
179
+ },
180
+ { text: `${localization.value.common.browse}...`, value: 'browser' },
181
+ ]
182
+ },
183
+ { immediate: true }
184
+ )
185
+
186
+ const findNetwork = (net_bridge: string): any => {
187
+ return props.sourceNetworks.find(
188
+ (network) => network.net_bridge === net_bridge
189
+ )
190
+ }
191
+ </script>
192
+
193
+ <style lang="scss" scoped>
194
+ .table-view-wrapper {
195
+ height: inherit;
196
+ .networks-table {
197
+ height: inherit;
198
+ :deep(.datagrid-outer-wrapper) {
199
+ height: inherit;
200
+ margin-top: 0;
201
+ }
202
+ :deep(.datagrid) {
203
+ padding-top: 0;
204
+ height: inherit;
205
+ }
206
+ &__select {
207
+ width: 100%;
208
+ height: 24px;
209
+ min-width: 107px;
210
+ & > select {
211
+ height: 100%;
212
+ }
213
+ }
214
+ }
215
+ }
216
+ </style>
@@ -0,0 +1,32 @@
1
+ <template>
2
+ <div class="select">
3
+ <select
4
+ id="import-vms-network-model-field"
5
+ v-model="adapterTypeLocal"
6
+ data-id="import-vms-network-model-field"
7
+ class="import-vms-network-model-field"
8
+ >
9
+ <option
10
+ v-for="(item, key) in adapterTypeOptions"
11
+ :key="key"
12
+ :value="item.value"
13
+ :disabled="item.disabled"
14
+ >
15
+ {{ item.text }}
16
+ </option>
17
+ </select>
18
+ </div>
19
+ </template>
20
+
21
+ <script setup lang="ts">
22
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
23
+ import {
24
+ adapterTypeOptionsConfig
25
+ } from '~/components/common/pages/backups/modals/restore/networks/table/adapterType/lib/config/options'
26
+
27
+ const adapterTypeLocal = defineModel<string>()
28
+
29
+ const adapterTypeOptions = ref<UI_I_OptionItem[]>(adapterTypeOptionsConfig)
30
+ </script>
31
+
32
+ <style scoped></style>
@@ -0,0 +1,8 @@
1
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
2
+
3
+ export const adapterTypeOptionsConfig: UI_I_OptionItem[] = [
4
+ { text: 'Paravirtual', value: 'virtio' },
5
+ { text: 'E1000', value: 'e1000' },
6
+ { text: 'RTL8139', value: 'rtl8139' },
7
+ { text: 'VMXNET 3', value: 'vmxnet3' },
8
+ ]
@@ -0,0 +1,82 @@
1
+ import type {
2
+ UI_I_HeadItem,
3
+ UI_I_BodyItem,
4
+ } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
5
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
6
+ import { constructHeadItem } from '~/components/atoms/table/dataGrid/lib/utils/constructDataTable'
7
+ // import { networkTableItemKeys } from '~/components/common/importVms/select/networks/table/lib/config/tableKeys'
8
+ // TODO fix
9
+ export const networkTableItemKeys = [
10
+ 'import_source_id',
11
+ 'mac',
12
+ 'target',
13
+ 'network',
14
+ ]
15
+
16
+ const getItems = (
17
+ localization: UI_I_Localization
18
+ ): [string, boolean, string, string][] => {
19
+ /* vm, networkAdapter, sourceNetwork, destinationNetwork */
20
+ return [
21
+ [localization.common.networkName, true, '25%', networkTableItemKeys[0]],
22
+ [localization.common.macAddress, true, '25%', networkTableItemKeys[1]],
23
+ [localization.common.adapterType, true, '25%', networkTableItemKeys[2]],
24
+ [localization.common.networkInProcurator, true, '25%', networkTableItemKeys[3]],
25
+ ]
26
+ }
27
+
28
+ export const headItems = (localization: UI_I_Localization): UI_I_HeadItem[] => {
29
+ const result: UI_I_HeadItem[] = []
30
+ getItems(localization).forEach((item, i) => {
31
+ const col = i === 3 || i === 2 ? 'select' : `col${i}`
32
+ result.push(constructHeadItem(col, item[0], item[3], false, item[2]))
33
+ })
34
+ return result
35
+ }
36
+
37
+ export const bodyItems = (data: any[]): UI_I_BodyItem[][] => {
38
+ const bodyItems: UI_I_BodyItem[][] = []
39
+
40
+ data.forEach((network: any, key: number) => {
41
+ const dataAdapterType = {
42
+ key,
43
+ id: `${network.vm_name}-select`,
44
+ sourceNetwork: network.source_network,
45
+ disabled: false,
46
+ type: 'select-adapter',
47
+ network: network.network,
48
+ }
49
+ const dataSelectNetwork = {
50
+ key,
51
+ id: `${network.vm_name}-select`,
52
+ type: 'select-network',
53
+ network: network.network,
54
+ }
55
+
56
+ bodyItems.push([
57
+ {
58
+ key: 'col0',
59
+ text: network[networkTableItemKeys[0]],
60
+ id: key,
61
+ },
62
+ {
63
+ key: 'col1',
64
+ text: network[networkTableItemKeys[1]],
65
+ id: key,
66
+ },
67
+ {
68
+ key: 'select',
69
+ text: network[networkTableItemKeys[2]],
70
+ data: dataAdapterType,
71
+ id: key,
72
+ },
73
+ {
74
+ key: 'select',
75
+ text: network[networkTableItemKeys[3]],
76
+ data: dataSelectNetwork,
77
+ id: key,
78
+ },
79
+ ])
80
+ })
81
+ return bodyItems
82
+ }
@@ -0,0 +1,10 @@
1
+ import type {
2
+ UI_T_NetworkTableKeysTuple
3
+ } from "~/components/common/pages/backups/modals/restore/networks/table/lib/models/types";
4
+
5
+ export const networkTableItemKeys: UI_T_NetworkTableKeysTuple = [
6
+ 'import_source_id',
7
+ 'mac',
8
+ 'target',
9
+ 'network',
10
+ ]
@@ -0,0 +1,6 @@
1
+ export type UI_T_NetworkTableKeysTuple = [
2
+ 'import_source_id',
3
+ 'mac',
4
+ 'target',
5
+ 'network'
6
+ ]
@@ -0,0 +1,61 @@
1
+ <template>
2
+ <div class="select-restore-type flex">
3
+ <atoms-list-select-list
4
+ v-model="model.restore_code"
5
+ :items="backupTypes"
6
+ class="select"
7
+ />
8
+ <p class="description">
9
+ {{ description }}
10
+ </p>
11
+ </div>
12
+ </template>
13
+
14
+ <script lang="ts" setup>
15
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
16
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
17
+ // import type { UI_I_RestoreForm } from '~/components/common/pages/backups/modals/lib/models/interfaces'
18
+ import { backupsTypesFunc } from '~/components/common/pages/backups/modals/restore/types/lib/config/typeOptions'
19
+ import { descriptionsFunc } from '~/components/common/pages/backups/modals/restore/types/lib/config/descriptions'
20
+
21
+ const model = defineModel<I_RestoreForm>({ required: true })
22
+
23
+ const localization = computed<UI_I_Localization>(() => useLocal())
24
+
25
+ const backupTypes = ref<UI_I_OptionItem[]>(backupsTypesFunc(localization.value))
26
+
27
+ const description = computed<string[]>(
28
+ () => descriptionsFunc(localization.value)[model.value.restore_code - 1]
29
+ )
30
+ </script>
31
+
32
+ <style scoped lang="scss">
33
+ .select-restore-type {
34
+ padding-top: 12px;
35
+
36
+ .description {
37
+ color: #333333;
38
+ font-size: 13px;
39
+ }
40
+
41
+ .description,
42
+ .select {
43
+ flex: 1 1 100%;
44
+ margin-right: 5px;
45
+ }
46
+
47
+ :deep(select) {
48
+ background-color: transparent;
49
+ border-color: var(--type-list-border-color);
50
+ }
51
+ }
52
+ </style>
53
+
54
+ <style>
55
+ :root {
56
+ --type-list-border-color: #ccc;
57
+ }
58
+ :root.dark-theme {
59
+ --type-list-border-color: #000;
60
+ }
61
+ </style>
@@ -0,0 +1,7 @@
1
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
2
+
3
+ export const descriptionsFunc = (localization: UI_I_Localization): string[] => [
4
+ localization.common.restoreDiskOnlyDescription,
5
+ localization.common.restoreExistingDescription,
6
+ localization.common.restoreAsNewDescription,
7
+ ]
@@ -0,0 +1,24 @@
1
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
2
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
3
+
4
+ export const backupsTypesFunc = (
5
+ localization: UI_I_Localization,
6
+ ): UI_I_OptionItem[] => {
7
+ return [
8
+ {
9
+ text: localization.common.restoreExisting,
10
+ value: 2,
11
+ testId: 'backup-type-restore-existing',
12
+ },
13
+ {
14
+ text: localization.common.restoreAsNew,
15
+ value: 3,
16
+ testId: 'backup-type-restore-as-new',
17
+ },
18
+ {
19
+ text: localization.common.restoreDiskOnly,
20
+ value: 1,
21
+ testId: 'backup-type-restore-disk-only',
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,75 @@
1
+ <template>
2
+ <div class="backup-actions grid py-0 px-6">
3
+ <button
4
+ v-if="targetType === 'vm'"
5
+ id="create-backup-button"
6
+ v-permission="permission"
7
+ :disabled="isDisabled"
8
+ data-id="create-backup-button"
9
+ class="btn btn-primary btn-sm"
10
+ @click="onSelect('createBackup')"
11
+ >
12
+ {{ localization.common.createBackup }}...
13
+ </button>
14
+ <atoms-tabs
15
+ :items="tabs"
16
+ test-id="vm-backup-tabs"
17
+ size="small"
18
+ class="tabs w-100"
19
+ @change="onSelect"
20
+ />
21
+ </div>
22
+ </template>
23
+
24
+ <script setup lang="ts">
25
+ import type { UI_T_Project } from '~/lib/models/types'
26
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
27
+ import type { UI_I_CollapseNavItem } from '~/components/atoms/collapse/lib/models/interfaces'
28
+ import type {
29
+ UI_T_BackupActionType,
30
+ UI_T_TargetType,
31
+ } from '~/components/common/pages/backups/lib/models/types'
32
+ import type { UI_I_BackupsTreeNode } from '~/components/common/pages/backups/lib/models/interfaces'
33
+ import { backupsTabsFunc } from '~/components/common/pages/backups/tools/lib/config/tabs'
34
+
35
+ const props = defineProps<{
36
+ project: UI_T_Project
37
+ backupsCount: number
38
+ backupsLoading: boolean
39
+ targetType: UI_T_TargetType
40
+ selectedNode: UI_I_BackupsTreeNode | null
41
+ }>()
42
+
43
+ const emits = defineEmits<{
44
+ (event: 'select', value: UI_T_BackupActionType): void
45
+ }>()
46
+
47
+ const localization = computed<UI_I_Localization>(() => useLocal())
48
+
49
+ const permission = computed<string>(() => {
50
+ return props.project === 'sphere' ? 'VirtualMachines.CreateBackup' : ''
51
+ })
52
+
53
+ const tabs = computed<UI_I_CollapseNavItem[]>(() =>
54
+ backupsTabsFunc(
55
+ localization.value,
56
+ isDisabled.value,
57
+ props.backupsCount,
58
+ props.selectedNode,
59
+ props.project
60
+ )
61
+ )
62
+
63
+ const onSelect = (action: UI_T_BackupActionType): void => {
64
+ emits('select', action)
65
+ }
66
+
67
+ const isDisabled = computed<boolean>(() => props.backupsLoading)
68
+ </script>
69
+
70
+ <style scoped lang="scss">
71
+ .backup-actions {
72
+ grid-template-columns: auto 1fr;
73
+ align-items: baseline;
74
+ }
75
+ </style>
@@ -0,0 +1,36 @@
1
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
2
+ import type { UI_I_CollapseNavItem } from '~/components/atoms/collapse/lib/models/interfaces'
3
+ import type { UI_I_BackupsTreeNode } from '~/components/common/pages/backups/lib/models/interfaces'
4
+ import type { UI_T_Project } from '~/lib/models/types'
5
+
6
+ export const backupsTabsFunc = (
7
+ localization: UI_I_Localization,
8
+ isDisabled: boolean,
9
+ snapshotsCount: number,
10
+ selectedNode: UI_I_BackupsTreeNode | null,
11
+ project: UI_T_Project
12
+ ): UI_I_CollapseNavItem[] => {
13
+ return [
14
+ {
15
+ text: localization.common.restore.toUpperCase(),
16
+ value: 'restore',
17
+ disabled: isDisabled || selectedNode?.type !== 'backup',
18
+ testId: 'restore-backup',
19
+ permission: project ? 'VirtualMachines.RestoreBackup' : '',
20
+ },
21
+ {
22
+ text: localization.common.delete.toUpperCase(),
23
+ value: 'deleteBackup',
24
+ disabled: isDisabled || selectedNode?.type !== 'backup',
25
+ testId: 'delete-backup',
26
+ permission: project ? 'VirtualMachines.DeleteBackup' : '',
27
+ },
28
+ {
29
+ text: localization.common.deleteAll.toUpperCase(),
30
+ value: 'deleteAll',
31
+ disabled: isDisabled || !snapshotsCount,
32
+ testId: 'delete-all-backups',
33
+ permission: project ? 'VirtualMachines.DeleteBackups' : '',
34
+ },
35
+ ]
36
+ }
@@ -3,3 +3,38 @@ export interface UI_I_ModalPayloadSchedulerData<T = any> {
3
3
  editTask: false
4
4
  data: T
5
5
  }
6
+
7
+ export interface API_UI_I_ScheduledTasksTableItem {
8
+ rid: string
9
+ name: string
10
+ description: string
11
+ sheduler: string
12
+ target: string
13
+ cron: string
14
+ args: string
15
+ notify_emails: string
16
+ toggle: boolean
17
+ initiator: string
18
+ last_modified: number
19
+ next_run: number
20
+ last_5_run: {
21
+ tid: string
22
+ start: number
23
+ end: number
24
+ duration: number
25
+ result: string
26
+ task_id: string
27
+ }[]
28
+ }
29
+ export interface UI_I_ScheduledTasksTableItem
30
+ extends API_UI_I_ScheduledTasksTableItem {}
31
+
32
+ export interface UI_I_CreateScheduledTaskArgs {
33
+ name: string
34
+ description: string
35
+ toggle: boolean
36
+ target: string
37
+ cron_2: string
38
+ notify_emails: string
39
+ args: string
40
+ }
@@ -0,0 +1,16 @@
1
+ export type UI_T_ScheduledTasksActionsType =
2
+ | 'power-on'
3
+ | 'shut-down-guest-os'
4
+ | 'restart-guest-os'
5
+ | 'power-off'
6
+ | 'suspend'
7
+ | 'reset'
8
+ | 'take-snapshot'
9
+ | 'migrate'
10
+ | 'edit'
11
+ | 'run'
12
+ | 'remove'
13
+ | 'clone-vm'
14
+ | 'create-backup'
15
+ // | 'new-backup-rule'
16
+ // | 'apply-the-rule'