Skip to content

Commit 501d17b

Browse files
authored
Merge pull request #52 from kgirzadas/fix/fields-order
fix: preserve fields order when flattening in FieldParser
2 parents 599f66f + 2641afb commit 501d17b

File tree

2 files changed

+33
-9
lines changed

2 files changed

+33
-9
lines changed

src/Helpers/FieldParser.php

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
use Illuminate\Support\Collection;
66
use Tdwesten\StatamicBuilder\Fieldset;
7-
use Tdwesten\StatamicBuilder\FieldTypes\Field;
87

98
class FieldParser
109
{
@@ -15,15 +14,15 @@ public static function parseMixedFieldsToFlatCollection($items): Collection
1514
{
1615
$items = collect($items);
1716

18-
$fieldsets = $items->filter(function ($field) {
19-
return $field instanceof Fieldset;
20-
})->flatten();
17+
$items
18+
->map(function ($item) {
19+
if ($item instanceof Fieldset) {
20+
return $item;
21+
}
2122

22-
$fields = $items->filter(function ($field) {
23-
return $field instanceof Field;
24-
});
25-
26-
$items = collect($fieldsets)->merge($fields);
23+
return [$item];
24+
})
25+
->flatten();
2726

2827
return $items;
2928
}

tests/Unit/FieldParserTest.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace Tests\Unit;
4+
5+
use Tdwesten\StatamicBuilder\FieldTypes\Text;
6+
use Tdwesten\StatamicBuilder\Helpers\FieldParser;
7+
use Tests\Helpers\TestFieldset;
8+
9+
test('it preserves field order when flattening mixed fields', function () {
10+
$fieldset = new TestFieldset('test_fieldset');
11+
$standaloneField1 = new Text('standalone_field_1');
12+
$standaloneField2 = new Text('standalone_field_2');
13+
14+
$mixedFields = [
15+
$standaloneField1,
16+
$fieldset,
17+
$standaloneField2,
18+
];
19+
20+
$fields = FieldParser::parseMixedFieldsToFlatCollection($mixedFields);
21+
22+
expect($fields[0]->toArray()['handle'])->toBe('standalone_field_1');
23+
expect($fields[1]->toArray()['import'])->toBe('test_fieldset');
24+
expect($fields[2]->toArray()['handle'])->toBe('standalone_field_2');
25+
});

0 commit comments

Comments
 (0)