Skip to content

Commit b0c017d

Browse files
authored
add error event (#298)
1 parent e78c0d2 commit b0c017d

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed

patches/@tldraw+tldraw++@tldraw+editor+2.0.0-canary.ffda4cfb.patch

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,39 @@ index 185d39d..f19078a 100644
151151
+ DraggingHandle,
152152
};
153153
//# sourceMappingURL=TLSelectTool.mjs.map
154+
diff --git a/node_modules/@tldraw/tldraw/node_modules/@tldraw/editor/dist/esm/lib/components/ErrorBoundary/ErrorFallback.mjs b/node_modules/@tldraw/tldraw/node_modules/@tldraw/editor/dist/esm/lib/components/ErrorBoundary/ErrorFallback.mjs
155+
index 3a679a0..ca10bd7 100644
156+
--- a/node_modules/@tldraw/tldraw/node_modules/@tldraw/editor/dist/esm/lib/components/ErrorBoundary/ErrorFallback.mjs
157+
+++ b/node_modules/@tldraw/tldraw/node_modules/@tldraw/editor/dist/esm/lib/components/ErrorBoundary/ErrorFallback.mjs
158+
@@ -15,6 +15,20 @@ function ErrorFallback({ error, app }) {
159+
const [shouldShowResetConfirmation, setShouldShowResetConfirmation] = useState(false);
160+
const errorMessage = error instanceof Error ? error.message : String(error);
161+
const errorStack = error instanceof Error ? error.stack : null;
162+
+ // Notify Query Builder that an error occurred
163+
+ useEffect(() => {
164+
+ const errorDetails = {
165+
+ message: error instanceof Error ? error.message : String(error),
166+
+ stack: error instanceof Error ? error.stack : null
167+
+ };
168+
+
169+
+ const event = new CustomEvent("tldraw:error", {
170+
+ detail: errorDetails,
171+
+ bubbles: true
172+
+ });
173+
+
174+
+ document.dispatchEvent(event);
175+
+ }, [error]);
176+
const isDarkModeFromApp = useValue(
177+
"isDarkMode",
178+
() => {
179+
@@ -56,6 +70,7 @@ function ErrorFallback({ error, app }) {
180+
return () => clearTimeout(timeout);
181+
}
182+
}, [didCopy]);
183+
+
184+
const copyError = () => {
185+
const textarea = document.createElement("textarea");
186+
textarea.value = errorStack ?? errorMessage;
154187
diff --git a/node_modules/@tldraw/tldraw/node_modules/@tldraw/editor/dist/esm/lib/hooks/useCanvasEvents.mjs b/node_modules/@tldraw/tldraw/node_modules/@tldraw/editor/dist/esm/lib/hooks/useCanvasEvents.mjs
155188
index 043e7c0..f480bc6 100644
156189
--- a/node_modules/@tldraw/tldraw/node_modules/@tldraw/editor/dist/esm/lib/hooks/useCanvasEvents.mjs

src/components/tldraw/Tldraw.tsx

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ import {
6060
DiscourseRelationUtil,
6161
} from "./DiscourseRelationsUtil";
6262
import { isPageUid } from "../../utils/isPageUid";
63+
import apiPost from "roamjs-components/util/apiPost";
6364

6465
declare global {
6566
interface Window {
@@ -787,6 +788,48 @@ const TldrawCanvas = ({ title }: Props) => {
787788
maximized,
788789
setMaximized,
789790
});
791+
792+
// Catch a custom event we used patch-package to add
793+
useEffect(() => {
794+
const handleTldrawError = (
795+
e: CustomEvent<{ message: string; stack: string | null }>
796+
) => {
797+
apiPost({
798+
domain: "https://api.samepage.network",
799+
path: "errors",
800+
data: {
801+
method: "extension-error",
802+
type: "Tldraw Error",
803+
message: e.detail.message,
804+
stack: e.detail.stack,
805+
version: process.env.VERSION,
806+
notebookUuid: JSON.stringify({
807+
owner: "RoamJS",
808+
app: "query-builder",
809+
workspace: window.roamAlphaAPI.graph.name,
810+
}),
811+
data: {
812+
title,
813+
},
814+
},
815+
}).catch(() => {});
816+
817+
console.error("Tldraw Error:", e.detail);
818+
};
819+
820+
document.addEventListener(
821+
"tldraw:error",
822+
handleTldrawError as EventListener
823+
);
824+
825+
return () => {
826+
document.removeEventListener(
827+
"tldraw:error",
828+
handleTldrawError as EventListener
829+
);
830+
};
831+
}, []);
832+
790833
return (
791834
<div
792835
className={`border border-gray-300 rounded-md bg-white h-full w-full z-10 overflow-hidden ${

0 commit comments

Comments
 (0)