feat: add EditReportAction for editing reports with enhanced form fields and visibility logic

This commit is contained in:
Yoga Pangestu 2026-07-21 14:59:15 +07:00
parent a08a23ae25
commit 59f5f87dad
3 changed files with 88 additions and 1 deletions

View File

@ -0,0 +1,73 @@
<?php
namespace App\Filament\Resources\Manage\Cooperations\Actions\Report;
use App\Enums\ApprovalStatus;
use App\Enums\RoleEnum;
use App\Filament\Actions\Cheerful\EditAction;
use App\Filament\Support\CheerfulNotification;
use App\Models\Report;
use Filament\Forms\Components\DatePicker;
use Filament\Forms\Components\SpatieMediaLibraryFileUpload;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
class EditReportAction extends EditAction
{
public static function getDefaultName(): ?string
{
return 'edit_report';
}
protected function setUp(): void
{
parent::setUp();
$this
->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);
}
}

View File

@ -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]));
}
}

View File

@ -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(),