diff --git a/dashboard/src/views/BackupListView.vue b/dashboard/src/views/BackupListView.vue index 7ed5d46b0..9843de53f 100644 --- a/dashboard/src/views/BackupListView.vue +++ b/dashboard/src/views/BackupListView.vue @@ -5,7 +5,7 @@ const i18n = useI18n(); const t = i18n.t; import { ref, onMounted, useTemplateRef } from 'vue'; -import { Button, ButtonGroup, ProgressBar, FormGroup, TextInput, Checkbox, TableView, Dialog } from '@cloudron/pankow'; +import { Button, Menu, ProgressBar, FormGroup, TextInput, Checkbox, TableView, Dialog } from '@cloudron/pankow'; import { prettyLongDate, copyToClipboard } from '@cloudron/pankow/utils'; import { TASK_TYPES } from '../constants.js'; import Section from '../components/Section.vue'; @@ -47,6 +47,28 @@ const columns = { actions: {} }; +const actionMenuModel = ref([]); +const actionMenuElement = useTemplateRef('actionMenuElement'); +function onActionMenu(backup, event) { + actionMenuModel.value = [{ + icon: 'fa-solid fa-circle-info', + // TODO translate + label: 'Info', + action: onInfo.bind(null, backup), + }, { + icon: 'fa-solid fa-pencil-alt', + label: t('backups.listing.tooltipEditBackup'), + action: onEdit.bind(null, backup), + }, { + icon: 'fa-solid fa-file-alt', + label: t('backups.listing.tooltipDownloadBackupConfig'), + action: onDownloadConfig.bind(null, backup), + }]; + + actionMenuElement.value.open(event, event.currentTarget); +} + + const busy = ref(true); const backups = ref([]); const taskLogsMenu = ref([]); @@ -321,6 +343,8 @@ onMounted(async () => {