From 8c85fdd7b5f4b2561d5dd98764d9c633e9d51a7a Mon Sep 17 00:00:00 2001 From: Johannes Zellner Date: Sat, 20 Dec 2025 08:49:35 +0100 Subject: [PATCH] Use ActionBar for email related lists --- dashboard/src/views/EmailMailboxesView.vue | 22 +++++++---------- dashboard/src/views/EmailMailinglistsView.vue | 24 ++++++++----------- 2 files changed, 18 insertions(+), 28 deletions(-) diff --git a/dashboard/src/views/EmailMailboxesView.vue b/dashboard/src/views/EmailMailboxesView.vue index 036fcf290..377173fc9 100644 --- a/dashboard/src/views/EmailMailboxesView.vue +++ b/dashboard/src/views/EmailMailboxesView.vue @@ -5,9 +5,10 @@ const i18n = useI18n(); const t = i18n.t; import { ref, onMounted, useTemplateRef, inject, computed } from 'vue'; -import { Button, TableView, Dialog, Checkbox, TextInput, Menu } from '@cloudron/pankow'; +import { Button, TableView, Dialog, Checkbox, TextInput } from '@cloudron/pankow'; import { prettyDecimalSize } from '@cloudron/pankow/utils'; import { eachLimit } from 'async'; +import ActionBar from '../components/ActionBar.vue'; import Section from '../components/Section.vue'; import MailboxDialog from '../components/MailboxDialog.vue'; import AppsModel from '../models/AppsModel.js'; @@ -58,26 +59,22 @@ const columns = { width: '80px', }, actions: { - width: '55px', + width: '100px', } }; -const actionMenuModel = ref([]); -const actionMenuElement = useTemplateRef('actionMenuElement'); -function onActionMenu(mailbox, event) { - actionMenuModel.value = [{ +function createActionMenu(mailbox) { + return [{ icon: 'fa-solid fa-pencil-alt', label: t('main.action.edit'), + quickAction: true, action: onAddOrEdit.bind(null, mailbox), - }, { - separator: true, }, { icon: 'fa-solid fa-trash-alt', label: t('main.action.remove'), + quickAction: true, action: onRemove.bind(null, mailbox), }]; - - actionMenuElement.value.open(event, event.currentTarget); } const busy = ref(true); @@ -238,7 +235,6 @@ onMounted(async () => { diff --git a/dashboard/src/views/EmailMailinglistsView.vue b/dashboard/src/views/EmailMailinglistsView.vue index 1c66f2b86..047e42b15 100644 --- a/dashboard/src/views/EmailMailinglistsView.vue +++ b/dashboard/src/views/EmailMailinglistsView.vue @@ -5,8 +5,9 @@ const i18n = useI18n(); const t = i18n.t; import { ref, onMounted, useTemplateRef, computed } from 'vue'; -import { Button, Menu, TableView, Dialog, TextInput } from '@cloudron/pankow'; +import { Button, TableView, Dialog, TextInput } from '@cloudron/pankow'; import { eachLimit } from 'async'; +import ActionBar from '../components/ActionBar.vue'; import Section from '../components/Section.vue'; import MailinglistDialog from '../components/MailinglistDialog.vue'; import DomainsModel from '../models/DomainsModel.js'; @@ -26,25 +27,23 @@ const columns = { sort: true, hideMobile: true, }, - actions: {} + actions: { + width: '100px' + } }; -const actionMenuModel = ref([]); -const actionMenuElement = useTemplateRef('actionMenuElement'); -function onActionMenu(mailinglist, event) { - actionMenuModel.value = [{ +function createActionMenu(mailinglist) { + return [{ icon: 'fa-solid fa-pencil-alt', label: t('main.action.edit'), + quickAction: true, action: onAddOrEdit.bind(null, mailinglist), - }, { - separator: true, }, { icon: 'fa-solid fa-trash-alt', label: t('main.action.remove'), + quickAction: true, action: onRemove.bind(null, mailinglist), }]; - - actionMenuElement.value.open(event, event.currentTarget); } const busy = ref(true); @@ -141,7 +140,6 @@ onMounted(async () => {