import { createContext, useCallback, useContext, useState, type ReactNode, } from "react"; import { useSidebar } from "@/components/ui/sidebar"; import { env } from "@/env"; export interface ArtifactsContextType { artifacts: string[]; setArtifacts: (artifacts: string[]) => void; selectedArtifact: string | null; autoSelect: boolean; select: (artifact: string, autoSelect?: boolean) => void; deselect: () => void; open: boolean; autoOpen: boolean; setOpen: (open: boolean) => void; fullscreen: boolean; setFullscreen: (fullscreen: boolean) => void; } const ArtifactsContext = createContext( undefined, ); interface ArtifactsProviderProps { children: ReactNode; } export function ArtifactsProvider({ children }: ArtifactsProviderProps) { const [artifacts, setArtifacts] = useState([]); const [selectedArtifact, setSelectedArtifact] = useState(null); const [autoSelect, setAutoSelect] = useState(false); const [open, setOpen] = useState(false); // const [open, setOpen] = useState( // env.NEXT_PUBLIC_STATIC_WEBSITE_ONLY === "true", // ); const [autoOpen, setAutoOpen] = useState(false); const [fullscreen, setFullscreen] = useState(false); const { setOpen: setSidebarOpen } = useSidebar(); const select = useCallback( (artifact: string, autoSelect = false) => { setSelectedArtifact(artifact); if (env.NEXT_PUBLIC_STATIC_WEBSITE_ONLY !== "true") { setSidebarOpen(false); } if (!autoSelect) { setAutoSelect(false); } }, [setSidebarOpen, setSelectedArtifact, setAutoSelect], ); const deselect = useCallback(() => { setSelectedArtifact(null); setAutoSelect(true); setOpen(false); }, []); const value: ArtifactsContextType = { artifacts, setArtifacts, open, autoOpen, autoSelect, setOpen: (isOpen: boolean) => { if (!isOpen && autoOpen) { setAutoOpen(false); setAutoSelect(false); } setOpen(isOpen); }, selectedArtifact, select, deselect, fullscreen, setFullscreen, }; return ( {children} ); } export function useArtifacts() { const context = useContext(ArtifactsContext); if (context === undefined) { throw new Error("useArtifacts must be used within an ArtifactsProvider"); } return context; }