From 59f5f87dad1eebaf8cf70d2169d82f49e8c13d81 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Tue, 21 Jul 2026 14:59:15 +0700 Subject: [PATCH] feat: add EditReportAction for editing reports with enhanced form fields and visibility logic --- .../Actions/Report/EditReportAction.php | 73 +++++++++++++++++++ .../Actions/Report/ExportReportPdfAction.php | 2 +- .../ReportRelationManager.php | 14 ++++ 3 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 app/Filament/Resources/Manage/Cooperations/Actions/Report/EditReportAction.php diff --git a/app/Filament/Resources/Manage/Cooperations/Actions/Report/EditReportAction.php b/app/Filament/Resources/Manage/Cooperations/Actions/Report/EditReportAction.php new file mode 100644 index 0000000..304a215 --- /dev/null +++ b/app/Filament/Resources/Manage/Cooperations/Actions/Report/EditReportAction.php @@ -0,0 +1,73 @@ +modalWidth('lg') + ->schema([ + TextInput::make('title') + ->label('Judul') + ->placeholder('Dirgahayu Purwakarta') + ->required() + ->autocomplete(false), + + DatePicker::make('publication_date') + ->label('Tanggal Publikasi') + ->native(false) + ->displayFormat('l, d F Y') + ->required(), + + TextInput::make('link') + ->label('Tautan') + ->placeholder('https://example.com') + ->maxLength(255) + ->url() + ->required() + ->autocomplete(false), + + Textarea::make('description') + ->label('Deskripsi') + ->placeholder('....') + ->required() + ->autocomplete(false), + + SpatieMediaLibraryFileUpload::make('image') + ->label('Gambar') + ->disk(config('filesystems.default')) + ->acceptedFileTypes(['image/*']) + ->maxSize(1024 * 3) + ->collection('reports') + ->image() + ->helperText('Format yang diterima: JPEG, PNG, GIF, WEBP. Ukuran maksimum: 3 MB.') + ->required(), + ]) + ->successNotification( + fn () => CheerfulNotification::success( + CheerfulNotification::getByKey('cooperation.report_sent_success'), + CheerfulNotification::getByKey('cooperation.report_sent_desc') + ) + ) + ->visible(fn (Report $record): bool => auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value) && $record->status === ApprovalStatus::PENDING); + } +} diff --git a/app/Filament/Resources/Manage/Cooperations/Actions/Report/ExportReportPdfAction.php b/app/Filament/Resources/Manage/Cooperations/Actions/Report/ExportReportPdfAction.php index 2a7f889..30afabb 100644 --- a/app/Filament/Resources/Manage/Cooperations/Actions/Report/ExportReportPdfAction.php +++ b/app/Filament/Resources/Manage/Cooperations/Actions/Report/ExportReportPdfAction.php @@ -49,6 +49,6 @@ protected function setUp(): void )->output(); }, str($record->title)->slug().'.pdf'); }) - ->visible(fn () => auth()->user()->hasRole([RoleEnum::ADMINISTRATOR->value, RoleEnum::DEVELOPER->value])); + ->visible(fn () => auth()->user()->hasRole([RoleEnum::ADMINISTRATOR->value, RoleEnum::DEVELOPER->value, RoleEnum::PERUSAHAAN->value])); } } diff --git a/app/Filament/Resources/Manage/Cooperations/RelationManagers/ReportRelationManager.php b/app/Filament/Resources/Manage/Cooperations/RelationManagers/ReportRelationManager.php index 14dd812..b0a74b1 100644 --- a/app/Filament/Resources/Manage/Cooperations/RelationManagers/ReportRelationManager.php +++ b/app/Filament/Resources/Manage/Cooperations/RelationManagers/ReportRelationManager.php @@ -2,9 +2,12 @@ namespace App\Filament\Resources\Manage\Cooperations\RelationManagers; +use App\Enums\ApprovalStatus; use App\Enums\RoleEnum; +use App\Filament\Actions\Cheerful\DeleteAction; use App\Filament\Columns\RowIndexColumn; use App\Filament\Resources\Manage\Cooperations\Actions\Report\AcceptAction; +use App\Filament\Resources\Manage\Cooperations\Actions\Report\EditReportAction; use App\Filament\Resources\Manage\Cooperations\Actions\Report\ExportAllReportsPdfAction; use App\Filament\Resources\Manage\Cooperations\Actions\Report\ExportReportPdfAction; use App\Filament\Resources\Manage\Cooperations\Actions\Report\RejectAction; @@ -98,6 +101,17 @@ public function table(Table $table): Table ->recordActions([ ExportReportPdfAction::make(), + EditReportAction::make(), + + DeleteAction::make() + ->successNotification( + fn () => CheerfulNotification::success( + CheerfulNotification::getByKey('cooperation.report_sent_success'), + CheerfulNotification::getByKey('cooperation.report_sent_desc') + ) + ) + ->visible(fn (Report $record): bool => auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value) && $record->status === ApprovalStatus::PENDING), + AcceptAction::make(), RejectAction::make(),