diff --git a/composables/auth.ts b/composables/auth.ts index 43ef854..193bb60 100644 --- a/composables/auth.ts +++ b/composables/auth.ts @@ -11,6 +11,10 @@ export const useAuthStore = defineStore('auth', () => { const pointsAwardedResetTime = ref(new Date(Date.now())) const godMode = ref(false) + const institutionName = ref('') + const institutionShortName = ref('') + const institutionDescription = ref('') + const authenticated = computed(() => !!email.value) /** @@ -31,6 +35,24 @@ export const useAuthStore = defineStore('auth', () => { : undefined, }) populate(res) + await getuserinstitution(cookie) + } + catch (e) { + console.error('[composables/user.ts] failed to init store', e) + return parseError(e) + } + } + + async function getuserinstitution(cookie?: string) { + try { + const res = await $api('/auth/myinstitution', { + headers: cookie + ? { + cookie, + } + : undefined, + }) + populateInst(res) } catch (e) { console.error('[composables/user.ts] failed to init store', e) @@ -53,6 +75,7 @@ export const useAuthStore = defineStore('auth', () => { }, }) populate(res) + await getuserinstitution() } catch (e) { console.error('[composables/user.ts] failed to login', e) @@ -83,6 +106,7 @@ export const useAuthStore = defineStore('auth', () => { }, }) populate(res) + await getuserinstitution() } catch (e) { console.error('[composables/user.ts] failed to register', e) @@ -116,6 +140,12 @@ export const useAuthStore = defineStore('auth', () => { } } + function populateInst(data: Institution) { + institutionName.value = data.name + institutionShortName.value = data.shortName + institutionDescription.value = data.description + } + return { firstName, lastName, @@ -125,6 +155,10 @@ export const useAuthStore = defineStore('auth', () => { pointsAwardedResetTime, godMode, + institutionName, + institutionShortName, + institutionDescription, + authenticated, init, diff --git a/layouts/app.vue b/layouts/app.vue index da28633..43ae01f 100644 --- a/layouts/app.vue +++ b/layouts/app.vue @@ -41,7 +41,7 @@ useAsyncData(async () => {
- + diff --git a/pages/dashboard/index.vue b/pages/@[[institution]]/dashboard/index.vue similarity index 100% rename from pages/dashboard/index.vue rename to pages/@[[institution]]/dashboard/index.vue diff --git a/pages/dashboard/admin/add-rewards.vue b/pages/@[[institution]]/manage/add-rewards.vue similarity index 100% rename from pages/dashboard/admin/add-rewards.vue rename to pages/@[[institution]]/manage/add-rewards.vue diff --git a/pages/dashboard/admin/groups.vue b/pages/@[[institution]]/manage/groups.vue similarity index 92% rename from pages/dashboard/admin/groups.vue rename to pages/@[[institution]]/manage/groups.vue index f4bd9fa..d5de713 100644 --- a/pages/dashboard/admin/groups.vue +++ b/pages/@[[institution]]/manage/groups.vue @@ -9,7 +9,6 @@ definePageMeta({ middleware: 'god-mode', }) -const router = useRouter() const group = useGroupStore() const headers = useRequestHeaders(['cookie']) useAsyncData(async () => { @@ -20,14 +19,14 @@ useAsyncData(async () => { const groupsMenu = computed(() => { const i: MenuItem[] = group.groups.map(grp => ({ label: `${grp.name} (${grp.shortName})`, - to: `/dashboard/admin/groups/${grp.shortName}`, + to: `${grp.shortName}`, })) i.push({ separator: true }) return i }) function toCreate() { - router.push('/dashboard/admin/groups') + navigateTo('new') } diff --git a/pages/dashboard/admin/groups/[shortName].vue b/pages/@[[institution]]/manage/groups/[shortName].vue similarity index 97% rename from pages/dashboard/admin/groups/[shortName].vue rename to pages/@[[institution]]/manage/groups/[shortName].vue index dd2b7c2..da5d6b5 100644 --- a/pages/dashboard/admin/groups/[shortName].vue +++ b/pages/@[[institution]]/manage/groups/[shortName].vue @@ -20,6 +20,7 @@ definePageMeta({ const route = useRoute() const router = useRouter() const toast = useToast() +const auth = useAuthStore() const group = useGroupStore() onMounted(async () => { @@ -74,7 +75,7 @@ async function update() { summary: 'Success', detail: 'Group updated', }) - navigateTo(`/dashboard/admin/groups/${formData.value.shortName}`) + navigateTo(`/@${auth.institutionShortName}/manage/groups/${formData.value.shortName}`) } } @@ -89,7 +90,7 @@ async function del() { summary: 'Success', detail: 'Group deleted', }) - navigateTo('/dashboard/admin/groups') + navigateTo(`/@${auth.institutionShortName}/manage/groups`) } } diff --git a/pages/dashboard/admin/groups/index.vue b/pages/@[[institution]]/manage/groups/new.vue similarity index 95% rename from pages/dashboard/admin/groups/index.vue rename to pages/@[[institution]]/manage/groups/new.vue index e435b6a..1e6cb72 100644 --- a/pages/dashboard/admin/groups/index.vue +++ b/pages/@[[institution]]/manage/groups/new.vue @@ -11,6 +11,7 @@ definePageMeta({ const toast = useToast() +const auth = useAuthStore() const group = useGroupStore() const headers = useRequestHeaders(['cookie']) useAsyncData(async () => { @@ -45,7 +46,7 @@ async function create() { summary: 'Success', detail: 'Group created', }) - navigateTo(`/dashboard/admin/groups/${formData.value.shortName}`) + navigateTo(`/@${auth.institutionShortName}/manage/groups/${formData.value.shortName}`) } } diff --git a/pages/dashboard/admin/index.vue b/pages/@[[institution]]/manage/index.vue similarity index 92% rename from pages/dashboard/admin/index.vue rename to pages/@[[institution]]/manage/index.vue index 1b1f4f5..3320880 100644 --- a/pages/dashboard/admin/index.vue +++ b/pages/@[[institution]]/manage/index.vue @@ -22,15 +22,15 @@ interface AdminPages { const adminPages = [ { text: 'Manage Group', - link: '/dashboard/admin/groups', + link: 'manage/groups/new', }, { text: 'View available Pet Accessories and Vouchers', - link: '/dashboard/admin/rewards', + link: 'manage/rewards', }, { text: 'Modify Pet Accessories and Vouchers', - link: '/dashboard/admin/add-rewards', + link: 'manage/add-rewards', }, ] satisfies AdminPages[] diff --git a/pages/dashboard/admin/rewards.vue b/pages/@[[institution]]/manage/rewards.vue similarity index 100% rename from pages/dashboard/admin/rewards.vue rename to pages/@[[institution]]/manage/rewards.vue diff --git a/pages/login.vue b/pages/login.vue index e490bcb..4b99b05 100644 --- a/pages/login.vue +++ b/pages/login.vue @@ -28,7 +28,7 @@ async function login() { formData.isLoading = true const err = await auth.login(formData.email, formData.password) if (!err) - return navigateTo('/dashboard') + return navigateTo(`/@${auth.institutionShortName}/dashboard`) formData.error = err formData.isLoading = false } diff --git a/pages/s/[code].vue b/pages/s/[code].vue index 374328c..d2385f6 100644 --- a/pages/s/[code].vue +++ b/pages/s/[code].vue @@ -45,7 +45,7 @@ async function register() { formData.firstName, formData.lastName, formData.email, formData.password, ) if (!err) - return navigateTo('/dashboard') + return navigateTo(`/@${data.value?.institution.shortName}/dashboard`) formData.error = err formData.isLoading = false }