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

@@ -151,6 +151,7 @@ export function enqueueCanvasOp(
enqueuedAt: op.enqueuedAt ?? Date.now(),
};
const payload = readOpsPayload(canvasId);
payload.ops = payload.ops.filter((candidate) => candidate.id !== entry.id);
payload.ops.push(entry);
payload.updatedAt = Date.now();
writePayload(opsKey(canvasId), payload);
@@ -166,6 +167,17 @@ export function resolveCanvasOp(canvasId: string, opId: string): void {
writePayload(opsKey(canvasId), payload);
}
export function resolveCanvasOps(canvasId: string, opIds: string[]): void {
if (opIds.length === 0) return;
const idSet = new Set(opIds);
const payload = readOpsPayload(canvasId);
const nextOps = payload.ops.filter((op) => !idSet.has(op.id));
if (nextOps.length === payload.ops.length) return;
payload.ops = nextOps;
payload.updatedAt = Date.now();
writePayload(opsKey(canvasId), payload);
}
export function readCanvasOps(canvasId: string): CanvasPendingOp[] {
return readOpsPayload(canvasId).ops;
}