wip: article AI polish, category SEO fields, cover generator, membership plan seeder
CI / PHPUnit (PHP 8.3) (push) Failing after 4s
CI / PHPUnit (PHP 8.2) (push) Failing after 1m9s
CI / Deploy (manual gate) (push) Skipped

This commit is contained in:
2026-09-07 18:48:37 +00:00
parent 263b98b218
commit 3cec4c5e18
121 changed files with 4701 additions and 313 deletions
@@ -5,12 +5,16 @@ declare(strict_types=1);
namespace App\Filament\Resources\Articles\Tables;
use App\Domain\Plugin\Hook;
use App\Filament\Support\AdminTable;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Filters\SelectFilter;
use Filament\Tables\Filters\TernaryFilter;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
class ArticlesTable
{
@@ -18,21 +22,32 @@ class ArticlesTable
{
return $table
->columns([
AdminTable::stickyStart(
TextColumn::make('id')
->label(__('admin.fields.id'))
->sortable(),
),
TextColumn::make('category.name')
->label(__('admin.fields.category'))
->searchable(),
TextColumn::make('user.name')
->label(__('admin.fields.author'))
->searchable(),
TextColumn::make('title')
->label(__('admin.fields.title'))
->searchable(),
TextColumn::make('description')
->label(__('admin.fields.description'))
->searchable(),
AdminTable::ellipsis(
TextColumn::make('title')
->label(__('admin.fields.title'))
->searchable(),
),
AdminTable::ellipsis(
TextColumn::make('description')
->label(__('admin.fields.description'))
->searchable()
->toggleable(isToggledHiddenByDefault: true),
),
TextColumn::make('keywords')
->label(__('admin.fields.keywords'))
->searchable(),
->searchable()
->toggleable(isToggledHiddenByDefault: true),
TextColumn::make('published_at')
->label(__('admin.fields.published_at'))
->dateTime()
@@ -66,15 +81,33 @@ class ArticlesTable
->toggleable(isToggledHiddenByDefault: true),
TextColumn::make('slug')
->label(__('admin.fields.slug'))
->searchable(),
->searchable()
->toggleable(isToggledHiddenByDefault: true),
TextColumn::make('content_format')
->label(__('admin.fields.content_format'))
->searchable(),
->searchable()
->toggleable(isToggledHiddenByDefault: true),
...Hook::collect('filament.article.table.columns'),
])
->filters([
//
SelectFilter::make('category_id')
->label(__('admin.fields.category'))
->relationship('category', 'name')
->searchable()
->preload(),
TernaryFilter::make('visible')
->label(__('admin.fields.visible')),
TernaryFilter::make('stick')
->label(__('admin.fields.stick')),
TernaryFilter::make('close_comment')
->label(__('admin.fields.close_comment')),
...Hook::collect('filament.article.table.filters'),
])
->modifyQueryUsing(function (Builder $query): Builder {
$modified = Hook::filter('filament.article.table.query', $query);
return $modified instanceof Builder ? $modified : $query;
})
->recordActions([
EditAction::make(),
...Hook::collect('filament.article.actions'),