diff --git a/src/Controller/Admin/Assignment/IndexController.php b/src/Controller/Admin/Assignment/IndexController.php index ae18004..ebb403a 100644 --- a/src/Controller/Admin/Assignment/IndexController.php +++ b/src/Controller/Admin/Assignment/IndexController.php @@ -24,6 +24,7 @@ class IndexController extends AbstractController #[IsGranted('ROLE_ADMINISTRATIVE')] public function index(Request $request): Response { + $this->filterHandler->setNamespace('filter:assignment:admin'); $filterForm = $this->filterHandler->getForm(); $filterDto = $this->filterHandler->handleRequest($filterForm, $request); if (true === $filterDto->isReset()) { diff --git a/src/Controller/Teamer/IndexController.php b/src/Controller/Teamer/IndexController.php index 92d0b3d..94aa8b2 100644 --- a/src/Controller/Teamer/IndexController.php +++ b/src/Controller/Teamer/IndexController.php @@ -34,8 +34,9 @@ class IndexController extends AbstractController // Validate teamer data to show missing data right away $errors = $this->validator->validate($teamer, null, ['profile_preflight']); - $filterForm = $this->filterHandler->getForm('assignment_filter_teamer'); - $filterDto = $this->filterHandler->handleRequest($filterForm, $request, 'assignment_filter_teamer'); + $this->filterHandler->setNamespace('filter:assignment:teamer'); + $filterForm = $this->filterHandler->getForm(); + $filterDto = $this->filterHandler->handleRequest($filterForm, $request); if (true === $filterDto->isReset()) { return $this->redirectToRoute('app_teamer_index'); } diff --git a/src/Service/Common/AssignmentFilterHandler.php b/src/Service/Common/AssignmentFilterHandler.php index 6dec60b..9c4dd0b 100644 --- a/src/Service/Common/AssignmentFilterHandler.php +++ b/src/Service/Common/AssignmentFilterHandler.php @@ -16,6 +16,8 @@ use Symfony\Component\HttpFoundation\Session\SessionInterface; class AssignmentFilterHandler { + private string $namespace = 'filter:assignment'; + public function __construct( private readonly RequestStack $requestStack, private readonly EntityManagerInterface $entityManager, @@ -23,9 +25,16 @@ class AssignmentFilterHandler ) { } - public function getForm(string $namespace = 'assignment_filter'): FormInterface + public function setNamespace(string $namespace): static { - $filterDto = $this->getFilterSettings($namespace); + $this->namespace = $namespace; + + return $this; + } + + public function getForm(): FormInterface + { + $filterDto = $this->getFilterSettings(); $assignmentRepository = $this ->entityManager @@ -43,25 +52,26 @@ class AssignmentFilterHandler public function handleRequest( FormInterface $form, - Request $request, - string $namespace = 'assignment_filter' + Request $request ): AssignmentFilterDto { $form->handleRequest($request); $filterDto = $form->getData(); - if ($form->has('reset') && $form->get('reset')->isClicked()) { - $filterDto = new AssignmentFilterDto(true); - $this->getSession()->remove($namespace); - } elseif ($form->has('apply') && $form->get('apply')->isClicked()) { - $this->saveFilterSettings($filterDto, $namespace); + if ($form->isSubmitted() && $form->isValid()) { + if ($form->has('reset') && $form->get('reset')->isClicked()) { + $filterDto = new AssignmentFilterDto(true); + $this->getSession()->remove($this->namespace); + } elseif ($form->has('apply') && $form->get('apply')->isClicked()) { + $this->saveFilterSettings($filterDto); + } } return $filterDto; } - private function getFilterSettings(string $namespace): AssignmentFilterDto + private function getFilterSettings(): AssignmentFilterDto { - if (null === $data = $this->getSession()->get($namespace)) { + if (null === $data = $this->getSession()->get($this->namespace)) { return new AssignmentFilterDto(); } @@ -96,9 +106,9 @@ class AssignmentFilterHandler return $filterDto; } - private function saveFilterSettings(AssignmentFilterDto $filterDto, string $namespace): void + private function saveFilterSettings(AssignmentFilterDto $filterDto): void { - $this->getSession()->set($namespace, [ + $this->getSession()->set($this->namespace, [ 'date_from' => $filterDto->getDateFrom()?->format('Y-m-d'), 'date_to' => $filterDto->getDateTo()?->format('Y-m-d'), 'job_profile' => $filterDto->getJobProfile()?->getId(),