"use client"; import { useCallback, useEffect, useState } from "react"; import { getLexiconServices, removeServiceEntryXrpcs } from "@/lib/api"; import type { ServiceEntry } from "@/lib/api"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, } from "@/components/ui/sheet"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; interface LexiconServicesSheetProps { lexiconId: string; open: boolean; onOpenChange: (open: boolean) => void; } export function LexiconServicesSheet({ lexiconId, open, onOpenChange, }: LexiconServicesSheetProps) { const [services, setServices] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [removing, setRemoving] = useState(null); const load = useCallback(() => { if (!open) return; setLoading(true); setError(null); getLexiconServices(lexiconId) .then(setServices) .catch((e) => setError(e instanceof Error ? e.message : String(e))) .finally(() => setLoading(false)); }, [lexiconId, open]); useEffect(() => { load(); }, [load]); async function handleRemove(service: ServiceEntry) { setRemoving(service.id); setError(null); try { await removeServiceEntryXrpcs(service.id, [lexiconId]); load(); } catch (e: unknown) { setError(e instanceof Error ? e.message : String(e)); } finally { setRemoving(null); } } return ( Services Services that can access{" "} {lexiconId}.
{error && (

{error}

)} {loading ? (

Loading...

) : services.length === 0 ? (

No services have access to this XRPC.

) : ( Service Access {services.map((service) => { const isAllXrpcs = service.access_mode === "all"; return ( {service.fragment_id} {isAllXrpcs ? ( All XRPCs ) : ( Explicit )} {isAllXrpcs ? ( — Change access mode in service config to remove individual XRPCs. ) : ( )} ); })}
)}

Services with “All XRPCs” access can’t be removed from individual XRPCs. Change their access mode in service config.

); }