nova-mega-filter
nova-mega-filter copied to clipboard
Error when moving between resources
Hello Team, I having an issue when moving between different resources that have megafilters with different columns. Is there a way to store the column in the session per resource?
Regards.
Ok just solved it, creating a new trait that extends HasMegaFilterTrait and addind the resource name to the session name.
<?php
namespace App\Nova;
use DigitalCreative\MegaFilter\Column;
use DigitalCreative\MegaFilter\HasMegaFilterTrait;
use DigitalCreative\MegaFilter\MegaFilter;
use Illuminate\Support\Collection;
use Laravel\Nova\Http\Requests\NovaRequest;
trait HasMegaFilterTraitPatch {
use HasMegaFilterTrait;
/**
* Get the filters for the given request.
*
* @param NovaRequest $request
*
* @return mixed
*/
public function resolveFilters( NovaRequest $request ) {
if ( $this->shouldApplyMegaFilter( $request ) && $card = $this->getMegaFilterCard( $request ) ) {
$filterColumns = $this->getFilterColumns();
if ( $filterColumns ) {
session( [ 'mega-filter-columns-' . $request->resource => $filterColumns ] );
}
return parent::resolveFilters( $request )->merge( $card->filters() );
}
return parent::resolveFilters( $request );
}
/**
* @param NovaRequest $request
* @param MegaFilter $card
*
* @return Collection
*/
private function getFilterState( NovaRequest $request, MegaFilter $card ): Collection {
$value = $this->getFilterColumns();
if ( ! $value ) {
$value = session( 'mega-filter-columns-' . $request->resource );
}
$attributes = $card->columns()->filter( static function ( Column $column ) use ( $value ) {
if ( $column->permanent ) {
return true;
}
if ( is_array( $value ) && is_bool( $value = $value[ $column->attribute ] ) ) {
return $value;
}
return $column->checked;
} );
return $attributes->pluck( 'attribute' )->values();
}
}