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);
|
||||
}
|
||||
$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');
|
||||
|
|
|
@ -69,6 +69,11 @@ class MetaFieldsBehavior extends Behavior
|
|||
}
|
||||
}
|
||||
|
||||
public function getTypeHandlers(): array
|
||||
{
|
||||
return $this->typeHandlers;
|
||||
}
|
||||
|
||||
public function getScope()
|
||||
{
|
||||
if (is_null($this->aliasScope)) {
|
||||
|
|
|
@ -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 = [];
|
||||
|
|
Loading…
Reference in New Issue