30 lines
906 B
TypeScript
30 lines
906 B
TypeScript
export const STALE_CANVAS_REVISION_CODE = "STALE_CANVAS_REVISION";
|
|
|
|
export function parseCanvasRevisionDate(value: unknown) {
|
|
const raw = String(value || "").trim();
|
|
if (!raw) return null;
|
|
const parsed = new Date(raw);
|
|
return Number.isNaN(parsed.getTime()) ? null : parsed;
|
|
}
|
|
|
|
export function isStaleCanvasSaveBaseRevision(params: {
|
|
baseCanvasRevision?: unknown;
|
|
baseCanvasUpdatedAt?: unknown;
|
|
currentUpdatedAt: Date;
|
|
}) {
|
|
const baseDate = parseCanvasRevisionDate(
|
|
params.baseCanvasUpdatedAt || params.baseCanvasRevision
|
|
);
|
|
if (!baseDate) return false;
|
|
return baseDate.getTime() < params.currentUpdatedAt.getTime();
|
|
}
|
|
|
|
export function buildStaleCanvasSaveConflictPayload(currentUpdatedAt: Date) {
|
|
return {
|
|
success: false,
|
|
error: "画布已更新,请刷新后再保存",
|
|
code: STALE_CANVAS_REVISION_CODE,
|
|
canvasUpdatedAt: currentUpdatedAt.toISOString(),
|
|
};
|
|
}
|