diff --git a/src/App.vue b/src/App.vue index d418bd7..7c2aa3f 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,3 +1,3 @@ diff --git a/src/features/auth/components/LoginCard.vue b/src/features/auth/components/LoginCard.vue new file mode 100644 index 0000000..87a9fdb --- /dev/null +++ b/src/features/auth/components/LoginCard.vue @@ -0,0 +1,14 @@ + + + diff --git a/src/features/auth/components/LoginForm.vue b/src/features/auth/components/LoginForm.vue new file mode 100644 index 0000000..1861efd --- /dev/null +++ b/src/features/auth/components/LoginForm.vue @@ -0,0 +1,108 @@ + + + diff --git a/src/features/auth/components/partials/feedbacks/LoginFailed.vue b/src/features/auth/components/partials/feedbacks/LoginFailed.vue new file mode 100644 index 0000000..0bb6537 --- /dev/null +++ b/src/features/auth/components/partials/feedbacks/LoginFailed.vue @@ -0,0 +1,11 @@ + diff --git a/src/features/auth/components/partials/feedbacks/LoginSuccess.vue b/src/features/auth/components/partials/feedbacks/LoginSuccess.vue new file mode 100644 index 0000000..8b85a1e --- /dev/null +++ b/src/features/auth/components/partials/feedbacks/LoginSuccess.vue @@ -0,0 +1,11 @@ + diff --git a/src/features/auth/composables/useCurrentUser.ts b/src/features/auth/composables/useCurrentUser.ts new file mode 100644 index 0000000..20001cf --- /dev/null +++ b/src/features/auth/composables/useCurrentUser.ts @@ -0,0 +1,7 @@ +import { useAuth } from "@/features/auth/stores/useAuth"; + +export function useCurrentUser() { + const { auth } = useAuth(); + + return { user: auth.auth?.user }; +} diff --git a/src/features/auth/pages/LoginPage.vue b/src/features/auth/pages/LoginPage.vue new file mode 100644 index 0000000..7e9f2a4 --- /dev/null +++ b/src/features/auth/pages/LoginPage.vue @@ -0,0 +1,11 @@ + + + diff --git a/src/main.ts b/src/main.ts index c0df87d..adbb4ff 100644 --- a/src/main.ts +++ b/src/main.ts @@ -10,6 +10,7 @@ import * as components from "vuetify/components"; import * as directives from "vuetify/directives"; import App from "@/App.vue"; +import { router } from "@/router"; import "@mdi/font/css/materialdesignicons.css"; import "@fontsource/poppins"; @@ -33,5 +34,6 @@ const app = createApp(App); app.use(vuetify); app.use(pinia); +app.use(router); app.use(VueQueryPlugin); app.mount("#app"); diff --git a/src/pages/DashboardPage.vue b/src/pages/DashboardPage.vue new file mode 100644 index 0000000..d1479fd --- /dev/null +++ b/src/pages/DashboardPage.vue @@ -0,0 +1,52 @@ + + + diff --git a/src/router.ts b/src/router.ts new file mode 100644 index 0000000..69abedf --- /dev/null +++ b/src/router.ts @@ -0,0 +1,29 @@ +import { createRouter, createWebHistory } from "vue-router"; +import { useAuth } from "@/features/auth/stores/useAuth"; + +import LoginPage from "@/features/auth/pages/LoginPage.vue"; +import DashboardPage from "@/pages/DashboardPage.vue"; + +const routes = [ + { path: "/", component: DashboardPage }, + { path: "/login", component: LoginPage }, +]; + +export const router = createRouter({ + history: createWebHistory(), + routes, +}); + +router.beforeEach((to, _, next) => { + const { isAuthenticated } = useAuth(); + + if (to.path === "/login" && isAuthenticated) { + next({ path: "/" }); + return; + } + + if (to.path !== "/login" && !isAuthenticated) { + next({ path: "/login" }); + return; + } else next(); +});