Files
classroomio/src/components/Apps/index.svelte
T

133 lines
3.5 KiB
Svelte
Raw Normal View History

2021-05-22 22:25:33 +03:00
<script>
2021-05-31 11:28:46 +03:00
import { onMount } from "svelte";
import hotkeys from "hotkeys-js";
2021-05-29 20:47:46 +03:00
import Forum24 from "carbon-icons-svelte/lib/Forum24";
import AlignBoxTopLeft24 from "carbon-icons-svelte/lib/AlignBoxTopLeft24";
import SendAlt24 from "carbon-icons-svelte/lib/SendAlt24";
import ChartPie24 from "carbon-icons-svelte/lib/ChartPie24";
import IconButton from "../IconButton/index.svelte";
import QandA from "./components/QandA/index.svelte";
import LiveChat from "./components/LiveChat/index.svelte";
import Notes from "./components/Notes/index.svelte";
import Poll from "./components/Poll/index.svelte";
import APPS_CONSTANTS from "./constants";
let selectedApp;
function handleClose() {
selectedApp = null;
}
function handleAppClick(appName) {
if (appName === selectedApp) {
handleClose();
} else {
selectedApp = appName;
}
}
2021-05-31 11:28:46 +03:00
onMount(() => {
2021-07-06 08:39:17 +03:00
hotkeys("A+1,A+2,A+3,A+4", function (event, handler) {
2021-05-31 11:28:46 +03:00
event.preventDefault();
switch (handler.key) {
2021-07-06 08:39:17 +03:00
case "A+1":
2021-05-31 11:28:46 +03:00
handleAppClick(APPS_CONSTANTS.APPS.LIVE_CHAT);
break;
2021-07-06 08:39:17 +03:00
case "A+2":
2021-05-31 11:28:46 +03:00
handleAppClick(APPS_CONSTANTS.APPS.QANDA);
break;
2021-07-06 08:39:17 +03:00
case "A+3":
2021-05-31 11:28:46 +03:00
handleAppClick(APPS_CONSTANTS.APPS.NOTES);
break;
2021-07-06 08:39:17 +03:00
case "A+4":
2021-05-31 11:28:46 +03:00
handleAppClick(APPS_CONSTANTS.APPS.POLL);
break;
}
});
});
2021-05-22 22:25:33 +03:00
</script>
2021-05-31 11:28:46 +03:00
<div class="root">
<div class="apps">
<IconButton
2021-07-06 08:39:17 +03:00
toolTipProps={{ title: "Live Chat", hotkeys: ["A", "1"] }}
2021-05-31 11:28:46 +03:00
value={APPS_CONSTANTS.APPS.LIVE_CHAT}
onClick={handleAppClick}
2021-06-26 21:32:42 +03:00
selected={APPS_CONSTANTS.APPS.LIVE_CHAT === selectedApp}
>
2021-05-31 11:28:46 +03:00
<SendAlt24 class="carbon-icon" />
</IconButton>
<IconButton
2021-07-06 08:39:17 +03:00
toolTipProps={{ title: "QandA", hotkeys: ["A", "2"] }}
2021-05-31 11:28:46 +03:00
value={APPS_CONSTANTS.APPS.QANDA}
onClick={handleAppClick}
2021-06-26 21:32:42 +03:00
selected={APPS_CONSTANTS.APPS.QANDA === selectedApp}
>
2021-05-31 11:28:46 +03:00
<Forum24 class="carbon-icon" />
</IconButton>
<IconButton
2021-07-06 08:39:17 +03:00
toolTipProps={{ title: "Notes", hotkeys: ["A", "3"] }}
2021-05-31 11:28:46 +03:00
value={APPS_CONSTANTS.APPS.NOTES}
onClick={handleAppClick}
2021-06-26 21:32:42 +03:00
selected={APPS_CONSTANTS.APPS.NOTES === selectedApp}
>
2021-05-31 11:28:46 +03:00
<AlignBoxTopLeft24 class="carbon-icon" />
</IconButton>
<IconButton
2021-07-06 08:39:17 +03:00
toolTipProps={{ title: "Poll", hotkeys: ["A", "4"] }}
2021-05-31 11:28:46 +03:00
value={APPS_CONSTANTS.APPS.POLL}
onClick={handleAppClick}
2021-06-26 21:32:42 +03:00
selected={APPS_CONSTANTS.APPS.POLL === selectedApp}
>
2021-05-31 11:28:46 +03:00
<ChartPie24 class="carbon-icon" />
</IconButton>
</div>
{#if !!selectedApp}
<div class="app">
{#if selectedApp === APPS_CONSTANTS.APPS.QANDA}
<QandA {handleClose} />
{:else if selectedApp === APPS_CONSTANTS.APPS.LIVE_CHAT}
<LiveChat {handleClose} />
{:else if selectedApp === APPS_CONSTANTS.APPS.POLL}
<Poll {handleClose} />
{:else if selectedApp === APPS_CONSTANTS.APPS.NOTES}
<Notes {handleClose} />
{/if}
</div>
{/if}
</div>
2021-06-26 21:32:42 +03:00
<style lang="scss">
.root {
height: 95vh;
position: sticky;
top: 0;
border-left: 1px solid var(--border-color);
display: flex;
flex-direction: row;
z-index: 1;
& .apps {
padding-top: 20px;
display: flex;
flex-direction: column;
align-items: center;
width: 60px;
border-right: 1px solid var(--border-color);
height: 100%;
}
& .app {
2021-07-05 10:52:20 +00:00
width: 400px;
2021-06-26 21:32:42 +03:00
transition: all 1s ease-out;
position: relative;
2021-07-05 10:52:20 +00:00
overflow: auto;
2021-06-26 21:32:42 +03:00
}
}
</style>