1
0
Fork 0
activist/src/components/Sidebar.vue

79 lines
1.8 KiB
Vue
Raw Normal View History

<script lang="ts" setup>
2024-11-24 20:50:39 -05:00
import {ref} from "vue";
import Avatar from 'primevue/avatar';
import Menu from "primevue/menu";
import { userActions } from "@/stores/userActionsStore";
import { useUserStore } from "@/stores/userStore";
2024-11-22 19:38:29 -05:00
import Navigation from "@/components/Navigation.vue";
2024-11-24 20:50:39 -05:00
const userStore = useUserStore();
const logout = () => {
userStore.logout();
};
// Attach handlers.
userActions.map((item) => {
if (item.cmd === 'logout') {
item.command = logout;
}
});
const items = ref(userActions);
const menu = ref();
const toggle = (event) => { menu.value.toggle(event); };
2024-11-22 19:38:29 -05:00
</script>
<template>
<aside>
<Navigation></Navigation>
2024-11-24 20:50:39 -05:00
<div class="mt-auto act-avatar">
<a class="nav-item" @click="toggle">
<div v-if="userStore.isAnonymous">
<Avatar icon="pi pi-user" size="large" shape="circle" />
</div>
<div v-else>
<Avatar v-bind:label="userStore.initials" size="large" shape="circle" />
</div>
<span class="inline lg:hidden">{{ userStore.user.name }}</span>
</a>
2024-11-24 20:50:39 -05:00
<Menu ref="menu" id="overlay_menu" :model="items" :popup="true">
<template #item="{ item, props }">
<a
class="flex items-center"
v-bind:class="{ 'act-useraction': item.needsAuth }"
v-bind="props.action"
v-if="!item.needsAuth || !userStore.isAnonymous">
<span v-bind:class="item.icon" />
<span>{{ item.label }}</span>
</a>
</template>
</Menu>
2024-11-22 19:38:29 -05:00
</div>
</aside>
</template>
2024-11-22 19:38:29 -05:00
<style scoped>
@import "@/assets/nav-items.css";
aside {
background-color: #333;
display: flex;
flex-direction: row;
height: 100%;
2024-11-24 20:50:39 -05:00
.act-avatar {
display: none;
}
}
@media (screen(sm)) {
aside {
flex-direction: column;
2024-11-24 20:50:39 -05:00
.act-avatar {
display: block;
}
}
}
2024-11-22 19:38:29 -05:00
</style>