import { useEffect, useRef, useState, type FC } from "react" import { useTheme } from "next-themes" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import "rapidoc" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card.tsx" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select.tsx" type RdThemeMode = "auto" | "light" | "dark" export const DocsPage: FC = () => { const rdRef = useRef(null) const { theme, systemTheme, setTheme } = useTheme() const [orgId, setOrgId] = useState("") const [rdThemeMode, setRdThemeMode] = useState("auto") useEffect(() => { const stateSetter = () => { const stored = localStorage.getItem("autoglue.org") if (stored) setOrgId(stored) } stateSetter() }, []) useEffect(() => { const rd = rdRef.current if (!rd) return let effectiveTheme: "light" | "dark" = "light" if (rdThemeMode === "light") { effectiveTheme = "light" } else if (rdThemeMode === "dark") { effectiveTheme = "dark" } else { const appTheme = theme === "system" ? systemTheme : theme effectiveTheme = appTheme === "dark" ? "dark" : "light" } rd.setAttribute("theme", effectiveTheme) if (typeof window !== "undefined") { const defaultServer = `${window.location.origin}/api/v1` rd.setAttribute("default-api-server", defaultServer) } if (orgId) { rd.setAttribute("api-key-name", "X-ORG-ID") rd.setAttribute("api-key-location", "header") rd.setAttribute("api-key-value", orgId) } else { rd.removeAttribute("api-key-value") } }, [theme, systemTheme, rdThemeMode, orgId]) const handleSaveOrg = () => { const trimmed = orgId.trim() localStorage.setItem("autoglue.org", trimmed) const rd = rdRef.current if (!rd) return if (trimmed) { rd.setAttribute("api-key-value", trimmed) } else { rd.removeAttribute("api-key-value") } } const handleResetOrg = () => { localStorage.removeItem("autoglue.org") setOrgId("") const rd = rdRef.current if (!rd) return rd.removeAttribute("api-key-value") } return (
{/* Control bar */} AutoGlue API Docs
{/* Theme selector */}
Docs theme
{/* Org ID controls */}
Org ID (X-ORG-ID) setOrgId(e.target.value)} placeholder="org_..." />
Requests from <rapi-doc> will include: Cookie: ag_jwt=… and{" "} X-ORG-ID={orgId} {!orgId && <> (set an Org ID above to send an X-ORG-ID header)}
{/* @ts-expect-error ts-2339 */}
) }