import React, { useEffect, useState } from "react"; import Workspace from "@/models/workspace"; import LoadingChat from "./LoadingChat"; import ChatContainer from "./ChatContainer"; import paths from "@/utils/paths"; import ModalWrapper from "../ModalWrapper"; export default function WorkspaceChat({ loading, workspace }) { const [history, setHistory] = useState([]); const [loadingHistory, setLoadingHistory] = useState(true); useEffect(() => { async function getHistory() { if (loading) return; if (!workspace?.slug) { setLoadingHistory(false); return false; } const chatHistory = await Workspace.chatHistory(workspace.slug); setHistory(chatHistory); setLoadingHistory(false); } getHistory(); }, [workspace, loading]); if (loadingHistory) return ; if (!loading && !loadingHistory && !workspace) { return ( <> {loading === false && !workspace && (

Workspace not found!

It looks like a workspace by this name is not available.

Go back to homepage
)} ); } setEventDelegatorForCodeSnippets(); return ; } // Enables us to safely markdown and sanitize all responses without risk of injection // but still be able to attach a handler to copy code snippets on all elements // that are code snippets. function copyCodeSnippet(uuid) { const target = document.querySelector(`[data-code="${uuid}"]`); if (!target) return false; const markdown = target.parentElement?.parentElement?.querySelector( "pre:first-of-type" )?.innerText; if (!markdown) return false; window.navigator.clipboard.writeText(markdown); target.classList.add("text-green-500"); const originalText = target.innerHTML; target.innerText = "Copied!"; target.setAttribute("disabled", true); setTimeout(() => { target.classList.remove("text-green-500"); target.innerHTML = originalText; target.removeAttribute("disabled"); }, 2500); } // Listens and hunts for all data-code-snippet clicks. function setEventDelegatorForCodeSnippets() { document?.addEventListener("click", function (e) { const target = e.target.closest("[data-code-snippet]"); const uuidCode = target?.dataset?.code; if (!uuidCode) return false; copyCodeSnippet(uuidCode); }); }