Added the very basic foundations for a filter system

This commit is contained in:
Jan Böhmer 2022-08-15 01:01:27 +02:00
parent ef389dcc15
commit f9d945c4c7
15 changed files with 460 additions and 5 deletions

View file

@ -0,0 +1,28 @@
<?php
namespace App\Form\Filters\Constraints;
use App\DataTables\Filters\Constraints\BooleanConstraint;
use App\Form\Type\TriStateCheckboxType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class BooleanConstraintType extends AbstractType
{
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'compound' => true,
'data_class' => BooleanConstraint::class,
]);
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('value', TriStateCheckboxType::class, [
'label' => $options['label'],
'required' => false,
]);
}
}

View file

@ -0,0 +1,57 @@
<?php
namespace App\Form\Filters\Constraints;
use App\DataTables\Filters\Constraints\NumberConstraint;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\OptionsResolver\OptionsResolver;
class NumberConstraintType extends AbstractType
{
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'compound' => true,
'data_class' => NumberConstraint::class,
]);
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$choices = [
'=' => '=',
'!=' => '!=',
'<' => '<',
'>' => '>',
'<=' => '<=',
'>=' => '>=',
'BETWEEN' => 'BETWEEN',
];
$builder->add('value1', NumberType::class, [
'label' => 'filter.number_constraint.value1',
'attr' => [
'placeholder' => 'filter.number_constraint.value1',
],
'required' => false,
'html5' => true,
]);
$builder->add('value2', NumberType::class, [
'label' => 'filter.number_constraint.value2',
'attr' => [
'placeholder' => 'filter.number_constraint.value2',
],
'required' => false,
'html5' => true,
]);
$builder->add('operator', ChoiceType::class, [
'label' => 'filter.number_constraint.operator',
'choices' => $choices,
]);
}
}

View file

@ -0,0 +1,43 @@
<?php
namespace App\Form\Filters;
use App\DataTables\Filters\PartFilter;
use App\Form\Filters\Constraints\BooleanConstraintType;
use App\Form\Filters\Constraints\NumberConstraintType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\SubmitButton;
use Symfony\Component\OptionsResolver\OptionsResolver;
class PartFilterType extends AbstractType
{
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'compound' => true,
'data_class' => PartFilter::class,
'csrf_protection' => false,
]);
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('favorite', BooleanConstraintType::class, [
'label' => 'part.edit.is_favorite'
]);
$builder->add('needsReview', BooleanConstraintType::class, [
'label' => 'part.edit.needs_review'
]);
$builder->add('mass', NumberConstraintType::class, [
'label' => 'part.edit.mass'
]);
$builder->add('submit', SubmitType::class, [
'label' => 'Update',
]);
}
}