cents/apps/web/src/router.ts

74 lines
1.8 KiB
TypeScript

import { createRouter, createWebHistory } from "vue-router";
import LedgerView from "./views/LedgerView.vue";
import { useAuthStore } from "./stores/auth";
export const router = createRouter({
history: createWebHistory(),
routes: [
{
path: "/",
name: "ledger",
component: LedgerView,
},
{
path: "/invite",
name: "invite",
component: () => import("./views/InviteView.vue"),
meta: { public: true },
},
{
path: "/login",
name: "login",
component: () => import("./views/LoginView.vue"),
meta: { public: true },
},
{
path: "/join-ledger",
name: "join-ledger",
component: () => import("./views/JoinLedgerView.vue"),
meta: { public: true },
},
{
path: "/prototype/entry-detail",
name: "entry-detail-prototype",
component: () => import("./views/EntryDetailPrototypeView.vue"),
},
{
path: "/entries/:id",
name: "entry-detail",
component: () => import("./views/EntryDetailView.vue"),
},
{
path: "/stats",
name: "stats",
component: () => import("./views/StatsView.vue"),
},
{
path: "/ledgers",
name: "ledgers",
component: () => import("./views/LedgersView.vue"),
},
{
path: "/ledger/settings",
name: "ledger-settings",
component: () => import("./views/LedgerSettingsView.vue"),
},
{
path: "/me",
name: "me",
component: () => import("./views/MeView.vue"),
},
],
});
router.beforeEach(async (to) => {
const auth = useAuthStore();
await auth.loadSession();
if (to.meta.public) {
if (to.name === "login" && auth.user) return { name: "ledger" };
return true;
}
if (!auth.user) return { name: "login", query: { redirect: to.fullPath } };
return true;
});