WIP: Implement frontend

This commit is contained in:
Björn Fromme
2023-09-18 13:10:20 +02:00
parent bfc5e5e242
commit ce97017ac4
70 changed files with 8751 additions and 337 deletions
+38
View File
@@ -0,0 +1,38 @@
<?php
namespace App\Form;
use App\Entity\Embeddable\Address;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class AddressType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('street', TextType::class, [
'label' => 'Straße, Hausnummer',
])
->add('postCode', TextType::class, [
'label' => 'PLZ',
])
->add('city', TextType::class, [
'label' => 'Ort',
])
->add('country', BpnCountryType::class, [
'label' => 'Land',
'property' => 'country',
])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Address::class,
]);
}
}
+37
View File
@@ -0,0 +1,37 @@
<?php
namespace App\Form;
use App\Entity\Embeddable\BankAccount;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class BankAccountType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('iban', TextType::class, [
'label' => 'IBAN',
])
->add('bic', TextType::class, [
'label' => 'BIC',
])
->add('bank', TextType::class, [
'label' => 'Name der Bank',
])
->add('holder', TextType::class, [
'label' => 'Kontoinhaber',
])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => BankAccount::class,
]);
}
}
@@ -28,7 +28,7 @@ class BpnCountryChoiceLoader implements ChoiceLoaderInterface
foreach ($countries as $country) {
$key = 'nationality' === $this->property ? $country->getNationality() : $country->getName();
$choices[$key] = $country->getId();
$choices[$key] = $country->getToken();
}
return new ArrayChoiceList($choices);
+35
View File
@@ -0,0 +1,35 @@
<?php
namespace App\Form;
use App\Entity\Embeddable\Communication;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class CommunicationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('email', EmailType::class, [
'label' => 'E-Mail',
])
->add('mobile', TextType::class, [
'label' => 'Telefon (mobil)',
])
->add('phone', TextType::class, [
'label' => 'Telefon (privat)',
])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Communication::class,
]);
}
}
@@ -0,0 +1,32 @@
<?php
namespace App\Form\Extension;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\OptionsResolver\OptionsResolver;
class AjaxSubmitExtension extends AbstractTypeExtension
{
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'ajax_submit' => false,
'ajax_action' => 'ajax-modal#submitForm',
]);
}
public function buildView(FormView $view, FormInterface $form, array $options): void
{
if (true === $options['ajax_submit']) {
$view->vars['attr'] = array_merge($view->vars['attr'], ['data-action' => $options['ajax_action']]);
}
}
public static function getExtendedTypes(): iterable
{
return [FormType::class];
}
}
@@ -0,0 +1,29 @@
<?php
namespace App\Form\Extension;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\OptionsResolver\OptionsResolver;
class NoValidateExtension extends AbstractTypeExtension
{
public function buildView(FormView $view, FormInterface $form, array $options): void
{
if (false === $options['clientside_validation'] && $form->isRoot()) {
$view->vars['attr'] = array_merge($view->vars['attr'], ['novalidate' => 'novalidate']);
}
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefault('clientside_validation', false);
}
public static function getExtendedTypes(): iterable
{
return [FormType::class];
}
}
@@ -6,11 +6,12 @@ use App\Entity\Teamer;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\BirthdayType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class ProfileType extends AbstractType
class TeamerProfileType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
@@ -23,6 +24,14 @@ class ProfileType extends AbstractType
'divers' => 'D',
],
])
->add('salutation', ChoiceType::class, [
'label' => 'Anrede',
'choices' => [
'Frau' => 'Frau',
'Herr' => 'Herr',
'divers' => 'divers',
],
])
->add('firstName', TextType::class, [
'label' => 'Vorname',
])
@@ -41,6 +50,30 @@ class ProfileType extends AbstractType
'label' => 'Nationalität',
'property' => 'nationality',
])
->add('taxId', TextType::class, [
'label' => 'Steuer-ID',
'required' => false,
])
->add('healthInsuranceCompany', TextType::class, [
'label' => 'Krankenversicherung',
'required' => false,
])
->add('remarks', TextareaType::class, [
'label' => 'Wünsche/Anmerkungen',
'required' => false,
'attr' => [
'rows' => 3,
],
])
->add('address', AddressType::class, [
'label' => 'false',
])
->add('communication', CommunicationType::class, [
'label' => false,
])
->add('bankAccount', BankAccountType::class, [
'label' => false,
])
;
}