diff --git a/src/Column/Type/ColumnType.php b/src/Column/Type/ColumnType.php index 88a4f9c8..fb5d34e4 100755 --- a/src/Column/Type/ColumnType.php +++ b/src/Column/Type/ColumnType.php @@ -327,6 +327,10 @@ private function getColumnDataFromRowData(mixed $rowData, ColumnInterface $colum return $getter($rowData, $column, $options); } + if ($rowData instanceof \UnitEnum) { + return $rowData; + } + $propertyPath = $options['property_path'] ?? $column->getName(); if ((is_string($propertyPath) || $propertyPath instanceof PropertyPathInterface) && (is_array($rowData) || is_object($rowData))) { diff --git a/tests/Unit/Column/Type/CollectionColumnTypeTest.php b/tests/Unit/Column/Type/CollectionColumnTypeTest.php index 05f6ded9..3ab048aa 100644 --- a/tests/Unit/Column/Type/CollectionColumnTypeTest.php +++ b/tests/Unit/Column/Type/CollectionColumnTypeTest.php @@ -8,9 +8,11 @@ use Kreyu\Bundle\DataTableBundle\Column\Type\CollectionColumnType; use Kreyu\Bundle\DataTableBundle\Column\Type\ColumnType; use Kreyu\Bundle\DataTableBundle\Column\Type\ColumnTypeInterface; +use Kreyu\Bundle\DataTableBundle\Column\Type\EnumColumnType; use Kreyu\Bundle\DataTableBundle\Column\Type\NumberColumnType; use Kreyu\Bundle\DataTableBundle\Column\Type\TextColumnType; use Kreyu\Bundle\DataTableBundle\Test\Column\Type\ColumnTypeTestCase; +use Kreyu\Bundle\DataTableBundle\Tests\Fixtures\Enum\UnitEnum; class CollectionColumnTypeTest extends ColumnTypeTestCase { @@ -24,6 +26,7 @@ protected function getAdditionalColumnTypes(): array return [ new NumberColumnType(), new TextColumnType(), + new EnumColumnType(), new ColumnType(), ]; } @@ -84,4 +87,32 @@ public function testCreatesChildren(): void $this->assertEquals($child->getDataTable(), $columnValueView->getDataTable()); } } + + public function testCreatesEnumChild(): void + { + $column = $this->createColumn([ + 'entry_type' => EnumColumnType::class, + ]); + + $data = new class { + public array $collection = [ + UnitEnum::Foo, + UnitEnum::Bar, + ]; + }; + + $valueRowView = $this->createValueRowView(data: $data); + $columnValueView = $this->createColumnValueView($column, $valueRowView); + + $this->assertCount(2, $columnValueView->vars['children']); + $this->assertContainsOnlyInstancesOf(ColumnValueView::class, $columnValueView->vars['children']); + + for ($i = 0; $i <= 1; ++$i) { + /** @var ColumnValueView $child */ + $child = $columnValueView->vars['children'][$i]; + + $this->assertEquals((string) $i, $child->vars['name']); + $this->assertEquals($data->collection[$i]->name, $child->vars['value']); + } + } }