Skip to content

Commit

Permalink
Merge pull request Limenius#3 from answear/handle-form-priority
Browse files Browse the repository at this point in the history
Handle form priority
  • Loading branch information
lukasz-falda committed Sep 22, 2022
2 parents 3f12338 + f3316f4 commit 7da406b
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 13 deletions.
7 changes: 6 additions & 1 deletion src/Limenius/Liform/Transformer/CompoundTransformer.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,12 @@ public function transform(FormInterface $form, array $extensions = [], $widget =
$order = 1;
$required = [];

foreach ($form->all() as $name => $field) {
$formItems = $form->all();
uasort($formItems, static function ($a, $b): int {
return $a->getConfig()->getOption('priority') <=> $b->getConfig()->getOption('priority');
});

foreach ($formItems as $name => $field) {
$transformerData = $this->resolver->resolve($field);
$transformedChild = $transformerData['transformer']->transform($field, $extensions, $transformerData['widget']);
$transformedChild['propertyOrder'] = $order;
Expand Down
76 changes: 64 additions & 12 deletions tests/Limenius/Liform/Tests/Transformer/CompoundTransformerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,13 @@

namespace Limenius\Liform\Tests\Transformer;

use Symfony\Component\Form\FormBuilder;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\Form\Tests\AbstractFormTest;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\FormType;

use Limenius\Liform\Transformer\CompoundTransformer;
use Limenius\Liform\Transformer\StringTransformer;
use Limenius\Liform\Resolver;
use Limenius\Liform\Tests\LiformTestCase;
use Limenius\Liform\Transformer\CompoundTransformer;
use Limenius\Liform\Transformer\StringTransformer;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Tests\AbstractFormTest;

/**
* @author Nacho Martín <[email protected]>
Expand All @@ -39,8 +35,64 @@ public function testOrder()
$resolver->setTransformer('text', new StringTransformer($this->translator));
$transformer = new CompoundTransformer($this->translator, null, $resolver);
$transformed = $transformer->transform($form);
$this->assertTrue(is_array($transformed));
$this->assertEquals(1, $transformed['properties']['firstName']['propertyOrder']);
$this->assertEquals(2, $transformed['properties']['secondName']['propertyOrder']);

$this->assertSame(
[
'title' => null,
'type' => 'object',
'properties' => [
'firstName' => [
'type' => 'string',
'title' => null,
'propertyOrder' => 1,
],
'secondName' => [
'type' => 'string',
'title' => null,
'propertyOrder' => 2,
],
],
'required' => [
'firstName',
'secondName',
],
],
$transformed
);
}

public function testPriority()
{
$form = $this->factory->create(FormType::class)
->add('firstName', TextType::class, ['priority' => 1])
->add('secondName', TextType::class, ['priority' => 0]);
$resolver = new Resolver();
$resolver->setTransformer('text', new StringTransformer($this->translator));
$transformer = new CompoundTransformer($this->translator, null, $resolver);
$transformed = $transformer->transform($form);

$this->assertSame(
[
'title' => null,
'type' => 'object',
'properties' => [
'secondName' => [
'type' => 'string',
'title' => null,
'propertyOrder' => 1,
],
'firstName' => [
'type' => 'string',
'title' => null,
'propertyOrder' => 2,
],
],
'required' => [
'secondName',
'firstName',
],
],
$transformed
);
}
}

0 comments on commit 7da406b

Please sign in to comment.