Use popover in user widget

This commit is contained in:
Christian Cueni 2019-07-18 13:38:22 +02:00
parent b19419af69
commit ea9822562a
8 changed files with 76 additions and 14 deletions

View File

@ -5,9 +5,7 @@
<logo></logo> <logo></logo>
</router-link> </router-link>
<div class="user-header"> <div class="user-header">
<router-link to="/me/activity"> <user-widget v-bind="me"></user-widget>
<user-widget v-bind="me"></user-widget>
</router-link>
<logout-widget></logout-widget> <logout-widget></logout-widget>
</div> </div>
<book-navigation v-if="showSubnavigation"> <book-navigation v-if="showSubnavigation">

View File

@ -12,7 +12,7 @@
</template> </template>
<script> <script>
import WidgetPopover from '@/components/rooms/WidgetPopover'; import WidgetPopover from '@/components/WidgetPopover';
import Ellipses from '@/components/icons/Ellipses.vue'; import Ellipses from '@/components/icons/Ellipses.vue';
export default { export default {
@ -31,6 +31,7 @@
<style scoped lang="scss"> <style scoped lang="scss">
@import "@/styles/_variables.scss"; @import "@/styles/_variables.scss";
@import "@/styles/_mixins.scss";
.more-options { .more-options {
display: flex; display: flex;
@ -54,6 +55,7 @@
&__popover { &__popover {
width: 180px; width: 180px;
@include popover-defaults();
} }
} }
</style> </style>

View File

@ -1,21 +1,58 @@
<template> <template>
<div class="user-widget" :class="{'user-widget--is-profile': isProfile}"> <div class="user-widget" :class="{'user-widget--is-profile': isProfile}">
<div class="user-widget__avatar"> <div class="user-widget__avatar" @click="toggleShowPopover()">
<avatar :avatar-url="avatarUrl" :icon-highlighted="isProfile" /> <avatar :avatar-url="avatarUrl" :icon-highlighted="isProfile"/>
</div> </div>
<span class="user-widget__name">{{firstName}} {{lastName}}</span> <!--span class="user-widget__name">{{firstName}} {{lastName}}</span>
<span class="user-widget__date" v-if="date">{{date}}</span> <span class="user-widget__date" v-if="date">{{date}}</span-->
<widget-popover v-if="showPopover"
@hide-me="showPopover == false"
class="user-widget__popover">
<li class="popover-links__link">{{firstName}} {{lastName}}</li>
<li class="popover-links__link">
<router-link to="/me/activity">Aktivität</router-link>
</li>
<li class="popover-links__link">
<router-link to="/me/profile" >Profil</router-link>
</li>
<li class="popover-links__link">
<router-link to="/me/myclasses">Klassenliste</router-link>
</li>
<li class="popover-links__link" data-cy="logout" @click="logout()"><a>Logout</a>
</li>
</widget-popover>
</div> </div>
</template> </template>
<script> <script>
import LOGOUT_MUTATION from '@/graphql/gql/mutations/logoutUser.gql';
import Avatar from '@/components/profile/Avatar'; import Avatar from '@/components/profile/Avatar';
import WidgetPopover from '@/components/WidgetPopover';
export default { export default {
props: ['firstName', 'lastName', 'avatarUrl', 'date'], props: ['firstName', 'lastName', 'avatarUrl', 'date'],
data() {
return {
showPopover: false
}
},
methods: {
toggleShowPopover() {
this.showPopover = !this.showPopover;
},
logout() {
this.$apollo.mutate({
mutation: LOGOUT_MUTATION,
}).then(({data}) => {
if (data.logout.success) { location.replace('/') }
});
}
},
components: { components: {
Avatar Avatar, WidgetPopover
}, },
computed: { computed: {
isProfile() { isProfile() {
@ -32,6 +69,11 @@
color: $color-silver-dark; color: $color-silver-dark;
display: flex; display: flex;
align-items: center; align-items: center;
position: relative;
&__popover {
top: 40px;
}
&__name { &__name {
padding: 0px 10px; padding: 0px 10px;
@ -47,6 +89,7 @@
width: 30px; width: 30px;
height: 30px; height: 30px;
fill: $color-silver-dark; fill: $color-silver-dark;
cursor: pointer;
} }
&--is-profile { &--is-profile {

View File

@ -23,7 +23,7 @@
.widget-popover { .widget-popover {
position: absolute; position: absolute;
right: 0; right: 0;
bottom: -110px; // bottom: -110px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
background-color: $color-white; background-color: $color-white;

View File

@ -5,7 +5,8 @@
<ellipses></ellipses> <ellipses></ellipses>
</a> </a>
<widget-popover v-if="showMenu" <widget-popover v-if="showMenu"
@hide-me="showMenu = false"> @hide-me="showMenu = false"
class="project-actions__popover">
<li class="popover-links__link"><a @click="deleteProject(id)">Projekt löschen</a></li> <li class="popover-links__link"><a @click="deleteProject(id)">Projekt löschen</a></li>
<li class="popover-links__link"><a @click="editProject(id)">Projekt bearbeiten</a></li> <li class="popover-links__link"><a @click="editProject(id)">Projekt bearbeiten</a></li>
<li v-if="!final" class="popover-links__link"><a @click="updateShareState(id, true)">Projekt teilen</a></li> <li v-if="!final" class="popover-links__link"><a @click="updateShareState(id, true)">Projekt teilen</a></li>
@ -18,7 +19,7 @@
<script> <script>
import Ellipses from '@/components/icons/Ellipses.vue'; import Ellipses from '@/components/icons/Ellipses.vue';
import WidgetPopover from '@/components/rooms/WidgetPopover'; import WidgetPopover from '@/components/WidgetPopover';
import DELETE_PROJECT_MUTATION from '@/graphql/gql/mutations/deleteProject.gql'; import DELETE_PROJECT_MUTATION from '@/graphql/gql/mutations/deleteProject.gql';
import PROJECT_QUERY from '@/graphql/gql/projectQuery.gql'; import PROJECT_QUERY from '@/graphql/gql/projectQuery.gql';
@ -100,12 +101,17 @@
<style scoped lang="scss"> <style scoped lang="scss">
@import "@/styles/_variables.scss"; @import "@/styles/_variables.scss";
@import "@/styles/_mixins.scss";
.project-actions { .project-actions {
&__more-link { &__more-link {
cursor: pointer; cursor: pointer;
} }
&__popover {
@include popover-defaults();
}
svg { svg {
width: 30px; width: 30px;
fill: $color-charcoal-dark; fill: $color-charcoal-dark;

View File

@ -5,7 +5,8 @@
<ellipses></ellipses> <ellipses></ellipses>
</a> </a>
<widget-popover v-if="showMenu" <widget-popover v-if="showMenu"
@hide-me="showMenu = false"> @hide-me="showMenu = false"
class="room-actions__popover">
<li class="popover-links__link"><a @click="deleteRoom()">Raum löschen</a></li> <li class="popover-links__link"><a @click="deleteRoom()">Raum löschen</a></li>
<li class="popover-links__link"><a @click="editRoom()">Raum bearbeiten</a></li> <li class="popover-links__link"><a @click="editRoom()">Raum bearbeiten</a></li>
</widget-popover> </widget-popover>
@ -14,7 +15,7 @@
<script> <script>
import Ellipses from '@/components/icons/Ellipses.vue'; import Ellipses from '@/components/icons/Ellipses.vue';
import WidgetPopover from '@/components/rooms/WidgetPopover'; import WidgetPopover from '@/components/WidgetPopover';
import DELETE_ROOM_MUTATION from '@/graphql/gql/mutations/deleteRoom.gql'; import DELETE_ROOM_MUTATION from '@/graphql/gql/mutations/deleteRoom.gql';
import ROOMS_QUERY from '@/graphql/gql/roomsQuery.gql'; import ROOMS_QUERY from '@/graphql/gql/roomsQuery.gql';
@ -66,12 +67,17 @@
<style scoped lang="scss"> <style scoped lang="scss">
@import "@/styles/_variables.scss"; @import "@/styles/_variables.scss";
@import "@/styles/_mixins.scss";
.room-actions { .room-actions {
&__more-link { &__more-link {
cursor: pointer; cursor: pointer;
} }
&__popover {
@include popover-defaults();
}
svg { svg {
width: 30px; width: 30px;
fill: $color-charcoal-dark; fill: $color-charcoal-dark;

View File

@ -142,3 +142,7 @@
@mixin light-border($border-position) { @mixin light-border($border-position) {
border-#{$border-position}: 1px solid $color-silver; border-#{$border-position}: 1px solid $color-silver;
} }
@mixin popover-defaults() {
bottom: $popover-default-bottom;
}

View File

@ -77,3 +77,6 @@ $font-weight-semibold: 600;
$font-weight-regular: 400; $font-weight-regular: 400;
$default-line-height: 1.5; $default-line-height: 1.5;
// popover
$popover-default-bottom: -110px;