Skip to content

Commit eb8bbbf

Browse files
authored
Merge pull request #30 from LinioIT/fix/DIS-735-improve-features-of-born-date-type
[DIS-735] fix: improve features of born date type
2 parents ae8c615 + fcadeca commit eb8bbbf

File tree

4 files changed

+72
-10
lines changed

4 files changed

+72
-10
lines changed

src/Form/Extension/BirthdayTypeExtension.php

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66

77
use Symfony\Component\Form\AbstractTypeExtension;
88
use Symfony\Component\Form\Extension\Core\Type\BirthdayType;
9-
use Symfony\Component\Form\FormInterface;
10-
use Symfony\Component\Form\FormView;
119
use Symfony\Component\OptionsResolver\OptionsResolver;
1210

1311
class BirthdayTypeExtension extends AbstractTypeExtension
@@ -17,13 +15,6 @@ public function configureOptions(OptionsResolver $resolver): void
1715
$resolver->setDefined(['order', 'minAgeAllowed', 'maxAgeAllowed']);
1816
}
1917

20-
public function buildView(FormView $view, FormInterface $form, array $options): void
21-
{
22-
$view->vars['order'] = $options['order'] ?? '';
23-
$view->vars['minAgeAllowed'] = $options['minAgeAllowed'] ?? '';
24-
$view->vars['maxAgeAllowed'] = $options['maxAgeAllowed'] ?? '';
25-
}
26-
2718
public static function getExtendedTypes(): iterable
2819
{
2920
return [BirthdayType::class];

src/Form/FormFactory.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
use Linio\DynamicFormBundle\DataProvider;
88
use Linio\DynamicFormBundle\Exception\NonExistentFormException;
99
use Linio\DynamicFormBundle\Exception\NotExistentDataProviderException;
10+
use Linio\DynamicFormBundle\FormlyMapper\FormlyField\BirthdayField;
1011
use Linio\DynamicFormBundle\HelpMessageProvider;
1112
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
13+
use Symfony\Component\Form\Extension\Core\Type\BirthdayType;
1214
use Symfony\Component\Form\Extension\Core\Type\FormType;
1315
use Symfony\Component\Form\FormBuilderInterface;
1416
use Symfony\Component\Form\FormFactory as SymfonyFormFactory;
@@ -144,6 +146,10 @@ public function createBuilder($key, $data = [], $options = [], $name = null)
144146
$fieldOptions['constraints'] = $constraints;
145147
}
146148

149+
if (isset($fieldConfiguration['type'])) {
150+
$fieldOptions = $this->updateBirthdayFieldOptions($fieldConfiguration['type'], $key, $fieldOptions);
151+
}
152+
147153
$field = $formBuilder->create($key, $fieldConfiguration['type'], $fieldOptions);
148154

149155
if (isset($fieldConfiguration['transformer'])) {
@@ -165,6 +171,26 @@ public function createBuilder($key, $data = [], $options = [], $name = null)
165171
return $formBuilder;
166172
}
167173

174+
public function updateBirthdayFieldOptions(string $type, string $key, array $fieldOptions): array
175+
{
176+
if ($type != BirthdayType::class) {
177+
return $fieldOptions;
178+
}
179+
180+
$birthdayField = new BirthdayField();
181+
$birthdayField->setFieldConfiguration([
182+
'name' => $key,
183+
'type' => $birthdayField->getFieldType(),
184+
'options' => $fieldOptions,
185+
]);
186+
187+
$fieldOptions = $birthdayField->getFormlyFieldConfiguration()['templateOptions'];
188+
$fieldOptions['label'] = lcfirst($fieldOptions['label']);
189+
unset($fieldOptions['type']);
190+
191+
return $fieldOptions;
192+
}
193+
168194
/**
169195
* This method generates a validator based on the configuration file.
170196
*

src/FormlyMapper/FormlyField/BirthdayField.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class BirthdayField extends FormlyField
1616
/**
1717
* {@inheritdoc}
1818
*/
19-
protected function getFieldType()
19+
public function getFieldType()
2020
{
2121
return 'birthday';
2222
}

tests/Form/FormFactoryTest.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use PHPUnit\Framework\TestCase;
1111
use Prophecy\Prophecy\ObjectProphecy;
1212
use Symfony\Component\Form\DataTransformerInterface;
13+
use Symfony\Component\Form\Extension\Core\Type\BirthdayType;
1314
use Symfony\Component\Form\Extension\Core\Type\FormType;
1415
use Symfony\Component\Form\FormBuilder;
1516
use Symfony\Component\Form\FormFactory as SymfonyFormFactory;
@@ -76,6 +77,50 @@ public function testIsCreatingASimpleForm(): void
7677
$this->assertEquals('foo_form', $actual);
7778
}
7879

80+
public function testIsCreatingFormWithBirthdayFieldWithYearsAllowed(): void
81+
{
82+
$minAgeAllowed = 0;
83+
$maxAgeAllowed = 18;
84+
85+
$formConfiguration = [
86+
'foo' => [
87+
'borndate' => [
88+
'enabled' => true,
89+
'type' => 'Symfony\Component\Form\Extension\Core\Type\BirthdayType',
90+
'options' => [
91+
'minAgeAllowed' => $minAgeAllowed,
92+
'maxAgeAllowed' => $maxAgeAllowed,
93+
'order' => 'desc',
94+
],
95+
],
96+
],
97+
];
98+
99+
$expectedFieldOptions = [
100+
'label' => 'borndate',
101+
'years' => range(date('Y') - $minAgeAllowed, date('Y') - $maxAgeAllowed),
102+
];
103+
104+
$this->formFactoryMock->createNamedBuilder('foo', FormType::class, ['foo_form_data'], ['foo_form_options'])
105+
->willReturn($this->formBuilderMock->reveal());
106+
107+
$this->formBuilderMock->create('borndate', BirthdayType::class, $expectedFieldOptions)
108+
->willReturn('borndate_instance');
109+
110+
$this->formBuilderMock->add('borndate_instance')
111+
->shouldBeCalled();
112+
113+
$this->formBuilderMock->getForm()
114+
->willReturn('foo_form');
115+
116+
$this->formFactory->setFormFactory($this->formFactoryMock->reveal());
117+
$this->formFactory->setConfiguration($formConfiguration);
118+
119+
$actual = $this->formFactory->createForm('foo', ['foo_form_data'], ['foo_form_options']);
120+
121+
$this->assertEquals('foo_form', $actual);
122+
}
123+
79124
public function testIsCreatingFormWithValidators(): void
80125
{
81126
$formConfiguration = [

0 commit comments

Comments
 (0)