Skip to content

Commit

Permalink
feat(filter): Add Country, Currency and Timezone filters
Browse files Browse the repository at this point in the history
  • Loading branch information
ndench committed Jul 12, 2023
1 parent 99cadf9 commit baefda3
Show file tree
Hide file tree
Showing 3 changed files with 129 additions and 0 deletions.
43 changes: 43 additions & 0 deletions src/Filter/CountryFilter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?php

namespace EasyCorp\Bundle\EasyAdminBundle\Filter;

use Doctrine\ORM\QueryBuilder;
use EasyCorp\Bundle\EasyAdminBundle\Contracts\Filter\FilterInterface;
use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
use EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto;
use EasyCorp\Bundle\EasyAdminBundle\Dto\FilterDataDto;
use EasyCorp\Bundle\EasyAdminBundle\Filter\FilterTrait;
use Symfony\Component\Form\Extension\Core\Type\CountryType;

final class CountryFilter implements FilterInterface
{
use FilterTrait;

public static function new(string $propertyName, ?string $label = null): self
{
return (new self())
->setFilterFqcn(__CLASS__)
->setProperty($propertyName)
->setLabel($label)
->setFormType(CountryType::class)
;
}

public function apply(
QueryBuilder $queryBuilder,
FilterDataDto $filterDataDto,
?FieldDto $fieldDto,
EntityDto $entityDto
): void {
$alias = $filterDataDto->getEntityAlias();
$property = $filterDataDto->getProperty();
$comparison = $filterDataDto->getComparison();
$parameterName = $filterDataDto->getParameterName();
$value = $filterDataDto->getValue();

$queryBuilder->andWhere(\sprintf('%s.%s %s (:%s)', $alias, $property, $comparison, $parameterName))
->setParameter($parameterName, $value)
;
}
}
43 changes: 43 additions & 0 deletions src/Filter/CurrencyFilter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?php

namespace EasyCorp\Bundle\EasyAdminBundle\Filter;

use Doctrine\ORM\QueryBuilder;
use EasyCorp\Bundle\EasyAdminBundle\Contracts\Filter\FilterInterface;
use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
use EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto;
use EasyCorp\Bundle\EasyAdminBundle\Dto\FilterDataDto;
use EasyCorp\Bundle\EasyAdminBundle\Filter\FilterTrait;
use Symfony\Component\Form\Extension\Core\Type\CurrencyType;

final class CurrencyFilter implements FilterInterface
{
use FilterTrait;

public static function new(string $propertyName, ?string $label = null): self
{
return (new self())
->setFilterFqcn(__CLASS__)
->setProperty($propertyName)
->setLabel($label)
->setFormType(CurrencyType::class)
;
}

public function apply(
QueryBuilder $queryBuilder,
FilterDataDto $filterDataDto,
?FieldDto $fieldDto,
EntityDto $entityDto
): void {
$alias = $filterDataDto->getEntityAlias();
$property = $filterDataDto->getProperty();
$comparison = $filterDataDto->getComparison();
$parameterName = $filterDataDto->getParameterName();
$value = $filterDataDto->getValue();

$queryBuilder->andWhere(\sprintf('%s.%s %s (:%s)', $alias, $property, $comparison, $parameterName))
->setParameter($parameterName, $value)
;
}
}
43 changes: 43 additions & 0 deletions src/Filter/TimezoneFilter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?php

namespace EasyCorp\Bundle\EasyAdminBundle\Filter;

use Doctrine\ORM\QueryBuilder;
use EasyCorp\Bundle\EasyAdminBundle\Contracts\Filter\FilterInterface;
use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
use EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto;
use EasyCorp\Bundle\EasyAdminBundle\Dto\FilterDataDto;
use EasyCorp\Bundle\EasyAdminBundle\Filter\FilterTrait;
use Symfony\Component\Form\Extension\Core\Type\TimezoneType;

final class TimezoneFilter implements FilterInterface
{
use FilterTrait;

public static function new(string $propertyName, ?string $label = null): self
{
return (new self())
->setFilterFqcn(__CLASS__)
->setProperty($propertyName)
->setLabel($label)
->setFormType(TimezoneType::class)
;
}

public function apply(
QueryBuilder $queryBuilder,
FilterDataDto $filterDataDto,
?FieldDto $fieldDto,
EntityDto $entityDto
): void {
$alias = $filterDataDto->getEntityAlias();
$property = $filterDataDto->getProperty();
$comparison = $filterDataDto->getComparison();
$parameterName = $filterDataDto->getParameterName();
$value = $filterDataDto->getValue();

$queryBuilder->andWhere(\sprintf('%s.%s %s (:%s)', $alias, $property, $comparison, $parameterName))
->setParameter($parameterName, $value)
;
}
}

0 comments on commit baefda3

Please sign in to comment.