chg: [indexTable:filtering] Initial work on supporting custom operators

pull/93/head
Sami Mokaddem 2022-02-25 15:36:55 +01:00
parent 6cb9887f03
commit 04b82d356e
No known key found for this signature in database
GPG Key ID: 164C473F627A06FA
3 changed files with 41 additions and 2 deletions

View File

@ -178,6 +178,12 @@ class CRUDComponent extends Component
$this->Controller->set('metaFieldsEnabled', false);
}
$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->viewBuilder()->setLayout('ajax');
$this->Controller->render('/genericTemplates/filters');

View File

@ -69,6 +69,11 @@ class MetaFieldsBehavior extends Behavior
}
}
public function getTypeHandlers(): array
{
return $this->typeHandlers;
}
public function getScope()
{
if (is_null($this->aliasScope)) {

View File

@ -2,7 +2,12 @@
$filteringItems = [];
foreach ($metaTemplates as $template_id => $metaTemplate) {
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>
(function() {
const availableFilters = <?= json_encode($filteringItems) ?>;
const typeHandlersOperators = <?= json_encode($typeHandlersOperators) ?>;
$(document).ready(() => {
const $filteringTable = $('table.indexMetaFieldsFilteringTable')
@ -84,7 +90,6 @@ $filteringForm = $this->Bootstrap->table(
placeholder: '<?= __('Pick a meta field') ?>',
allowClear: true,
templateSelection: select2FormatState,
})
}
@ -156,13 +161,36 @@ $filteringForm = $this->Bootstrap->table(
template_field_id: metaTemplateField['id'],
template_name: metaTemplateName,
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
}
// /* 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() {
const $table = $(this)
let activeFilters = [];