label('Archive') ->color('danger') ->requiresConfirmation() ->visible(fn (): bool => $this->record instanceof Tenant && ! $this->record->trashed()) ->disabled(function (): bool { $tenant = $this->record; $user = auth()->user(); if (! $tenant instanceof Tenant || ! $user instanceof User) { return true; } return Gate::forUser($user)->denies(Capabilities::TENANT_DELETE, $tenant); }) ->tooltip(function (): ?string { $tenant = $this->record; $user = auth()->user(); if (! $tenant instanceof Tenant || ! $user instanceof User) { return null; } return Gate::forUser($user)->allows(Capabilities::TENANT_DELETE, $tenant) ? null : 'You do not have permission to archive tenants.'; }) ->action(function (): void { $tenant = $this->record; $user = auth()->user(); abort_unless($tenant instanceof Tenant && $user instanceof User, 403); abort_unless(Gate::forUser($user)->allows(Capabilities::TENANT_DELETE, $tenant), 403); $tenant->delete(); }), ]; } }