|
@@ -1,56 +1,51 @@
|
|
|
<template>
|
|
|
- <div class='select_filter'>
|
|
|
- <div
|
|
|
- class='select_filter__overlay'
|
|
|
- :class='{ "select_filter__overlay--show": menuOpen }'
|
|
|
- @click='menuOpen = false'
|
|
|
- ></div>
|
|
|
-
|
|
|
+ <menu-tooltip v-model='menuOpen'>
|
|
|
<button
|
|
|
+ slot='button'
|
|
|
class='button select_filter__button'
|
|
|
:class='{ "select_filter__button--selected": menuOpen }'
|
|
|
- @click='menuOpen = !menuOpen'
|
|
|
+ @click='menuOpen = true'
|
|
|
>
|
|
|
{{name}}
|
|
|
<span class='fa fa-chevron-down'></span>
|
|
|
</button>
|
|
|
|
|
|
- <div
|
|
|
- class='select_filter__menu'
|
|
|
- :class='{ "select_filter__menu--show": menuOpen }'
|
|
|
- >
|
|
|
- <div class='select_filter__menu__inner'>
|
|
|
+ <template slot='menu'>
|
|
|
+ <div
|
|
|
+ class='select_filter__item select_filter__item--select_all'
|
|
|
+ @click='toggleSelectAll'
|
|
|
+ >
|
|
|
<div
|
|
|
- class='select_filter__item select_filter__item--select_all'
|
|
|
- @click='toggleSelectAll'
|
|
|
- >
|
|
|
- <div
|
|
|
- class='select_filter__checkbox'
|
|
|
- :class='{ "select_filter__checkbox--selected": selected.length === options.length }'
|
|
|
- ></div>
|
|
|
- <span>Select all</span>
|
|
|
- </div>
|
|
|
+ class='select_filter__checkbox'
|
|
|
+ :class='{ "select_filter__checkbox--selected": selected.length === options.length }'
|
|
|
+ ></div>
|
|
|
+ <span>Select all</span>
|
|
|
+ </div>
|
|
|
|
|
|
+ <div
|
|
|
+ class='select_filter__item'
|
|
|
+ v-for='(item, $index) in options'
|
|
|
+ @click='toggledSelectItem($index)'
|
|
|
+ >
|
|
|
<div
|
|
|
- class='select_filter__item'
|
|
|
- v-for='(item, $index) in options'
|
|
|
- @click='toggledSelectItem($index)'
|
|
|
- >
|
|
|
- <div
|
|
|
- class='select_filter__checkbox'
|
|
|
- :class='{ "select_filter__checkbox--selected": selected.includes($index) }'
|
|
|
- ></div>
|
|
|
- <span>{{item.name}}</span>
|
|
|
- </div>
|
|
|
+ class='select_filter__checkbox'
|
|
|
+ :class='{ "select_filter__checkbox--selected": selected.includes($index) }'
|
|
|
+ ></div>
|
|
|
+ <span>{{item.name}}</span>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ </template>
|
|
|
+ </menu-tooltip>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+ import MenuTooltip from './MenuTooltip';
|
|
|
+
|
|
|
export default {
|
|
|
name: 'SelectFilter',
|
|
|
props: ['name', 'options', 'value'],
|
|
|
+ components: {
|
|
|
+ MenuTooltip
|
|
|
+ },
|
|
|
data () {
|
|
|
return {
|
|
|
menuOpen: false,
|
|
@@ -95,22 +90,6 @@
|
|
|
@import '../assets/scss/variables.scss';
|
|
|
|
|
|
.select_filter {
|
|
|
- display: inline-block;
|
|
|
-
|
|
|
- @at-root #{&}__overlay {
|
|
|
- height: 100%;
|
|
|
- left: 0;
|
|
|
- pointer-events: none;
|
|
|
- position: fixed;
|
|
|
- top: 0;
|
|
|
- width: 100%;
|
|
|
- z-index: 2;
|
|
|
-
|
|
|
- @at-root #{&}--show {
|
|
|
- pointer-events: all;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
@at-root #{&}__button {
|
|
|
border-radius: 0.25rem;
|
|
|
cursor: pointer;
|
|
@@ -136,35 +115,6 @@
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @at-root #{&}__menu {
|
|
|
- background-color: #fff;
|
|
|
- border: 1.5px solid $color__gray--darker;
|
|
|
- border-radius: 0.25rem;
|
|
|
- box-shadow: 0 0.25rem 1rem rgba(#000, 0.125);
|
|
|
- max-height: 10rem;
|
|
|
- opacity: 0;
|
|
|
- overflow-y: hidden;
|
|
|
- position: absolute;
|
|
|
- pointer-events: none;
|
|
|
- transform: translateY(-0.25rem);
|
|
|
- transition: transform 0.2s, opacity 0.2s;
|
|
|
- width: 15rem;
|
|
|
- z-index: 3;
|
|
|
-
|
|
|
- @at-root #{&}--show {
|
|
|
- opacity: 1;
|
|
|
- pointer-events: all;
|
|
|
- transform: translateY(0.125rem);
|
|
|
- }
|
|
|
-
|
|
|
- @at-root #{&}__inner {
|
|
|
- max-height: 10rem;
|
|
|
- overflow-y: auto;
|
|
|
- padding: 0.25rem;
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
@at-root #{&}__item {
|
|
|
align-items: center;
|
|
|
background-color: #fff;
|