diff --git a/client/.env b/client/.env new file mode 100644 index 0000000..8c0f674 --- /dev/null +++ b/client/.env @@ -0,0 +1 @@ +VITE_BASE_API_URL=/api \ No newline at end of file diff --git a/client/index.html b/client/index.html index 96bd73b..17fffc0 100644 --- a/client/index.html +++ b/client/index.html @@ -3,7 +3,7 @@ - + Fitness World diff --git a/client/package-lock.json b/client/package-lock.json index 10ff058..c67cd12 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -8,6 +8,8 @@ "name": "merit-opgave-client", "version": "0.0.0", "dependencies": { + "bootstrap": "^5.2.3", + "pinia": "^2.0.34", "vue": "^3.2.47", "vue-router": "^4.1.6" }, @@ -384,6 +386,16 @@ "node": ">=12" } }, + "node_modules/@popperjs/core": { + "version": "2.11.7", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.7.tgz", + "integrity": "sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@types/node": { "version": "18.15.11", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", @@ -645,6 +657,24 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/bootstrap": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz", + "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "peerDependencies": { + "@popperjs/core": "^2.11.6" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1541,6 +1571,56 @@ "node": ">=4" } }, + "node_modules/pinia": { + "version": "2.0.34", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.34.tgz", + "integrity": "sha512-cgOoGUiyqX0SSgX8XelK9+Ri4XA2/YyNtgjogwfzIx1g7iZTaZPxm7/bZYMCLU2qHRiHhxG7SuQO0eBacFNc2Q==", + "dependencies": { + "@vue/devtools-api": "^6.5.0", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.2.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.0.tgz", + "integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, "node_modules/postcss": { "version": "8.4.22", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.22.tgz", @@ -1866,7 +1946,7 @@ "version": "4.8.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true, + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/client/package.json b/client/package.json index 88c964b..41cb51d 100644 --- a/client/package.json +++ b/client/package.json @@ -10,6 +10,8 @@ "type-check": "vue-tsc --noEmit" }, "dependencies": { + "bootstrap": "^5.2.3", + "pinia": "^2.0.34", "vue": "^3.2.47", "vue-router": "^4.1.6" }, diff --git a/client/src/App.vue b/client/src/App.vue index 1276bf6..108f65f 100644 --- a/client/src/App.vue +++ b/client/src/App.vue @@ -1,15 +1,22 @@ - diff --git a/client/src/assets/elevio-noto-sans-400.woff b/client/src/assets/elevio-noto-sans-400.woff new file mode 100644 index 0000000..05c871c Binary files /dev/null and b/client/src/assets/elevio-noto-sans-400.woff differ diff --git a/client/src/components/HelloWorld.vue b/client/src/components/HelloWorld.vue deleted file mode 100644 index 23afedd..0000000 --- a/client/src/components/HelloWorld.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - - - diff --git a/client/src/components/NavBar.vue b/client/src/components/NavBar.vue index ff62107..14e1046 100644 --- a/client/src/components/NavBar.vue +++ b/client/src/components/NavBar.vue @@ -1,24 +1,50 @@ diff --git a/client/src/components/WelcomeItem.vue b/client/src/components/WelcomeItem.vue deleted file mode 100644 index ba0def3..0000000 --- a/client/src/components/WelcomeItem.vue +++ /dev/null @@ -1,86 +0,0 @@ - - - diff --git a/client/src/main.ts b/client/src/main.ts index c8e37b0..fe7d946 100644 --- a/client/src/main.ts +++ b/client/src/main.ts @@ -1,9 +1,16 @@ import { createApp } from 'vue' +import { createPinia } from 'pinia' import App from './App.vue' import router from './router' +import 'bootstrap/dist/css/bootstrap.css'; + +const pinia = createPinia() const app = createApp(App) app.use(router) +app.use(pinia) app.mount('#app') + +import "bootstrap/dist/js/bootstrap.js"; \ No newline at end of file diff --git a/client/src/router/index.ts b/client/src/router/index.ts index a49ae50..464495e 100644 --- a/client/src/router/index.ts +++ b/client/src/router/index.ts @@ -1,5 +1,5 @@ import { createRouter, createWebHistory } from 'vue-router' -import HomeView from '../views/HomeView.vue' +import Home from '../views/Home.vue' const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), @@ -7,15 +7,23 @@ const router = createRouter({ { path: '/', name: 'home', - component: HomeView + component: Home }, { - path: '/about', - name: 'about', + path: '/login', + name: 'login', // 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/Login.vue') + }, + { + path: '/register', + name: 'register', + // 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/Register.vue') } ] }) diff --git a/client/src/stores/login.ts b/client/src/stores/login.ts new file mode 100644 index 0000000..455a3f0 --- /dev/null +++ b/client/src/stores/login.ts @@ -0,0 +1,12 @@ +import { defineStore } from 'pinia' + +export const useLoginStore = defineStore('login', { + state: () => { + return { loggedIn: false } + }, + actions: { + setLoginState(login: boolean) { + this.loggedIn = login; + } + }, +}) \ No newline at end of file diff --git a/client/src/views/AboutView.vue b/client/src/views/AboutView.vue deleted file mode 100644 index 756ad2a..0000000 --- a/client/src/views/AboutView.vue +++ /dev/null @@ -1,15 +0,0 @@ - - - diff --git a/client/src/views/Home.vue b/client/src/views/Home.vue new file mode 100644 index 0000000..27e0f69 --- /dev/null +++ b/client/src/views/Home.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/client/src/views/HomeView.vue b/client/src/views/HomeView.vue deleted file mode 100644 index c98b583..0000000 --- a/client/src/views/HomeView.vue +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/client/src/views/Login.vue b/client/src/views/Login.vue new file mode 100644 index 0000000..6009b27 --- /dev/null +++ b/client/src/views/Login.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/client/src/views/Register.vue b/client/src/views/Register.vue new file mode 100644 index 0000000..e04d76b --- /dev/null +++ b/client/src/views/Register.vue @@ -0,0 +1,163 @@ + + + + +