74 lines
1.8 KiB
TypeScript
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;
|
|
});
|