"use client"; import { useQuery } from "@tanstack/react-query"; import { useAtomValue } from "jotai"; import { useCallback, useState } from "react"; import { toast } from "sonner"; import { updateWorkspaceApiAccessMutationAtom } from "@/atoms/workspaces/workspace-mutation.atoms"; import { Button } from "@/components/ui/button"; import { Label } from "@/components/ui/label"; import { Skeleton } from "@/components/ui/skeleton"; import { Switch } from "@/components/ui/switch"; import { workspacesApiService } from "@/lib/apis/workspaces-api.service"; import { cacheKeys } from "@/lib/query-client/cache-keys"; import { cn } from "@/lib/utils"; interface WorkspaceApiAccessControlProps { workspaceId: number; className?: string; } export function WorkspaceApiAccessControl({ workspaceId, className, }: WorkspaceApiAccessControlProps) { const { data: workspace, isLoading, isError, refetch, } = useQuery({ queryKey: cacheKeys.workspaces.detail(workspaceId.toString()), queryFn: () => workspacesApiService.getWorkspace({ id: workspaceId }), enabled: !!workspaceId, }); const { mutateAsync: updateWorkspaceApiAccess } = useAtomValue( updateWorkspaceApiAccessMutationAtom ); const [savingApiAccess, setSavingApiAccess] = useState(false); const handleApiAccessToggle = useCallback( async (enabled: boolean) => { try { setSavingApiAccess(true); await updateWorkspaceApiAccess({ id: workspaceId, api_access_enabled: enabled, }); await refetch(); } catch (error) { console.error("Error updating API access:", error); toast.error(error instanceof Error ? error.message : "Failed to update API access"); } finally { setSavingApiAccess(false); } }, [refetch, workspaceId, updateWorkspaceApiAccess] ); if (isLoading) { return (
); } if (isError) { return (

Failed to load workspace API access.

); } return (

Allow API keys to access this workspace.

); }