<?php
declare(strict_types=1);
namespace App\Form\Choice;
use App\Entity\ClinicalManager\ClinicalManager;
use App\Repository\ClinicalManagerRepository;
use Symfony\Bridge\Doctrine\Form\DataTransformer\CollectionToArrayTransformer;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\Options;
use Symfony\Component\OptionsResolver\OptionsResolver;
use function is_array;
use function is_bool;
use function is_int;
use function sprintf;
class ClinicalManagerChoiceType extends AbstractType
{
public function __construct(private readonly ClinicalManagerRepository $clinicalManagerRepository)
{
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
if (is_bool($options['multiple']) && ! $options['multiple']) {
return;
}
$builder->addModelTransformer(new CollectionToArrayTransformer());
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'choices' => function (Options $options): array {
if (is_array($options['attr']) && isset($options['attr']['clinical_manager_id']) && is_int($options['attr']['clinical_manager_id'])) {
$clinicalManagerId = $options['attr']['clinical_manager_id'];
} else {
$clinicalManagerId = null;
}
return $clinicalManagerId !== null ? $this->clinicalManagerRepository->findAllNotArchivedExcept($clinicalManagerId) : $this->clinicalManagerRepository->findAllNotArchived();
},
'choice_value' => 'customer.email',
'choice_label' => static fn (ClinicalManager $clinicalManager): string => sprintf('%s (%s)', $clinicalManager->getCustomer()->getFullName(), $clinicalManager->getCustomer()->getEmail()),
'choice_translation_domain' => false,
]);
}
public function getParent(): string
{
return ChoiceType::class;
}
public function getBlockPrefix(): string
{
return 'app_clinical_manager_choice_type';
}
}