'$refresh', ]; public function getMaxContentWidth(): MaxWidth | string | null { return MaxWidth::SixExtraLarge; } protected function getHeaderActions(): array { return [ Actions\Action::make('printPdf') ->label('Export PDF') ->icon('heroicon-o-document-arrow-down') ->outlined() ->action(function (Estimate $record) { $url = route('documents.print', [ 'documentType' => $record::documentType(), 'id' => $record->id, ]); $title = 'Print Estimate'; $this->js("window.printPdf('{$url}', '{$title}')"); }), Actions\EditAction::make() ->label('Edit estimate') ->outlined(), Actions\ActionGroup::make([ Actions\ActionGroup::make([ Estimate::getApproveDraftAction(), Estimate::getMarkAsSentAction(), Estimate::getMarkAsAcceptedAction(), Estimate::getMarkAsDeclinedAction(), Estimate::getReplicateAction(), Estimate::getConvertToInvoiceAction(), ])->dropdown(false), Actions\DeleteAction::make(), ]) ->label('Actions') ->button() ->outlined() ->dropdownPlacement('bottom-end') ->icon('heroicon-c-chevron-down') ->iconSize(IconSize::Small) ->iconPosition(IconPosition::After), ]; } public function infolist(Infolist $infolist): Infolist { return $infolist ->schema([ Section::make('Estimate Details') ->columns(4) ->schema([ Grid::make(1) ->schema([ TextEntry::make('estimate_number') ->label('Estimate #'), TextEntry::make('status') ->badge(), TextEntry::make('client.name') ->label('Client') ->color('primary') ->weight(FontWeight::SemiBold) ->url(static fn (Estimate $record) => ClientResource::getUrl('edit', ['record' => $record->client_id])), TextEntry::make('expiration_date') ->label('Expiration date') ->asRelativeDay(), TextEntry::make('approved_at') ->label('Approved at') ->placeholder('Not Approved') ->date(), TextEntry::make('last_sent_at') ->label('Last sent') ->placeholder('Never') ->date(), TextEntry::make('accepted_at') ->label('Accepted at') ->placeholder('Not Accepted') ->date(), ])->columnSpan(1), DocumentPreview::make() ->type(DocumentType::Estimate), ]), ]); } }