diff --git a/package-lock.json b/package-lock.json index 524fbb2..352cc0f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.0.0", "dependencies": { "pinia": "^2.1.7", + "pocketbase": "^0.21.5", "vue": "^3.4.29", "vue-router": "^4.3.3" }, @@ -1056,6 +1057,12 @@ "node": ">= 6" } }, + "node_modules/pocketbase": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/pocketbase/-/pocketbase-0.21.5.tgz", + "integrity": "sha512-bnI/uinnQps+ElSlzxkc4yvwuSFfKcoszDtXH/4QT2FhGq2mJVUvDlxn+rjRXVntUjPfmMG5LEPZ1eGqV6ssog==", + "license": "MIT" + }, "node_modules/postcss": { "version": "8.4.41", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", diff --git a/package.json b/package.json index 8ae85fc..72fb99e 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "pinia": "^2.1.7", + "pocketbase": "^0.21.5", "vue": "^3.4.29", "vue-router": "^4.3.3" }, diff --git a/src/components/404.vue b/src/components/404.vue new file mode 100644 index 0000000..3657029 --- /dev/null +++ b/src/components/404.vue @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/src/components/Lista.vue b/src/components/Lista.vue new file mode 100644 index 0000000..b978dd9 --- /dev/null +++ b/src/components/Lista.vue @@ -0,0 +1,152 @@ + + + \ No newline at end of file diff --git a/src/router/index.js b/src/router/index.js index c79ff1e..e5a3095 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -1,4 +1,6 @@ import { createRouter, createWebHistory } from 'vue-router' +import { useUserStore } from '@/stores/user' + const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), @@ -8,15 +10,36 @@ const router = createRouter({ name: 'Login', component: () => import('../views/LoginView.vue') }, - { - path: '/about', - name: 'about', + + { + path: '/listas', + name: 'listas', // route level code-splitting // this generates a separate chunk (About.[hash].js) for this route // which is lazy-loaded when the route is visited. - component: () => import('../views/AboutView.vue') - } + component: () => import('../views/ListasView.vue'), + meta: { requiresAuth: true }, + }, + { + path: '/lista/:id', + name: 'lista', + component: () => import('../components/Lista.vue'), + meta: { requiresAuth: true } + }, + { + path: '/:pathMatch(.*)*', + name: 'NotFound', + component: () => import('../components/404.vue') + }, ] }) +router.beforeEach((to) => { + // ✅ This will work because the router starts its navigation after + // the router is installed and pinia will be installed too + const storeUser = useUserStore() + console.log(storeUser.isValid) + if (to.meta.requiresAuth && !storeUser.isValid) return '/' +}) + export default router diff --git a/src/stores/user.js b/src/stores/user.js new file mode 100644 index 0000000..95f99fb --- /dev/null +++ b/src/stores/user.js @@ -0,0 +1,9 @@ +import { ref, computed } from 'vue' +import { defineStore } from 'pinia' + +export const useUserStore = defineStore('user', () => { + const user = ref() + const isValid = ref() + + return { user, isValid } +}) \ No newline at end of file diff --git a/src/views/AboutView.vue b/src/views/AboutView.vue deleted file mode 100644 index 0e6c265..0000000 --- a/src/views/AboutView.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - \ No newline at end of file diff --git a/src/views/ListasView.vue b/src/views/ListasView.vue new file mode 100644 index 0000000..364f773 --- /dev/null +++ b/src/views/ListasView.vue @@ -0,0 +1,51 @@ + + + \ No newline at end of file diff --git a/src/views/LoginView.vue b/src/views/LoginView.vue index 2fbd250..c831bf7 100644 --- a/src/views/LoginView.vue +++ b/src/views/LoginView.vue @@ -1,64 +1,79 @@ - -