Implement local-first canvas sync and fix drag edge stability
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user