Skip to content

Commit dcb768b

Browse files
mckenzieartsStevyMarlino
authored andcommitted
feat: Update admin panel
1 parent f797694 commit dcb768b

File tree

30 files changed

+717
-577
lines changed

30 files changed

+717
-577
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ composer.phar
2121
/public/hot
2222
/public/storage
2323
/public/media
24+
public/css/
25+
public/js/
2426
/public/**/*.xml
2527
/storage/*.key
2628
/storage/framework/cache

app/Actions/Article/CreateArticleAction.php

+2-17
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use App\Data\ArticleData;
88
use App\Models\Article;
9+
use App\Models\User;
910
use Carbon\Carbon;
1011
use Illuminate\Support\Facades\Auth;
1112

@@ -27,25 +28,9 @@ public function execute(ArticleData $articleData): Article
2728
);
2829
}
2930

31+
/** @var User $user */
3032
$user = Auth::user();
3133

32-
if ($user->isAdmin() || $user->isModerator()) {
33-
$articleData->published_at = new Carbon(
34-
time: today(),
35-
timezone: config('app.timezone')
36-
);
37-
38-
$articleData->submitted_at = new Carbon(
39-
time: $articleData->submitted_at,
40-
timezone: config('app.timezone')
41-
);
42-
43-
$articleData->approved_at = new Carbon(
44-
time: today(),
45-
timezone: config('app.timezone')
46-
);
47-
}
48-
4934
// @phpstan-ignore-next-line
5035
return Article::query()->create([
5136
'title' => $articleData->title,

app/Livewire/Components/Slideovers/ArticleForm.php

+5-7
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@
1010
use App\Exceptions\UnverifiedUserException;
1111
use App\Livewire\Traits\WithAuthenticatedUser;
1212
use App\Models\Article;
13-
use Carbon\Carbon;
1413
use Filament\Forms;
1514
use Filament\Forms\Concerns\InteractsWithForms;
1615
use Filament\Forms\Contracts\HasForms;
1716
use Filament\Forms\Form;
1817
use Filament\Notifications\Notification;
1918
use Illuminate\Contracts\View\View;
19+
use Illuminate\Database\Eloquent\Builder;
2020
use Illuminate\Support\Facades\Auth;
2121
use Illuminate\Support\Facades\Blade;
2222
use Illuminate\Support\HtmlString;
@@ -91,7 +91,7 @@ public function form(Form $form): Form
9191
->helperText(__('pages/article.draft_help')),
9292
Forms\Components\DatePicker::make('published_at')
9393
->label(__('pages/article.form.published_at'))
94-
->minDate(now())
94+
->closeOnDateSelection()
9595
->prefixIcon('untitledui-calendar-date')
9696
->native(false)
9797
->visible(fn (Forms\Get $get): bool => $get('is_draft') === false)
@@ -110,7 +110,7 @@ public function form(Form $form): Form
110110
->relationship(
111111
name: 'tags',
112112
titleAttribute: 'name',
113-
modifyQueryUsing: fn ($query) => $query->whereJsonContains('concerns', 'post')
113+
modifyQueryUsing: fn (Builder $query): Builder => $query->whereJsonContains('concerns', 'post')
114114
)
115115
->preload()
116116
->required()
@@ -173,10 +173,8 @@ public function save(): void
173173
$state = $this->form->getState();
174174

175175
$publishedFields = [
176-
'published_at' => data_get($state, 'published_at')
177-
? new Carbon(data_get($state, 'published_at'))
178-
: null,
179-
'submitted_at' => data_get($state, 'is_draft') ? null : now(),
176+
'published_at' => data_get($state, 'published_at') ?? null,
177+
'submitted_at' => data_get($state, 'is_draft') ?? null,
180178
];
181179

182180
if ($this->article?->id) {

app/Models/Article.php

+13-13
Original file line numberDiff line numberDiff line change
@@ -31,21 +31,21 @@
3131
* @property bool $show_toc
3232
* @property bool $is_pinned
3333
* @property int $is_sponsored
34-
* @property string | null $canonical_url
35-
* @property string | null $reason
36-
* @property int | null $tweet_id
34+
* @property string|null $canonical_url
35+
* @property string|null $reason
36+
* @property int|null $tweet_id
3737
* @property int $user_id
38-
* @property string | null $locale
38+
* @property string|null $locale
3939
* @property-read User $user
40-
* @property Carbon | null $published_at
41-
* @property Carbon | null $submitted_at
42-
* @property Carbon | null $approved_at
43-
* @property Carbon | null $shared_at
44-
* @property Carbon | null $declined_at
45-
* @property Carbon | null $sponsored_at
46-
* @property Carbon $created_at
47-
* @property Carbon $updated_at
48-
* @property \Illuminate\Database\Eloquent\Collection | Tag[] $tags
40+
* @property-read \Illuminate\Support\Carbon|null $published_at
41+
* @property-read \Illuminate\Support\Carbon|null $submitted_at
42+
* @property-read \Illuminate\Support\Carbon|null $approved_at
43+
* @property-read \Illuminate\Support\Carbon|null $shared_at
44+
* @property-read \Illuminate\Support\Carbon|null $declined_at
45+
* @property-read \Illuminate\Support\Carbon|null $sponsored_at
46+
* @property-read \Illuminate\Support\Carbon $created_at
47+
* @property-read \Illuminate\Support\Carbon $updated_at
48+
* @property \Illuminate\Database\Eloquent\Collection<int, Tag> $tags
4949
*/
5050
final class Article extends Model implements HasMedia, ReactableInterface, Sitemapable, Viewable
5151
{

app/Providers/Filament/AdminPanelProvider.php

+13-22
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,23 @@
44

55
namespace App\Providers\Filament;
66

7-
use App\Filament\Resources\ArticleResource\Widgets\ArticleStatsOverview;
8-
use App\Filament\Resources\ArticleResource\Widgets\MostLikedPostsChart;
9-
use App\Filament\Resources\ArticleResource\Widgets\MostViewedPostsChart;
10-
use App\Filament\Resources\UserResource\Widgets\UserActivityWidget;
11-
use App\Filament\Resources\UserResource\Widgets\UserChartWidget;
12-
use App\Filament\Resources\UserResource\Widgets\UserStatsOverview;
7+
use App\Filament\Resources\ArticleResource\Widgets as ArticleWidgets;
8+
use App\Filament\Resources\UserResource\Widgets;
139
use Filament\Http\Middleware\Authenticate;
1410
use Filament\Http\Middleware\DisableBladeIconComponents;
1511
use Filament\Http\Middleware\DispatchServingFilamentEvent;
1612
use Filament\Pages;
1713
use Filament\Panel;
1814
use Filament\PanelProvider;
1915
use Filament\SpatieLaravelTranslatablePlugin;
20-
use Filament\Support\Colors\Color;
2116
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
2217
use Illuminate\Cookie\Middleware\EncryptCookies;
2318
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
2419
use Illuminate\Routing\Middleware\SubstituteBindings;
2520
use Illuminate\Session\Middleware\AuthenticateSession;
2621
use Illuminate\Session\Middleware\StartSession;
27-
use Illuminate\Support\Facades\Blade;
2822
use Illuminate\View\Middleware\ShareErrorsFromSession;
23+
use Vormkracht10\FilamentMails\Facades\FilamentMails;
2924
use Vormkracht10\FilamentMails\FilamentMailsPlugin;
3025

3126
final class AdminPanelProvider extends PanelProvider
@@ -38,38 +33,34 @@ public function panel(Panel $panel): Panel
3833
->path('cp')
3934
->login()
4035
->colors([
41-
'primary' => Color::Green,
36+
'primary' => '#099170',
4237
])
4338
->sidebarWidth('18.75rem')
39+
->sidebarCollapsibleOnDesktop()
4440
->viteTheme('resources/css/filament/admin/theme.css')
4541
->brandLogo(fn () => view('filament.brand'))
4642
->favicon(asset('images/favicons/favicon-32x32.png'))
43+
->spa()
4744
->discoverResources(in: app_path('Filament/Resources'), for: 'App\\Filament\\Resources')
4845
->discoverPages(in: app_path('Filament/Pages'), for: 'App\\Filament\\Pages')
4946
->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\\Filament\\Widgets')
5047
->pages([
5148
Pages\Dashboard::class,
5249
])
5350
->widgets([
54-
UserStatsOverview::class,
55-
UserChartWidget::class,
56-
UserActivityWidget::class,
57-
ArticleStatsOverview::class,
58-
MostLikedPostsChart::class,
59-
MostViewedPostsChart::class,
51+
Widgets\UserStatsOverview::class,
52+
Widgets\UserChartWidget::class,
53+
Widgets\UserActivityWidget::class,
54+
ArticleWidgets\ArticleStatsOverview::class,
55+
ArticleWidgets\MostLikedPostsChart::class,
56+
ArticleWidgets\MostViewedPostsChart::class,
6057
])
6158
->plugins([
6259
SpatieLaravelTranslatablePlugin::make()
6360
->defaultLocales(['fr', 'en']),
6461
FilamentMailsPlugin::make(),
6562
])
66-
->renderHook(
67-
'body.start',
68-
fn (): string => Blade::render('@livewire(\'livewire-ui-modal\')'),
69-
)
70-
->databaseNotifications()
71-
->databaseNotificationsPolling('3600s')
72-
->spa()
63+
->routes(fn () => FilamentMails::routes())
7364
->middleware([
7465
EncryptCookies::class,
7566
AddQueuedCookiesToResponse::class,

composer.json

+9-10
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
],
99
"license": "MIT",
1010
"require": {
11-
"php": "^8.2",
11+
"php": "^8.3",
1212
"ext-fileinfo": "*",
1313
"ext-json": "*",
1414
"archtechx/laravel-seo": "^0.10",
@@ -37,9 +37,8 @@
3737
"laravelcm/gamify": "*",
3838
"laravelcm/laravel-subscriptions": "^1.3",
3939
"laravelcm/livewire-slide-overs": "^1.0",
40-
"livewire/livewire": "^3.5",
4140
"livewire/volt": "^1.6",
42-
"mckenziearts/blade-untitledui-icons": "^1.3",
41+
"mckenziearts/blade-untitledui-icons": "^1.4",
4342
"notchpay/notchpay-php": "^1.6",
4443
"ramsey/uuid": "^4.7.4",
4544
"sentry/sentry-laravel": "^4.10",
@@ -65,10 +64,10 @@
6564
"laravel/pint": "^1.18",
6665
"mockery/mockery": "^1.6.2",
6766
"nunomaduro/collision": "^8.1",
68-
"pestphp/pest": "^2.32",
69-
"pestphp/pest-plugin-laravel": "^2.1",
70-
"pestphp/pest-plugin-livewire": "^2.1",
71-
"phpunit/phpunit": "^10.0",
67+
"pestphp/pest": "^3.8",
68+
"pestphp/pest-plugin-laravel": "^3.0",
69+
"pestphp/pest-plugin-livewire": "^3.0",
70+
"phpunit/phpunit": "^11.0",
7271
"spatie/laravel-ignition": "^2.0",
7372
"spatie/test-time": "^1.3.2"
7473
},
@@ -90,11 +89,11 @@
9089
"scripts": {
9190
"post-autoload-dump": [
9291
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
93-
"@php artisan package:discover --ansi"
92+
"@php artisan package:discover --ansi",
93+
"@php artisan filament:upgrade"
9494
],
9595
"post-update-cmd": [
96-
"Illuminate\\Foundation\\ComposerScripts::postUpdate",
97-
"@php artisan filament:upgrade"
96+
"Illuminate\\Foundation\\ComposerScripts::postUpdate"
9897
],
9998
"post-root-package-install": [
10099
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""

0 commit comments

Comments
 (0)