import React, { createContext, memo, useCallback, useEffect, useState, } from "react"; import { Editor, TLStoreWithStatus, Tldraw, setUserPreferences } from "tldraw"; import { components } from "./enabled"; import { twitterCardUtil } from "./custom_nodes/twittercard"; import { textCardUtil } from "./custom_nodes/textcard"; import DropZone from "./tldrawDrop"; import { loadRemoteSnapshot } from "@/lib/loadSnap"; import { createAssetFromUrl } from "@/lib/createAssetUrl"; import { SaveStatus } from "./savesnap"; import createEmbedsFromUrl from "@/lib/createEmbeds"; interface DragContextType { isDraggingOver: boolean; setIsDraggingOver: React.Dispatch>; } export const DragContext = createContext( undefined, ); function TldrawComponent({ id }: { id: string }) { const [isDraggingOver, setIsDraggingOver] = useState(false); return (
setIsDraggingOver(true)}>
); } export const Thinkpad = memo(({ id }: { id: string }) => { const [storeWithStatus, setStoreWithStatus] = useState({ status: "loading", }); useEffect(() => { const fetchStore = async () => { const store = await loadRemoteSnapshot(id); setStoreWithStatus({ store: store, status: "not-synced", }); }; fetchStore(); }, []); const handleMount = useCallback((editor: Editor) => { (window as any).app = editor; (window as any).editor = editor; editor.registerExternalAssetHandler("url", createAssetFromUrl); editor.registerExternalContentHandler("url", ({ url, point, sources }) => { createEmbedsFromUrl({ url, point, sources, editor }); }); }, []); setUserPreferences({ id: "supermemory", colorScheme: "dark" }); return (
); }); export default TldrawComponent;