Upstream filamentphp/filament state of the touched files before 4650cecc5a

This commit is contained in:
upstream committed 2026-10-10 12:44:35 +02:00
commit c4540cd302
3 files changed
+2575

No files matched your search

@@ -0,0 +1,171 @@
<?php
namespace Filament\Tables\Concerns;
use Illuminate\Database\Eloquent\Builder;
trait CanSortRecords
{
public ?string $tableSort = null;
public function sortTable(?string $column = null, ?string $direction = null): void
{
if ($column === $this->getTableSortColumn()) {
$direction ??= match ($this->getTableSortDirection()) {
'asc' => 'desc',
'desc' => null,
default => 'asc',
};
} else {
$direction ??= 'asc';
}
$this->tableSort = $direction ? "{$column}:{$direction}" : null;
$this->updatedTableSort();
}
public function getTableSortColumn(): ?string
{
if (blank($this->tableSort)) {
return null;
}
return (string) str($this->tableSort)->before(':');
}
public function getTableSortDirection(): ?string
{
if (blank($this->tableSort)) {
return null;
}
if (! str($this->tableSort)->contains(':')) {
return 'asc';
}
return match ((string) str($this->tableSort)->after(':')) {
'asc' => 'asc',
'desc' => 'desc',
default => null,
};
}
public function updatedTableSort(): void
{
if ($this->getTable()->persistsSortInSession()) {
session()->put(
$this->getTableSortSessionKey(),
$this->tableSort,
);
}
$this->resetPage();
}
public function updatedTableSortDirection(): void
{
if ($this->getTable()->persistsSortInSession()) {
session()->put(
$this->getTableSortSessionKey(),
$this->tableSort,
);
}
$this->resetPage();
}
protected function applySortingToTableQuery(Builder $query): Builder
{
if ($this->getTable()->isGroupsOnly()) {
return $query;
}
if ($this->isTableReordering()) {
return $query->orderBy($this->getTable()->getReorderColumn(), $this->getTable()->getReorderDirection());
}
$tableSortColumn = $this->getTableSortColumn();
if (
$tableSortColumn &&
$column = $this->getTable()->getSortableVisibleColumn($tableSortColumn)
) {
$sortDirection = $this->getTableSortDirection() === 'desc' ? 'desc' : 'asc';
$column->applySort($query, $sortDirection);
}
$sortDirection = ($this->getTable()->getDefaultSortDirection() ?? $this->getTableSortDirection()) === 'desc' ? 'desc' : 'asc';
$defaultSort = $this->getTable()->getDefaultSort($query, $sortDirection);
if (
is_string($defaultSort) &&
($defaultSort !== $tableSortColumn) &&
($sortColumn = $this->getTable()->getSortableVisibleColumn($defaultSort))
) {
$sortColumn->applySort($query, $sortDirection);
} elseif (
is_string($defaultSort) &&
$defaultSort !== $tableSortColumn
) {
$query->orderBy($defaultSort, $sortDirection);
}
if ($defaultSort instanceof Builder) {
$query = $defaultSort;
}
if (! $this->getTable()->hasDefaultKeySort()) {
return $query;
}
$qualifiedKeyName = $query->getModel()->getQualifiedKeyName();
foreach ($query->getQuery()->orders ?? [] as $order) {
if (($order['column'] ?? null) === $qualifiedKeyName) {
return $query;
}
if (
is_string($order['column'] ?? null) &&
str($order['column'] ?? null)->afterLast('.')->is(
str($qualifiedKeyName)->afterLast('.')
)
) {
return $query;
}
}
return $query->orderBy($qualifiedKeyName, $sortDirection);
}
/**
* @deprecated Override the `table()` method to configure the table.
*/
protected function getDefaultTableSortColumn(): ?string
{
return null;
}
/**
* @deprecated Override the `table()` method to configure the table.
*/
protected function getDefaultTableSortDirection(): ?string
{
return null;
}
public function getTableSortSessionKey(): string
{
return $this->getTableSessionKey('sort');
}
/**
* @deprecated Override the `table()` method to configure the table.
*/
protected function shouldPersistTableSortInSession(): bool
{
return false;
}
}