label($refreshRule->canonicalLabel) ->icon('heroicon-o-arrow-path') ->color('primary') ->requiresConfirmation() ->modalHeading($refreshRule->modalHeading) ->modalDescription($refreshRule->modalDescription) ->action(function () use ($refreshRule): void { $user = auth()->user(); if (! $user instanceof User) { abort(403); } app(EvidenceSnapshotService::class)->refresh($this->record, $user); Notification::make()->success()->title($refreshRule->successTitle)->send(); }), ) ->requireCapability(Capabilities::EVIDENCE_MANAGE) ->apply(), UiEnforcement::forAction( Actions\Action::make('expire_snapshot') ->label($expireRule->canonicalLabel) ->icon('heroicon-o-x-circle') ->color('danger') ->hidden(fn (): bool => ! EvidenceSnapshotResource::canExpireRecord($this->record)) ->requiresConfirmation() ->modalHeading($expireRule->modalHeading) ->modalDescription($expireRule->modalDescription) ->form([ Textarea::make('expiration_reason') ->label('Expiry reason') ->rows(4) ->required() ->maxLength(2000), ]) ->action(function (array $data) use ($expireRule): void { $user = auth()->user(); if (! $user instanceof User) { abort(403); } app(EvidenceSnapshotService::class)->expire( $this->record, $user, (string) ($data['expiration_reason'] ?? ''), ); $this->refreshFormData(['status', 'expires_at']); Notification::make()->success()->title($expireRule->successTitle)->send(); }), ) ->requireCapability(Capabilities::EVIDENCE_MANAGE) ->apply(), ]; } }