ditch useState and composables in favour of pinia store - add server rendered note detail page

This commit is contained in:
Michael Dausmann
2023-02-19 01:22:55 +11:00
parent bb9f4dfd1d
commit b3ee03b5c3
10 changed files with 325 additions and 539 deletions

48
stores/app.store.ts Normal file
View File

@@ -0,0 +1,48 @@
import { Membership, Note, User } from ".prisma/client"
import { defineStore } from "pinia"
export type DBUser = User & { memberships: Membership[]; }
interface State {
dbUser?: DBUser
activeMembership: Membership | null
notes: Note[]
}
export const useAppStore = defineStore('app', {
state: (): State => {
return {
notes: [],
activeMembership: null
}
},
actions: {
async initUser() {
const { $client } = useNuxtApp();
const { data: dbUser } = await $client.userAccount.getDBUser.useQuery();
if(dbUser.value?.dbUser){
this.dbUser = dbUser.value.dbUser;
if(dbUser.value.dbUser.memberships.length > 0){
this.activeMembership = dbUser.value.dbUser.memberships[0];
await this.fetchNotesForCurrentUser();
}
}
},
async fetchNotesForCurrentUser() {
if(!this.activeMembership) {
return;
}
const { $client } = useNuxtApp();
const { data: foundNotes } = await $client.notes.getForCurrentUser.useQuery({account_id: this.activeMembership.account_id});
if(foundNotes.value?.notes){
this.notes = foundNotes.value.notes;
}
},
async changeActiveMembership(membership: Membership) {
if(membership !== this.activeMembership){
this.activeMembership = membership;
await this.fetchNotesForCurrentUser();
}
},
}
});