99 lines
2.6 KiB
TypeScript
99 lines
2.6 KiB
TypeScript
export type CanvasPsdTemplatePendingImage = {
|
|
id: string;
|
|
imageUrl: string;
|
|
title?: string | null;
|
|
};
|
|
|
|
export type CanvasPsdTemplateLaunchPayload = {
|
|
brandName: string;
|
|
pendingImages: CanvasPsdTemplatePendingImage[];
|
|
activeImageId?: string | null;
|
|
returnTo?: string | null;
|
|
templateMode?: "main" | "sku" | null;
|
|
createdAt: number;
|
|
};
|
|
|
|
const STORAGE_PREFIX = "canvas-psd-template-launch:";
|
|
|
|
export function getCanvasPsdTemplateLaunchStorageKey(token: string) {
|
|
return `${STORAGE_PREFIX}${token}`;
|
|
}
|
|
|
|
export function createCanvasPsdTemplateLaunchToken() {
|
|
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
|
|
return crypto.randomUUID();
|
|
}
|
|
|
|
return `launch-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
|
|
}
|
|
|
|
export function saveCanvasPsdTemplateLaunchPayload(
|
|
token: string,
|
|
payload: CanvasPsdTemplateLaunchPayload
|
|
) {
|
|
if (typeof window === "undefined") {
|
|
return;
|
|
}
|
|
|
|
window.sessionStorage.setItem(
|
|
getCanvasPsdTemplateLaunchStorageKey(token),
|
|
JSON.stringify(payload)
|
|
);
|
|
}
|
|
|
|
export function readCanvasPsdTemplateLaunchPayload(
|
|
token: string
|
|
): CanvasPsdTemplateLaunchPayload | null {
|
|
if (typeof window === "undefined") {
|
|
return null;
|
|
}
|
|
|
|
const raw = window.sessionStorage.getItem(
|
|
getCanvasPsdTemplateLaunchStorageKey(token)
|
|
);
|
|
if (!raw) {
|
|
return null;
|
|
}
|
|
|
|
try {
|
|
const parsed = JSON.parse(raw) as Partial<CanvasPsdTemplateLaunchPayload> | null;
|
|
const pendingImages = Array.isArray(parsed?.pendingImages)
|
|
? parsed.pendingImages
|
|
.map((item) => ({
|
|
id: String(item?.id || "").trim(),
|
|
imageUrl: String(item?.imageUrl || "").trim(),
|
|
title: String(item?.title || "").trim() || null,
|
|
}))
|
|
.filter((item) => item.id && item.imageUrl)
|
|
: [];
|
|
|
|
const brandName = String(parsed?.brandName || "").trim();
|
|
if (!brandName || pendingImages.length === 0) {
|
|
return null;
|
|
}
|
|
|
|
return {
|
|
brandName,
|
|
pendingImages,
|
|
activeImageId: String(parsed?.activeImageId || "").trim() || pendingImages[0]?.id || null,
|
|
returnTo: String(parsed?.returnTo || "").trim() || null,
|
|
templateMode:
|
|
parsed?.templateMode === "sku" ? "sku" : parsed?.templateMode === "main" ? "main" : null,
|
|
createdAt:
|
|
typeof parsed?.createdAt === "number" && Number.isFinite(parsed.createdAt)
|
|
? parsed.createdAt
|
|
: Date.now(),
|
|
};
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
export function removeCanvasPsdTemplateLaunchPayload(token: string) {
|
|
if (typeof window === "undefined") {
|
|
return;
|
|
}
|
|
|
|
window.sessionStorage.removeItem(getCanvasPsdTemplateLaunchStorageKey(token));
|
|
}
|