label('New connection') ->url(function (): string { $tenantExternalId = $this->resolveTenantExternalIdForCreateAction(); if (! is_string($tenantExternalId) || $tenantExternalId === '') { return ProviderConnectionResource::getUrl('create'); } return ProviderConnectionResource::getUrl('create', [ 'tenant_id' => $tenantExternalId, ]); }) ->visible(function () use ($resolver): bool { $tenant = $this->resolveTenantForCreateAction(); $user = auth()->user(); if (! $tenant instanceof Tenant) { return true; } if (! $user instanceof User) { return false; } return $resolver->isMember($user, $tenant); }) ->disabled(function () use ($resolver): bool { $tenant = $this->resolveTenantForCreateAction(); $user = auth()->user(); if (! $tenant instanceof Tenant) { return true; } if (! $user instanceof User) { return true; } if (! $resolver->isMember($user, $tenant)) { return true; } return ! $resolver->can($user, $tenant, Capabilities::PROVIDER_MANAGE); }) ->tooltip(function () use ($resolver): ?string { $tenant = $this->resolveTenantForCreateAction(); if (! $tenant instanceof Tenant) { return 'Select a tenant to create provider connections.'; } $user = auth()->user(); if (! $user instanceof User) { return null; } if (! $resolver->isMember($user, $tenant)) { return null; } if (! $resolver->can($user, $tenant, Capabilities::PROVIDER_MANAGE)) { return 'You do not have permission to create provider connections.'; } return null; }) ->authorize(fn (): bool => true), ]; } private function resolveTenantExternalIdForCreateAction(): ?string { $filterValue = data_get($this->getTableFilterState('tenant'), 'value'); if (is_string($filterValue) && $filterValue !== '') { return $filterValue; } $requested = ProviderConnectionResource::resolveRequestedTenantExternalId() ?? ProviderConnectionResource::resolveContextTenantExternalId(); if (is_string($requested) && $requested !== '') { return $requested; } $filamentTenant = Filament::getTenant(); return $filamentTenant instanceof Tenant ? (string) $filamentTenant->external_id : null; } private function resolveTenantForCreateAction(): ?Tenant { $tenantExternalId = $this->resolveTenantExternalIdForCreateAction(); if (! is_string($tenantExternalId) || $tenantExternalId === '') { return null; } return Tenant::query() ->where('external_id', $tenantExternalId) ->first(); } public function getTableEmptyStateHeading(): ?string { return 'No provider connections found'; } public function getTableEmptyStateDescription(): ?string { return 'Create a Microsoft provider connection or adjust the tenant filter to inspect another managed tenant.'; } public function getTableEmptyStateActions(): array { return $this->getHeaderActions(); } }