chg: [indexTable:filtering] Initial work on supporting custom operators
parent
6cb9887f03
commit
04b82d356e
|
@ -178,6 +178,12 @@ class CRUDComponent extends Component
|
||||||
$this->Controller->set('metaFieldsEnabled', false);
|
$this->Controller->set('metaFieldsEnabled', false);
|
||||||
}
|
}
|
||||||
$filters = !empty($this->Controller->filterFields) ? $this->Controller->filterFields : [];
|
$filters = !empty($this->Controller->filterFields) ? $this->Controller->filterFields : [];
|
||||||
|
$typeHandlers = $this->Table->getBehavior('MetaFields')->getTypeHandlers();
|
||||||
|
$typeHandlersOperators = [];
|
||||||
|
foreach ($typeHandlers as $type => $handler) {
|
||||||
|
$typeHandlersOperators[$type] = $handler::OPERATORS;
|
||||||
|
}
|
||||||
|
$this->Controller->set('typeHandlersOperators', $typeHandlersOperators);
|
||||||
$this->Controller->set('filters', $filters);
|
$this->Controller->set('filters', $filters);
|
||||||
$this->Controller->viewBuilder()->setLayout('ajax');
|
$this->Controller->viewBuilder()->setLayout('ajax');
|
||||||
$this->Controller->render('/genericTemplates/filters');
|
$this->Controller->render('/genericTemplates/filters');
|
||||||
|
|
|
@ -69,6 +69,11 @@ class MetaFieldsBehavior extends Behavior
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getTypeHandlers(): array
|
||||||
|
{
|
||||||
|
return $this->typeHandlers;
|
||||||
|
}
|
||||||
|
|
||||||
public function getScope()
|
public function getScope()
|
||||||
{
|
{
|
||||||
if (is_null($this->aliasScope)) {
|
if (is_null($this->aliasScope)) {
|
||||||
|
|
|
@ -2,7 +2,12 @@
|
||||||
$filteringItems = [];
|
$filteringItems = [];
|
||||||
foreach ($metaTemplates as $template_id => $metaTemplate) {
|
foreach ($metaTemplates as $template_id => $metaTemplate) {
|
||||||
foreach ($metaTemplate['meta_template_fields'] as $metaTemplateField) {
|
foreach ($metaTemplate['meta_template_fields'] as $metaTemplateField) {
|
||||||
$filteringItems[h($metaTemplate->name)][] = ['id' => $metaTemplateField->id, 'name' => h($metaTemplateField->field), 'template_id' => $template_id];
|
$filteringItems[h($metaTemplate->name)][] = [
|
||||||
|
'id' => h($metaTemplateField->id),
|
||||||
|
'name' => h($metaTemplateField->field),
|
||||||
|
'template_id' => h($template_id),
|
||||||
|
'type' => h($metaTemplateField->type),
|
||||||
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,6 +40,7 @@ $filteringForm = $this->Bootstrap->table(
|
||||||
<script>
|
<script>
|
||||||
(function() {
|
(function() {
|
||||||
const availableFilters = <?= json_encode($filteringItems) ?>;
|
const availableFilters = <?= json_encode($filteringItems) ?>;
|
||||||
|
const typeHandlersOperators = <?= json_encode($typeHandlersOperators) ?>;
|
||||||
|
|
||||||
$(document).ready(() => {
|
$(document).ready(() => {
|
||||||
const $filteringTable = $('table.indexMetaFieldsFilteringTable')
|
const $filteringTable = $('table.indexMetaFieldsFilteringTable')
|
||||||
|
@ -84,7 +90,6 @@ $filteringForm = $this->Bootstrap->table(
|
||||||
placeholder: '<?= __('Pick a meta field') ?>',
|
placeholder: '<?= __('Pick a meta field') ?>',
|
||||||
allowClear: true,
|
allowClear: true,
|
||||||
templateSelection: select2FormatState,
|
templateSelection: select2FormatState,
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,13 +161,36 @@ $filteringForm = $this->Bootstrap->table(
|
||||||
template_field_id: metaTemplateField['id'],
|
template_field_id: metaTemplateField['id'],
|
||||||
template_name: metaTemplateName,
|
template_name: metaTemplateName,
|
||||||
template_field_name: metaTemplateField['name'],
|
template_field_name: metaTemplateField['name'],
|
||||||
|
template_field_type: metaTemplateField['type'],
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
$selectField.change(function() {
|
||||||
|
if ($(this).data('select2') !== undefined) {
|
||||||
|
const pickedType = $($(this).select2('data')[0].element).data('meta_template_data')['template_field_type']
|
||||||
|
let operators = typeHandlersOperators[pickedType]
|
||||||
|
if (operators === undefined || operators.length == 0) {
|
||||||
|
operators = ['=', '!=']
|
||||||
|
}
|
||||||
|
// setMetaFieldsSelectOperators($(this), operators)
|
||||||
|
}
|
||||||
|
})
|
||||||
return $selectField
|
return $selectField
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// /* Unused - Might be useful in the future if wee need to change the operators. Right now = and != are enough */
|
||||||
|
// function setMetaFieldsSelectOperators($fieldSelect, operators) {
|
||||||
|
// const $table = $fieldSelect.closest('table.indexMetaFieldsFilteringTable')
|
||||||
|
// const $controlRow = $table.find('#controlRow')
|
||||||
|
// const $operatorSelect = $controlRow.find('select.fieldOperator')
|
||||||
|
// $operatorSelect.empty()
|
||||||
|
// operators.forEach((operator) => {
|
||||||
|
// $operatorSelect.append($('<option/>').text(operator).val(operator), )
|
||||||
|
// })
|
||||||
|
// $operatorSelect.val(operators[0])
|
||||||
|
// }
|
||||||
|
|
||||||
function getFilters() {
|
function getFilters() {
|
||||||
const $table = $(this)
|
const $table = $(this)
|
||||||
let activeFilters = [];
|
let activeFilters = [];
|
||||||
|
|
Loading…
Reference in New Issue