added loading utilities for every view
This commit is contained in:
		
							parent
							
								
									3bf0467726
								
							
						
					
					
						commit
						ba5a50c35f
					
				
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,9 +1,12 @@ | |||
| <template> | ||||
|   <div> | ||||
|     <v-container> | ||||
|       <AddAmountSkeleton v-if="loading" /> | ||||
|     </v-container> | ||||
|     <div v-for="user in users" :key="users.indexOf(user)"> | ||||
|       <div v-if="isFiltered(user)"> | ||||
|         <v-container> | ||||
|           <v-card> | ||||
|           <v-card :loading="user.loading"> | ||||
|             <v-list-item> | ||||
|               <v-list-item-title class="title" | ||||
|                 >{{ user.firstname }} {{ user.lastname }}</v-list-item-title | ||||
|  | @ -117,9 +120,11 @@ | |||
| 
 | ||||
| <script> | ||||
| import { mapGetters, mapActions } from 'vuex' | ||||
| import AddAmountSkeleton from '../user/Skeleton/AddAmountSkeleton' | ||||
| 
 | ||||
| export default { | ||||
|   name: 'CreditLists', | ||||
|   components: { AddAmountSkeleton }, | ||||
|   props: {}, | ||||
|   data() { | ||||
|     return { | ||||
|  | @ -151,7 +156,8 @@ export default { | |||
|   computed: { | ||||
|     ...mapGetters({ | ||||
|       users: 'barUsers/users', | ||||
|       filter: 'barUsers/filter' | ||||
|       filter: 'barUsers/filter', | ||||
|       loading: 'barUsers/usersLoading' | ||||
|     }) | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -13,6 +13,7 @@ | |||
|           item-text="fullName" | ||||
|           prepend-inner-icon="search" | ||||
|           full-width | ||||
|           :loading="loading" | ||||
|           :search-input.sync="filter" | ||||
|         /> | ||||
|         <v-btn text @click="addUser">Hinzufügen</v-btn> | ||||
|  | @ -48,7 +49,10 @@ export default { | |||
|     } | ||||
|   }, | ||||
|   computed: { | ||||
|     ...mapGetters({ allUsers: 'barUsers/allUsers' }) | ||||
|     ...mapGetters({ | ||||
|       allUsers: 'barUsers/allUsers', | ||||
|       loading: 'barUsers/allUsersLoading' | ||||
|     }) | ||||
|   }, | ||||
|   watch: { | ||||
|     filter(val) { | ||||
|  |  | |||
|  | @ -27,6 +27,7 @@ | |||
|           item-text="fullName" | ||||
|           prepend-inner-icon="search" | ||||
|           full-width | ||||
|           :loading="allUsersLoading" | ||||
|           :search-input.sync="filter" | ||||
|         /> | ||||
|         <v-btn | ||||
|  | @ -62,10 +63,12 @@ | |||
|         </v-expand-transition> | ||||
|       </v-card> | ||||
|     </v-expand-transition> | ||||
|     <TableSkeleton v-if="loading" /> | ||||
|     <div v-for="user in users" :key="users.indexOf(user)"> | ||||
|       <v-card | ||||
|         v-if="user.creditList[year] && isFiltered(user)" | ||||
|         style="margin-top: 3px" | ||||
|         :loading="user.loading" | ||||
|       > | ||||
|         <v-card-title>{{ user.lastname }}, {{ user.firstname }}</v-card-title> | ||||
|         <Table v-bind:user="user" v-bind:year="year" /> | ||||
|  | @ -206,9 +209,10 @@ | |||
| <script> | ||||
| import Table from './Table' | ||||
| import { mapGetters, mapActions } from 'vuex' | ||||
| import TableSkeleton from './Skeleton/TableSkeleton' | ||||
| export default { | ||||
|   name: 'Overview', | ||||
|   components: { Table }, | ||||
|   components: { TableSkeleton, Table }, | ||||
|   props: {}, | ||||
|   data() { | ||||
|     return { | ||||
|  | @ -369,7 +373,9 @@ export default { | |||
|       errorMails: 'finanzerUsers/errorMails', | ||||
|       year: 'finanzerUsers/year', | ||||
|       years: 'finanzerUsers/years', | ||||
|       months: 'finanzerUsers/months' | ||||
|       months: 'finanzerUsers/months', | ||||
|       loading: 'finanzerUsers/usersLoading', | ||||
|       allUsersLoading: 'finanzerUsers/allUsersLoading' | ||||
|     }) | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -4,8 +4,10 @@ | |||
|       <v-card-title> | ||||
|         <v-skeleton-loader type="heading" /> | ||||
|       </v-card-title> | ||||
|       <v-skeleton-loader type="table-thead" /> | ||||
|       <v-skeleton-loader type="table-row-divider@3" /> | ||||
|       <v-container> | ||||
|         <v-skeleton-loader type="table-thead"/> | ||||
|         <v-skeleton-loader type="table-row-divider@3"/> | ||||
|       </v-container> | ||||
|       <v-container fluid> | ||||
|         <v-row align="start" align-content="start"> | ||||
|           <v-col> | ||||
|  | @ -37,8 +39,9 @@ | |||
|             </v-row> | ||||
|             <v-card outlined> | ||||
|               <v-row> | ||||
|                 <v-skeleton-loader type="list-item" /> | ||||
|                 <v-spacer /> | ||||
|                 <v-card-title> | ||||
|                   <v-skeleton-loader style="margin: 3px; margin-left: 10px" type="chip"/> | ||||
|                 </v-card-title> | ||||
|               </v-row> | ||||
|             </v-card> | ||||
|           </v-col> | ||||
|  |  | |||
|  | @ -1,6 +1,7 @@ | |||
| <template> | ||||
|   <v-container v-if="user"> | ||||
|     <v-card> | ||||
|   <v-container > | ||||
|     <AddAmountSkeleton v-if="loading" /> | ||||
|     <v-card v-if="!loading"> | ||||
|       <v-list-item> | ||||
|         <v-list-item-title class="title" | ||||
|           >{{ user.firstname }} {{ user.lastname }}</v-list-item-title | ||||
|  | @ -99,8 +100,10 @@ | |||
| 
 | ||||
| <script> | ||||
|   import {mapGetters, mapActions} from 'vuex' | ||||
|   import AddAmountSkeleton from './Skeleton/AddAmountSkeleton' | ||||
| export default { | ||||
|   name: 'AddAmount', | ||||
|   components: { AddAmountSkeleton }, | ||||
|   data() { | ||||
|     return { | ||||
|       color: 'green accent-4' | ||||
|  | @ -123,7 +126,8 @@ export default { | |||
|   computed: { | ||||
|     ...mapGetters({ | ||||
|       user: 'user/user', | ||||
|       year: 'user/year' | ||||
|       year: 'user/year', | ||||
|       loading: 'user/loading' | ||||
|     }), | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -9,10 +9,12 @@ | |||
|           style="margin-top: 3px" | ||||
|           append-icon="search" | ||||
|           outlined | ||||
|           type="number" | ||||
|           :rules="[isNumber]" | ||||
|         ></v-text-field> | ||||
|       </v-toolbar-items> | ||||
|     </v-toolbar> | ||||
|     <CreditOverviewSkeleton v-if="loading" /> | ||||
|     <div v-for="year in years" :key="years.indexOf(year)"> | ||||
|       <v-card style="margin-top: 3px" v-if="isFiltered(year)"> | ||||
|         <v-card-title>{{ year }}</v-card-title> | ||||
|  | @ -67,9 +69,10 @@ | |||
| <script> | ||||
| import { mapGetters } from 'vuex' | ||||
| import Table from '../finanzer/Table' | ||||
| import CreditOverviewSkeleton from './Skeleton/CreditOverviewSkeleton' | ||||
| export default { | ||||
|   name: 'CreditOverview', | ||||
|   components: { Table }, | ||||
|   components: { CreditOverviewSkeleton, Table }, | ||||
|   data() { | ||||
|     return { | ||||
|       isNumber: value => Number.isInteger(parseInt(value === '' ? 0 : value)) || "Muss eine Zahl sein.", | ||||
|  | @ -89,7 +92,8 @@ export default { | |||
|   }, | ||||
|   computed: { | ||||
|     ...mapGetters({ | ||||
|       user: 'user/user' | ||||
|       user: 'user/user', | ||||
|       loading: 'user/loading' | ||||
|     }), | ||||
|     years() { | ||||
|       let years = [] | ||||
|  |  | |||
|  | @ -0,0 +1,50 @@ | |||
| <template> | ||||
|   <v-card> | ||||
|     <v-card-title> | ||||
|       <v-skeleton-loader type="heading" /> | ||||
|     </v-card-title> | ||||
|     <v-card-text> | ||||
|       <v-row> | ||||
|         <v-col cols="10"> | ||||
|           <v-row> | ||||
|             <v-col> | ||||
|               <v-skeleton-loader type="button" /> | ||||
|             </v-col> | ||||
|             <v-col> | ||||
|               <v-skeleton-loader type="button" /> | ||||
|             </v-col> | ||||
|             <v-col> | ||||
|               <v-skeleton-loader type="button" /> | ||||
|             </v-col> | ||||
|           </v-row> | ||||
|           <v-row> | ||||
|             <v-col> | ||||
|               <v-skeleton-loader type="button" /> | ||||
|             </v-col> | ||||
|             <v-col> | ||||
|               <v-skeleton-loader type="button" /> | ||||
|             </v-col> | ||||
|             <v-col> | ||||
|               <v-skeleton-loader type="button" /> | ||||
|             </v-col> | ||||
|           </v-row> | ||||
|         </v-col> | ||||
|         <v-col align-self="center"> | ||||
|           <v-row> | ||||
|             <v-list-item> | ||||
|               <v-skeleton-loader type="chip" /> | ||||
|             </v-list-item> | ||||
|           </v-row> | ||||
|         </v-col> | ||||
|       </v-row> | ||||
|     </v-card-text> | ||||
|   </v-card> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| export default { | ||||
|   name: 'AddAmountSkeleton' | ||||
| } | ||||
| </script> | ||||
| 
 | ||||
| <style scoped></style> | ||||
|  | @ -0,0 +1,35 @@ | |||
| <template> | ||||
|   <v-card style="margin-top: 3px"> | ||||
|     <v-card-title><v-skeleton-loader type="heading"/></v-card-title> | ||||
|     <v-container> | ||||
|       <v-skeleton-loader type="table-thead" /> | ||||
|       <v-skeleton-loader type="table-row-divider@3" /> | ||||
|     </v-container> | ||||
|     <v-container fluid> | ||||
|       <v-col> | ||||
|         <v-row> | ||||
|           <v-col> | ||||
|             <v-skeleton-loader type="chip" /> | ||||
|           </v-col> | ||||
|           <v-col> | ||||
|             <v-skeleton-loader type="chip" /> | ||||
|           </v-col> | ||||
|           <v-col> | ||||
|             <v-skeleton-loader type="chip" /> | ||||
|           </v-col> | ||||
|           <v-col> | ||||
|             <v-skeleton-loader type="chip" /> | ||||
|           </v-col> | ||||
|         </v-row> | ||||
|       </v-col> | ||||
|     </v-container> | ||||
|   </v-card> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| export default { | ||||
|   name: 'CreditOverviewSkeleton' | ||||
| } | ||||
| </script> | ||||
| 
 | ||||
| <style scoped></style> | ||||
|  | @ -9,7 +9,7 @@ | |||
|       <v-card-text> | ||||
|         <v-expand-transition> | ||||
|           <v-row align="center" justify="center" v-if="day.loading"> | ||||
|             <v-progress-circular indeterminate color="black" /> | ||||
|             <v-progress-circular indeterminate color="grey" /> | ||||
|           </v-row> | ||||
|         </v-expand-transition> | ||||
|         <v-expand-transition> | ||||
|  |  | |||
|  | @ -4,7 +4,9 @@ import url from '@/plugins/routes' | |||
| const state = { | ||||
|   users: [], | ||||
|   allUsers: [], | ||||
|   filter: '' | ||||
|   filter: '', | ||||
|   usersLoading: false, | ||||
|   allUsersLoading: false | ||||
| } | ||||
| 
 | ||||
| const mutations = { | ||||
|  | @ -36,12 +38,21 @@ const mutations = { | |||
|           lastname: users[user].lastname, | ||||
|           locked: users[user].locked, | ||||
|           amount: users[user].amount, | ||||
|           type: users[user].type | ||||
|           type: users[user].type, | ||||
|           loading: false | ||||
|         }) | ||||
|       } | ||||
|     } | ||||
|     mutations.sortUsers(state) | ||||
|   }, | ||||
|   updateUser: (state, data) => { | ||||
|     let index = state.users.indexOf( | ||||
|       state.users.find(a => { | ||||
|         return a.username === data.username | ||||
|       }) | ||||
|     ) | ||||
|     if (data.loading !== undefined) state.users[index].loading = data.loading | ||||
|   }, | ||||
|   sortUsers: state => { | ||||
|     state.users = state.users.sort((a, b) => { | ||||
|       if (a.lastname > b.lastname) return 1 | ||||
|  | @ -53,12 +64,19 @@ const mutations = { | |||
|   }, | ||||
|   setFilter: (state, filter) => { | ||||
|     state.filter = filter | ||||
|   }, | ||||
|   setUsersLoading: (state, value) => { | ||||
|     state.usersLoading = value | ||||
|   }, | ||||
|   setAllUsersLoading: (state, value) => { | ||||
|     state.allUsersLoading = value | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| const actions = { | ||||
|   // eslint-disable-next-line no-unused-vars
 | ||||
|   async getUsers({ commit, rootState, dispatch }) { | ||||
|     commit('setUsersLoading', true) | ||||
|     try { | ||||
|       const response = await axios.get(url.bar, { | ||||
|         headers: { Token: rootState.login.user.accessToken } | ||||
|  | @ -68,8 +86,10 @@ const actions = { | |||
|       if (e.response) | ||||
|         if (e.response.status === 401) dispatch('logout', null, { root: true }) | ||||
|     } | ||||
|     commit('setUsersLoading', false) | ||||
|   }, | ||||
|   async addAmount({ commit, rootState, dispatch }, data) { | ||||
|     commit('updateUser', {username: data.username, loading: true}) | ||||
|     try { | ||||
|       const response = await axios.post( | ||||
|         url.barAddAmount, | ||||
|  | @ -81,8 +101,10 @@ const actions = { | |||
|       if (e.response) | ||||
|         if (e.response.status === 401) dispatch('logout', null, { root: true }) | ||||
|     } | ||||
|     commit('updateUser', {username: data.username, loading: false}) | ||||
|   }, | ||||
|   async addCreditList({ commit, rootState, dispatch }, data) { | ||||
|     commit('updateUser', {username: data.username, loading: true}) | ||||
|     try { | ||||
|       const response = await axios.post( | ||||
|         url.barGetUser, | ||||
|  | @ -94,8 +116,10 @@ const actions = { | |||
|       if (e.response) | ||||
|         if (e.response.status === 401) dispatch('logout', null, { root: true }) | ||||
|     } | ||||
|     commit('updateUser', {username: data.username, loading: false}) | ||||
|   }, | ||||
|   async getAllUsers({ commit, rootState, dispatch }) { | ||||
|     commit('setAllUsersLoading', true) | ||||
|     try { | ||||
|       const response = await axios.post( | ||||
|         url.searchUser, | ||||
|  | @ -107,6 +131,7 @@ const actions = { | |||
|       if (e.response) | ||||
|         if (e.response.data === 401) dispatch('logout', null, { root: true }) | ||||
|     } | ||||
|     commit('setAllUsersLoading', false) | ||||
|   }, | ||||
|   setFilter({ commit }, data) { | ||||
|     commit('setFilter', data) | ||||
|  | @ -122,7 +147,13 @@ const getters = { | |||
|   }, | ||||
|   filter: state => { | ||||
|     return state.filter | ||||
|   } | ||||
|   }, | ||||
|   usersLoading: state => { | ||||
|     return state.usersLoading | ||||
|   }, | ||||
|   allUsersLoading: state => { | ||||
|     return state.allUsersLoading | ||||
|   }, | ||||
| } | ||||
| 
 | ||||
| export default { | ||||
|  |  | |||
|  | @ -75,7 +75,8 @@ const mutations = { | |||
|           locked: users[user].locked, | ||||
|           autoLock: users[user].autoLock, | ||||
|           creditList: list, | ||||
|           expand: false | ||||
|           expand: false, | ||||
|           loading: false | ||||
|         }) | ||||
|       } | ||||
|     } | ||||
|  | @ -204,6 +205,7 @@ const mutations = { | |||
|     if (data.locked !== undefined) state.users[index].locked = data.locked | ||||
|     if (data.limit !== undefined) state.users[index].limit = data.limit | ||||
|     if (data.autoLock !== undefined) state.users[index].autoLock = data.autoLock | ||||
|     if (data.loading !== undefined) state.users[index].loading = data.loading | ||||
|   }, | ||||
|   setMails: (state, data) => { | ||||
|     state.errorMails = data | ||||
|  | @ -265,6 +267,7 @@ const actions = { | |||
|     commit('setActiveUser', username) | ||||
|   }, | ||||
|   async addAmount({ commit, rootState, dispatch }, data) { | ||||
|     commit('updateUsers', {username: data.user.username, loading: true}) | ||||
|     try { | ||||
|       const response = await axios.post( | ||||
|         url.finanzerAddAmount, | ||||
|  | @ -288,8 +291,10 @@ const actions = { | |||
|         if (err.response.status === 401) | ||||
|           dispatch('logout', null, { root: true }) | ||||
|     } | ||||
|     commit('updateUsers', {username: data.user.username, loading: false}) | ||||
|   }, | ||||
|   async addCredit({ commit, rootState, dispatch }, data) { | ||||
|     commit('updateUsers', {username: data.user.username, loading: true}) | ||||
|     try { | ||||
|       const response = await axios.post( | ||||
|         url.finanzerAddCredit, | ||||
|  | @ -313,6 +318,7 @@ const actions = { | |||
|         if (err.response.status === 401) | ||||
|           dispatch('logout', null, { root: true }) | ||||
|     } | ||||
|     commit('updateUsers', {username: data.user.username, loading: false}) | ||||
|   }, | ||||
|   async doLock({ commit, rootState, dispatch }, data) { | ||||
|     try { | ||||
|  |  | |||
|  | @ -5,6 +5,8 @@ import url from '@/plugins/routes' | |||
| const state = { | ||||
|   user: { | ||||
|     username: null, | ||||
|     firstname: null, | ||||
|     lastname: null, | ||||
|     accessToken: null, | ||||
|     group: null | ||||
|   }, | ||||
|  | @ -30,12 +32,16 @@ const mutations = { | |||
|       state.user.username = data.username | ||||
|       state.user.accessToken = data.accessToken | ||||
|       state.user.group = data.group | ||||
|       state.user.firstname = data.firstname | ||||
|       state.user.lastname = data.lastname | ||||
|     } | ||||
|   }, | ||||
|   logout(state) { | ||||
|     state.user.accessToken = null | ||||
|     state.user.username = null | ||||
|     state.user.group = null | ||||
|     state.user.firstname = null | ||||
|     state.user.lastname = null | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  | @ -44,12 +50,15 @@ const actions = { | |||
|     commit('loginStart') | ||||
|     try { | ||||
|       const response = await axios.post(url.login, { ...loginData }) | ||||
|       console.log(response.data) | ||||
|       localStorage.setItem( | ||||
|         'user', | ||||
|         JSON.stringify({ | ||||
|           username: response.data.username, | ||||
|           accessToken: response.data.token, | ||||
|           group: response.data.group | ||||
|           group: response.data.group, | ||||
|           firstname: response.data.firstname, | ||||
|           lastname: response.data.lastname | ||||
|         }) | ||||
|       ) | ||||
|       commit('loginStop', null) | ||||
|  | @ -66,7 +75,9 @@ const actions = { | |||
|       commit('updateAccessToken', { | ||||
|         username: null, | ||||
|         accessToken: null, | ||||
|         group: null | ||||
|         group: null, | ||||
|         firstname: null, | ||||
|         lastname: null | ||||
|       }) | ||||
|     } | ||||
|   }, | ||||
|  | @ -84,6 +95,9 @@ const actions = { | |||
| } | ||||
| 
 | ||||
| const getters = { | ||||
|   loggingIn: state => { | ||||
|     return state.loggingIn | ||||
|   }, | ||||
|   getGroup: state => { | ||||
|     return state.user.group | ||||
|   }, | ||||
|  | @ -122,6 +136,9 @@ const getters = { | |||
|   }, | ||||
|   isLoggedIn: state => { | ||||
|     return state.user.accessToken ? true : false | ||||
|   }, | ||||
|   user: state => { | ||||
|     return state.user | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -3,7 +3,8 @@ import url from '@/plugins/routes' | |||
| 
 | ||||
| const state = { | ||||
|   user: null, | ||||
|   creditList: [] | ||||
|   creditList: [], | ||||
|   loading: false | ||||
| } | ||||
| 
 | ||||
| const mutations = { | ||||
|  | @ -117,11 +118,15 @@ const mutations = { | |||
|       sum.nov_amount + | ||||
|       sum.dez_amount | ||||
|     return sum | ||||
|   }, | ||||
|   setLoading(state, value) { | ||||
|     state.loading = value | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| const actions = { | ||||
|   async getUser({ commit, rootState, dispatch }) { | ||||
|     commit("setLoading", true) | ||||
|     try { | ||||
|       const response = await axios.get(url.userMain, { | ||||
|         headers: { Token: rootState.login.user.accessToken } | ||||
|  | @ -131,6 +136,7 @@ const actions = { | |||
|       if (e.response) | ||||
|         if (e.response.status === 401) dispatch('logout', null, { root: true }) | ||||
|     } | ||||
|     commit("setLoading", false) | ||||
|   }, | ||||
|   async addAmount({ commit, rootState, dispatch }, amount) { | ||||
|     try { | ||||
|  | @ -158,6 +164,9 @@ const getters = { | |||
|       if (currentYear > year) year = currentYear | ||||
|     } | ||||
|     return year | ||||
|   }, | ||||
|   loading: state => { | ||||
|     return state.loading | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -37,6 +37,9 @@ | |||
|                     @input="resetLoginError" | ||||
|                   /> | ||||
|                 </v-form> | ||||
|                 <div class="text-center"> | ||||
|                   <v-progress-circular indeterminate v-if="loggingIn" /> | ||||
|                 </div> | ||||
|               </v-card-text> | ||||
|               <v-alert v-if="loginError" dense type="error">{{ | ||||
|                 loginError | ||||
|  | @ -74,7 +77,7 @@ export default { | |||
|     } | ||||
|   }, | ||||
|   methods: mapActions(['doLogin', 'resetLoginError']), | ||||
|   computed: mapGetters(['loginError']) | ||||
|   computed: mapGetters(['loginError', 'loggingIn']) | ||||
| } | ||||
| </script> | ||||
| 
 | ||||
|  |  | |||
|  | @ -14,14 +14,14 @@ | |||
|           <v-list-item-icon> | ||||
|             <v-icon>person</v-icon> | ||||
|           </v-list-item-icon> | ||||
|           <v-list-item-title>Account</v-list-item-title> | ||||
|           <v-list-item-title>{{user.firstname}} {{user.lastname}}</v-list-item-title> | ||||
|         </v-list-item> | ||||
|         <v-list-item v-if="isBar" class="title" link to="/main/bar/geruecht"> | ||||
|           <v-list-item-icon> | ||||
|             <v-icon>local_bar</v-icon> | ||||
|           </v-list-item-icon> | ||||
|           <v-list-item-title> | ||||
|             Gerüchte | ||||
|             Bar | ||||
|           </v-list-item-title> | ||||
|         </v-list-item> | ||||
|         <v-list-item v-if="isFinanzer" class="title" link to="/main/finanzer/overview"> | ||||
|  | @ -70,7 +70,8 @@ export default { | |||
|       isBar: 'isBar', | ||||
|       isUser: 'isUser', | ||||
|       isFinanzer: 'isFinanzer', | ||||
|       isLoggedIn: 'isLoggedIn' | ||||
|       isLoggedIn: 'isLoggedIn', | ||||
|       user: 'user' | ||||
|     }) | ||||
|   } | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue