41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
import type { CanvasState, CanvasWorkspaceType } from "@/types/canvas";
|
|
|
|
export type CanvasSaveRevisionOptions = {
|
|
baseCanvasRevision?: string | null;
|
|
baseCanvasUpdatedAt?: string | null;
|
|
};
|
|
|
|
function normalizeRevisionValue(value: unknown) {
|
|
return String(value || "").trim() || undefined;
|
|
}
|
|
|
|
export function mergeCanvasSaveRevisionOptions(params: {
|
|
options?: CanvasSaveRevisionOptions;
|
|
fallbackOptions?: CanvasSaveRevisionOptions;
|
|
}): CanvasSaveRevisionOptions {
|
|
return {
|
|
baseCanvasRevision:
|
|
normalizeRevisionValue(params.options?.baseCanvasRevision) ??
|
|
normalizeRevisionValue(params.fallbackOptions?.baseCanvasRevision),
|
|
baseCanvasUpdatedAt:
|
|
normalizeRevisionValue(params.options?.baseCanvasUpdatedAt) ??
|
|
normalizeRevisionValue(params.fallbackOptions?.baseCanvasUpdatedAt),
|
|
};
|
|
}
|
|
|
|
export function buildCanvasSaveRequestBody(params: {
|
|
canvasData: CanvasState;
|
|
workspaceType?: CanvasWorkspaceType;
|
|
options?: CanvasSaveRevisionOptions;
|
|
fallbackOptions?: CanvasSaveRevisionOptions;
|
|
}) {
|
|
const revisionOptions = mergeCanvasSaveRevisionOptions({
|
|
options: params.options,
|
|
fallbackOptions: params.fallbackOptions,
|
|
});
|
|
|
|
return params.workspaceType
|
|
? { canvasData: params.canvasData, workspaceType: params.workspaceType, ...revisionOptions }
|
|
: { canvasData: params.canvasData, ...revisionOptions };
|
|
}
|