Skip to content

Commit 53b202a

Browse files
committed
Improve admin
1 parent 8b8a05a commit 53b202a

File tree

4 files changed

+133
-0
lines changed

4 files changed

+133
-0
lines changed

app/Filament/Resources/PluginResource.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,7 @@ public static function getRelations(): array
324324
{
325325
return [
326326
RelationManagers\PricesRelationManager::class,
327+
RelationManagers\LicensesRelationManager::class,
327328
RelationManagers\ActivitiesRelationManager::class,
328329
];
329330
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\PluginResource\RelationManagers;
4+
5+
use Filament\Resources\RelationManagers\RelationManager;
6+
use Filament\Tables;
7+
use Filament\Tables\Table;
8+
9+
class LicensesRelationManager extends RelationManager
10+
{
11+
protected static string $relationship = 'licenses';
12+
13+
protected static ?string $title = 'Purchase History';
14+
15+
public function table(Table $table): Table
16+
{
17+
return $table
18+
->columns([
19+
Tables\Columns\TextColumn::make('user.email')
20+
->label('User')
21+
->searchable(),
22+
23+
Tables\Columns\TextColumn::make('price_paid')
24+
->label('Price Paid')
25+
->formatStateUsing(fn (int $state): string => '$'.number_format($state / 100, 2)),
26+
27+
Tables\Columns\IconColumn::make('is_grandfathered')
28+
->label('Comped')
29+
->boolean(),
30+
31+
Tables\Columns\TextColumn::make('pluginBundle.name')
32+
->label('Bundle')
33+
->placeholder('-'),
34+
35+
Tables\Columns\TextColumn::make('purchased_at')
36+
->dateTime()
37+
->sortable(),
38+
39+
Tables\Columns\TextColumn::make('expires_at')
40+
->dateTime()
41+
->sortable()
42+
->placeholder('Never'),
43+
])
44+
->defaultSort('purchased_at', 'desc');
45+
}
46+
}

app/Filament/Resources/UserResource.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ public static function table(Table $table): Table
118118
public static function getRelations(): array
119119
{
120120
return [
121+
RelationManagers\PluginLicensesRelationManager::class,
121122
RelationManagers\LicensesRelationManager::class,
122123
RelationManagers\SubscriptionsRelationManager::class,
123124
];
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\UserResource\RelationManagers;
4+
5+
use App\Enums\PluginType;
6+
use Filament\Forms;
7+
use Filament\Forms\Form;
8+
use Filament\Resources\RelationManagers\RelationManager;
9+
use Filament\Tables;
10+
use Filament\Tables\Table;
11+
12+
class PluginLicensesRelationManager extends RelationManager
13+
{
14+
protected static string $relationship = 'pluginLicenses';
15+
16+
protected static ?string $title = 'Plugins';
17+
18+
public function form(Form $form): Form
19+
{
20+
return $form
21+
->schema([
22+
Forms\Components\Select::make('plugin_id')
23+
->relationship('plugin', 'name')
24+
->searchable()
25+
->preload()
26+
->required(),
27+
Forms\Components\Toggle::make('is_grandfathered')
28+
->label('Comped')
29+
->default(true),
30+
Forms\Components\DateTimePicker::make('purchased_at')
31+
->default(now()),
32+
Forms\Components\DateTimePicker::make('expires_at'),
33+
]);
34+
}
35+
36+
public function table(Table $table): Table
37+
{
38+
return $table
39+
->columns([
40+
Tables\Columns\TextColumn::make('plugin.name')
41+
->label('Plugin')
42+
->searchable()
43+
->sortable()
44+
->fontFamily('mono'),
45+
Tables\Columns\TextColumn::make('plugin.type')
46+
->label('Type')
47+
->badge()
48+
->color(fn (PluginType $state): string => match ($state) {
49+
PluginType::Free => 'gray',
50+
PluginType::Paid => 'success',
51+
}),
52+
Tables\Columns\TextColumn::make('price_paid')
53+
->label('Price Paid')
54+
->money('usd', divideBy: 100)
55+
->sortable(),
56+
Tables\Columns\IconColumn::make('is_grandfathered')
57+
->label('Comped')
58+
->boolean(),
59+
Tables\Columns\TextColumn::make('purchased_at')
60+
->dateTime()
61+
->sortable(),
62+
Tables\Columns\TextColumn::make('expires_at')
63+
->dateTime()
64+
->sortable()
65+
->placeholder('Never'),
66+
])
67+
->defaultSort('purchased_at', 'desc')
68+
->filters([
69+
Tables\Filters\TernaryFilter::make('is_grandfathered')
70+
->label('Comped'),
71+
])
72+
->headerActions([
73+
Tables\Actions\CreateAction::make()
74+
->mutateFormDataUsing(function (array $data): array {
75+
$data['price_paid'] = 0;
76+
$data['currency'] = 'USD';
77+
78+
return $data;
79+
}),
80+
])
81+
->actions([
82+
Tables\Actions\DeleteAction::make(),
83+
]);
84+
}
85+
}

0 commit comments

Comments
 (0)