🆙 More fixes 🆙

This commit is contained in:
Remco
2026-01-20 18:26:07 +01:00
parent 9a8fa8b1ff
commit d57e97bb42
9 changed files with 139 additions and 74 deletions
@@ -16,6 +16,7 @@ use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Columns\ToggleColumn;
use Filament\Tables\Table;
use Illuminate\Support\Facades\DB;
use App\Models\WebsiteDrawBadge as WebsiteDrawBadgeModel;
class WebsiteDrawBadgeResource extends Resource
{
@@ -87,7 +88,12 @@ class WebsiteDrawBadgeResource extends Resource
->dateTime(),
ImageColumn::make('badge_url')
->label(__('Badge'))
->getStateUsing(fn ($record) => config('app.url') . $record->badge_url)
->getStateUsing(function (WebsiteDrawBadgeModel $record): string {
$appUrl = config('app.url');
$appUrl = is_string($appUrl) ? $appUrl : '';
$badgeUrl = is_string($record->badge_url) ? $record->badge_url : '';
return $appUrl . $badgeUrl;
})
->extraAttributes(['style' => 'image-rendering: pixelated'])
->size(40),
ToggleColumn::make('published')
@@ -62,8 +62,9 @@ class BadgeTextEditorResource extends Resource
->columns([
ImageColumn::make('badge_key')
->label('Badge Image')
->getStateUsing(function ($record) use ($badgesPath) {
$badgeName = str_replace('badge_desc_', '', $record->badge_key);
->getStateUsing(function (WebsiteBadge $record) use ($badgesPath): string {
$badgeKey = is_string($record->badge_key) ? $record->badge_key : '';
$badgeName = str_replace('badge_desc_', '', $badgeKey);
return asset($badgesPath . $badgeName . '.gif');
})
@@ -71,7 +72,11 @@ class BadgeTextEditorResource extends Resource
->height(50),
TextColumn::make('badge_name')
->label('Badge Code & Name')
->formatStateUsing(fn ($record) => $record->badge_key . ' : ' . $record->badge_name)
->formatStateUsing(function (WebsiteBadge $record): string {
$key = is_string($record->badge_key) ? $record->badge_key : '';
$name = is_string($record->badge_name) ? $record->badge_name : '';
return $key . ' : ' . $name;
})
->searchable(query: function ($query, $search): void {
$query->where('badge_key', 'like', "%{$search}%")
->orWhere('badge_name', 'like', "%{$search}%");
@@ -79,7 +84,10 @@ class BadgeTextEditorResource extends Resource
->sortable(),
TextColumn::make('badge_description')
->label('Badge Description')
->getStateUsing(fn ($record) => Str::limit($record->badge_description, 65))
->getStateUsing(function (WebsiteBadge $record): string {
$desc = is_string($record->badge_description) ? $record->badge_description : '';
return Str::limit($desc, 65);
})
->searchable(),
])
->filters([])
@@ -23,6 +23,7 @@ use Filament\Tables\Filters\SelectFilter;
use Filament\Tables\Filters\TernaryFilter;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Game\Furniture\CatalogItem;
class CatalogItemsRelationManager extends RelationManager
{
@@ -227,7 +228,10 @@ class CatalogItemsRelationManager extends RelationManager
->recordTitleAttribute('catalog_name')
->columns([
ImageColumn::make('icon')
->getStateUsing(fn ($record) => url($record->itemBase?->icon()))
->getStateUsing(function (CatalogItem $record): string {
$icon = $record->itemBase?->icon();
return is_string($icon) && $icon !== '' ? url($icon) : '';
})
->size('25px')
->label('Icon')
@@ -278,11 +282,16 @@ class CatalogItemsRelationManager extends RelationManager
])
->filters([
SelectFilter::make('type')
->query(fn (Builder $query, array $data): Builder => empty($data['values'])
? $query
: $query->whereHas('itemBase', function (Builder $query) use ($data): void {
$query->whereIn('type', $data['values']);
}))
->query(function (Builder $query, array $data): Builder {
$values = $data['values'] ?? null;
if (! is_array($values) || $values === []) {
return $query;
}
return $query->whereHas('itemBase', function (Builder $query) use ($values): void {
$query->whereIn('type', $values);
});
})
->options(
fn () => ItemBase::query()
->select('type')
@@ -313,7 +322,7 @@ class CatalogItemsRelationManager extends RelationManager
->icon('heroicon-m-cube')
->modalWidth('3xl')
->modalHeading('Edit Item Base')
->fillForm(function ($record) {
->fillForm(function (CatalogItem $record): array {
$itemBase = $record->itemBase;
if (! $itemBase) {
return [];
@@ -440,7 +449,7 @@ class CatalogItemsRelationManager extends RelationManager
->nullable()
->dehydrateStateUsing(fn ($state) => $state ?? ''),
])
->action(function (array $data, $record): void {
->action(function (array $data, CatalogItem $record): void {
// Transform any null or empty values to empty strings
$data = collect($data)->map(function ($value) {
if ($value === null || $value === '') {
@@ -453,9 +462,14 @@ class CatalogItemsRelationManager extends RelationManager
return $value;
})->toArray();
$record->itemBase->forceFill($data)->save();
$itemBase = $record->itemBase;
if ($itemBase) {
$itemBase->forceFill($data)->save();
}
})
->visible(fn ($record) => $record->itemBase !== null),
->visible(function (CatalogItem $record): bool {
return $record->itemBase !== null;
}),
DeleteAction::make(),
])
->toolbarActions([
@@ -34,12 +34,24 @@ class ChatlogPrivateResource extends Resource
->components([
TextInput::make('sender')
->disabled()
->formatStateUsing(fn ($record) => $record->sender?->username)
->formatStateUsing(function ($record): string {
if (! ($record instanceof \App\Models\ChatlogPrivate)) {
return '';
}
$username = $record->sender?->username;
return is_string($username) ? $username : '';
})
->label(__('filament::resources.inputs.sender')),
TextInput::make('receiver')
->disabled()
->formatStateUsing(fn ($record) => $record->receiver?->username)
->formatStateUsing(function ($record): string {
if (! ($record instanceof \App\Models\ChatlogPrivate)) {
return '';
}
$username = $record->receiver?->username;
return is_string($username) ? $username : '';
})
->label(__('filament::resources.inputs.receiver')),
Textarea::make('message')
@@ -54,7 +66,27 @@ class ChatlogPrivateResource extends Resource
{
return $table
->defaultSort('timestamp', 'desc')
->columns(self::getTable())
->columns([
TextColumn::make('sender.username')
->label(__('filament::resources.columns.sender'))
->toggleable()
->searchable(isIndividual: true),
TextColumn::make('receiver.username')
->label(__('filament::resources.columns.receiver'))
->toggleable()
->searchable(isIndividual: true),
TextColumn::make('message')
->label(__('filament::resources.columns.message'))
->limit(40)
->searchable(isIndividual: true),
TextColumn::make('timestamp')
->label(__('filament::resources.columns.executed_at'))
->dateTime('Y-m-d H:i')
->toggleable(),
])
->filters([])
->recordActions([
ViewAction::make(),
@@ -62,29 +94,9 @@ class ChatlogPrivateResource extends Resource
->toolbarActions([]);
}
public static function getTable(): array
public static function getTable(): mixed
{
return [
TextColumn::make('sender.username')
->label(__('filament::resources.columns.sender'))
->toggleable()
->searchable(isIndividual: true),
TextColumn::make('receiver.username')
->label(__('filament::resources.columns.receiver'))
->toggleable()
->searchable(isIndividual: true),
TextColumn::make('message')
->label(__('filament::resources.columns.message'))
->limit(40)
->searchable(isIndividual: true),
TextColumn::make('timestamp')
->label(__('filament::resources.columns.executed_at'))
->dateTime('Y-m-d H:i')
->toggleable(),
];
return [];
}
public static function getPages(): array
@@ -34,18 +34,36 @@ class ChatlogRoomResource extends Resource
->components([
TextInput::make('room')
->label(__('filament::resources.inputs.room'))
->formatStateUsing(fn ($record) => $record->room?->name)
->formatStateUsing(function ($record): string {
if (! ($record instanceof \App\Models\ChatlogRoom)) {
return '';
}
$name = $record->room?->name;
return is_string($name) ? $name : '';
})
->columnSpanFull()
->disabled(),
TextInput::make('sender')
->label(__('filament::resources.inputs.sender'))
->formatStateUsing(fn ($record) => $record->sender?->username)
->formatStateUsing(function ($record): string {
if (! ($record instanceof \App\Models\ChatlogRoom)) {
return '';
}
$username = $record->sender?->username;
return is_string($username) ? $username : '';
})
->disabled(),
TextInput::make('receiver')
->label(__('filament::resources.inputs.receiver'))
->formatStateUsing(fn ($record) => $record->receiver?->username)
->formatStateUsing(function ($record): string {
if (! ($record instanceof \App\Models\ChatlogRoom)) {
return '';
}
$username = $record->receiver?->username;
return is_string($username) ? $username : '';
})
->disabled(),
Textarea::make('message')
@@ -60,7 +78,32 @@ class ChatlogRoomResource extends Resource
{
return $table
->defaultSort('timestamp', 'desc')
->columns(self::getTable())
->columns([
TextColumn::make('room.name')
->label(__('filament::resources.columns.room'))
->toggleable()
->searchable(isIndividual: true),
TextColumn::make('sender.username')
->label(__('filament::resources.columns.sender'))
->toggleable()
->searchable(isIndividual: true),
TextColumn::make('receiver.username')
->label(__('filament::resources.columns.receiver'))
->toggleable()
->searchable(isIndividual: true),
TextColumn::make('message')
->label(__('filament::resources.columns.message'))
->limit(40)
->searchable(isIndividual: true),
TextColumn::make('timestamp')
->label(__('filament::resources.columns.executed_at'))
->dateTime('Y-m-d H:i')
->toggleable(),
])
->filters([
//
])
@@ -70,34 +113,9 @@ class ChatlogRoomResource extends Resource
->toolbarActions([]);
}
public static function getTable(): array
public static function getTable(): mixed
{
return [
TextColumn::make('room.name')
->label(__('filament::resources.columns.room'))
->toggleable()
->searchable(isIndividual: true),
TextColumn::make('sender.username')
->label(__('filament::resources.columns.sender'))
->toggleable()
->searchable(isIndividual: true),
TextColumn::make('receiver.username')
->label(__('filament::resources.columns.receiver'))
->toggleable()
->searchable(isIndividual: true),
TextColumn::make('message')
->label(__('filament::resources.columns.message'))
->limit(40)
->searchable(isIndividual: true),
TextColumn::make('timestamp')
->label(__('filament::resources.columns.executed_at'))
->dateTime('Y-m-d H:i')
->toggleable(),
];
return [];
}
public static function getPages(): array
@@ -37,7 +37,7 @@ class EmulatorTextResource extends Resource
->label(__('filament::resources.inputs.key'))
->required()
->maxLength(100)
->unique(ignoreRecord: true),
->unique('emulator_texts', 'key', ignoreRecord: true),
TextInput::make('value')
->label(__('filament::resources.inputs.value'))
@@ -48,7 +48,8 @@ class ListUsers extends ListRecords
->default(false),
])
->action(function (array $data): void {
$allUsersId = collect($data['users'] ?? [])->values();
$usersVal = $data['users'] ?? [];
$allUsersId = collect(is_array($usersVal) ? $usersVal : [])->values();
$senderId = !empty($data['as_staff']) ? null : auth()->id();
if ($allUsersId->isEmpty()) {
@@ -146,7 +146,7 @@ class SettingsRelationManager extends RelationManager
TextColumn::make('online_time')
->label(__('filament::resources.columns.online_time'))
->formatStateUsing(fn (string $state) => __(':m minutes', ['m' => round(CarbonInterval::seconds($state)->totalMinutes)]))
->formatStateUsing(fn (string $state) => __(':m minutes', ['m' => round(CarbonInterval::seconds((int) $state)->totalMinutes)]))
->toggleable(),
IconColumn::make('can_trade')