label('View run') ->icon('heroicon-o-eye') ->color('gray') ->url(fn (): ?string => $this->record->operation_run_id ? OperationRunLinks::tenantlessView((int) $this->record->operation_run_id) : null) ->hidden(fn (): bool => ! is_numeric($this->record->operation_run_id)), Actions\Action::make('view_review_pack') ->label('View review pack') ->icon('heroicon-o-document-text') ->color('gray') ->url(function (): ?string { $pack = $this->latestReviewPack(); if (! $pack instanceof ReviewPack || ! $pack->tenant) { return null; } return ReviewPackResource::getUrl('view', ['record' => $pack], tenant: $pack->tenant); }) ->hidden(fn (): bool => ! $this->latestReviewPack() instanceof ReviewPack), UiEnforcement::forAction( Actions\Action::make('refresh_snapshot') ->label('Refresh evidence') ->icon('heroicon-o-arrow-path') ->requiresConfirmation() ->action(function (): void { $user = auth()->user(); if (! $user instanceof User) { abort(403); } app(EvidenceSnapshotService::class)->refresh($this->record, $user); Notification::make()->success()->title('Refresh evidence queued')->send(); }), ) ->requireCapability(Capabilities::EVIDENCE_MANAGE) ->apply(), UiEnforcement::forAction( Actions\Action::make('expire_snapshot') ->label('Expire snapshot') ->icon('heroicon-o-x-circle') ->color('danger') ->hidden(fn (): bool => ! EvidenceSnapshotResource::canExpireRecord($this->record)) ->requiresConfirmation() ->action(function (): void { $user = auth()->user(); if (! $user instanceof User) { abort(403); } app(EvidenceSnapshotService::class)->expire($this->record, $user); $this->refreshFormData(['status', 'expires_at']); Notification::make()->success()->title('Snapshot expired')->send(); }), ) ->requireCapability(Capabilities::EVIDENCE_MANAGE) ->apply(), ]; } private function latestReviewPack(): ?ReviewPack { return $this->record->reviewPacks() ->latest('created_at') ->first(); } }