Add some quick actions in users listing

This commit is contained in:
Johannes Zellner
2025-12-18 16:56:19 +01:00
parent 5107cd28c4
commit aa30f6ef98
+10 -13
View File
@@ -8,6 +8,7 @@ import { ref, onMounted, computed, useTemplateRef, inject } from 'vue';
import { Button, Menu, TextInput, SingleSelect, TableView, InputDialog } from '@cloudron/pankow'; import { Button, Menu, TextInput, SingleSelect, TableView, InputDialog } from '@cloudron/pankow';
import { ROLES } from '../constants.js'; import { ROLES } from '../constants.js';
import Section from '../components/Section.vue'; import Section from '../components/Section.vue';
import ActionBar from '../components/ActionBar.vue';
import UserDialog from '../components/UserDialog.vue'; import UserDialog from '../components/UserDialog.vue';
import ImpersonateDialog from '../components/ImpersonateDialog.vue'; import ImpersonateDialog from '../components/ImpersonateDialog.vue';
import InvitationDialog from '../components/InvitationDialog.vue'; import InvitationDialog from '../components/InvitationDialog.vue';
@@ -41,18 +42,15 @@ const usersColumns = {
nowrap: true, nowrap: true,
width: '400px', width: '400px',
}, },
actions: { actions: {}
width: '55px',
}
}; };
const actionMenuModel = ref([]); function createUserActionMenu(user) {
const actionMenuElement = useTemplateRef('actionMenuElement'); return [{
function onUserActionMenu(user, event) {
actionMenuModel.value = [{
icon: 'fa fa-pencil-alt', icon: 'fa fa-pencil-alt',
label: t('main.action.edit'), label: t('main.action.edit'),
disabled: !canEdit(user), disabled: !canEdit(user),
quickAction: true,
action: onEditOrAddUser.bind(null, user), action: onEditOrAddUser.bind(null, user),
}, { }, {
separator: true, separator: true,
@@ -61,6 +59,7 @@ function onUserActionMenu(user, event) {
label: t('users.users.invitationTooltip'), label: t('users.users.invitationTooltip'),
visible: !user.inviteAccepted && !isMe(user) && !user.source, visible: !user.inviteAccepted && !isMe(user) && !user.source,
disabled: !canEdit(user), disabled: !canEdit(user),
quickAction: true,
action: onInvitation.bind(null, user), action: onInvitation.bind(null, user),
}, { }, {
icon: 'fa-solid fa-qrcode', icon: 'fa-solid fa-qrcode',
@@ -87,8 +86,6 @@ function onUserActionMenu(user, event) {
disabled: !canEdit(user) || isMe(user), disabled: !canEdit(user) || isMe(user),
action: onRemoveUser.bind(null, user), action: onRemoveUser.bind(null, user),
}]; }];
actionMenuElement.value.open(event, event.currentTarget);
} }
const external2FA = ref(false); const external2FA = ref(false);
@@ -259,7 +256,6 @@ onMounted(async () => {
<template> <template>
<div class="content"> <div class="content">
<Menu ref="actionMenuElement" :model="actionMenuModel" />
<InputDialog ref="inputDialog" /> <InputDialog ref="inputDialog" />
<UserDialog ref="userDialog" @success="refreshUsers()"/> <UserDialog ref="userDialog" @success="refreshUsers()"/>
<ImpersonateDialog ref="impersonateDialog" /> <ImpersonateDialog ref="impersonateDialog" />
@@ -299,10 +295,11 @@ onMounted(async () => {
{{ user.groupIds.map(gid => groupsById[gid] ? groupsById[gid].name : gid).join(' ') }} {{ user.groupIds.map(gid => groupsById[gid] ? groupsById[gid].name : gid).join(' ') }}
</template> </template>
<template #actions="user"> <template #actions="user">
<div class="table-actions"> <ActionBar :actions="createUserActionMenu(user)" />
<!-- <div class="table-actions"> -->
<!-- <Button tool plain secondary :disabled="!canEdit(user)" @click.capture="onEditOrAddUser(user)" :tooltip="$t('main.action.edit')" icon="fa-solid fa-pencil-alt" /> --> <!-- <Button tool plain secondary :disabled="!canEdit(user)" @click.capture="onEditOrAddUser(user)" :tooltip="$t('main.action.edit')" icon="fa-solid fa-pencil-alt" /> -->
<Button tool plain secondary @click.capture="onUserActionMenu(user, $event)" icon="fa-solid fa-ellipsis" /> <!-- <Button tool plain secondary @click.capture="onUserActionMenu(user, $event)" icon="fa-solid fa-ellipsis" /> -->
</div> <!-- </div> -->
</template> </template>
</TableView> </TableView>
</Section> </Section>