Add search for mobile view

This commit is contained in:
2026-02-11 18:13:30 +01:00
parent 6024808027
commit 89f15170f5
4 changed files with 34 additions and 10 deletions

View File

@@ -3,12 +3,13 @@
import { useRouter, RouterLink } from 'vue-router' import { useRouter, RouterLink } from 'vue-router'
import NavBarSearch from './NavBarSearch.vue' import NavBarSearch from './NavBarSearch.vue'
import { useAuthStore } from './auth.store.js' import { useAuthStore } from './auth.store.js'
import Modal from './Modal.vue'
const authStore = useAuthStore(); const authStore = useAuthStore();
const router = useRouter(); const router = useRouter();
const popupDisplay = ref(false)
const isMenuActive = ref(false) const isMenuActive = ref(false)
const isSearchBarShown = ref(false)
function logout() { function logout() {
authStore.logout(); authStore.logout();
@@ -23,6 +24,14 @@
<RouterLink to="/" class="navbar-item" activeClass="is-active"> <RouterLink to="/" class="navbar-item" activeClass="is-active">
PLM PLM
</RouterLink> </RouterLink>
<div class="navbar-item is-hidden-desktop">
<a @click="isSearchBarShown = !isSearchBarShown"
class="button is-medium" :class="isSearchBarShown ? 'is-active' : '' ">
<span class="icon" title="Search">
<b-icon-search />
</span>
</a>
</div>
<a role="button" class="navbar-burger" aria-label="menu" <a role="button" class="navbar-burger" aria-label="menu"
:class="isMenuActive ? 'is-active' : '' " :aria-expanded="isMenuActive" :class="isMenuActive ? 'is-active' : '' " :aria-expanded="isMenuActive"
@click="isMenuActive = !isMenuActive"> @click="isMenuActive = !isMenuActive">
@@ -32,9 +41,12 @@
<span aria-hidden="true"></span> <span aria-hidden="true"></span>
</a> </a>
</div> </div>
<div v-if="isSearchBarShown" class="is-hidden-desktop">
<NavBarSearch @search-done="isSearchBarShown = false" size-class="is-medium" is-mobile/>
</div>
<div id="navmenu" class="navbar-menu" :class="isMenuActive ? 'is-active' : '' "> <div id="navmenu" class="navbar-menu" :class="isMenuActive ? 'is-active' : '' ">
<div class="navbar-start"> <div class="navbar-start">
<NavBarSearch @open-scan-popup="popupDisplay = true" class="is-hidden-mobile"/> <NavBarSearch size-class="" class="is-hidden-touch"/>
<RouterLink v-if="authStore.user" to="/books" class="navbar-item" activeClass="is-active"> <RouterLink v-if="authStore.user" to="/books" class="navbar-item" activeClass="is-active">
{{ $t('navbar.mybooks')}} {{ $t('navbar.mybooks')}}
</RouterLink> </RouterLink>
@@ -42,7 +54,7 @@
{{ $t('navbar.addbook')}} {{ $t('navbar.addbook')}}
</RouterLink> </RouterLink>
</div> </div>
<div class="navbar-end is-hidden-mobile"> <div class="navbar-end is-hidden-touch">
<div v-if="authStore.user" class="navbar-item"> <div v-if="authStore.user" class="navbar-item">
<div > <div >
{{ authStore.user.username }} {{ authStore.user.username }}

View File

@@ -46,10 +46,10 @@ function onBarcodeDecode(isbn) {
} }
.modal { .modal {
height: 70%; height: 80%;
width: 70%; width: 80%;
top: 10%; top: 10%;
left: 15%; left: 10%;
box-shadow: 2px 2px 20px 1px; box-shadow: 2px 2px 20px 1px;
overflow-x: auto; overflow-x: auto;
display: flex; display: flex;

View File

@@ -6,10 +6,22 @@
const searchterm = ref(""); const searchterm = ref("");
const router = useRouter(); const router = useRouter();
const props = defineProps({
sizeClass: String,
isMobile: Boolean
});
const emit = defineEmits('searchDone')
const vMobileFocus = {
mounted: (el, binding) => el.focus();
}
function onSearchClick() { function onSearchClick() {
if (typeof searchterm.value === "undefined" || searchterm.value === "") { if (typeof searchterm.value === "undefined" || searchterm.value === "") {
return return
} }
emit('searchDone')
router.push('/search/' + searchterm.value); router.push('/search/' + searchterm.value);
} }
</script> </script>
@@ -18,16 +30,16 @@
<div class="navbar-item"> <div class="navbar-item">
<div class="field has-addons"> <div class="field has-addons">
<div class="control"> <div class="control">
<input v-model="searchterm" @keyup.enter="onSearchClick()" class="input" type="text" /> <input v-mobile-focus="isMobile ? true : null" v-model="searchterm" @keyup.enter="onSearchClick()" class="input" :class="sizeClass" type="text" />
</div> </div>
<div class="control"> <div class="control">
<button @click="onSearchClick()" class="button"> <button @click="onSearchClick()" class="button" :class="sizeClass">
<span class="icon" title="Search"> <span class="icon" title="Search">
<b-icon-search /> <b-icon-search />
</span> </span>
</button> </button>
</div> </div>
<Modal/> <Modal v-if="!isMobile"/>
</div> </div>
</div> </div>
</template> </template>

View File

@@ -22,7 +22,7 @@
</script> </script>
<template> <template>
<h1 class="title">{{$t('barcode.title')}}</h1> <h1 class="subtitle">{{$t('barcode.title')}}</h1>
<div v-if="scanResult">{{scanResult}}</div> <div v-if="scanResult">{{scanResult}}</div>
<video poster="data:image/gif,AAAA" ref="scanner"></video> <video poster="data:image/gif,AAAA" ref="scanner"></video>
</template> </template>