diff --git a/src/Dto/SnipFilterRequest.php b/src/Dto/SnipFilterRequest.php index 8959325..aef2925 100644 --- a/src/Dto/SnipFilterRequest.php +++ b/src/Dto/SnipFilterRequest.php @@ -12,10 +12,13 @@ readonly class SnipFilterRequest implements CachableDtoInterface public const string SORT_NAME = 'name'; public const string SORT_DATE = 'date'; + public const string TAG_ALL = 'all'; + public const string TAG_NONE = 'none'; + public function __construct( public ?string $visibility = self::VISIBILITY_VISIBLE, - public ?string $sort = self::SORT_DATE, - public ?string $tag = 'all', + public ?string $sort = self::SORT_NAME, + public ?string $tag = self::TAG_ALL, ) {} public function toArray(): array diff --git a/src/Entity/Tag.php b/src/Entity/Tag.php index de600ff..30b945b 100644 --- a/src/Entity/Tag.php +++ b/src/Entity/Tag.php @@ -2,6 +2,7 @@ namespace App\Entity; +use App\Dto\SnipFilterRequest; use App\Repository\TagRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; @@ -18,8 +19,8 @@ class Tag private ?int $id = null; #[ORM\Column(length: 255)] - #[Assert\NotEqualTo('all')] - #[Assert\NotEqualTo('none')] + #[Assert\NotEqualTo(SnipFilterRequest::TAG_ALL)] + #[Assert\NotEqualTo(SnipFilterRequest::TAG_NONE)] private ?string $name = null; #[ORM\ManyToOne] diff --git a/src/Form/TagsType.php b/src/Form/TagsType.php index 72942d8..6fc9249 100644 --- a/src/Form/TagsType.php +++ b/src/Form/TagsType.php @@ -82,7 +82,7 @@ class TagsType extends AbstractType implements DataTransformerInterface $resolver->setDefaults([ 'data_class' => null, // No specific entity class 'label' => 'Tags (comma-separated)', - 'attr' => ['class' => 'tags-input'], // Optional: Add custom attributes + 'required' => false, ]); } diff --git a/src/Twig/Extension/SnipFilterExtension.php b/src/Twig/Extension/SnipFilterExtension.php index 0743b49..38a8d88 100644 --- a/src/Twig/Extension/SnipFilterExtension.php +++ b/src/Twig/Extension/SnipFilterExtension.php @@ -2,6 +2,7 @@ namespace App\Twig\Extension; +use App\Dto\SnipFilterRequest; use App\Repository\TagRepository; use Symfony\Bundle\SecurityBundle\Security; use Twig\Extension\AbstractExtension; @@ -17,16 +18,24 @@ class SnipFilterExtension extends AbstractExtension public function getFunctions(): array { return [ - new TwigFunction('snipSortOptions', fn() => ['name', 'date']), - new TwigFunction('snipFilterOptions', fn() => ['all', 'visible', 'hidden', 'archived']), + new TwigFunction('snipSortOptions', fn() => [ + SnipFilterRequest::SORT_NAME, + SnipFilterRequest::SORT_DATE, + ]), + new TwigFunction('snipFilterOptions', fn() => [ + SnipFilterRequest::VISIBILITY_ALL, + SnipFilterRequest::VISIBILITY_VISIBLE, + SnipFilterRequest::VISIBILITY_HIDDEN, + SnipFilterRequest::VISIBILITY_ARCHIVED, + ]), new TwigFunction('snipTagOptions', fn() => $this->getSnipTagOptions()), ]; } private function getSnipTagOptions(): array { - $tags['all'] = 'All tags'; - $tags['none'] = 'No tags'; + $tags[SnipFilterRequest::TAG_ALL] = 'All tags'; + $tags[SnipFilterRequest::TAG_NONE] = 'No tags'; foreach ($this->tagRepository->findAllByUser($this->security->getUser()) as $tag) { $tags[(string)$tag] = (string)$tag; }