mirror of
https://github.com/filamentphp/filament.git
synced 2026-09-24 15:42:09 +08:00
fix: Hidden summaries
This commit is contained in:
@@ -25,6 +25,9 @@
|
||||
}
|
||||
|
||||
$hasPageSummary = (! $groupsOnly) && $records instanceof \Illuminate\Contracts\Pagination\Paginator && $records->hasPages();
|
||||
|
||||
$pageTableSummaryQuery = $hasPageSummary ? $this->getPageTableSummaryQuery() : null;
|
||||
$allTableSummaryQuery = $this->getAllTableSummaryQuery();
|
||||
@endphp
|
||||
|
||||
@if ($hasPageSummary)
|
||||
@@ -54,7 +57,7 @@
|
||||
$alignment = filled($alignment) ? (Alignment::tryFrom($alignment) ?? $alignment) : null;
|
||||
}
|
||||
|
||||
$hasColumnHeaderLabel = (! $placeholderColumns) || $column->hasSummary();
|
||||
$hasColumnHeaderLabel = (! $placeholderColumns) || ($pageTableSummaryQuery && $column->hasSummary($pageTableSummaryQuery)) || $column->hasSummary($allTableSummaryQuery);
|
||||
@endphp
|
||||
|
||||
<x-filament-tables::summary.header-cell
|
||||
@@ -94,8 +97,7 @@
|
||||
</x-filament-tables::row>
|
||||
|
||||
@php
|
||||
$query = $this->getPageTableSummaryQuery();
|
||||
$selectedState = $this->getTableSummarySelectedState($query)[0] ?? [];
|
||||
$selectedState = $this->getTableSummarySelectedState($pageTableSummaryQuery)[0] ?? [];
|
||||
@endphp
|
||||
|
||||
<x-filament-tables::summary.row
|
||||
@@ -105,7 +107,7 @@
|
||||
:extra-heading-column="$extraHeadingColumn"
|
||||
:heading="__('filament-tables::table.summary.subheadings.page', ['label' => $pluralModelLabel])"
|
||||
:placeholder-columns="$placeholderColumns"
|
||||
:query="$query"
|
||||
:query="$pageTableSummaryQuery"
|
||||
:record-checkbox-position="$recordCheckboxPosition"
|
||||
:selected-state="$selectedState"
|
||||
:selection-enabled="$selectionEnabled"
|
||||
@@ -113,8 +115,7 @@
|
||||
@endif
|
||||
|
||||
@php
|
||||
$query = $this->getAllTableSummaryQuery();
|
||||
$selectedState = $this->getTableSummarySelectedState($query)[0] ?? [];
|
||||
$selectedState = $this->getTableSummarySelectedState($allTableSummaryQuery)[0] ?? [];
|
||||
@endphp
|
||||
|
||||
<x-filament-tables::summary.row
|
||||
@@ -125,7 +126,7 @@
|
||||
:groups-only="$groupsOnly"
|
||||
:heading="__(($hasPageSummary ? 'filament-tables::table.summary.subheadings.all' : 'filament-tables::table.summary.heading'), ['label' => $pluralModelLabel])"
|
||||
:placeholder-columns="$placeholderColumns"
|
||||
:query="$query"
|
||||
:query="$allTableSummaryQuery"
|
||||
:record-checkbox-position="$recordCheckboxPosition"
|
||||
:selected-state="$selectedState"
|
||||
:selection-enabled="$selectionEnabled"
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($column->hasSummary()) {
|
||||
if ($column->hasSummary($query)) {
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
@endif
|
||||
|
||||
@foreach ($columns as $column)
|
||||
@if (($loop->first || $extraHeadingColumn || $groupsOnly || ($loop->iteration > $headingColumnSpan)) && ($placeholderColumns || $column->hasSummary()))
|
||||
@if (($loop->first || $extraHeadingColumn || $groupsOnly || ($loop->iteration > $headingColumnSpan)) && ($placeholderColumns || $column->hasSummary($query)))
|
||||
@php
|
||||
$alignment = $column->getAlignment() ?? Alignment::Start;
|
||||
|
||||
@@ -96,15 +96,9 @@
|
||||
>
|
||||
{{ $heading }}
|
||||
</span>
|
||||
@elseif ((! $placeholderColumns) || $column->hasSummary())
|
||||
@foreach ($column->getSummarizers() as $summarizer)
|
||||
@php
|
||||
$summarizer->query($query)->selectedState($selectedState);
|
||||
@endphp
|
||||
|
||||
@if ($summarizer->isVisible())
|
||||
{{ $summarizer }}
|
||||
@endif
|
||||
@elseif ((! $placeholderColumns) || $column->hasSummary($query))
|
||||
@foreach ($column->getSummarizers($query) as $summarizer)
|
||||
{{ $summarizer->query($query)->selectedState($selectedState) }}
|
||||
@endforeach
|
||||
@endif
|
||||
</x-filament-tables::cell>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
$filterIndicators = $getFilterIndicators();
|
||||
$hasColumnGroups = $hasColumnGroups();
|
||||
$hasColumnsLayout = $hasColumnsLayout();
|
||||
$hasSummary = $hasSummary();
|
||||
$hasSummary = $hasSummary($this->getFilteredTableQuery());
|
||||
$header = $getHeader();
|
||||
$headerActions = array_filter(
|
||||
$getHeaderActions(),
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
|
||||
namespace Filament\Tables\Columns\Concerns;
|
||||
|
||||
use Closure;
|
||||
use Filament\Tables\Columns\Summarizers\Summarizer;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
trait CanBeSummarized
|
||||
@@ -38,13 +40,20 @@ trait CanBeSummarized
|
||||
/**
|
||||
* @return array<string | int, Summarizer>
|
||||
*/
|
||||
public function getSummarizers(): array
|
||||
public function getSummarizers(Builder | Closure | null $query = null): array
|
||||
{
|
||||
if ($query) {
|
||||
return array_filter(
|
||||
$this->summarizers,
|
||||
fn (Summarizer $summarizer): bool => $summarizer->query($query)->isVisible(),
|
||||
);
|
||||
}
|
||||
|
||||
return $this->summarizers;
|
||||
}
|
||||
|
||||
public function hasSummary(): bool
|
||||
public function hasSummary(Builder | Closure | null $query = null): bool
|
||||
{
|
||||
return (bool) count($this->getSummarizers());
|
||||
return (bool) count($this->getSummarizers($query));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,11 @@ trait CanBeHidden
|
||||
|
||||
protected bool | Closure $isVisible = true;
|
||||
|
||||
/**
|
||||
* @var array<string, bool>
|
||||
*/
|
||||
protected array $visibilityCache = [];
|
||||
|
||||
public function hidden(bool | Closure $condition = true): static
|
||||
{
|
||||
$this->isHidden = $condition;
|
||||
@@ -26,11 +31,18 @@ trait CanBeHidden
|
||||
|
||||
public function isHidden(): bool
|
||||
{
|
||||
if ($this->evaluate($this->isHidden)) {
|
||||
return true;
|
||||
$query = $this->getQuery();
|
||||
$querySql = $query ? md5($query->toRawSql()) : '';
|
||||
|
||||
if (array_key_exists($querySql, $this->visibilityCache)) {
|
||||
return $this->visibilityCache[$querySql];
|
||||
}
|
||||
|
||||
return ! $this->evaluate($this->isVisible);
|
||||
if ($this->evaluate($this->isHidden)) {
|
||||
return $this->visibilityCache[$querySql] = true;
|
||||
}
|
||||
|
||||
return $this->visibilityCache[$querySql] = ! $this->evaluate($this->isVisible);
|
||||
}
|
||||
|
||||
public function isVisible(): bool
|
||||
|
||||
@@ -33,7 +33,7 @@ trait CanSummarizeRecords
|
||||
$selects = [];
|
||||
|
||||
foreach ($this->getTable()->getVisibleColumns() as $column) {
|
||||
$summarizers = $column->getSummarizers();
|
||||
$summarizers = $column->getSummarizers($query);
|
||||
|
||||
if (! count($summarizers)) {
|
||||
continue;
|
||||
|
||||
@@ -2,12 +2,19 @@
|
||||
|
||||
namespace Filament\Tables\Table\Concerns;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
trait CanSummarizeRecords
|
||||
{
|
||||
protected bool $hasSummary = false;
|
||||
|
||||
public function hasSummary(): bool
|
||||
public function hasSummary(Builder | Closure | null $query): bool
|
||||
{
|
||||
return $this->hasSummary;
|
||||
foreach ($this->getColumns() as $column) {
|
||||
if ($column->hasSummary($query)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,10 +81,6 @@ trait HasColumns
|
||||
}
|
||||
|
||||
foreach ($this->columns as $column) {
|
||||
if ($column->hasSummary()) {
|
||||
$this->hasSummary = true;
|
||||
}
|
||||
|
||||
$action = $column->getAction();
|
||||
|
||||
if (($action === null) || ($action instanceof Closure)) {
|
||||
|
||||
Reference in New Issue
Block a user