Files
cloudron-box/dashboard/src/components/ActionBar.vue
T

62 lines
1.4 KiB
Vue
Raw Normal View History

2025-12-18 17:04:01 +01:00
<script setup>
import { computed, useTemplateRef } from 'vue';
2025-12-19 10:25:37 +01:00
import { Menu, Button, ButtonGroup } from '@cloudron/pankow';
2025-12-18 17:04:01 +01:00
const props = defineProps({
actions: {
type: Array,
default: () => [],
},
});
const quickActions = computed(() => {
return props.actions.filter(a => a.quickAction && !(typeof a.visible !== 'undefined' && !a.visible));
});
const menuElement = useTemplateRef('menuElement');
function onMenu(event) {
menuElement.value.open(event, event.currentTarget);
}
</script>
<template>
<div class="action-bar">
<Menu ref="menuElement" :model="actions" />
2025-12-19 10:25:37 +01:00
<ButtonGroup class="quick-action-group">
2025-12-19 11:00:44 +01:00
<Button tool secondary v-for="quickAction in quickActions" :key="quickAction" :icon="quickAction.icon" @click="quickAction.action()" v-tooltip.top="quickAction.label"/>
2025-12-19 10:25:37 +01:00
<Button tool secondary @click.capture="onMenu($event)" icon="fa-solid fa-ellipsis" v-if="actions.length > 0"/>
</ButtonGroup>
<Button tool plain secondary @click.capture="onMenu($event)" icon="fa-solid fa-ellipsis" v-if="actions.length > 0" class="menu-action" />
2025-12-18 17:04:01 +01:00
</div>
</template>
<style scoped>
.action-bar {
display: flex;
gap: 5px;
justify-content: end;
2025-12-19 11:00:44 +01:00
min-height: 31px;
align-items: center;
2025-12-18 17:04:01 +01:00
}
2025-12-19 10:25:37 +01:00
.menu-action {
display: block;
}
tr:hover .menu-action {
2025-12-18 17:04:01 +01:00
display: none;
}
2025-12-19 10:25:37 +01:00
.quick-action-group {
display: none;
}
tr:hover .quick-action-group {
2025-12-18 17:04:01 +01:00
display: block;
}
2025-12-19 10:25:37 +01:00
2025-12-18 17:04:01 +01:00
</style>