koel/resources/assets/js/components/layout/AppHeader.vue

100 lines
2.5 KiB
Vue
Raw Normal View History

2022-04-15 14:24:30 +00:00
<template>
2022-04-15 17:00:08 +00:00
<header id="mainHeader">
2022-07-16 15:44:45 +00:00
<h1 class="brand text-thin">Koel</h1>
2022-04-24 08:29:14 +00:00
<span class="hamburger" role="button" title="Show or hide the sidebar" @click="toggleSidebar">
2022-07-15 07:23:55 +00:00
<icon :icon="faBars"/>
2022-04-15 14:24:30 +00:00
</span>
2022-04-24 08:29:14 +00:00
<span class="magnifier" role="button" title="Show or hide the search form" @click="toggleSearchForm">
2022-07-15 07:23:55 +00:00
<icon :icon="faSearch"/>
2022-04-15 14:24:30 +00:00
</span>
<SearchForm v-if="showSearchForm"/>
2022-04-15 14:24:30 +00:00
<div class="header-right">
<UserBadge/>
2022-04-15 17:00:08 +00:00
<button
class="about control"
data-testid="about-btn"
2022-04-24 08:29:14 +00:00
title="About Koel"
type="button"
@click.prevent="showAboutDialog"
2022-04-15 17:00:08 +00:00
>
<span v-if="shouldNotifyNewVersion" class="new-version" data-testid="new-version">
{{ latestVersion }} available!
2022-04-15 14:24:30 +00:00
</span>
2022-07-15 07:23:55 +00:00
<icon v-else :icon="faInfoCircle"/>
2022-04-15 14:24:30 +00:00
</button>
</div>
</header>
</template>
2022-04-15 17:00:08 +00:00
<script lang="ts" setup>
2022-07-15 07:23:55 +00:00
import { faBars, faInfoCircle, faSearch } from '@fortawesome/free-solid-svg-icons'
2022-05-15 15:25:02 +00:00
import isMobile from 'ismobilejs'
2022-06-10 10:47:46 +00:00
import { ref } from 'vue'
2022-04-15 17:00:08 +00:00
import { eventBus } from '@/utils'
import { useNewVersionNotification } from '@/composables'
2022-04-15 14:24:30 +00:00
2022-06-10 10:47:46 +00:00
import SearchForm from '@/components/ui/SearchForm.vue'
import UserBadge from '@/components/user/UserBadge.vue'
2022-04-15 14:24:30 +00:00
const showSearchForm = ref(!isMobile.any)
const { shouldNotifyNewVersion, latestVersion } = useNewVersionNotification()
2022-04-15 17:00:08 +00:00
const toggleSidebar = () => eventBus.emit('TOGGLE_SIDEBAR')
const toggleSearchForm = () => (showSearchForm.value = !showSearchForm.value)
2022-04-24 08:29:14 +00:00
const showAboutDialog = () => eventBus.emit('MODAL_SHOW_ABOUT_KOEL')
2022-04-15 14:24:30 +00:00
</script>
<style lang="scss">
#mainHeader {
height: var(--header-height);
background: var(--color-bg-secondary);
display: flex;
box-shadow: 0 0 2px 0 rgba(0, 0, 0, .4);
h1.brand {
flex: 1;
font-size: 1.7rem;
opacity: 0;
line-height: var(--header-height);
text-align: center;
}
.hamburger, .magnifier {
font-size: 1.4rem;
flex: 0 0 48px;
order: -1;
line-height: var(--header-height);
text-align: center;
display: none;
}
.header-right {
display: flex;
align-items: center;
flex: 1;
justify-content: flex-end;
.about {
height: 100%;
@include vertical-center();
padding: 16px;
border-left: 1px solid rgba(255, 255, 255, .1);
}
}
@media only screen and (max-width: 667px) {
display: flex;
align-content: stretch;
justify-content: flex-start;
2022-04-15 14:24:30 +00:00
.hamburger, .magnifier {
display: inline-block;
}
h1.brand {
opacity: 1;
}
}
}
</style>