Files
swingmusic-extended/src/App.vue
T
geoffrey45 977d9282cb feat: separate discs in album page
+ remove tooltip markup
+ refactor css classnames
2023-01-13 18:13:49 +03:00

135 lines
3.0 KiB
Vue

<template>
<ContextMenu />
<Modal />
<Notification />
<section
id="app-grid"
:class="{
noSidebar: !settings.use_sidebar || !xl,
NoSideBorders: !xxl,
extendWidth: settings.extend_width && settings.can_extend_width,
}"
>
<LeftSidebar />
<NavBar />
<div id="acontent" v-element-size="updateContentElemSize">
<router-view />
</div>
<RightSideBar v-if="settings.use_sidebar && xl" />
<BottomBar />
</section>
</template>
<script setup lang="ts">
// @libraries
import { vElementSize } from "@vueuse/components";
import { onStartTyping } from "@vueuse/core";
import { onMounted } from "vue";
import { useRouter } from "vue-router";
// @stores
import { content_width } from "@/stores/content-width";
import useContextStore from "@/stores/context";
import useModalStore from "@/stores/modal";
import useQStore from "@/stores/queue";
import useSettingsStore from "@/stores/settings";
// @utils
import handleShortcuts from "@/composables/useKeyboard";
import { readLocalStorage, writeLocalStorage } from "@/utils";
import { xl, xxl } from "./composables/useBreakpoints";
// @small-components
import ContextMenu from "@/components/ContextMenu.vue";
import Modal from "@/components/modal.vue";
import Notification from "@/components/Notification.vue";
// @app-grid-components
import BottomBar from "@/components/BottomBar.vue";
import NavBar from "@/components/nav/NavBar.vue";
import RightSideBar from "@/components/RightSideBar/Main.vue";
import LeftSidebar from "./components/LeftSidebar/index.vue";
const queue = useQStore();
const router = useRouter();
const modal = useModalStore();
const context_store = useContextStore();
const settings = useSettingsStore();
const app_dom = document.getElementById("app") as HTMLElement;
queue.readQueue();
handleShortcuts(useQStore);
app_dom.addEventListener("click", (e) => {
if (context_store.visible) {
context_store.hideContextMenu();
}
});
router.afterEach(() => {
(document.getElementById("acontent") as HTMLElement).scrollTo(0, 0);
});
onStartTyping((e) => {
if (e.ctrlKey) {
console.log("ctrl pressed");
}
const elem = document.getElementById("globalsearch") as HTMLInputElement;
elem.focus();
elem.value = "";
});
function updateContentElemSize({
width,
height,
}: {
width: number;
height: number;
}) {
content_width.value = width;
}
function handleWelcomeModal() {
let welcomeShowCount = readLocalStorage("shown-welcome-message");
if (!welcomeShowCount) {
welcomeShowCount = 0;
}
if (welcomeShowCount < 2) {
modal.showWelcomeModal();
writeLocalStorage("shown-welcome-message", welcomeShowCount + 1);
}
}
onMounted(() => {
handleWelcomeModal();
});
</script>
<style lang="scss">
@import "./assets/scss/mixins.scss";
.l-sidebar {
position: relative;
.withlogo {
padding: 1rem;
}
.l-album-art {
width: calc(100% - 2rem);
position: absolute;
bottom: 0;
margin-bottom: 1rem;
}
}
.r-sidebar {
&::-webkit-scrollbar {
display: none;
}
}
</style>