From 07b9676f0d9d5b77cb9e8822795a8ad5fa400545 Mon Sep 17 00:00:00 2001 From: Thomas Citharel <tcit@tcit.fr> Date: Wed, 7 Nov 2018 08:32:22 +0100 Subject: [PATCH] Fix account component Signed-off-by: Thomas Citharel <tcit@tcit.fr> --- js/src/components/Account/Account.vue | 350 +++++++++++++------------- 1 file changed, 178 insertions(+), 172 deletions(-) diff --git a/js/src/components/Account/Account.vue b/js/src/components/Account/Account.vue index bcd4a0fcc..068348637 100644 --- a/js/src/components/Account/Account.vue +++ b/js/src/components/Account/Account.vue @@ -1,177 +1,173 @@ <template> <v-layout row> - <v-flex xs12 sm6 offset-sm3> - <ApolloQuery :query="FETCH_ACTOR" :variables="{ name }"> - <template slot-scope="{ result: { loading, error, data } }"> - <v-progress-circular v-if="loading" indeterminate color="primary"></v-progress-circular> - <v-card v-if="data"> - <v-img :src="data.actor.banner || 'https://picsum.photos/400/'" height="300px"> - <v-layout column class="media"> - <v-card-title> - <v-btn icon @click="$router.go(-1)"> - <v-icon>chevron_left</v-icon> - </v-btn> - <v-spacer></v-spacer> - <!-- <v-btn icon class="mr-3" v-if="actor.id === data.actor.id"> - <v-icon>edit</v-icon> - </v-btn> --> - <v-menu bottom left> - <v-btn icon slot="activator"> - <v-icon>more_vert</v-icon> - </v-btn> - <v-list> - <!-- <v-list-tile @click="logoutUser()" v-if="actor.id === data.actor.id"> - <v-list-tile-title>User logout</v-list-tile-title> - </v-list-tile> - <v-list-tile @click="deleteAccount()" v-if="actor.id === data.actor.id"> - <v-list-tile-title>Delete</v-list-tile-title> - </v-list-tile> --> - </v-list> - </v-menu> - </v-card-title> + <v-flex xs12 sm6 offset-sm3> + <v-progress-circular v-if="$apollo.loading" indeterminate color="primary"></v-progress-circular> + <v-card v-if="actor"> + <v-img :src="actor.banner || 'https://picsum.photos/400/'" height="300px"> + <v-layout column class="media"> + <v-card-title> + <v-btn icon @click="$router.go(-1)"> + <v-icon>chevron_left</v-icon> + </v-btn> <v-spacer></v-spacer> - <div class="text-xs-center"> - <v-avatar size="125px"> - <img v-if="!data.actor.avatarUrl" - class="img-circle elevation-7 mb-1" - src="https://picsum.photos/125/125/" - > - <img v-else - class="img-circle elevation-7 mb-1" - :src="data.actor.avatarUrl" - > - </v-avatar> - </div> - <v-container fluid grid-list-lg> - <v-layout row> - <v-flex xs7> - <div class="headline">{{ data.actor.name }}</div> - <div><span class="subheading">@{{ data.actor.preferredUsername }}<span v-if="data.actor.domain">@{{ data.actor.domain }}</span></span></div> - <v-card-text v-if="data.actor.description" v-html="data.actor.description"></v-card-text> - </v-flex> - </v-layout> - </v-container> - </v-layout> - </v-img> - <v-list three-line> - <v-list-tile> - <v-list-tile-action> - <v-icon color="indigo">phone</v-icon> - </v-list-tile-action> - <v-list-tile-content> - <v-list-tile-title>(323) 555-6789</v-list-tile-title> - <v-list-tile-sub-title>Work</v-list-tile-sub-title> - </v-list-tile-content> - <v-list-tile-action> - <v-icon dark>chat</v-icon> - </v-list-tile-action> - </v-list-tile> - <v-divider inset></v-divider> - <v-list-tile> - <v-list-tile-action> - <v-icon color="indigo">mail</v-icon> - </v-list-tile-action> - <v-list-tile-content> - <v-list-tile-title>ali_connors@example.com</v-list-tile-title> - <v-list-tile-sub-title>Work</v-list-tile-sub-title> - </v-list-tile-content> - </v-list-tile> - <v-divider inset></v-divider> - <v-list-tile> - <v-list-tile-action> - <v-icon color="indigo">location_on</v-icon> - </v-list-tile-action> - <v-list-tile-content> - <v-list-tile-title>1400 Main Street</v-list-tile-title> - <v-list-tile-sub-title>Orlando, FL 79938</v-list-tile-sub-title> - </v-list-tile-content> - </v-list-tile> - </v-list> - <v-container fluid grid-list-md v-if="data.actor.participatingEvents && data.actor.participatingEvents.length > 0"> - <v-subheader>Participated at</v-subheader> - <v-layout row wrap> - <v-flex v-for="event in data.actor.participatingEvents" :key="event.id"> - <v-card> - <v-img - class="black--text" - height="200px" - src="https://picsum.photos/400/200/" - > - <v-container fill-height fluid> - <v-layout fill-height> - <v-flex xs12 align-end flexbox> - <span class="headline">{{ event.title }}</span> - </v-flex> - </v-layout> - </v-container> - </v-img> - <v-card-title> - <div> - <span class="grey--text">{{ event.startDate | formatDate }} à {{ event.location }}</span><br> - <p>{{ event.description }}</p> - <p v-if="event.organizer">Organisé par <router-link :to="{name: 'Account', params: {'id': event.organizer.id}}">{{ event.organizer.username }}</router-link></p> - </div> - </v-card-title> - <v-card-actions> - <v-spacer></v-spacer> - <v-btn icon> - <v-icon>favorite</v-icon> - </v-btn> - <v-btn icon> - <v-icon>bookmark</v-icon> - </v-btn> - <v-btn icon> - <v-icon>share</v-icon> - </v-btn> - </v-card-actions> - </v-card> - </v-flex> - </v-layout> - </v-container> - <v-container fluid grid-list-md v-if="data.actor.organizedEvents && data.actor.organizedEvents.length > 0"> - <v-subheader>Organized events</v-subheader> - <v-layout row wrap> - <v-flex v-for="event in data.actor.organizedEvents" :key="event.id" md6> - <v-card> - <v-img - height="200px" - src="https://picsum.photos/400/200/" - /> - <v-card-title primary-title> - <div> - <router-link :to="{name: 'Event', params: {uuid: event.uuid}}"> - <div class="headline">{{ event.title }}</div> - </router-link> - <span class="grey--text" v-html="nl2br(event.description)"></span> - </div> - </v-card-title> - - <!-- <v-card-title> - <div> - <span class="grey--text" v-if="event.addressType === 'physical'">{{ event.startDate }} à {{ event.location }}</span><br> - <p v-if="event.organizer">Organisé par <router-link :to="{name: 'Account', params: {'id': event.organizer.id}}">{{ event.organizer.username }}</router-link></p> - </div> - </v-card-title> --> - <v-card-actions> - <v-spacer></v-spacer> - <v-btn icon> - <v-icon>favorite</v-icon> - </v-btn> - <v-btn icon> - <v-icon>bookmark</v-icon> - </v-btn> - <v-btn icon> - <v-icon>share</v-icon> - </v-btn> - </v-card-actions> - </v-card> - </v-flex> - </v-layout> - </v-container> - </v-card> - </template> - </ApolloQuery> - </v-flex> + <!-- <v-btn icon class="mr-3" v-if="actor.id === actor.id"> + <v-icon>edit</v-icon> + </v-btn> --> + <v-menu bottom left> + <v-btn icon slot="activator"> + <v-icon>more_vert</v-icon> + </v-btn> + <v-list> + <!-- <v-list-tile @click="logoutUser()" v-if="actor.id === actor.id"> + <v-list-tile-title>User logout</v-list-tile-title> + </v-list-tile> + <v-list-tile @click="deleteAccount()" v-if="actor.id === actor.id"> + <v-list-tile-title>Delete</v-list-tile-title> + </v-list-tile> --> + </v-list> + </v-menu> + </v-card-title> + <v-spacer></v-spacer> + <div class="text-xs-center"> + <v-avatar size="125px"> + <img v-if="!actor.avatarUrl" + class="img-circle elevation-7 mb-1" + src="https://picsum.photos/125/125/" + > + <img v-else + class="img-circle elevation-7 mb-1" + :src="actor.avatarUrl" + > + </v-avatar> + </div> + <v-container fluid grid-list-lg> + <v-layout row> + <v-flex xs7> + <div class="headline">{{ actor.name }}</div> + <div><span class="subheading">@{{ actor.preferredUsername }}<span v-if="actor.domain">@{{ actor.domain }}</span></span></div> + <v-card-text v-if="actor.description" v-html="actor.description"></v-card-text> + </v-flex> + </v-layout> + </v-container> + </v-layout> + </v-img> + <v-list three-line> + <v-list-tile> + <v-list-tile-action> + <v-icon color="indigo">phone</v-icon> + </v-list-tile-action> + <v-list-tile-content> + <v-list-tile-title>(323) 555-6789</v-list-tile-title> + <v-list-tile-sub-title>Work</v-list-tile-sub-title> + </v-list-tile-content> + <v-list-tile-action> + <v-icon dark>chat</v-icon> + </v-list-tile-action> + </v-list-tile> + <v-divider inset></v-divider> + <v-list-tile> + <v-list-tile-action> + <v-icon color="indigo">mail</v-icon> + </v-list-tile-action> + <v-list-tile-content> + <v-list-tile-title>ali_connors@example.com</v-list-tile-title> + <v-list-tile-sub-title>Work</v-list-tile-sub-title> + </v-list-tile-content> + </v-list-tile> + <v-divider inset></v-divider> + <v-list-tile> + <v-list-tile-action> + <v-icon color="indigo">location_on</v-icon> + </v-list-tile-action> + <v-list-tile-content> + <v-list-tile-title>1400 Main Street</v-list-tile-title> + <v-list-tile-sub-title>Orlando, FL 79938</v-list-tile-sub-title> + </v-list-tile-content> + </v-list-tile> + </v-list> + <v-container fluid grid-list-md v-if="actor.participatingEvents && actor.participatingEvents.length > 0"> + <v-subheader>Participated at</v-subheader> + <v-layout row wrap> + <v-flex v-for="event in actor.participatingEvents" :key="event.id"> + <v-card> + <v-img + class="black--text" + height="200px" + src="https://picsum.photos/400/200/" + > + <v-container fill-height fluid> + <v-layout fill-height> + <v-flex xs12 align-end flexbox> + <span class="headline">{{ event.title }}</span> + </v-flex> + </v-layout> + </v-container> + </v-img> + <v-card-title> + <div> + <span class="grey--text">{{ event.startDate | formatDate }} à {{ event.location }}</span><br> + <p>{{ event.description }}</p> + <p v-if="event.organizer">Organisé par <router-link :to="{name: 'Account', params: {'id': event.organizer.id}}">{{ event.organizer.username }}</router-link></p> + </div> + </v-card-title> + <v-card-actions> + <v-spacer></v-spacer> + <v-btn icon> + <v-icon>favorite</v-icon> + </v-btn> + <v-btn icon> + <v-icon>bookmark</v-icon> + </v-btn> + <v-btn icon> + <v-icon>share</v-icon> + </v-btn> + </v-card-actions> + </v-card> + </v-flex> + </v-layout> + </v-container> + <v-container fluid grid-list-md v-if="actor.organizedEvents && actor.organizedEvents.length > 0"> + <v-subheader>Organized events</v-subheader> + <v-layout row wrap> + <v-flex v-for="event in actor.organizedEvents" :key="event.id" md6> + <v-card> + <v-img + height="200px" + src="https://picsum.photos/400/200/" + /> + <v-card-title primary-title> + <div> + <router-link :to="{name: 'Event', params: {uuid: event.uuid}}"> + <div class="headline">{{ event.title }}</div> + </router-link> + <span class="grey--text" v-html="nl2br(event.description)"></span> + </div> + </v-card-title> + + <!-- <v-card-title> + <div> + <span class="grey--text" v-if="event.addressType === 'physical'">{{ event.startDate }} à {{ event.location }}</span><br> + <p v-if="event.organizer">Organisé par <router-link :to="{name: 'Account', params: {'id': event.organizer.id}}">{{ event.organizer.username }}</router-link></p> + </div> + </v-card-title> --> + <v-card-actions> + <v-spacer></v-spacer> + <v-btn icon> + <v-icon>favorite</v-icon> + </v-btn> + <v-btn icon> + <v-icon>bookmark</v-icon> + </v-btn> + <v-btn icon> + <v-icon>share</v-icon> + </v-btn> + </v-card-actions> + </v-card> + </v-flex> + </v-layout> + </v-container> + </v-card> + </v-flex> </v-layout> </template> @@ -182,7 +178,7 @@ export default { name: 'Account', data() { return { - loading: true, + actor: null, }; }, props: { @@ -191,6 +187,16 @@ export default { required: true, }, }, + apollo: { + actor: { + query: FETCH_ACTOR, + variables() { + return { + name: this.$route.params.name, + }; + }, + }, + }, created() { }, watch: {