diff --git a/app/Filament/Resources/SuccessResource.php b/app/Filament/Resources/SuccessResource.php new file mode 100644 index 0000000..69230e3 --- /dev/null +++ b/app/Filament/Resources/SuccessResource.php @@ -0,0 +1,116 @@ +schema([ + Forms\Components\Card::make() + ->schema([ + TextInput::make('title') + ->required() + ->maxLength(255) + ->reactive() + ->afterStateUpdated(fn (string $operation, $state, Forms\Set $set) => $operation === 'create' ? $set('slug', Str::slug($state)) : null), + TextInput::make('slug') + ->required() + ->maxLength(255) + ->disabled() + ->dehydrated() + ->unique(Success::class, 'slug', ignoreRecord: true), + FileUpload::make('image') + ->label('Image 1100x660') + ->image() + ->directory('success') + ->nullable() + ->columnSpanFull(), + RichEditor::make('content') + ->required() + ->columnSpanFull(), + DateTimePicker::make('published_at') + ->required() + ->default(now()), + ]) + ->columns(2), + ]); + } + + public static function table(Table $table): Table + { + return $table + ->columns([ + ImageColumn::make('image') + ->square() + ->toggleable(isToggledHiddenByDefault: true), + Tables\Columns\TextColumn::make('title') + ->searchable() + ->sortable(), + Tables\Columns\TextColumn::make('slug') + ->searchable() + ->sortable(), + Tables\Columns\TextColumn::make('published_at') + ->dateTime() + ->sortable(), + Tables\Columns\TextColumn::make('created_at') + ->dateTime() + ->sortable() + ->toggleable(isToggledHiddenByDefault: true), + Tables\Columns\TextColumn::make('updated_at') + ->dateTime() + ->sortable() + ->toggleable(isToggledHiddenByDefault: true), + ]) + ->filters([ + // + ]) + ->actions([ + Tables\Actions\EditAction::make(), + Tables\Actions\DeleteAction::make(), + ]) + ->bulkActions([ + Tables\Actions\BulkActionGroup::make([ + Tables\Actions\DeleteBulkAction::make(), + ]), + ]); + } + + public static function getRelations(): array + { + return [ + // + ]; + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListSuccesses::route('/'), + 'create' => Pages\CreateSuccess::route('/create'), + 'edit' => Pages\EditSuccess::route('/{record}/edit'), + ]; + } +} diff --git a/app/Filament/Resources/SuccessResource/Pages/CreateSuccess.php b/app/Filament/Resources/SuccessResource/Pages/CreateSuccess.php new file mode 100644 index 0000000..7285fb0 --- /dev/null +++ b/app/Filament/Resources/SuccessResource/Pages/CreateSuccess.php @@ -0,0 +1,12 @@ +latest()->get(); + + return view('web.pages.success.index', compact('allSuccesses')); + } + + public function show($success) + { + $success = Success::where('slug', $success)->firstOrFail(); + $recentSuccesses = Success::query()->latest()->limit(3)->get(); + + return view('web.pages.success.show', compact('success', 'recentSuccesses')); + } +} diff --git a/app/Models/Success.php b/app/Models/Success.php new file mode 100644 index 0000000..f8253fc --- /dev/null +++ b/app/Models/Success.php @@ -0,0 +1,19 @@ +id(); + $table->string('title'); + $table->string('slug')->unique(); + $table->longText('content'); + $table->string('image')->nullable(); + $table->timestamp('published_at'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('successes'); + } +}; diff --git a/resources/views/web/layouts/footer.blade.php b/resources/views/web/layouts/footer.blade.php index e0712a8..1522e74 100644 --- a/resources/views/web/layouts/footer.blade.php +++ b/resources/views/web/layouts/footer.blade.php @@ -32,7 +32,7 @@
{!! $success->content !!}
+