schema([ Forms\Components\Group::make() ->schema([ Forms\Components\Card::make() ->schema([ Forms\Components\TextInput::make('title') ->required()->columnSpan('full'), Forms\Components\DatePicker::make('date') ->default(Carbon::now()) ->required() ->columnSpan('full'), ]) ->columns(2), Forms\Components\Section::make('File') ->schema([ FileUpload::make('file_name') ->required() ->directory('jobs') ->visibility('public') ->acceptedFileTypes(['application/pdf', 'application/msword']) ->minSize(1) ->maxSize(4096) ->label('Choose a file') ]) ->collapsible(), ]) ->columnSpan(['lg' => fn (?EmploymentAnnouncement $record) => $record === null ? 3 : 2]), Forms\Components\Card::make() ->schema([ Forms\Components\Placeholder::make('author_id') ->label('Author') ->content(fn (EmploymentAnnouncement $record): ?string => $record->user->name ?? 'N/A'), Forms\Components\Placeholder::make('created_at') ->label('Created at') ->content(fn (EmploymentAnnouncement $record): ?string => $record->created_at?->diffForHumans()), Forms\Components\Placeholder::make('updated_at') ->label('Last modified at') ->content(fn (EmploymentAnnouncement $record): ?string => $record->updated_at?->diffForHumans()), ]) ->columnSpan(['lg' => 1]) ->hidden(fn (?EmploymentAnnouncement $record) => $record === null) ])->columns(3); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('title') ->searchable() ->sortable(), Tables\Columns\TextColumn::make('date')->date()->sortable(), ]) ->filters([ Tables\Filters\Filter::make('created_at') ->form([ Forms\Components\DatePicker::make('created_from') ->placeholder(fn ($state): string => now()->subYear()->format('d/m/Y')), Forms\Components\DatePicker::make('created_until') ->placeholder(fn ($state): string => now()->format('d/m/Y')), ]) ->query(function (Builder $query, array $data): Builder { return $query ->when( $data['created_from'] ?? null, fn (Builder $query, $date): Builder => $query->whereDate('created_at', '>=', $date), ) ->when( $data['created_until'] ?? null, fn (Builder $query, $date): Builder => $query->whereDate('created_at', '<=', $date), ); }) ->indicateUsing(function (array $data): array { $indicators = []; if ($data['created_from'] ?? null) { $indicators['created_from'] = 'Created from ' . Carbon::parse($data['created_from'])->toFormattedDateString(); } if ($data['created_until'] ?? null) { $indicators['created_until'] = 'Created until ' . Carbon::parse($data['created_until'])->toFormattedDateString(); } return $indicators; }), ]) ->actions([ Tables\Actions\EditAction::make(), Tables\Actions\DeleteAction::make(), ]) ->bulkActions([ Tables\Actions\DeleteBulkAction::make(), ]); } public static function getRelations(): array { return [ // ]; } public static function getPages(): array { return [ 'index' => Pages\ListEmploymentAnnouncements::route('/'), 'create' => Pages\CreateEmploymentAnnouncement::route('/create'), 'edit' => Pages\EditEmploymentAnnouncement::route('/{record}/edit'), ]; } public static function getGloballySearchableAttributes(): array { return ['title']; } }