Added CreatePage; Impl. full-height-wrapper for CreatePage
This commit is contained in:
parent
77cfaf35ed
commit
b6c2c87d7f
|
|
@ -2,7 +2,7 @@
|
||||||
import { provide, ref } from 'vue';
|
import { provide, ref } from 'vue';
|
||||||
import { RouterView } from 'vue-router';
|
import { RouterView } from 'vue-router';
|
||||||
|
|
||||||
import { infoModalShowFnKey } from './services/UtilService';
|
import { infoModalShowFnKey, navbarKey } from './services/UtilService';
|
||||||
|
|
||||||
import NavBar from '@/components/blocks/NavBar.vue';
|
import NavBar from '@/components/blocks/NavBar.vue';
|
||||||
import GenericInfoModal from '@/components/modals/GenericInfoModal.vue';
|
import GenericInfoModal from '@/components/modals/GenericInfoModal.vue';
|
||||||
|
|
@ -30,11 +30,13 @@ function showInfoModal( title: string, text: string ): void {
|
||||||
|
|
||||||
provide( infoModalShowFnKey, showInfoModal );
|
provide( infoModalShowFnKey, showInfoModal );
|
||||||
|
|
||||||
|
const navbar = ref<InstanceType<typeof NavBar> | undefined>(undefined);
|
||||||
|
provide( navbarKey, navbar);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="vh-100 overflow-y-scroll overflow-x-hidden">
|
<div class="vh-100 overflow-y-scroll overflow-x-hidden">
|
||||||
<NavBar :userLoading="userLoading" />
|
<NavBar ref="navbar" :userLoading="userLoading" />
|
||||||
|
|
||||||
<RouterView />
|
<RouterView />
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
|
import { useRouter } from 'vue-router';
|
||||||
|
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
const boards = ref([{
|
const boards = ref([{
|
||||||
id: 1,
|
id: 1,
|
||||||
|
|
@ -15,6 +19,10 @@ const boards = ref([{
|
||||||
id: 4,
|
id: 4,
|
||||||
boardName: "Mocka Board 2",
|
boardName: "Mocka Board 2",
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
|
function createNewBoard(){
|
||||||
|
router.push( { name: 'create' } );
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
@ -44,5 +52,11 @@ const boards = ref([{
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
<div class="col-4 mb-3">
|
||||||
|
<button class="btn btn-outline-primary w-100 h-100 d-flex flex-column justify-content-center" @click="createNewBoard">
|
||||||
|
Create new Board
|
||||||
|
<FontAwesomeIcon :icon="['fas', 'plus']" size="2x"/>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
Board View
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue';
|
import { onMounted, ref } from 'vue';
|
||||||
import { RouterLink, useRoute, useRouter } from 'vue-router';
|
import { RouterLink, useRoute, useRouter } from 'vue-router';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
|
|
@ -8,6 +8,7 @@ import ThemeChanger from '@/components/blocks/ThemeChanger.vue';
|
||||||
import LocaleChanger from '@/components/blocks/LocaleChanger.vue';
|
import LocaleChanger from '@/components/blocks/LocaleChanger.vue';
|
||||||
import { useUserStore } from '@/stores/UserStore';
|
import { useUserStore } from '@/stores/UserStore';
|
||||||
import { authService } from '@/services/AuthService';
|
import { authService } from '@/services/AuthService';
|
||||||
|
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';
|
||||||
|
|
||||||
const navNames = {
|
const navNames = {
|
||||||
HOME: "home",
|
HOME: "home",
|
||||||
|
|
@ -21,6 +22,15 @@ const route = useRoute();
|
||||||
|
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
|
|
||||||
|
const navbar = ref<HTMLElement>();
|
||||||
|
defineExpose({
|
||||||
|
navElement: navbar
|
||||||
|
});
|
||||||
|
|
||||||
|
onMounted( () => {
|
||||||
|
console.log(typeof navbar.value);
|
||||||
|
})
|
||||||
|
|
||||||
const isActiveNav = ( navName: string ) => {
|
const isActiveNav = ( navName: string ) => {
|
||||||
switch( navName ) {
|
switch( navName ) {
|
||||||
case navNames.HOME:
|
case navNames.HOME:
|
||||||
|
|
@ -54,7 +64,7 @@ userStore.userCheckPromise
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<nav id="navbar-main" class="navbar navbar-expand-lg bg-dark-accented">
|
<nav ref="navbar" id="navbar-main" class="navbar navbar-expand-lg bg-dark-accented">
|
||||||
<div class="container px-5">
|
<div class="container px-5">
|
||||||
|
|
||||||
<div class="position-absolute start-0 top-50 translate-middle-y d-flex ms-3 gap-3">
|
<div class="position-absolute start-0 top-50 translate-middle-y d-flex ms-3 gap-3">
|
||||||
|
|
@ -90,13 +100,13 @@ userStore.userCheckPromise
|
||||||
|
|
||||||
<div class="position-absolute end-0 top-50 translate-middle-y d-flex me-3 align-items-center">
|
<div class="position-absolute end-0 top-50 translate-middle-y d-flex me-3 align-items-center">
|
||||||
<template v-if=" userCheckLoading ">
|
<template v-if=" userCheckLoading ">
|
||||||
|
<FontAwesomeIcon :icon="['fas', 'spinner']" spin />
|
||||||
</template>
|
</template>
|
||||||
<template v-else-if=" userStore.loggedIn ">
|
<template v-else-if=" userStore.loggedIn ">
|
||||||
<div class="dropdown-toggle pointer" data-bs-toggle="dropdown" aria-expanded="false">
|
<button class="dropdown-toggle pointer bg-dark py-1 px-2 btn" data-bs-toggle="dropdown" aria-expanded="false">
|
||||||
<img class="pfp-sizing rounded-circle border border-1 border-primary" :src="userStore.pfpSource"
|
<img class="pfp-sizing rounded-circle border border-1 border-primary" :src="userStore.pfpSource"
|
||||||
alt="The Profile Pic of the user" />
|
alt="The Profile Pic of the user" />
|
||||||
</div>
|
</button>
|
||||||
<ul class="dropdown-menu dropdown-menu-end">
|
<ul class="dropdown-menu dropdown-menu-end">
|
||||||
<li>
|
<li>
|
||||||
<p class="dropdown-header fs-5 pt-0 text-primary fw-semibold">{{ userStore.getUserOutput }}</p>
|
<p class="dropdown-header fs-5 pt-0 text-primary fw-semibold">{{ userStore.getUserOutput }}</p>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
import BoardView from '../blocks/BoardView.vue';
|
||||||
|
import { computed, inject, onMounted, type Ref } from 'vue';
|
||||||
|
import { navbarKey } from '@/services/UtilService';
|
||||||
|
import type NavBar from '../blocks/NavBar.vue';
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
|
||||||
|
const navbar = inject<Ref<InstanceType<typeof NavBar> | null>>(navbarKey);
|
||||||
|
onMounted( () => {
|
||||||
|
console.log(navbar);
|
||||||
|
console.log(navbar?.value?.navElement);
|
||||||
|
})
|
||||||
|
|
||||||
|
function test() {
|
||||||
|
console.log(navbar);
|
||||||
|
console.log(navbar?.value?.navElement);
|
||||||
|
}
|
||||||
|
|
||||||
|
const navbarHeight = computed( () => {
|
||||||
|
return navbar?.value?.navElement?.clientHeight;
|
||||||
|
});
|
||||||
|
|
||||||
|
const restHeight = computed( () => {
|
||||||
|
return { height: `calc(100vh - ${navbarHeight.value}px)`};
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div :style="restHeight">
|
||||||
|
<BoardView />
|
||||||
|
Create Page
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
@ -9,7 +9,7 @@ import '@/assets/scss/customized_bootstrap.scss';
|
||||||
|
|
||||||
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';
|
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';
|
||||||
import { library } from '@fortawesome/fontawesome-svg-core';
|
import { library } from '@fortawesome/fontawesome-svg-core';
|
||||||
import { faSun, faMoon, faCircleHalfStroke, faEdit, faPlay, faSpinner, faLanguage, faGlobe } from '@fortawesome/free-solid-svg-icons';
|
import { faSun, faMoon, faCircleHalfStroke, faEdit, faPlay, faSpinner, faLanguage, faGlobe, faPlus } from '@fortawesome/free-solid-svg-icons';
|
||||||
|
|
||||||
import enMessages from './locales/en.json';
|
import enMessages from './locales/en.json';
|
||||||
import deMessages from './locales/de.json';
|
import deMessages from './locales/de.json';
|
||||||
|
|
@ -33,6 +33,7 @@ library.add(
|
||||||
faSpinner,
|
faSpinner,
|
||||||
faLanguage,
|
faLanguage,
|
||||||
faGlobe,
|
faGlobe,
|
||||||
|
faPlus,
|
||||||
)
|
)
|
||||||
|
|
||||||
const app = createApp( App );
|
const app = createApp( App );
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,14 @@
|
||||||
import { createRouter, createWebHistory } from 'vue-router';
|
import { createRouter, createWebHistory } from 'vue-router';
|
||||||
|
|
||||||
|
import { useUserStore } from '@/stores/UserStore';
|
||||||
|
|
||||||
import HomePage from '@/components/pages/HomePage.vue';
|
import HomePage from '@/components/pages/HomePage.vue';
|
||||||
import AboutPage from '@/components/pages/AboutPage.vue';
|
import AboutPage from '@/components/pages/AboutPage.vue';
|
||||||
import LoginPage from '@/components/pages/LoginPage.vue';
|
import LoginPage from '@/components/pages/LoginPage.vue';
|
||||||
import SignupPage from '@/components/pages/SignupPage.vue';
|
import SignupPage from '@/components/pages/SignupPage.vue';
|
||||||
import GamePage from '@/components/pages/GamePage.vue';
|
import GamePage from '@/components/pages/GamePage.vue';
|
||||||
import ProfilePage from '@/components/pages/ProfilePage.vue';
|
import ProfilePage from '@/components/pages/ProfilePage.vue';
|
||||||
import { useUserStore } from '@/stores/UserStore';
|
import CreatePage from '@/components/pages/CreatePage.vue';
|
||||||
|
|
||||||
const router = createRouter( {
|
const router = createRouter( {
|
||||||
history: createWebHistory( import.meta.env.BASE_URL ),
|
history: createWebHistory( import.meta.env.BASE_URL ),
|
||||||
|
|
@ -59,9 +62,9 @@ const router = createRouter( {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/board',
|
path: '/create',
|
||||||
name: 'board',
|
name: 'create',
|
||||||
component: ProfilePage,
|
component: CreatePage,
|
||||||
meta: {
|
meta: {
|
||||||
requiresAuth: true,
|
requiresAuth: true,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
import type { InjectionKey } from 'vue';
|
import type NavBar from '@/components/blocks/NavBar.vue';
|
||||||
|
import type { InjectionKey, Ref } from 'vue';
|
||||||
|
|
||||||
export const infoModalShowFnKey = Symbol() as InjectionKey<Function>;
|
export const infoModalShowFnKey = Symbol() as InjectionKey<Function>;
|
||||||
|
export const navbarKey = Symbol() as InjectionKey<Ref<InstanceType<typeof NavBar> | undefined>>;
|
||||||
|
// export const navbarKey = Symbol() as InjectionKey<Ref<InstanceType<typeof NavBar> | null>>;
|
||||||
Loading…
Reference in New Issue