bfg-common 1.5.733 → 1.5.735

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 (25) hide show
  1. package/components/common/backup/storage/actions/add/steps/typeMode/tooltip/Tooltip.vue +33 -33
  2. package/components/common/pages/backups/modals/createBackup/CreateBackup.vue +6 -10
  3. package/components/common/pages/backups/modals/createBackup/Old.vue +8 -10
  4. package/components/common/pages/backups/modals/createBackup/datastores/Datastores.vue +6 -0
  5. package/components/common/pages/backups/modals/createBackup/datastores/DatastoresOld.vue +22 -2
  6. package/components/common/pages/backups/modals/createBackup/disks/Disks.vue +6 -0
  7. package/components/common/pages/backups/modals/createBackup/disks/DisksOld.vue +22 -1
  8. package/components/common/pages/backups/modals/createBackup/general/General.vue +7 -1
  9. package/components/common/pages/backups/modals/createBackup/general/GeneralOld.vue +17 -0
  10. package/components/common/pages/backups/modals/createBackup/lib/validation/validations.ts +0 -8
  11. package/components/common/vm/snapshots/DetailView.vue +90 -0
  12. package/components/common/vm/snapshots/Old.vue +71 -0
  13. package/components/common/vm/snapshots/Snapshots.vue +82 -0
  14. package/components/common/vm/snapshots/lib/models/types.ts +8 -0
  15. package/components/common/vm/snapshots/new/New.vue +389 -0
  16. package/components/common/vm/snapshots/new/contextMenuView/ContextMenuView.vue +96 -0
  17. package/components/common/vm/snapshots/new/contextMenuView/lib/config/contextMenuItems.ts +34 -0
  18. package/components/common/vm/snapshots/new/lib/models/interfaces.ts +12 -0
  19. package/components/common/vm/snapshots/new/lib/utils/contextMenu.ts +29 -0
  20. package/components/common/vm/snapshots/new/lib/utils/details.ts +48 -0
  21. package/components/common/vm/snapshots/tools/Tools.vue +56 -0
  22. package/components/common/vm/snapshots/tools/lib/config/tabsPannel.ts +39 -0
  23. package/components/common/wizards/datastore/add/steps/typeMode/tooltip/Tooltip.vue +33 -33
  24. package/package.json +1 -1
  25. package/store/inventory/modules/snapshots/lib/models/interfaces.ts +45 -0
@@ -1,33 +1,33 @@
1
- <template>
2
- <div
3
- id="type-select-help-icon"
4
- class="signpost-container relative flex cursor-pointer"
5
- >
6
- <atoms-the-icon
7
- data-id="toggle-type-select-help-icon"
8
- fill="#0072a3"
9
- width="24px"
10
- height="24px"
11
- name="info-circle"
12
- @click="isShowTypeHelp = !isShowTypeHelp"
13
- />
14
- <atoms-tooltip-signpost
15
- v-if="isShowTypeHelp"
16
- elem-id="type-select-help-icon"
17
- test-id="select-datastore-type"
18
- @hide="isShowTypeHelp = false"
19
- >
20
- <p class="help-desc">
21
- {{ localization.common.datastoreTypeHelpDesc }}
22
- </p>
23
- </atoms-tooltip-signpost>
24
- </div>
25
- </template>
26
- <script setup lang="ts">
27
- import type { UI_I_Localization } from '~/lib/models/interfaces'
28
-
29
- const localization = computed<UI_I_Localization>(() => useLocal())
30
-
31
- const isShowTypeHelp = ref<boolean>(false)
32
- </script>
33
- <style scoped lang="scss"></style>
1
+ <template>
2
+ <div
3
+ id="type-select-help-icon"
4
+ class="signpost-container relative flex cursor-pointer"
5
+ >
6
+ <atoms-the-icon
7
+ data-id="toggle-type-select-help-icon"
8
+ fill="#0072a3"
9
+ width="24px"
10
+ height="24px"
11
+ name="info-circle"
12
+ @click="isShowTypeHelp = !isShowTypeHelp"
13
+ />
14
+ <atoms-tooltip-signpost
15
+ v-if="isShowTypeHelp"
16
+ elem-id="type-select-help-icon"
17
+ test-id="select-datastore-type"
18
+ @hide="isShowTypeHelp = false"
19
+ >
20
+ <p class="help-desc">
21
+ {{ localization.common.datastoreTypeHelpDesc }}
22
+ </p>
23
+ </atoms-tooltip-signpost>
24
+ </div>
25
+ </template>
26
+ <script setup lang="ts">
27
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
28
+
29
+ const localization = computed<UI_I_Localization>(() => useLocal())
30
+
31
+ const isShowTypeHelp = ref<boolean>(false)
32
+ </script>
33
+ <style scoped lang="scss"></style>
@@ -28,7 +28,6 @@
28
28
  :selected-scheme="selectedScheme"
29
29
  :alert-messages="alertMessages"
30
30
  :title="title"
31
- :alert-errors="errors"
32
31
  :is-scheduled-tasks="props.isScheduledTasks"
33
32
  :is-edit-scheduled-tasks="props.isEditScheduledTasks"
34
33
  :target="props.target"
@@ -74,10 +73,11 @@ import {
74
73
  import type {UI_I_NameCheck} from "~/components/common/pages/backups/modals/restore/name/lib/models/interfaces";
75
74
  import type {UI_I_SelectInputItem} from "~/components/common/select/input/lib/models/interfaces";
76
75
  import type {UI_I_TableInfoItem} from "~/components/atoms/table/info/lib/models/interfaces";
76
+ import type {UI_I_ScheduleNewTasksForm} from "~/components/common/pages/scheduledTasks/modals/lib/models/interfaces";
77
77
 
78
78
 
79
79
  const backupForm = defineModel<UI_I_CreateBackupForm>({ required: true })
80
- const schedulerForm = defineModel('schedulerForm', { required: true })
80
+ const schedulerForm = defineModel<UI_I_ScheduleNewTasksForm>('schedulerForm', { required: true })
81
81
 
82
82
  const props = defineProps<{
83
83
  isEdit?: boolean // ToDo проверить на использование
@@ -152,13 +152,13 @@ const validationFunc = async (
152
152
  }
153
153
 
154
154
  if (wizard.isValidateForStep(dynamicSteps.disks, currentStep.id, nextStep.id)) {
155
- const disksValidation = checkDisks(value, backupForm.value, wizard, localization.value, showValidationErrors, onRemoveValidationErrors)
155
+ const disksValidation = checkDisks(value, backupForm.value, wizard, localization.value)
156
156
  value = disksValidation.newValue
157
157
  stepHasError = disksValidation.stepHasError
158
158
  }
159
159
 
160
160
  if (wizard.isValidateForStep(dynamicSteps.datastores, currentStep.id, nextStep.id)) {
161
- const datastoreValidation = checkDatastore(value, backupForm.value, wizard, localization.value, showValidationErrors, onRemoveValidationErrors)
161
+ const datastoreValidation = checkDatastore(value, backupForm.value, wizard, localization.value)
162
162
  value = datastoreValidation.newValue
163
163
  stepHasError = datastoreValidation.stepHasError
164
164
  }
@@ -176,12 +176,8 @@ const validationFunc = async (
176
176
  }
177
177
  }
178
178
 
179
- const errors = ref<string[]>([])
180
- const showValidationErrors = (data: string[]): void => {
181
- errors.value = data
182
- }
183
- const onRemoveValidationErrors = (): void => {
184
- errors.value = []
179
+ const onRemoveValidationErrors = (stepId: number): void => {
180
+ wizard.hideAlertMessagesByStepId(stepId)
185
181
  }
186
182
 
187
183
  const strategyOptions = ref<UI_I_SelectInputItem[]>(
@@ -12,14 +12,6 @@
12
12
  @submit="onFinish"
13
13
  >
14
14
  <template #modalBody="{ selectedStep }">
15
- <atoms-alert
16
- v-show="props.alertErrors.length"
17
- status="alert-danger"
18
- :items="props.alertErrors"
19
- test-id="create-backup-alert"
20
- @remove="emits('remove-validation-errors')"
21
- />
22
-
23
15
  <common-pages-scheduled-tasks-modals-common-new-task-form
24
16
  v-show="selectedStep.id === dynamicSteps.schedulingOptions"
25
17
  v-model="modelSchedulerTask"
@@ -31,6 +23,9 @@
31
23
  v-show="selectedStep.id === dynamicSteps.general"
32
24
  v-model="model"
33
25
  :show="selectedStep.id === dynamicSteps.general"
26
+ :messages-fields="selectedStep.fields"
27
+ :alert-messages="props.alertMessages[dynamicSteps.general]"
28
+ @remove-validation-errors="emits('remove-validation-errors', $event)"
34
29
  />
35
30
 
36
31
  <common-pages-backups-modals-create-backup-disks
@@ -38,6 +33,8 @@
38
33
  v-model="model"
39
34
  :disks="props.disks"
40
35
  :disks-loading="props.disksLoading"
36
+ :alert-messages="props.alertMessages[dynamicSteps.disks]"
37
+ @remove-validation-errors="emits('remove-validation-errors', $event)"
41
38
  />
42
39
 
43
40
  <common-pages-backups-modals-create-backup-datastores
@@ -45,6 +42,8 @@
45
42
  v-model="model"
46
43
  :datastore-table="props.datastoreTable"
47
44
  :datastore-table-loading="props.datastoreTableLoading"
45
+ :alert-messages="props.alertMessages[dynamicSteps.datastores]"
46
+ @remove-validation-errors="emits('remove-validation-errors', $event)"
48
47
  />
49
48
 
50
49
  <common-pages-backups-modals-create-backup-configuration
@@ -98,13 +97,12 @@ const props = defineProps<{
98
97
  disksLoading: boolean
99
98
  datastoreTable: UI_I_BackupDatastoreTable | null
100
99
  datastoreTableLoading: boolean
101
- alertErrors: string[]
102
100
  readyToCompleteData: UI_I_TableInfoItem[]
103
101
  }>()
104
102
 
105
103
  const emits = defineEmits<{
106
104
  (event: 'change-step-create-backup', value: UI_I_WizardStep[]): void
107
- (event: 'remove-validation-errors'): void
105
+ (event: 'remove-validation-errors', value: number): void
108
106
  (event: 'finish'): void
109
107
  (event: 'hide'): void
110
108
  }>()
@@ -10,6 +10,8 @@
10
10
  v-model="model"
11
11
  :datastore-table="props.datastoreTable"
12
12
  :datastore-table-loading="props.datastoreTableLoading"
13
+ :alert-messages="props.alertMessages"
14
+ @remove-validation-errors="emits('remove-validation-errors', $event)"
13
15
  />
14
16
  </template>
15
17
 
@@ -23,6 +25,10 @@ const model = defineModel<UI_I_CreateBackupForm>({ required: true })
23
25
  const props = defineProps<{
24
26
  datastoreTable: UI_I_BackupDatastoreTable | null
25
27
  datastoreTableLoading: boolean
28
+ alertMessages: string[]
29
+ }>()
30
+ const emits = defineEmits<{
31
+ (event: 'remove-validation-errors', value: number): void
26
32
  }>()
27
33
 
28
34
  const { $store }: any = useNuxtApp()
@@ -1,11 +1,20 @@
1
1
  <template>
2
2
  <div class="datastores h-full">
3
+ <atoms-alert
4
+ v-show="props.alertMessages.length"
5
+ status="alert-danger"
6
+ :items="props.alertMessages"
7
+ test-id="create-backup-datastores-alert"
8
+ @remove="onRemoveErrors"
9
+ />
10
+
3
11
  <common-pages-backups-modals-create-backup-datastores-table-view-old-table-view
4
12
  v-model:selected="model.backup_storage"
5
13
  :data-table="props.datastoreTable?.items || []"
6
14
  :total-items="props.datastoreTable?.total_items || 0"
7
15
  :total-pages="props.datastoreTable?.total_pages || 1"
8
16
  :loading="props.datastoreTableLoading"
17
+ class="datastores-table"
9
18
  />
10
19
  </div>
11
20
  </template>
@@ -15,17 +24,28 @@ import type {
15
24
  UI_I_BackupDatastoreTable,
16
25
  UI_I_CreateBackupForm
17
26
  } from '~/components/common/pages/backups/modals/lib/models/interfaces'
27
+ import { dynamicSteps } from '~/components/common/pages/backups/modals/createBackup/lib/config/steps'
28
+
29
+ const model = defineModel<UI_I_CreateBackupForm>({ required: true })
18
30
 
19
31
  const props = defineProps<{
20
32
  datastoreTable: UI_I_BackupDatastoreTable | null
21
33
  datastoreTableLoading: boolean
34
+ alertMessages: string[]
35
+ }>()
36
+ const emits = defineEmits<{
37
+ (event: 'remove-validation-errors', value: number): void
22
38
  }>()
23
39
 
24
- const model = defineModel<UI_I_CreateBackupForm>({ required: true })
25
-
40
+ const onRemoveErrors = (): void => {
41
+ emits('remove-validation-errors', dynamicSteps.datastores)
42
+ }
26
43
  </script>
27
44
 
28
45
  <style lang="scss" scoped>
46
+ .datastores-table {
47
+ margin-top: 5px;
48
+ }
29
49
  .backups-table-content {
30
50
  height: 100%;
31
51
  padding: 0 10px 10px 10px;
@@ -4,6 +4,8 @@
4
4
  v-model="model"
5
5
  :disks="props.disks"
6
6
  :disks-loading="props.disksLoading"
7
+ :alert-messages="props.alertMessages"
8
+ @remove-validation-errors="emits('remove-validation-errors', $event)"
7
9
  />
8
10
  <common-pages-backups-modals-create-backup-disks-new
9
11
  v-else
@@ -24,6 +26,10 @@ const model = defineModel<UI_I_CreateBackupForm>({ required: true })
24
26
  const props = defineProps<{
25
27
  disks: UI_I_Pvm['disk_devices']
26
28
  disksLoading: boolean
29
+ alertMessages: string[]
30
+ }>()
31
+ const emits = defineEmits<{
32
+ (event: 'remove-validation-errors', value: number): void
27
33
  }>()
28
34
 
29
35
  const { $store }: any = useNuxtApp()
@@ -1,11 +1,20 @@
1
1
  <template>
2
2
  <div class="disks h-full">
3
+ <atoms-alert
4
+ v-show="props.alertMessages.length"
5
+ status="alert-danger"
6
+ :items="props.alertMessages"
7
+ test-id="create-backup-disks-alert"
8
+ @remove="onRemoveErrors"
9
+ />
10
+
3
11
  <common-pages-backups-modals-create-backup-disks-table-view-old-table-view
4
12
  v-model:selected="model.disk_devices"
5
13
  :data-table="props.disks"
6
14
  :loading="props.disksLoading"
7
15
  :total-items="props.disks.length"
8
16
  :total-pages="1"
17
+ class="disks-table"
9
18
  />
10
19
  </div>
11
20
  </template>
@@ -15,14 +24,26 @@ import type {
15
24
  UI_I_CreateBackupForm,
16
25
  UI_I_Pvm
17
26
  } from "~/components/common/pages/backups/modals/lib/models/interfaces";
27
+ import { dynamicSteps } from '~/components/common/pages/backups/modals/createBackup/lib/config/steps'
18
28
 
19
29
  const model = defineModel<UI_I_CreateBackupForm>({ required: true })
20
30
 
21
31
  const props = defineProps<{
22
32
  disks: UI_I_Pvm['disk_devices']
23
33
  disksLoading: boolean
34
+ alertMessages: string[]
35
+ }>()
36
+ const emits = defineEmits<{
37
+ (event: 'remove-validation-errors', value: number): void
24
38
  }>()
25
39
 
40
+ const onRemoveErrors = (): void => {
41
+ emits('remove-validation-errors', dynamicSteps.disks)
42
+ }
26
43
  </script>
27
44
 
28
- <style lang="scss" scoped></style>
45
+ <style lang="scss" scoped>
46
+ .disks-table {
47
+ margin-top: 5px;
48
+ }
49
+ </style>
@@ -9,6 +9,8 @@
9
9
  v-else
10
10
  v-model="model"
11
11
  :show="props.show"
12
+ :alert-messages="props.alertMessages"
13
+ @remove-validation-errors="emits('remove-validation-errors', $event)"
12
14
  />
13
15
  </template>
14
16
 
@@ -21,7 +23,11 @@ const model = defineModel<UI_I_CreateBackupForm>({ required: true })
21
23
 
22
24
  const props = defineProps<{
23
25
  show: boolean
24
- messagesFields?: UI_I_ArbitraryObject<UI_I_ErrorFields>
26
+ messagesFields: UI_I_ArbitraryObject<UI_I_ErrorFields>
27
+ alertMessages: string[]
28
+ }>()
29
+ const emits = defineEmits<{
30
+ (event: 'remove-validation-errors', value: number): void
25
31
  }>()
26
32
 
27
33
  const { $store }: any = useNuxtApp()
@@ -1,5 +1,13 @@
1
1
  <template>
2
2
  <div class="general">
3
+ <atoms-alert
4
+ v-show="props.alertMessages.length"
5
+ status="alert-danger"
6
+ :items="props.alertMessages"
7
+ test-id="create-backup-name-alert"
8
+ @remove="onRemoveErrors"
9
+ />
10
+
3
11
  <form @submit.prevent>
4
12
  <div class="field flex pt-4">
5
13
  <label for="general-name">{{ localization.common.name }}:</label>
@@ -29,11 +37,16 @@
29
37
  <script lang="ts" setup>
30
38
  import type { UI_I_Localization } from '~/lib/models/interfaces'
31
39
  import type { UI_I_CreateBackupForm } from '~/components/common/pages/backups/modals/lib/models/interfaces'
40
+ import { dynamicSteps } from '~/components/common/pages/backups/modals/createBackup/lib/config/steps'
32
41
 
33
42
  const model = defineModel<UI_I_CreateBackupForm>({ required: true })
34
43
 
35
44
  const props = defineProps<{
36
45
  show: boolean
46
+ alertMessages: string[]
47
+ }>()
48
+ const emits = defineEmits<{
49
+ (event: 'remove-validation-errors', value: number): void
37
50
  }>()
38
51
 
39
52
  const localization = computed<UI_I_Localization>(() => useLocal())
@@ -51,6 +64,10 @@ watch(
51
64
  }, 0)
52
65
  }
53
66
  )
67
+
68
+ const onRemoveErrors = (): void => {
69
+ emits('remove-validation-errors', dynamicSteps.general)
70
+ }
54
71
  </script>
55
72
 
56
73
  <style lang="scss" scoped>
@@ -76,8 +76,6 @@ export const checkDisks = (
76
76
  backupForm: UI_I_CreateBackupForm,
77
77
  wizard: Wizard,
78
78
  localization: UI_I_Localization,
79
- showValidationErrors: (data: string[]) => void,
80
- onRemoveValidationErrors: () => void
81
79
  ): UI_I_ValidationReturn => {
82
80
  let stepHasError = false
83
81
  const isValidStores = !!backupForm?.disk_devices.length
@@ -87,10 +85,8 @@ export const checkDisks = (
87
85
  fieldMessage: localization.common.diskIsRequired,
88
86
  alertMessage: localization.common.diskIsRequired
89
87
  })
90
- showValidationErrors([localization.common.diskIsRequired])
91
88
  } else if (wizard.hasMessage(dynamicSteps.disks, 'disk_devices')) {
92
89
  value = wizard.removeValidation(dynamicSteps.disks, 'disk_devices', value)
93
- onRemoveValidationErrors()
94
90
  }
95
91
 
96
92
  return {
@@ -104,8 +100,6 @@ export const checkDatastore = (
104
100
  backupForm: UI_I_CreateBackupForm,
105
101
  wizard: Wizard,
106
102
  localization: UI_I_Localization,
107
- showValidationErrors: (data: string[]) => void,
108
- onRemoveValidationErrors: () => void
109
103
  ): UI_I_ValidationReturn => {
110
104
  let stepHasError = false
111
105
  const isValidStorage = !!backupForm?.backup_storage.length
@@ -115,10 +109,8 @@ export const checkDatastore = (
115
109
  fieldMessage: localization.common.datastoreIsRequired,
116
110
  alertMessage: localization.common.datastoreIsRequired
117
111
  })
118
- showValidationErrors([localization.common.datastoreIsRequired])
119
112
  } else if (wizard.hasMessage(dynamicSteps.datastores, 'backup_storage')) {
120
113
  value = wizard.removeValidation(dynamicSteps.datastores, 'backup_storage', value)
121
- onRemoveValidationErrors()
122
114
  }
123
115
 
124
116
  return { stepHasError, newValue: value }
@@ -0,0 +1,90 @@
1
+ <template>
2
+ <div class="detail-view overflow-auto py-0 px-6">
3
+ <table
4
+ v-if="detailData"
5
+ class="table table-noborder"
6
+ data-id="detail-view-table"
7
+ >
8
+ <tbody>
9
+ <tr>
10
+ <td class="left">{{ localization.common.name }}</td>
11
+ <td class="left snapshot-name-label" data-id="vm-snapshot-name">
12
+ {{ detailData.name }}
13
+ </td>
14
+ </tr>
15
+ <tr>
16
+ <td class="left">{{ localization.common.description }}</td>
17
+ <td
18
+ class="left snapshot-name-label"
19
+ data-id="vm-snapshot-description"
20
+ >
21
+ {{ detailData.description }}
22
+ </td>
23
+ </tr>
24
+ <tr>
25
+ <td class="left">{{ localization.common.timestamp }}</td>
26
+ <td class="left snapshot-name-label" data-id="vm-snapshot-timestamp">
27
+ {{ detailData.timestamp }}
28
+ </td>
29
+ </tr>
30
+ <tr>
31
+ <td class="left">{{ localization.common.size }}</td>
32
+ <td class="left snapshot-name-label">{{ detailData.size }}</td>
33
+ </tr>
34
+ <tr>
35
+ <td class="left">
36
+ {{ localization.common.snapshotTheVirtualMachinesMemory }}
37
+ </td>
38
+ <td class="left snapshot-name-label" data-id="vm-snapshot-of-memory">
39
+ {{ detailData.snapshot_the_virtual_machines_memory }}
40
+ </td>
41
+ </tr>
42
+ <tr>
43
+ <td class="left">
44
+ {{ localization.common.quiesceGuestFileSystem }}
45
+ </td>
46
+ <td
47
+ class="left snapshot-name-label"
48
+ data-id="vm-snapshot-file-system"
49
+ >
50
+ {{ detailData.quiesce_guest_file_system }}
51
+ </td>
52
+ </tr>
53
+ </tbody>
54
+ </table>
55
+ </div>
56
+ </template>
57
+
58
+ <script setup lang="ts">
59
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
60
+ import type { UI_I_SnapshotsDetails } from '~/store/inventory/modules/snapshots/lib/models/interfaces'
61
+
62
+ const props = defineProps<{
63
+ detail: UI_I_SnapshotsDetails | null
64
+ }>()
65
+
66
+ const localization = computed<UI_I_Localization>(() => useLocal())
67
+
68
+ const detailData = ref<any | null>(null)
69
+ watch(
70
+ () => props.detail,
71
+ (newValue) => {
72
+ if (!newValue) return
73
+
74
+ detailData.value = newValue
75
+ },
76
+ { immediate: true, deep: true }
77
+ )
78
+ </script>
79
+
80
+ <style scoped lang="scss">
81
+ .detail-view {
82
+ width: 50%;
83
+
84
+ .table {
85
+ .left:not(.snapshot-name-label) {
86
+ width: 320px;
87
+ }
88
+ }
89
+ }
90
+ </style>
@@ -0,0 +1,71 @@
1
+ <template>
2
+ <div class="main-content-snapshots h-full overflow-hidden">
3
+ <common-vm-snapshots-tools
4
+ :snapshots-count="props.snapshotsTree.length"
5
+ :snapshots-loading="props.snapshotsLoading"
6
+ @select="emits('show-modal', $event)"
7
+ />
8
+
9
+ <atoms-loader-pre-loader
10
+ v-show="props.snapshotsLoading"
11
+ id="loader"
12
+ class="snapshots-loading w-full h-full flex items-center justify-center"
13
+ test-id="snapshots-tree-spinner"
14
+ show
15
+ />
16
+ <div class="fill-parent w-full h-full">
17
+ <div
18
+ v-if="props.snapshotsTree.length"
19
+ class="snapshot-view mt-1 flex w-full"
20
+ >
21
+ <common-tree-view
22
+ :loading="props.snapshotsLoading"
23
+ :nodes="props.snapshotsTree"
24
+ @select-node="emits('select-node', $event)"
25
+ @show-nodes="emits('show-nodes', $event)"
26
+ />
27
+ <common-vm-snapshots-detail-view :detail="props.detailData" />
28
+ </div>
29
+ <div v-else class="empty-block flex items-center justify-center w-full">
30
+ {{ localization.common.noSnapshotAvailable }}
31
+ </div>
32
+ </div>
33
+ </div>
34
+ </template>
35
+
36
+ <script setup lang="ts">
37
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
38
+ import type {
39
+ UI_I_SnapshotsDetails,
40
+ UI_I_SnapshotsTreeNode,
41
+ } from '~/store/inventory/modules/snapshots/lib/models/interfaces'
42
+ import type { UI_T_SnapshotActionType } from '~/components/common/vm/snapshots/lib/models/types'
43
+
44
+ const props = defineProps<{
45
+ snapshotsTree: UI_I_SnapshotsTreeNode[]
46
+ snapshotsLoading: boolean
47
+ detailData: UI_I_SnapshotsDetails | null
48
+ }>()
49
+
50
+ const emits = defineEmits<{
51
+ (event: 'show-modal', value: UI_T_SnapshotActionType): void
52
+ (event: 'select-node', value: UI_I_SnapshotsTreeNode): void
53
+ (event: 'show-nodes', value: string): void
54
+ }>()
55
+
56
+ const localization = computed<UI_I_Localization>(() => useLocal())
57
+ </script>
58
+
59
+ <style scoped lang="scss">
60
+ .main-content-snapshots {
61
+ padding: 10px 5px 10px 0;
62
+
63
+ .fill-parent {
64
+ overflow: visible;
65
+
66
+ .snapshot-view {
67
+ height: 90%;
68
+ }
69
+ }
70
+ }
71
+ </style>
@@ -0,0 +1,82 @@
1
+ <template>
2
+ <component
3
+ :is="currentComponent"
4
+ :snapshots-tree="props.snapshotsTree"
5
+ :snapshots-loading="props.snapshotsLoading"
6
+ :detail-data="detailData"
7
+ @show-modal="onShowModal"
8
+ @select-node="onSelectNode"
9
+ @show-nodes="onShowNodes"
10
+ />
11
+ </template>
12
+
13
+ <script setup lang="ts">
14
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
15
+ import type { UI_T_SnapshotActionType } from '~/components/common/vm/snapshots/lib/models/types'
16
+ import type {
17
+ UI_I_SnapshotsDetails,
18
+ UI_I_SnapshotsTreeNode,
19
+ } from '~/store/inventory/modules/snapshots/lib/models/interfaces'
20
+
21
+ const props = defineProps<{
22
+ snapshotsTree: UI_I_SnapshotsTreeNode
23
+ snapshotsLoading: boolean
24
+ }>()
25
+
26
+ const emits = defineEmits<{
27
+ (event: 'select-node', value: UI_I_SnapshotsTreeNode): void
28
+ (event: 'show-nodes', value: string): void
29
+ (event: 'show-modal', value: UI_T_SnapshotActionType): void
30
+ }>()
31
+
32
+ const { $recursion, $store }: any = useNuxtApp()
33
+
34
+ const localization = computed<UI_I_Localization>(() => useLocal())
35
+
36
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
37
+ const currentComponent = computed(() =>
38
+ isNewView.value
39
+ ? defineAsyncComponent(() => import('./new/New.vue'))
40
+ : defineAsyncComponent(() => import('./Old.vue'))
41
+ )
42
+
43
+ const detailData = computed<UI_I_SnapshotsDetails | null>(() => {
44
+ const node: UI_I_SnapshotsTreeNode =
45
+ $recursion.find(props.snapshotsTree, true, 'isActive', 'nodes') || null
46
+
47
+ if (!node) return null
48
+
49
+ let snapshot_the_virtual_machines_memory = ''
50
+ let quiesce_guest_file_system = ''
51
+
52
+ if (isNewView.value) {
53
+ snapshot_the_virtual_machines_memory = node.memory?.enabled ? 'yes' : 'no'
54
+ quiesce_guest_file_system = node.quiesce_fs ? 'yes' : 'no'
55
+ } else {
56
+ snapshot_the_virtual_machines_memory = node.memory?.enabled
57
+ ? localization.value.common.yes
58
+ : localization.value.common.no
59
+ quiesce_guest_file_system = node.quiesce_fs
60
+ ? localization.value.common.yes
61
+ : localization.value.common.no
62
+ }
63
+
64
+ return {
65
+ ...node,
66
+ snapshot_the_virtual_machines_memory,
67
+ quiesce_guest_file_system,
68
+ }
69
+ })
70
+ const onSelectNode = (item: UI_I_SnapshotsTreeNode): void => {
71
+ emits('select-node', item.type === 'location' ? item.parent_id : item.id)
72
+ }
73
+ const onShowNodes = (id: string): void => {
74
+ emits('show-nodes', id)
75
+ }
76
+
77
+ const onShowModal = (action: UI_T_SnapshotActionType): void => {
78
+ emits('show-modal', action)
79
+ }
80
+ </script>
81
+
82
+ <style scoped lang="scss"></style>
@@ -0,0 +1,8 @@
1
+ export type UI_T_SnapshotActionType =
2
+ | 'take'
3
+ | 'edit'
4
+ | 'revert'
5
+ | 'delete'
6
+ | 'delete_all'
7
+ | 'group_take'
8
+ | 'group_delete_all'