Implement local-first canvas sync and fix drag edge stability

This commit is contained in:
Matthias
2026-04-01 09:40:31 +02:00
parent c1d7a49bc3
commit 32bd188d89
19 changed files with 1095 additions and 283 deletions

View File

@@ -0,0 +1,43 @@
"use client";
import { createContext, useContext } from "react";
import type { ReactNode } from "react";
import type { Id } from "@/convex/_generated/dataModel";
type CanvasSyncStatus = {
pendingCount: number;
isSyncing: boolean;
isOffline: boolean;
};
type CanvasSyncContextValue = {
queueNodeDataUpdate: (args: { nodeId: Id<"nodes">; data: unknown }) => Promise<void>;
queueNodeResize: (args: {
nodeId: Id<"nodes">;
width: number;
height: number;
}) => Promise<void>;
status: CanvasSyncStatus;
};
const CanvasSyncContext = createContext<CanvasSyncContextValue | null>(null);
export function CanvasSyncProvider({
value,
children,
}: {
value: CanvasSyncContextValue;
children: ReactNode;
}) {
return (
<CanvasSyncContext.Provider value={value}>{children}</CanvasSyncContext.Provider>
);
}
export function useCanvasSync(): CanvasSyncContextValue {
const context = useContext(CanvasSyncContext);
if (!context) {
throw new Error("useCanvasSync must be used within CanvasSyncProvider");
}
return context;
}