Skip to content
Snippets Groups Projects
ProjectsMenu.vue 4.04 KiB
Newer Older
Florent Lavelle's avatar
dev
Florent Lavelle committed
<template>
	<div class="filters-container">
		<div class="ui styled accordion">
			<div class="title collapsible-filters">
				FILTRES
				<i
					:class="isFiltersVisible ? 'caret down' : 'caret right'"
					class="ui icon"
				/>
			</div>
Florent Lavelle's avatar
dev
Florent Lavelle committed
		</div>
		<div
			:class="isFiltersVisible ? '' : 'hidden'"
			class="ui menu filters"
		>
			<div class="item">
				<label>
					Niveau d'autorisation requis
				</label>
				<DropdownMenuItem
					:options="accessLevelOptions"
					v-on="$listeners"
				/>
			</div>
			<div class="item">
				<label>
					Mon niveau d'autorisation
				</label>
				<DropdownMenuItem
					:options="userAccessLevelOptions"
					v-on="$listeners"
				/>
			</div>
			<div class="item">
				<label>
					Modération
				</label>
				<DropdownMenuItem
					:options="moderationOptions"
					v-on="$listeners"
				/>
			</div>
			<div class="right item">
				<label>
					Rechercher un projet
				</label>
				<search-projects
					:search-function="SEARCH_PROJECTS"
				/>
			</div>
Florent Lavelle's avatar
dev
Florent Lavelle committed
		</div>
	</div>
</template>

<script>
import { mapActions } from 'vuex';
Florent Lavelle's avatar
dev
Florent Lavelle committed

Florent Lavelle's avatar
Florent Lavelle committed
import DropdownMenuItem from '@/components/Projects/DropdownMenuItem.vue';
import SearchProjects from '@/components/Projects/SearchProjects.vue';
Florent Lavelle's avatar
dev
Florent Lavelle committed

export default {
	name: 'ProjectsMenu',

	components: {
Florent Lavelle's avatar
Florent Lavelle committed
		DropdownMenuItem,
		SearchProjects,
	},

	data() {
		return {
			isFiltersVisible: false,
Florent Lavelle's avatar
Florent Lavelle committed
			moderationOptions: [
				{
					label: 'Tous',
					filter: 'moderation',
					value: null
Florent Lavelle's avatar
Florent Lavelle committed
				},
				{
					label: 'Projet modéré',
					filter: 'moderation',
					value: 'true'
Florent Lavelle's avatar
Florent Lavelle committed
				},
				{
					label: 'Projet non modéré',
					filter: 'moderation',
					value: 'false'
Florent Lavelle's avatar
Florent Lavelle committed
				},
			],
			accessLevelOptions: [
				{
					label: 'Tous',
					filter: 'access_level',
					value: null
Florent Lavelle's avatar
Florent Lavelle committed
				},
				{
					label: 'Utilisateur connecté',
					filter: 'access_level',
					value: 'logged_user'
Florent Lavelle's avatar
Florent Lavelle committed
				},
				{
					label: 'Contributeur',
					filter: 'access_level',
					value: 'contributor'
Florent Lavelle's avatar
Florent Lavelle committed
				},
				{
					label: 'Modérateur',
					filter: 'access_level',
					value: 'moderator'
Florent Lavelle's avatar
Florent Lavelle committed
				},
				{
					label: 'Administrateur projet',
					filter: 'access_level',
					value: 'admin'
Florent Lavelle's avatar
Florent Lavelle committed
				},
			],
			userAccessLevelOptions: [
				{
					label: 'Tous',
					filter: 'user_access_level',
					value: null
Florent Lavelle's avatar
Florent Lavelle committed
				},
				{
					label: 'Utilisateur connecté',
					filter: 'user_access_level',
Florent Lavelle's avatar
Florent Lavelle committed
				},
				{
					label: 'Contributeur',
					filter: 'user_access_level',
Florent Lavelle's avatar
Florent Lavelle committed
				},
				{
					label: 'Modérateur',
					filter: 'user_access_level',
Florent Lavelle's avatar
Florent Lavelle committed
				},
				{
					label: 'Administrateur projet',
					filter: 'user_access_level',
Florent Lavelle's avatar
Florent Lavelle committed
				},
			]
		}
	mounted() {
		const el = document.getElementsByClassName('collapsible-filters');

		el[0].addEventListener('click', function() {
			const content = document.getElementsByClassName('filters');
			content[0].classList.toggle('hidden');
			if (content[0].style.maxHeight){
				content[0].style.maxHeight = null;
			} else {
				content[0].style.maxHeight = content[0].scrollHeight + 5 + "px";
			}
		});
	},

	methods: {
		...mapActions('projects', [
			'SEARCH_PROJECTS'
		])
Florent Lavelle's avatar
dev
Florent Lavelle committed
	}
}
</script>

<style lang="less" scoped>
.transition-properties(...) {
  -webkit-transition: @arguments;
  -moz-transition: @arguments;
  -o-transition: @arguments;
  transition: @arguments;
}
Florent Lavelle's avatar
Florent Lavelle committed

.filters-container {
	width: 100%;
	display: flex;
	flex-direction: column;
	justify-content: flex-end;
	align-items: flex-end;
	.accordion {
		width: fit-content;
		.collapsible-filters {
			cursor: pointer;
			font-size: 1.25em;
			padding-right: 0;
		}
	}
	.filters {
		width: 100%;
		height:auto;
		min-height: 0;
		max-height:75px;
		margin: 0 0 1em 0;
		.transition-properties(max-height 0.2s ease-out;);
		.item {
			display: flex;
			flex-direction: column;
			align-items: flex-start !important;

			padding: 0.4em 0.6em;
Florent Lavelle's avatar
Florent Lavelle committed

			label {
				margin-bottom: 0.2em;
				font-size: 0.9em;
				font-weight: 600;
			}
		}
		.item {
			width: 25%;
		}
		.right.item::before {
			width: 0;
Florent Lavelle's avatar
Florent Lavelle committed
		}
	}
	.filters.hidden {
		max-height: 0;
		overflow: hidden;
		border: none;
Florent Lavelle's avatar
Florent Lavelle committed
	}
Florent Lavelle's avatar
dev
Florent Lavelle committed
}
</style>