components([ TextInput::make('title') ->placeholder('Dirgahayu Purwakarta') ->required() ->maxLength(200) ->autocomplete(false) ->autofocus(), DatePicker::make('publication_date') ->label('Tanggal Publikasi') ->placeholder(fn (): string => now()->format('l, d F Y')) ->native(false) ->displayFormat('l, d F Y') ->required(), TextInput::make('link') ->label('Tautan') ->placeholder('https://example.com') ->maxLength(50) ->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() ->required(), ]) ->columns(1); } public function table(Table $table): Table { return $table ->recordTitleAttribute('title') ->columns([ TextColumn::make('title') ->label('Judul') ->searchable(), TextColumn::make('publication_date') ->label('Tanggal Publikasi') ->date('l, d F Y'), TextColumn::make('link') ->label('Link') ->limit(30) ->url(fn (\App\Models\Report $record): string => $record->link) ->openUrlInNewTab(), TextColumn::make('status') ->label('Status') ->badge(), TextColumn::make('rejectionReasons.reason') ->label('Alasan Penolakan') ->searchable(), ]) ->filters([]) ->recordActions([ AcceptAction::make('accept'), RejectAction::make('reject'), ]) ->headerActions([ CreateAction::make() ->label('Buat Laporan') ->modalWidth(Width::Large) ->modalHeading('Buat Laporan') ->mutateDataUsing(function (array $data): array { $data['task_assignment_id'] = $this->getOwnerRecord()->taskAssignments()->first()?->id; return $data; }) ->visible(function (): bool { $taskAssignment = $this->getOwnerRecord()->taskAssignments()->first(); if (! $taskAssignment) { return false; } return $taskAssignment->reports()->count() < $taskAssignment->report_amount; }), ]) ->toolbarActions([]); } }