Added comparators options to numeric filter as well. #886.
This commit is contained in:
parent
658789e2bb
commit
ce1e57c792
|
@ -14,7 +14,7 @@
|
|||
v-model="comparators"
|
||||
:native-value="comparatorKey"
|
||||
:disabled="comparators.indexOf(comparatorKey) >= 0 && comparators.length <= 1"
|
||||
name="metadata_type_relationship[display_related_item_metadata]"
|
||||
name="date_filter_options[comparators]"
|
||||
@update:model-value="emitValues()">
|
||||
<span v-html="comparatorObject.symbol + ' ' + comparatorObject.label" />
|
||||
</b-checkbox>
|
||||
|
@ -53,29 +53,28 @@
|
|||
},
|
||||
'>': {
|
||||
symbol: '>',
|
||||
label: this.$i18n.get('after'),
|
||||
label: this.$i18n.get('greater_than'),
|
||||
enabled: this.comparators.indexOf('>') < 0 ? 'no' : 'yes'
|
||||
},
|
||||
'>=': {
|
||||
symbol: '≥',
|
||||
label: this.$i18n.get('after_or_on_day'),
|
||||
label: this.$i18n.get('greater_than_or_equal_to'),
|
||||
enabled: this.comparators.indexOf('>=') < 0 ? 'no' : 'yes'
|
||||
},
|
||||
'<': {
|
||||
symbol: '<',
|
||||
label: this.$i18n.get('before'),
|
||||
label: this.$i18n.get('less_than'),
|
||||
enabled: this.comparators.indexOf('<') < 0 ? 'no' : 'yes'
|
||||
},
|
||||
'<=': {
|
||||
symbol: '≤',
|
||||
label: this.$i18n.get('before_or_on_day'),
|
||||
label: this.$i18n.get('less_than_or_equal_to'),
|
||||
enabled: this.comparators.indexOf('<=') < 0 ? 'no' : 'yes'
|
||||
}
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
emitValues() {
|
||||
console.log(this.comparators)
|
||||
this.$emit('update:model-value', { comparators: this.comparators });
|
||||
}
|
||||
}
|
||||
|
|
|
@ -87,6 +87,11 @@ class Date extends Filter_Type {
|
|||
'comparators' => __('"Comparators" array is required', 'tainacan')
|
||||
];
|
||||
|
||||
if ( count( $this->get_option('comparators') ) < 1 )
|
||||
return [
|
||||
'comparators' => __('At least one comparator should be provided', 'tainacan')
|
||||
];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
<b-select
|
||||
v-model="step"
|
||||
name="step_options"
|
||||
@update:model-value="onUpdateStep">
|
||||
@update:model-value="emitValues()">
|
||||
<option value="0.001">
|
||||
0.001
|
||||
</option>
|
||||
|
@ -70,7 +70,7 @@
|
|||
name="max_options"
|
||||
type="number"
|
||||
step="1"
|
||||
@update:model-value="onUpdateStep" />
|
||||
@update:model-value="emitValues()" />
|
||||
<button
|
||||
class="button is-white is-pulled-right"
|
||||
@click.prevent="showEditStepOptions = false">
|
||||
|
@ -87,6 +87,26 @@
|
|||
</button>
|
||||
</div>
|
||||
</b-field>
|
||||
<b-field :addons="false">
|
||||
<label class="label is-inline">
|
||||
{{ $i18n.getHelperTitle('tainacan-filter-numeric', 'comparators') }}<span> * </span>
|
||||
<help-button
|
||||
:title="$i18n.getHelperTitle('tainacan-filter-numeric', 'comparators')"
|
||||
:message="$i18n.getHelperMessage('tainacan-filter-numeric', 'comparators')" />
|
||||
</label>
|
||||
<div>
|
||||
<b-checkbox
|
||||
v-for="(comparatorObject, comparatorKey) in comparatorsObject"
|
||||
:key="comparatorKey"
|
||||
v-model="comparators"
|
||||
:native-value="comparatorKey"
|
||||
:disabled="comparators.indexOf(comparatorKey) >= 0 && comparators.length <= 1"
|
||||
name="numeric_filter_options[comparators]"
|
||||
@update:model-value="emitValues()">
|
||||
<span v-html="comparatorObject.symbol + ' ' + comparatorObject.label" />
|
||||
</b-checkbox>
|
||||
</div>
|
||||
</b-field>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
@ -102,15 +122,50 @@
|
|||
data() {
|
||||
return {
|
||||
step: [Number, String],
|
||||
showEditStepOptions: false
|
||||
showEditStepOptions: false,
|
||||
comparatorsObject: Object,
|
||||
comparators: Array
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.step = this.modelValue && this.modelValue.step ? this.modelValue.step : 1;
|
||||
this.comparators = ( this.modelValue && this.modelValue.comparators ) ? this.modelValue.comparators : [ '=', '!=', '>', '>=', '<', '<=' ];
|
||||
this.comparatorsObject = {
|
||||
'=': {
|
||||
symbol: '=',
|
||||
label: this.$i18n.get('is_equal_to'),
|
||||
enabled: this.comparators.indexOf('=') < 0 ? 'no' : 'yes'
|
||||
},
|
||||
'!=': {
|
||||
symbol: '≠',
|
||||
label: this.$i18n.get('is_not_equal_to'),
|
||||
enabled: this.comparators.indexOf('!=') < 0 ? 'no' : 'yes'
|
||||
},
|
||||
'>': {
|
||||
symbol: '>',
|
||||
label: this.$i18n.get('after'),
|
||||
enabled: this.comparators.indexOf('>') < 0 ? 'no' : 'yes'
|
||||
},
|
||||
'>=': {
|
||||
symbol: '≥',
|
||||
label: this.$i18n.get('after_or_on_day'),
|
||||
enabled: this.comparators.indexOf('>=') < 0 ? 'no' : 'yes'
|
||||
},
|
||||
'<': {
|
||||
symbol: '<',
|
||||
label: this.$i18n.get('before'),
|
||||
enabled: this.comparators.indexOf('<') < 0 ? 'no' : 'yes'
|
||||
},
|
||||
'<=': {
|
||||
symbol: '≤',
|
||||
label: this.$i18n.get('before_or_on_day'),
|
||||
enabled: this.comparators.indexOf('<=') < 0 ? 'no' : 'yes'
|
||||
}
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
onUpdateStep(modelValue) {
|
||||
this.$emit('update:model-value', { step: modelValue });
|
||||
emitValues() {
|
||||
this.$emit('update:model-value', { step: this.step, comparators: this.comparators });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<template>
|
||||
<div class="numeric-filter-container">
|
||||
<b-dropdown
|
||||
v-if="filterTypeOptions.comparators.length > 1"
|
||||
:mobile-modal="true"
|
||||
aria-role="list"
|
||||
trap-focus
|
||||
|
@ -10,57 +11,25 @@
|
|||
:aria-label="$i18n.get('label_comparator')"
|
||||
class="button is-white">
|
||||
<span class="icon is-small">
|
||||
<i v-html="comparatorSymbol" />
|
||||
<i v-html="comparatorsObject[comparator].symbol" />
|
||||
</span>
|
||||
<span class="icon">
|
||||
<i class="tainacan-icon tainacan-icon-1-25em tainacan-icon-arrowdown" />
|
||||
</span>
|
||||
</button>
|
||||
</template>
|
||||
<template
|
||||
v-for="(comparatorObject, comparatorKey) in comparatorsObject"
|
||||
:key="comparatorKey">
|
||||
<b-dropdown-item
|
||||
v-if="comparatorObject.enabled == 'yes'"
|
||||
role="button"
|
||||
:class="{ 'is-active': comparator == '=' }"
|
||||
:value="'='"
|
||||
aria-role="listitem">
|
||||
= {{ $i18n.get('is_equal_to') }}
|
||||
</b-dropdown-item>
|
||||
<b-dropdown-item
|
||||
role="button"
|
||||
:class="{ 'is-active': comparator == '!=' }"
|
||||
:value="'!='"
|
||||
aria-role="listitem">
|
||||
≠ {{ $i18n.get('is_not_equal_to') }}
|
||||
</b-dropdown-item>
|
||||
<b-dropdown-item
|
||||
role="button"
|
||||
:class="{ 'is-active': comparator == '>' }"
|
||||
:value="'>'"
|
||||
aria-role="listitem">
|
||||
> {{ $i18n.get('greater_than') }}
|
||||
</b-dropdown-item>
|
||||
<b-dropdown-item
|
||||
role="button"
|
||||
:class="{ 'is-active': comparator == '>=' }"
|
||||
:value="'>='"
|
||||
aria-role="listitem">
|
||||
≥ {{ $i18n.get('greater_than_or_equal_to') }}
|
||||
</b-dropdown-item>
|
||||
<b-dropdown-item
|
||||
role="button"
|
||||
:class="{ 'is-active': comparator == '<' }"
|
||||
:value="'<'"
|
||||
aria-role="listitem">
|
||||
< {{ $i18n.get('less_than') }}
|
||||
</b-dropdown-item>
|
||||
<b-dropdown-item
|
||||
role="button"
|
||||
:class="{ 'is-active': comparator == '<=' }"
|
||||
:value="'<='"
|
||||
aria-role="listitem">
|
||||
≤ {{ $i18n.get('less_than_or_equal_to') }}
|
||||
</b-dropdown-item>
|
||||
:class="{ 'is-active': comparator == comparatorKey }"
|
||||
:value="comparatorKey"
|
||||
aria-role="listitem"
|
||||
v-html="comparatorObject.symbol + ' ' + comparatorObject.label" />
|
||||
</template>
|
||||
</b-dropdown>
|
||||
|
||||
<b-numberinput
|
||||
v-model="value"
|
||||
:aria-labelledby="'filter-label-id-' + filter.id"
|
||||
|
@ -89,19 +58,6 @@
|
|||
comparator: '=' // =, !=, >, >=, <, <=
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
comparatorSymbol() {
|
||||
switch(this.comparator) {
|
||||
case '=': return '=';
|
||||
case '!=': return '≠';
|
||||
case '>': return '>';
|
||||
case '>=': return '≥';
|
||||
case '<': return '<';
|
||||
case '<=': return '≤';
|
||||
default: return '';
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
'query': {
|
||||
handler() {
|
||||
|
@ -110,6 +66,41 @@
|
|||
deep: true
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.comparatorsObject = {
|
||||
'=': {
|
||||
symbol: '=',
|
||||
label: this.$i18n.get('is_equal_to'),
|
||||
enabled: this.filterTypeOptions.comparators.indexOf('=') < 0 ? 'no' : 'yes'
|
||||
},
|
||||
'!=': {
|
||||
symbol: '≠',
|
||||
label: this.$i18n.get('is_not_equal_to'),
|
||||
enabled: this.filterTypeOptions.comparators.indexOf('!=') < 0 ? 'no' : 'yes'
|
||||
},
|
||||
'>': {
|
||||
symbol: '>',
|
||||
label: this.$i18n.get('greater_than'),
|
||||
enabled: this.filterTypeOptions.comparators.indexOf('>') < 0 ? 'no' : 'yes'
|
||||
},
|
||||
'>=': {
|
||||
symbol: '≥',
|
||||
label: this.$i18n.get('greater_than_or_equal_to'),
|
||||
enabled: this.filterTypeOptions.comparators.indexOf('>=') < 0 ? 'no' : 'yes'
|
||||
},
|
||||
'<': {
|
||||
symbol: '<',
|
||||
label: this.$i18n.get('less_than'),
|
||||
enabled: this.filterTypeOptions.comparators.indexOf('<') < 0 ? 'no' : 'yes'
|
||||
},
|
||||
'<=': {
|
||||
symbol: '≤',
|
||||
label: this.$i18n.get('less_than_or_equal_to'),
|
||||
enabled: this.filterTypeOptions.comparators.indexOf('<=') < 0 ? 'no' : 'yes'
|
||||
},
|
||||
};
|
||||
this.comparator = this.filterTypeOptions.comparators[0];
|
||||
},
|
||||
mounted() {
|
||||
this.updateSelectedValues();
|
||||
},
|
||||
|
|
|
@ -16,7 +16,8 @@ class Numeric extends Filter_Type {
|
|||
$this->set_form_component('tainacan-filter-form-numeric');
|
||||
$this->set_use_max_options(false);
|
||||
$this->set_default_options([
|
||||
'step' => 1
|
||||
'step' => 1,
|
||||
'comparators' => [ '=', '!=', '>', '>=', '<', '<=' ]
|
||||
]);
|
||||
$this->set_preview_template('
|
||||
<div>
|
||||
|
@ -77,6 +78,10 @@ class Numeric extends Filter_Type {
|
|||
'step' => [
|
||||
'title' => __( 'Step', 'tainacan' ),
|
||||
'description' => __( 'The amount to be increased or decreased when clicking on the filter control buttons. This also defines whether the input accepts decimal numbers.', 'tainacan' ),
|
||||
],
|
||||
'comparators' => [
|
||||
'title' => __( 'Enabled comparators', 'tainacan' ),
|
||||
'description' => __( 'A list of comparators to be available in the filter, such as equal, greater than, smaller than, etc.', 'tainacan' ),
|
||||
]
|
||||
];
|
||||
}
|
||||
|
@ -89,13 +94,24 @@ class Numeric extends Filter_Type {
|
|||
if ( !in_array($filter->get_status(), apply_filters('tainacan-status-require-validation', ['publish','future','private'])) )
|
||||
return true;
|
||||
|
||||
if ( empty($this->get_option('step')) ) {
|
||||
return [
|
||||
$errors = [];
|
||||
|
||||
if ( empty($this->get_option('step')) )
|
||||
$errors[] = [
|
||||
'step' => __('"Step" value is required','tainacan')
|
||||
];
|
||||
}
|
||||
|
||||
return true;
|
||||
if ( empty($this->get_option('comparators')) )
|
||||
$errors[] = [
|
||||
'comparators' => __('"Comparators" array is required', 'tainacan')
|
||||
];
|
||||
|
||||
if ( count( $this->get_option('comparators') ) < 1 )
|
||||
$errors[] = [
|
||||
'comparators' => __('At least one comparator should be provided', 'tainacan')
|
||||
];
|
||||
|
||||
return count($errors) ? $errors : true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -134,6 +150,8 @@ class Numeric_Helper {
|
|||
case '<=':
|
||||
$filter_arguments['label'] = '≤ ' . $filter_arguments['label'][0];
|
||||
break;
|
||||
default:
|
||||
$filter_arguments['label'] = $filter_arguments['label'][0];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue