Added filter dialog toggle to sidebar. Moved filter dialog to container. Using events to toggle sidebar from header.
This commit is contained in:
		
							parent
							
								
									7bbb2f3557
								
							
						
					
					
						commit
						cb4b5ce640
					
				|  | @ -10,15 +10,24 @@ | |||
| 		<transition name="slide"> | ||||
| 			<Sidebar | ||||
| 				v-if="showSidebar" | ||||
| 				@toggle="(state) => showSidebar = state" | ||||
| 				@toggle-sidebar="(state) => toggleSidebar(state)" | ||||
| 				@show-filters="(state) => toggleFilters(state)" | ||||
| 			/> | ||||
| 		</transition> | ||||
| 
 | ||||
| 		<Header :toggle-sidebar="toggleSidebar" /> | ||||
| 		<Header | ||||
| 			@toggle-sidebar="(state) => toggleSidebar(state)" | ||||
| 			@show-filters="(state) => toggleFilters(state)" | ||||
| 		/> | ||||
| 
 | ||||
| 		<div class="content"> | ||||
| 			<router-view /> | ||||
| 		</div> | ||||
| 
 | ||||
| 		<Filters | ||||
| 			v-if="showFilters" | ||||
| 			@close="toggleFilters(false)" | ||||
| 		/> | ||||
| 	</div> | ||||
| </template> | ||||
| 
 | ||||
|  | @ -26,11 +35,17 @@ | |||
| import Warning from './warning.vue'; | ||||
| import Header from '../header/header.vue'; | ||||
| import Sidebar from '../sidebar/sidebar.vue'; | ||||
| import Filters from './filters.vue'; | ||||
| 
 | ||||
| function toggleSidebar(state) { | ||||
| 	this.showSidebar = typeof state === 'boolean' ? state : !this.showSidebar; | ||||
| } | ||||
| 
 | ||||
| function toggleFilters(state) { | ||||
| 	this.showFilters = state; | ||||
| 	this.showSidebar = false; | ||||
| } | ||||
| 
 | ||||
| async function setConsent(consent) { | ||||
| 	if (consent) { | ||||
| 		this.showWarning = false; | ||||
|  | @ -61,17 +76,20 @@ export default { | |||
| 		Header, | ||||
| 		Sidebar, | ||||
| 		Warning, | ||||
| 		Filters, | ||||
| 	}, | ||||
| 	data() { | ||||
| 		return { | ||||
| 			showSidebar: false, | ||||
| 			showWarning: localStorage.getItem('consent') !== window.env.sessionId, | ||||
| 			showFilters: false, | ||||
| 		}; | ||||
| 	}, | ||||
| 	mounted, | ||||
| 	beforeUnmount, | ||||
| 	methods: { | ||||
| 		toggleSidebar, | ||||
| 		toggleFilters, | ||||
| 		setConsent, | ||||
| 		blur, | ||||
| 		resize, | ||||
|  |  | |||
|  | @ -31,7 +31,7 @@ | |||
| 					<li class="nav-item"> | ||||
| 						<router-link | ||||
| 							v-slot="{ href, isActive, navigate }" | ||||
| 							to="/networks" | ||||
| 							to="/channels" | ||||
| 							custom | ||||
| 						> | ||||
| 							<a | ||||
|  | @ -79,7 +79,7 @@ | |||
| 		<div class="header-section"> | ||||
| 			<div | ||||
| 				class="sidebar-toggle noselect" | ||||
| 				@click.stop="toggleSidebar" | ||||
| 				@click.stop="$emit('toggleSidebar')" | ||||
| 			><Icon icon="menu" /></div> | ||||
| 
 | ||||
| 			<Tooltip> | ||||
|  | @ -148,7 +148,7 @@ | |||
| 
 | ||||
| 							<li | ||||
| 								class="menu-item" | ||||
| 								@click="showFilters = true" | ||||
| 								@click="$emit('showFilters', true)" | ||||
| 							> | ||||
| 								<Icon icon="filter" />Filters | ||||
| 							</li> | ||||
|  | @ -157,11 +157,6 @@ | |||
| 				</template> | ||||
| 			</Tooltip> | ||||
| 
 | ||||
| 			<Filters | ||||
| 				v-if="showFilters" | ||||
| 				@close="showFilters = false" | ||||
| 			/> | ||||
| 
 | ||||
| 			<Search class="search-full" /> | ||||
| 
 | ||||
| 			<Tooltip | ||||
|  | @ -194,7 +189,6 @@ | |||
| import { mapState } from 'vuex'; | ||||
| 
 | ||||
| import Search from './search.vue'; | ||||
| import Filters from './filters.vue'; | ||||
| 
 | ||||
| import logo from '../../img/logo.svg'; | ||||
| 
 | ||||
|  | @ -217,14 +211,8 @@ function setSfw(enabled) { | |||
| export default { | ||||
| 	components: { | ||||
| 		Search, | ||||
| 		Filters, | ||||
| 	}, | ||||
| 	props: { | ||||
| 		toggleSidebar: { | ||||
| 			type: Function, | ||||
| 			default: null, | ||||
| 		}, | ||||
| 	}, | ||||
| 	emits: ['toggleSidebar', 'showFilters'], | ||||
| 	data() { | ||||
| 		return { | ||||
| 			logo, | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| <template> | ||||
| 	<div | ||||
| 		class="sidebar-container" | ||||
| 		@click="$emit('toggle', false)" | ||||
| 		@click="$emit('toggleSidebar', false)" | ||||
| 	> | ||||
| 		<div | ||||
| 			class="sidebar" | ||||
|  | @ -12,7 +12,7 @@ | |||
| 					<router-link | ||||
| 						to="/updates" | ||||
| 						class="logo-link" | ||||
| 						@click.native="$emit('toggle', false)" | ||||
| 						@click="$emit('toggleSidebar', false)" | ||||
| 					> | ||||
| 						<h1 class="sidebar-logo"> | ||||
| 							<div | ||||
|  | @ -25,23 +25,25 @@ | |||
| 					<Icon | ||||
| 						icon="cross2" | ||||
| 						class="sidebar-close noselect" | ||||
| 						@click.native="$emit('toggle', false)" | ||||
| 						@click.native="$emit('toggleSidebar', false)" | ||||
| 					/> | ||||
| 				</div> | ||||
| 
 | ||||
| 				<Search | ||||
| 					class="search" | ||||
| 					@search="$emit('toggle', false)" | ||||
| 					@search="$emit('toggleSidebar', false)" | ||||
| 				/> | ||||
| 
 | ||||
| 				<nav class="nav"> | ||||
| 					<ul class="nolist"> | ||||
| 						<li class="nav-item"> | ||||
| 						<li | ||||
| 							class="nav-item" | ||||
| 							@click="$emit('toggleSidebar', false)" | ||||
| 						> | ||||
| 							<router-link | ||||
| 								v-slot="{ href, isActive, navigate }" | ||||
| 								to="/updates" | ||||
| 								custom | ||||
| 								@click.native="$emit('toggle', false)" | ||||
| 							> | ||||
| 								<a | ||||
| 									class="nav-link" | ||||
|  | @ -52,12 +54,14 @@ | |||
| 							</router-link> | ||||
| 						</li> | ||||
| 
 | ||||
| 						<li class="nav-item"> | ||||
| 						<li | ||||
| 							class="nav-item" | ||||
| 							@click="$emit('toggleSidebar', false)" | ||||
| 						> | ||||
| 							<router-link | ||||
| 								v-slot="{ href, isActive, navigate }" | ||||
| 								to="/actors" | ||||
| 								custom | ||||
| 								@click.native="$emit('toggle', false)" | ||||
| 							> | ||||
| 								<a | ||||
| 									class="nav-link" | ||||
|  | @ -68,12 +72,14 @@ | |||
| 							</router-link> | ||||
| 						</li> | ||||
| 
 | ||||
| 						<li class="nav-item"> | ||||
| 						<li | ||||
| 							class="nav-item" | ||||
| 							@click="$emit('toggleSidebar', false)" | ||||
| 						> | ||||
| 							<router-link | ||||
| 								v-slot="{ href, isActive, navigate }" | ||||
| 								to="/networks" | ||||
| 								to="/channels" | ||||
| 								custom | ||||
| 								@click.native="$emit('toggle', false)" | ||||
| 							> | ||||
| 								<a | ||||
| 									class="nav-link" | ||||
|  | @ -84,12 +90,14 @@ | |||
| 							</router-link> | ||||
| 						</li> | ||||
| 
 | ||||
| 						<li class="nav-item"> | ||||
| 						<li | ||||
| 							class="nav-item" | ||||
| 							@click="$emit('toggleSidebar', false)" | ||||
| 						> | ||||
| 							<router-link | ||||
| 								v-slot="{ href, isActive, navigate }" | ||||
| 								to="/movies" | ||||
| 								custom | ||||
| 								@click.native="$emit('toggle', false)" | ||||
| 							> | ||||
| 								<a | ||||
| 									class="nav-link" | ||||
|  | @ -100,12 +108,14 @@ | |||
| 							</router-link> | ||||
| 						</li> | ||||
| 
 | ||||
| 						<li class="nav-item"> | ||||
| 						<li | ||||
| 							class="nav-item" | ||||
| 							@click="$emit('toggleSidebar', false)" | ||||
| 						> | ||||
| 							<router-link | ||||
| 								v-slot="{ href, isActive, navigate }" | ||||
| 								to="/tags" | ||||
| 								custom | ||||
| 								@click.native="$emit('toggle', false)" | ||||
| 							> | ||||
| 								<a | ||||
| 									class="nav-link" | ||||
|  | @ -143,6 +153,11 @@ | |||
| 					class="toggle" | ||||
| 					@click="setTheme('dark')" | ||||
| 				><Icon icon="moon" />Use dark theme</label> | ||||
| 
 | ||||
| 				<label | ||||
| 					class="toggle" | ||||
| 					@click="$emit('showFilters', true)" | ||||
| 				><Icon icon="filter" />Filters</label> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 	</div> | ||||
|  | @ -175,6 +190,7 @@ export default { | |||
| 	components: { | ||||
| 		Search, | ||||
| 	}, | ||||
| 	emits: ['toggleSidebar', 'showFilters'], | ||||
| 	data() { | ||||
| 		return { | ||||
| 			logo, | ||||
|  | @ -240,6 +256,12 @@ export default { | |||
|     margin: 0; | ||||
| } | ||||
| 
 | ||||
| .sidebar-section { | ||||
| 	display: flex; | ||||
| 	flex-direction: column; | ||||
| 	overflow: hidden; | ||||
| } | ||||
| 
 | ||||
| .logo-link { | ||||
|     display: block; | ||||
|     height: 100%; | ||||
|  | @ -265,6 +287,11 @@ export default { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| .nav { | ||||
| 	flex-grow: 1; | ||||
| 	overflow-x: auto; | ||||
| } | ||||
| 
 | ||||
| .nav-item { | ||||
|     display: block; | ||||
| } | ||||
|  | @ -286,13 +313,13 @@ export default { | |||
| } | ||||
| 
 | ||||
| .toggles { | ||||
| 	flex-shrink: 0; | ||||
| 	border-top: solid 1px var(--shadow-hint); | ||||
| 	margin: .5rem 0 0 0; | ||||
| } | ||||
| 
 | ||||
| .toggle { | ||||
| 	display: flex; | ||||
| 	align-self: flex-end; | ||||
| 	padding: 1rem; | ||||
| 	color: var(--shadow); | ||||
| 	font-weight: bold; | ||||
|  |  | |||
|  | @ -151,9 +151,9 @@ const routes = [ | |||
| 		name: 'actors', | ||||
| 	}, | ||||
| 	{ | ||||
| 		path: '/networks', | ||||
| 		path: '/channels', | ||||
| 		component: Networks, | ||||
| 		name: 'networks', | ||||
| 		name: 'channels', | ||||
| 	}, | ||||
| 	{ | ||||
| 		path: '/movies', | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue