11<template >
2- <ion-card @click =" setUser()" :button =" true" >
2+ <ion-card @click =" setUser()" :button =" true" :disabled = " connect.isLoading " >
33 <ion-avatar >
44 <img v-if =" userPhoto?.data" :src =" `data:${userPhoto.content_type};base64,${userPhoto.data}`" />
55 <ion-icon v-else :icon =" personCircleOutline" />
66 </ion-avatar >
7+ <ion-spinner class =" loading-spinner" :class =" connect.isLoading ? 'show' : ''" name =" crescent" />
78 <ion-card-header >
89 <ion-card-title class =" ion-text-center" >{{ props.user?._id }}</ion-card-title >
910 <ion-card-subtitle class =" ion-text-center" >
1516
1617<script setup>
1718import { personCircleOutline } from ' ionicons/icons'
18- import { tryAndToastError } from ' @/helpers/toast'
19- import { useMainStore , useUser } from ' @/store'
19+ import { useConnect , useMainStore , useUser } from ' @/store'
2020import { useIonRouter } from ' @ionic/vue'
2121
2222// eslint-disable-next-line no-undef
2323const props = defineProps ([' user' ])
24- const store = useMainStore ()
24+ const mainStore = useMainStore ()
25+ const connect = useConnect ()
2526const userStore = useUser ()
2627const router = useIonRouter ()
2728
2829const userPhoto = computed (() => props? .user ? ._attachments [' photo.jpg' ])
2930
3031async function setUser () {
31- router .push (' /' )
3232 userStore .setUser (props .user )
33- await tryAndToastError (() => store .signIn ({ silent: true }))
33+ await mainStore .signIn ({ silent: true })
34+ router .push (' /' )
3435}
3536
3637< / script>
3738
3839< style lang= " scss" scoped>
3940ion- card {
40- -- avatar- size: 100px ;
41- -- card- width: 182px ;
42- width : var ( -- card - width);
41+ -- avatar- size: 120px ;
42+ -- card- width: 200px ;
43+
4344 background: transparent;
45+ box- shadow: none;
4446
45- ion- avatar {
47+ & :: part (native ) {
48+ display: grid;
49+ grid- template: var (-- avatar- size) auto / var (-- card- width);
50+ }
51+
52+ ion- avatar, ion- spinner .loading - spinner {
53+ grid- area: 1 / 1 / 2 / 2 ;
4654 display: block;
4755 margin: 10px auto 0 ;
56+ padding: 10px ;
4857 height: var (-- avatar- size);
4958 width: var (-- avatar- size);
5059 }
5160
61+ ion- spinner .loading - spinner {
62+ background: rgba (255 ,255 ,255 ,0.5 );
63+ backdrop- filter: blur (3px );
64+ opacity: 0 ;
65+ transition: opacity 0 .5s ease;
66+
67+ [data- theme= dark] & {
68+ background: rgba (0 ,0 ,0 ,0.5 );
69+ }
70+
71+ & .show {
72+ opacity: 1 ;
73+ }
74+ }
75+
5276 ion- icon {
5377 display: block;
5478 font- size: var (-- avatar- size);
5579 }
56- }
5780
81+ ion- card- header {
82+ grid- area: 2 / 1 / 3 / 2 ;
83+ }
84+ }
5885< / style>
0 commit comments