pxlrbt / filament-excel

Excel Export for Filament Admin Resources
MIT License
367 stars 69 forks source link

Filament v3 error with TextColumn #114

Open austincarpenter opened 1 year ago

austincarpenter commented 1 year ago

With v3, a TextColumn can render badges. This can be multiple badges in the one cell if the state of the column is an array or Collection.

In my case, I have Tag models, with a name and colour attribute.

The following works in the resource table but not when exporting:

Tables\Columns\TextColumn::make('tags')
    ->badge()
    ->formatStateUsing(fn (Tag $state) => $state->name)
    ->color(fn (Tag $state) => $state->color->getColor())

The reason is because the column's formatState() method (and therefore formatStateUsing() for me) gets called, supplying the Model, not the Collection. This is due to the @foreach loop inside text-column.blade.php of Filament:

https://github.com/filamentphp/filament/blob/f1c299b36fcabf9f7c602bbf10b08df8137dc3a6/packages/tables/resources/views/columns/text-column.blade.php#L18-L37

Not sure the best approach to take here, because not all columns have this array-wrapping behaviour, only TextColumns. In this package, the type of column is not a property of pxlrbt\FilamentExcel\Columns\Column and therefore a conditional check for the type of column (if originating from the table) is not possible.

@pxlrbt what approach would you like to take here (if at all)? Happy to attempt a PR. 😀

pxlrbt commented 1 year ago

Hm, not sure why this is still an issue. Should this be handled by this part: https://github.com/pxlrbt/filament-excel/blob/ccba226ddcc98ef1e95cefa456cdb377e9625561/src/Exports/Concerns/WithMapping.php#L99-L110

kdrmlhcn commented 1 year ago

is there any solution? @pxlrbt