workadventure/front/src/Components/Menu/Menu.svelte

138 lines
4.3 KiB
Svelte
Raw Normal View History

2021-07-12 17:39:16 +02:00
<script lang="typescript">
2021-08-09 14:49:17 +02:00
import {fly} from "svelte/transition";
import SettingsSubMenu from "./SettingsSubMenu.svelte";
import ProfileSubMenu from "./ProfileSubMenu.svelte";
import CreateMapSubMenu from "./CreateMapSubMenu.svelte";
2021-08-09 14:49:17 +02:00
import AboutRoomSubMenu from "./AboutRoomSubMenu.svelte";
import GlobalMessageSubMenu from "./GlobalMessagesSubMenu.svelte";
import ContactSubMenu from "./ContactSubMenu.svelte";
import CustomSubMenu from "./CustomSubMenu.svelte";
import {menuVisiblilityStore, SubMenusInterface, subMenusStore} from "../../Stores/MenuStore";
2021-08-17 14:44:43 +02:00
//import {userIsAdminStore} from "../../Stores/GameStore";
import {onMount} from "svelte";
import {get} from "svelte/store";
let activeSubMenu: string = SubMenusInterface.settings;
let props: { menuCommand: string } = { menuCommand: SubMenusInterface.settings};
let activeComponent: typeof SettingsSubMenu | typeof CustomSubMenu = SettingsSubMenu;
onMount(() => {
2021-08-17 14:44:43 +02:00
//TODO: Uncomment before final push to merge
/*if(!get(userIsAdminStore)) {
subMenusStore.removeMenu(SubMenusInterface.globalMessages);
2021-08-17 14:44:43 +02:00
}*/
switchMenu(SubMenusInterface.settings);
})
2021-07-12 17:39:16 +02:00
2021-08-09 14:49:17 +02:00
function switchMenu(menu: string) {
if (get(subMenusStore).find((subMenu) => subMenu === menu)) {
activeSubMenu = menu;
props = {menuCommand: menu};
switch (menu) {
case SubMenusInterface.settings:
activeComponent = SettingsSubMenu;
break;
case SubMenusInterface.profile:
activeComponent = ProfileSubMenu;
break;
case SubMenusInterface.createMap:
activeComponent = CreateMapSubMenu;
break;
case SubMenusInterface.aboutRoom:
activeComponent = AboutRoomSubMenu;
break;
case SubMenusInterface.globalMessages:
activeComponent = GlobalMessageSubMenu;
break;
case SubMenusInterface.contact:
activeComponent = ContactSubMenu;
break;
default:
activeComponent = CustomSubMenu;
break;
}
} else throw ("There is no menu called " + menu);
2021-07-12 17:39:16 +02:00
}
2021-07-13 12:00:09 +02:00
2021-08-09 14:49:17 +02:00
function closeMenu() {
menuVisiblilityStore.set(false);
}
function onKeyDown(e:KeyboardEvent) {
if (e.key === 'Escape') {
closeMenu();
}
2021-07-13 12:00:09 +02:00
}
2021-07-12 17:39:16 +02:00
</script>
2021-08-09 14:49:17 +02:00
<svelte:window on:keydown={onKeyDown}/>
2021-07-12 17:39:16 +02:00
2021-08-09 14:49:17 +02:00
<div class="menu-container-main">
<div class="menu-nav-sidebar nes-container is-rounded" transition:fly="{{ x: -1000, duration: 500 }}">
<h2>Menu</h2>
2021-07-12 17:39:16 +02:00
<nav>
{#each $subMenusStore as submenu}
<button type="button" class="nes-btn {activeSubMenu === submenu ? 'is-disabled' : ''}" on:click|preventDefault={() => switchMenu(submenu)}>
{submenu}
</button>
2021-08-09 14:49:17 +02:00
{/each}
2021-07-12 17:39:16 +02:00
</nav>
2021-08-09 14:49:17 +02:00
</div>
<div class="menu-submenu-container nes-container is-rounded" transition:fly="{{ y: -1000, duration: 500 }}">
<h2>{activeSubMenu}</h2>
<svelte:component this={activeComponent} {...props}/>
2021-08-09 14:49:17 +02:00
</div>
</div>
2021-07-12 17:39:16 +02:00
<style lang="scss">
2021-08-09 14:49:17 +02:00
.nes-container {
padding: 5px;
}
2021-07-12 17:39:16 +02:00
2021-08-09 14:49:17 +02:00
div.menu-container-main {
2021-08-17 14:44:43 +02:00
--size-first-columns-grid: clamp(120px, 15%, 200px);
2021-08-09 14:49:17 +02:00
font-family: "Press Start 2P";
pointer-events: auto;
2021-08-17 14:44:43 +02:00
height: 80vh;
2021-08-09 14:49:17 +02:00
width: 75vw;
top: 10vh;
position: relative;
margin: auto;
display: grid;
grid-template-columns: var(--size-first-columns-grid) calc(100% - var(--size-first-columns-grid));
grid-template-rows: 100%;
h2 {
text-align: center;
margin-bottom: 20px;
2021-07-12 17:39:16 +02:00
}
2021-08-09 14:49:17 +02:00
div.menu-nav-sidebar {
background-color: #333333;
color: whitesmoke;
nav button {
width: calc(100% - 10px);
margin-bottom: 10px;
}
2021-07-12 17:39:16 +02:00
}
2021-08-09 14:49:17 +02:00
div.menu-submenu-container {
background-color: #333333;
color: whitesmoke;
}
}
2021-08-17 14:44:43 +02:00
@media only screen and (max-height: 900px) {
div.menu-container-main {
top: 5vh;
height: 85vh;
width: 100vw;
font-size: 0.5em;
}
}
2021-07-12 17:39:16 +02:00
</style>