2020-06-11 15:34:13 +00:00
< template >
2021-01-17 17:57:57 +00:00
< card class = "filters has-overflow" >
< fancycheckbox v-model ="params.filter_include_nulls" >
Include Tasks which don ' t have a value set
< / fancycheckbox >
< fancycheckbox
v - model = "filters.requireAllFilters"
@ change = "setFilterConcat()"
>
Require all filters to be true for a task to show up
< / fancycheckbox >
< div class = "field" >
< label class = "label" > Show Done Tasks < / label >
< div class = "control" >
< fancycheckbox @change ="setDoneFilter" v-model ="filters.done" >
Show Done Tasks
< / fancycheckbox >
2020-06-11 15:34:13 +00:00
< / div >
2021-01-17 17:57:57 +00:00
< / div >
2021-03-10 13:13:28 +00:00
< div class = "field" >
< label class = "label" > Search < / label >
< div class = "control" >
< input
class = "input"
placeholder = "Search"
v - model = "params.s"
@ blur = "change()"
@ keyup . enter = "change()"
/ >
< / div >
< / div >
2021-01-17 17:57:57 +00:00
< div class = "field" >
< label class = "label" > Priority < / label >
< div class = "control single-value-control" >
< priority -select
: disabled = "!filters.usePriority"
v - model . number = "filters.priority"
@ change = "setPriority"
/ >
< fancycheckbox
v - model = "filters.usePriority"
@ change = "setPriority"
>
Enable Filter By Priority
< / fancycheckbox >
2020-09-26 21:02:37 +00:00
< / div >
2021-01-17 17:57:57 +00:00
< / div >
< div class = "field" >
< label class = "label" > Percent Done < / label >
< div class = "control single-value-control" >
< percent -done -select
v - model . number = "filters.percentDone"
@ change = "setPercentDoneFilter"
: disabled = "!filters.usePercentDone"
/ >
< fancycheckbox
v - model = "filters.usePercentDone"
@ change = "setPercentDoneFilter"
>
Enable Filter By Percent Done
< / fancycheckbox >
2020-12-19 21:39:25 +00:00
< / div >
2021-01-17 17:57:57 +00:00
< / div >
< div class = "field" >
< label class = "label" > Due Date < / label >
< div class = "control" >
< flat -pickr
: config = "flatPickerConfig"
@ on - close = "setDueDateFilter"
class = "input"
placeholder = "Due Date Range"
v - model = "filters.dueDate"
/ >
2020-12-19 21:39:25 +00:00
< / div >
2021-01-17 17:57:57 +00:00
< / div >
< div class = "field" >
< label class = "label" > Start Date < / label >
< div class = "control" >
< flat -pickr
: config = "flatPickerConfig"
@ on - close = "setStartDateFilter"
class = "input"
placeholder = "Start Date Range"
v - model = "filters.startDate"
/ >
2020-09-26 21:02:37 +00:00
< / div >
2021-01-17 17:57:57 +00:00
< / div >
< div class = "field" >
< label class = "label" > End Date < / label >
< div class = "control" >
< flat -pickr
: config = "flatPickerConfig"
@ on - close = "setEndDateFilter"
class = "input"
placeholder = "End Date Range"
v - model = "filters.endDate"
/ >
2020-09-26 21:02:37 +00:00
< / div >
2021-01-17 17:57:57 +00:00
< / div >
< div class = "field" >
< label class = "label" > Reminders < / label >
< div class = "control" >
< flat -pickr
: config = "flatPickerConfig"
@ on - close = "setReminderFilter"
class = "input"
placeholder = "Reminder Date Range"
v - model = "filters.reminders"
/ >
< / div >
< / div >
< div class = "field" >
< label class = "label" > Assignees < / label >
< div class = "control" >
< multiselect
: loading = "usersService.loading"
placeholder = "Type to search for a user..."
@ search = "query => find('users', query)"
: search - results = "foundusers"
@ select = "() => add('users', 'assignees')"
label = "username"
: multiple = "true"
@ remove = "() => remove('users', 'assignees')"
v - model = "users"
/ >
< / div >
< / div >
< div class = "field" >
< label class = "label" > Labels < / label >
< div class = "control" >
< multiselect
: loading = "labelService.loading"
placeholder = "Type to search for a label..."
@ search = "findLabels"
: search - results = "foundLabels"
@ select = "label => addLabel(label)"
label = "title"
: multiple = "true"
v - model = "labels"
>
< template v -slot :tag ="props" >
< span
: style = "{'background': props.item.hexColor, 'color': props.item.textColor}"
class = "tag ml-2 mt-2" >
< span > { { props . item . title } } < / span >
< a @click ="removeLabel(props.item)" class = "delete is-small" > < / a >
< / span >
< / template >
< / multiselect >
2020-12-19 19:23:46 +00:00
< / div >
2021-01-17 17:57:57 +00:00
< / div >
2020-12-19 21:39:25 +00:00
2021-01-17 17:57:57 +00:00
< template v-if ="$route.name === 'filters.create' || $route.name === 'list.edit'" >
2020-09-26 21:02:37 +00:00
< div class = "field" >
2021-01-17 17:57:57 +00:00
< label class = "label" > Lists < / label >
2020-12-19 21:39:25 +00:00
< div class = "control" >
< multiselect
2021-01-17 17:57:57 +00:00
: loading = "listsService.loading"
placeholder = "Type to search for a list..."
@ search = "query => find('lists', query)"
: search - results = "foundlists"
@ select = "() => add('lists', 'list_id')"
label = "title"
@ remove = "() => remove('lists', 'list_id')"
2021-01-06 22:36:31 +00:00
: multiple = "true"
2021-01-17 17:57:57 +00:00
v - model = "lists"
2021-01-06 22:36:31 +00:00
/ >
2020-09-26 21:02:37 +00:00
< / div >
< / div >
2020-12-20 12:41:47 +00:00
< div class = "field" >
2021-01-17 17:57:57 +00:00
< label class = "label" > Namespaces < / label >
2020-12-20 12:41:47 +00:00
< div class = "control" >
< multiselect
2021-01-17 17:57:57 +00:00
: loading = "namespaceService.loading"
placeholder = "Type to search for a namespace..."
@ search = "query => find('namespace', query)"
: search - results = "foundnamespace"
@ select = "() => add('namespace', 'namespace')"
2020-12-20 12:41:47 +00:00
label = "title"
2021-01-17 17:57:57 +00:00
@ remove = "() => remove('namespace', 'namespace')"
2021-01-06 22:36:31 +00:00
: multiple = "true"
2021-01-17 17:57:57 +00:00
v - model = "namespace"
/ >
2020-12-20 12:41:47 +00:00
< / div >
< / div >
2021-01-17 17:57:57 +00:00
< / template >
< / card >
2020-06-11 15:34:13 +00:00
< / template >
< script >
2020-09-05 20:35:52 +00:00
import Fancycheckbox from '../../input/fancycheckbox'
import flatPickr from 'vue-flatpickr-component'
import 'flatpickr/dist/flatpickr.css'
2020-06-11 15:34:13 +00:00
2020-09-26 21:02:37 +00:00
import { formatISO } from 'date-fns'
2020-12-19 21:39:25 +00:00
import differenceWith from 'lodash/differenceWith'
2020-09-26 21:02:37 +00:00
import PrioritySelect from '@/components/tasks/partials/prioritySelect'
import PercentDoneSelect from '@/components/tasks/partials/percentDoneSelect'
2021-01-06 22:36:31 +00:00
import Multiselect from '@/components/input/multiselect'
2020-09-26 21:02:37 +00:00
2020-12-20 12:41:47 +00:00
import UserService from '@/services/user'
import LabelService from '@/services/label'
2020-12-21 23:13:39 +00:00
import ListService from '@/services/list'
import NamespaceService from '@/services/namespace'
2021-06-03 16:12:40 +00:00
import { mapState } from 'vuex'
2020-12-19 21:39:25 +00:00
2020-09-05 20:35:52 +00:00
export default {
name : 'filters' ,
components : {
2020-09-26 21:02:37 +00:00
PrioritySelect ,
2020-09-05 20:35:52 +00:00
Fancycheckbox ,
flatPickr ,
2020-09-26 21:02:37 +00:00
PercentDoneSelect ,
2020-12-19 21:39:25 +00:00
Multiselect ,
2020-09-05 20:35:52 +00:00
} ,
data ( ) {
return {
params : {
sort _by : [ ] ,
order _by : [ ] ,
filter _by : [ ] ,
filter _value : [ ] ,
filter _comparator : [ ] ,
2020-09-26 21:02:37 +00:00
filter _include _nulls : true ,
filter _concat : 'or' ,
2021-03-10 13:13:28 +00:00
s : '' ,
2020-09-05 20:35:52 +00:00
} ,
filters : {
done : false ,
dueDate : '' ,
2020-09-26 21:02:37 +00:00
requireAllFilters : false ,
priority : 0 ,
usePriority : false ,
startDate : '' ,
endDate : '' ,
percentDone : 0 ,
usePercentDone : false ,
2020-12-19 19:23:46 +00:00
reminders : '' ,
2020-12-19 21:39:25 +00:00
assignees : '' ,
2020-12-21 23:13:39 +00:00
labels : '' ,
list _id : '' ,
namespace : '' ,
2020-09-05 20:35:52 +00:00
} ,
2020-12-19 21:39:25 +00:00
2020-12-21 23:13:39 +00:00
usersService : UserService ,
foundusers : [ ] ,
2020-12-19 21:39:25 +00:00
users : [ ] ,
2020-12-20 12:41:47 +00:00
labelService : LabelService ,
foundLabels : [ ] ,
labels : [ ] ,
2020-12-21 23:13:39 +00:00
listsService : ListService ,
foundlists : [ ] ,
lists : [ ] ,
namespaceService : NamespaceService ,
foundnamespace : [ ] ,
namespace : [ ] ,
2020-09-05 20:35:52 +00:00
}
} ,
2020-12-19 21:39:25 +00:00
created ( ) {
2020-12-21 23:13:39 +00:00
this . usersService = new UserService ( )
2020-12-20 12:41:47 +00:00
this . labelService = new LabelService ( )
2020-12-21 23:13:39 +00:00
this . listsService = new ListService ( )
this . namespaceService = new NamespaceService ( )
2020-12-19 21:39:25 +00:00
} ,
2020-09-05 20:35:52 +00:00
mounted ( ) {
this . params = this . value
2020-09-26 21:02:37 +00:00
this . filters . requireAllFilters = this . params . filter _concat === 'and'
this . prepareFilters ( )
2020-09-05 20:35:52 +00:00
} ,
props : {
value : {
required : true ,
2020-06-11 15:34:13 +00:00
} ,
2020-09-05 20:35:52 +00:00
} ,
watch : {
value ( newVal ) {
this . $set ( this , 'params' , newVal )
2020-09-26 21:02:37 +00:00
this . prepareFilters ( )
2020-06-11 15:34:13 +00:00
} ,
2020-09-05 20:35:52 +00:00
} ,
2021-06-03 16:12:40 +00:00
computed : mapState ( {
flatPickerConfig : state => ( {
altFormat : 'j M Y H:i' ,
altInput : true ,
dateFormat : 'Y-m-d H:i' ,
enableTime : true ,
time _24hr : true ,
mode : 'range' ,
locale : {
firstDayOfWeek : state . auth . settings . weekStart ,
} ,
} )
} ) ,
2020-09-05 20:35:52 +00:00
methods : {
change ( ) {
this . $emit ( 'input' , this . params )
this . $emit ( 'change' , this . params )
2020-06-11 15:34:13 +00:00
} ,
2020-09-26 21:02:37 +00:00
prepareFilters ( ) {
this . prepareDone ( )
2020-12-21 23:13:39 +00:00
this . prepareDate ( 'due_date' , 'dueDate' )
this . prepareDate ( 'start_date' , 'startDate' )
this . prepareDate ( 'end_date' , 'endDate' )
this . prepareSingleValue ( 'priority' , 'priority' , 'usePriority' , true )
this . prepareSingleValue ( 'percent_done' , 'percentDone' , 'usePercentDone' , true )
this . prepareDate ( 'reminders' )
this . prepareRelatedObjectFilter ( 'users' , 'assignees' )
this . prepareRelatedObjectFilter ( 'labels' , 'labels' , 'label' )
this . prepareRelatedObjectFilter ( 'lists' , 'list_id' )
this . prepareRelatedObjectFilter ( 'namespace' )
2020-09-05 20:35:52 +00:00
} ,
2020-09-26 21:02:37 +00:00
removePropertyFromFilter ( propertyName ) {
2021-04-15 19:45:34 +00:00
// Because of the way arrays work, we can only ever remove one element at once.
// To remove multiple filter elements of the same name this function has to be called multiple times.
2020-09-26 21:02:37 +00:00
for ( const i in this . params . filter _by ) {
if ( this . params . filter _by [ i ] === propertyName ) {
this . params . filter _by . splice ( i , 1 )
this . params . filter _comparator . splice ( i , 1 )
this . params . filter _value . splice ( i , 1 )
break
2020-06-11 15:34:13 +00:00
}
2020-09-05 20:35:52 +00:00
}
} ,
2020-09-26 21:02:37 +00:00
setDateFilter ( filterName , variableName ) {
2020-09-05 20:35:52 +00:00
// Only filter if we have a start and end due date
2020-09-26 21:02:37 +00:00
if ( this . filters [ variableName ] !== '' ) {
2020-06-11 15:34:13 +00:00
2020-09-26 21:02:37 +00:00
const parts = this . filters [ variableName ] . split ( ' to ' )
2020-06-11 15:34:13 +00:00
2020-09-05 20:35:52 +00:00
if ( parts . length < 2 ) {
return
}
2020-06-11 15:34:13 +00:00
2020-09-05 20:35:52 +00:00
// Check if we already have values in params and only update them if we do
let foundStart = false
let foundEnd = false
this . params . filter _by . forEach ( ( f , i ) => {
2020-09-26 21:02:37 +00:00
if ( f === filterName && this . params . filter _comparator [ i ] === 'greater_equals' ) {
2020-09-05 20:35:52 +00:00
foundStart = true
2020-09-26 21:02:37 +00:00
this . $set ( this . params . filter _value , i , formatISO ( new Date ( parts [ 0 ] ) ) )
2020-06-11 15:34:13 +00:00
}
2020-09-26 21:02:37 +00:00
if ( f === filterName && this . params . filter _comparator [ i ] === 'less_equals' ) {
2020-09-05 20:35:52 +00:00
foundEnd = true
2020-09-26 21:02:37 +00:00
this . $set ( this . params . filter _value , i , formatISO ( new Date ( parts [ 1 ] ) ) )
2020-06-11 15:34:13 +00:00
}
2020-09-05 20:35:52 +00:00
} )
if ( ! foundStart ) {
2020-09-26 21:02:37 +00:00
this . params . filter _by . push ( filterName )
2020-09-05 20:35:52 +00:00
this . params . filter _comparator . push ( 'greater_equals' )
2020-09-26 21:02:37 +00:00
this . params . filter _value . push ( formatISO ( new Date ( parts [ 0 ] ) ) )
2020-06-11 15:34:13 +00:00
}
2020-09-05 20:35:52 +00:00
if ( ! foundEnd ) {
2020-09-26 21:02:37 +00:00
this . params . filter _by . push ( filterName )
2020-09-05 20:35:52 +00:00
this . params . filter _comparator . push ( 'less_equals' )
2020-09-26 21:02:37 +00:00
this . params . filter _value . push ( formatISO ( new Date ( parts [ 1 ] ) ) )
2020-09-05 20:35:52 +00:00
}
this . change ( )
2021-04-15 19:45:34 +00:00
return
2020-09-05 20:35:52 +00:00
}
2021-04-15 19:45:34 +00:00
this . removePropertyFromFilter ( filterName )
this . removePropertyFromFilter ( filterName )
this . change ( )
2020-06-11 15:34:13 +00:00
} ,
2020-09-26 21:02:37 +00:00
prepareDate ( filterName , variableName ) {
if ( typeof this . params . filter _by === 'undefined' ) {
return
}
let foundDateStart = false
let foundDateEnd = false
for ( const i in this . params . filter _by ) {
if ( this . params . filter _by [ i ] === filterName && this . params . filter _comparator [ i ] === 'greater_equals' ) {
foundDateStart = i
}
if ( this . params . filter _by [ i ] === filterName && this . params . filter _comparator [ i ] === 'less_equals' ) {
foundDateEnd = i
}
if ( foundDateStart !== false && foundDateEnd !== false ) {
break
}
}
if ( foundDateStart !== false && foundDateEnd !== false ) {
const start = new Date ( this . params . filter _value [ foundDateStart ] )
const end = new Date ( this . params . filter _value [ foundDateEnd ] )
this . filters [ variableName ] = ` ${ start . getFullYear ( ) } - ${ start . getMonth ( ) + 1 } - ${ start . getDate ( ) } to ${ end . getFullYear ( ) } - ${ end . getMonth ( ) + 1 } - ${ end . getDate ( ) } `
}
} ,
2020-12-19 21:39:25 +00:00
setSingleValueFilter ( filterName , variableName , useVariableName = '' , comparator = 'equals' ) {
if ( useVariableName !== '' && ! this . filters [ useVariableName ] ) {
2020-09-26 21:02:37 +00:00
this . removePropertyFromFilter ( filterName )
return
}
let found = false
this . params . filter _by . forEach ( ( f , i ) => {
if ( f === filterName ) {
found = true
this . $set ( this . params . filter _value , i , this . filters [ variableName ] )
}
} )
if ( ! found ) {
this . params . filter _by . push ( filterName )
2020-12-19 21:39:25 +00:00
this . params . filter _comparator . push ( comparator )
2020-09-26 21:02:37 +00:00
this . params . filter _value . push ( this . filters [ variableName ] )
}
this . change ( )
} ,
2020-12-21 23:13:39 +00:00
/ * *
*
* @ param filterName The filter name in the api .
* @ param variableName The name of the variable in this . filters .
* @ param useVariableName The name of the variable of the "Use this filter" variable . Will only be set if the parameter is not null .
* @ param isNumber Toggles if the value should be parsed as a number .
* /
prepareSingleValue ( filterName , variableName = null , useVariableName = null , isNumber = false ) {
if ( variableName === null ) {
variableName = filterName
}
2020-09-26 21:02:37 +00:00
let found = false
for ( const i in this . params . filter _by ) {
if ( this . params . filter _by [ i ] === filterName ) {
found = i
break
}
}
2020-12-21 23:13:39 +00:00
if ( found === false && useVariableName !== null ) {
2020-09-26 21:02:37 +00:00
this . filters [ useVariableName ] = false
return
}
if ( isNumber ) {
this . filters [ variableName ] = Number ( this . params . filter _value [ found ] )
} else {
this . filters [ variableName ] = this . params . filter _value [ found ]
}
2020-12-21 23:13:39 +00:00
if ( useVariableName !== null ) {
this . filters [ useVariableName ] = true
}
2020-09-26 21:02:37 +00:00
} ,
prepareDone ( ) {
// Set filters.done based on params
if ( typeof this . params . filter _by === 'undefined' ) {
return
}
let foundDone = false
this . params . filter _by . forEach ( ( f , i ) => {
if ( f === 'done' ) {
foundDone = i
}
} )
if ( foundDone === false ) {
this . $set ( this . filters , 'done' , true )
}
} ,
2020-12-21 23:13:39 +00:00
prepareRelatedObjectFilter ( kind , filterName = null , servicePrefix = null ) {
if ( filterName === null ) {
filterName = kind
}
if ( servicePrefix === null ) {
servicePrefix = kind
}
this . prepareSingleValue ( filterName )
2020-12-22 11:49:34 +00:00
if ( typeof this . filters [ filterName ] !== 'undefined' && this . filters [ filterName ] !== '' ) {
2020-12-21 23:13:39 +00:00
this [ ` ${ servicePrefix } Service ` ] . getAll ( { } , { s : this . filters [ filterName ] } )
. then ( r => {
this . $set ( this , kind , r )
} )
. catch ( e => this . error ( e , this ) )
}
} ,
2020-09-26 21:02:37 +00:00
setDoneFilter ( ) {
if ( this . filters . done ) {
this . removePropertyFromFilter ( 'done' )
} else {
this . params . filter _by . push ( 'done' )
this . params . filter _comparator . push ( 'equals' )
this . params . filter _value . push ( 'false' )
}
this . change ( )
} ,
setFilterConcat ( ) {
if ( this . filters . requireAllFilters ) {
this . params . filter _concat = 'and'
} else {
this . params . filter _concat = 'or'
}
} ,
setDueDateFilter ( ) {
this . setDateFilter ( 'due_date' , 'dueDate' )
} ,
setPriority ( ) {
this . setSingleValueFilter ( 'priority' , 'priority' , 'usePriority' )
} ,
setStartDateFilter ( ) {
this . setDateFilter ( 'start_date' , 'startDate' )
} ,
setEndDateFilter ( ) {
this . setDateFilter ( 'end_date' , 'endDate' )
} ,
setPercentDoneFilter ( ) {
this . setSingleValueFilter ( 'percent_done' , 'percentDone' , 'usePercentDone' )
} ,
2020-12-19 19:23:46 +00:00
setReminderFilter ( ) {
2020-12-21 23:13:39 +00:00
this . setDateFilter ( 'reminders' )
2020-09-26 21:02:37 +00:00
} ,
2020-12-21 23:13:39 +00:00
clear ( kind ) {
this . $set ( this , ` found ${ kind } ` , [ ] )
2020-09-26 21:02:37 +00:00
} ,
2020-12-21 23:13:39 +00:00
find ( kind , query ) {
2020-12-19 21:39:25 +00:00
2020-12-20 12:41:47 +00:00
if ( query === '' ) {
2020-12-21 23:13:39 +00:00
this . clear ( kind )
2020-12-19 21:39:25 +00:00
}
2020-12-21 23:13:39 +00:00
this [ ` ${ kind } Service ` ] . getAll ( { } , { s : query } )
2020-12-19 21:39:25 +00:00
. then ( response => {
// Filter the results to not include users who are already assigneid
2020-12-21 23:13:39 +00:00
this . $set ( this , ` found ${ kind } ` , differenceWith ( response , this [ kind ] , ( first , second ) => {
2020-12-19 21:39:25 +00:00
return first . id === second . id
} ) )
} )
. catch ( e => {
this . error ( e , this )
} )
} ,
2020-12-21 23:13:39 +00:00
add ( kind , filterName ) {
2020-12-19 21:39:25 +00:00
this . $nextTick ( ( ) => {
2020-12-21 23:13:39 +00:00
this . changeMultiselectFilter ( kind , filterName )
2020-12-19 21:39:25 +00:00
} )
} ,
2020-12-21 23:13:39 +00:00
remove ( kind , filterName ) {
2020-12-19 21:39:25 +00:00
this . $nextTick ( ( ) => {
2020-12-21 23:13:39 +00:00
this . changeMultiselectFilter ( kind , filterName )
2020-12-19 21:39:25 +00:00
} )
} ,
2020-12-21 23:13:39 +00:00
changeMultiselectFilter ( kind , filterName ) {
if ( this [ kind ] . length === 0 ) {
this . removePropertyFromFilter ( filterName )
2020-12-19 21:39:25 +00:00
this . change ( )
return
}
2020-12-21 23:13:39 +00:00
let ids = [ ]
this [ kind ] . forEach ( u => {
ids . push ( u . id )
2020-12-19 21:39:25 +00:00
} )
2020-12-21 23:13:39 +00:00
this . $set ( this . filters , filterName , ids . join ( ',' ) )
this . setSingleValueFilter ( filterName , filterName , '' , 'in' )
2020-12-19 21:39:25 +00:00
} ,
2020-12-20 12:41:47 +00:00
clearLabels ( ) {
this . $set ( this , 'foundLabels' , [ ] )
} ,
findLabels ( query ) {
if ( query === '' ) {
this . clearLabels ( )
}
this . labelService . getAll ( { } , { s : query } )
. then ( response => {
// Filter the results to not include labels already selected
this . $set ( this , 'foundLabels' , differenceWith ( response , this . labels , ( first , second ) => {
return first . id === second . id
} ) )
} )
. catch ( e => {
this . error ( e , this )
} )
} ,
addLabel ( ) {
this . $nextTick ( ( ) => {
this . changeLabelFilter ( )
} )
} ,
removeLabel ( label ) {
this . $nextTick ( ( ) => {
for ( const l in this . labels ) {
if ( this . labels [ l ] . id === label . id ) {
this . labels . splice ( l , 1 )
}
break
}
this . changeLabelFilter ( )
} )
} ,
changeLabelFilter ( ) {
if ( this . labels . length === 0 ) {
this . removePropertyFromFilter ( 'labels' )
this . change ( )
return
}
let labelIDs = [ ]
this . labels . forEach ( u => {
labelIDs . push ( u . id )
} )
this . $set ( this . filters , 'labels' , labelIDs . join ( ',' ) )
this . setSingleValueFilter ( 'labels' , 'labels' , '' , 'in' )
} ,
2020-09-05 20:35:52 +00:00
} ,
}
2020-06-11 15:34:13 +00:00
< / script >
2020-09-26 21:02:37 +00:00
< style lang = "scss" >
. single - value - control {
display : flex ;
align - items : center ;
. fancycheckbox {
margin - left : .5 rem ;
}
}
< / style >