ai-chatbot/lib/canvas/local-upload-state.ts
Your Name 48f222998b
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
fix: stabilize canvas uploads and image load
2026-05-23 17:30:16 +08:00

35 lines
1.1 KiB
TypeScript

import type { CanvasNode } from "@/types/canvas";
export const LOCAL_UPLOAD_PREVIEW_METADATA_KEY = "localUploadPreviewUrl";
export const LOCAL_UPLOAD_PENDING_METADATA_KEY = "localUploadPending";
export function isLocalPreviewUrl(value: unknown) {
return typeof value === "string" && value.startsWith("blob:");
}
export function isCanvasImageUploadPending(node: CanvasNode | null | undefined) {
if (!node || node.type !== "image") return false;
const data = (node.data || {}) as Record<string, any>;
const metadata =
data.metadata &&
typeof data.metadata === "object" &&
!Array.isArray(data.metadata)
? (data.metadata as Record<string, any>)
: {};
return (
metadata[LOCAL_UPLOAD_PENDING_METADATA_KEY] === true ||
isLocalPreviewUrl(data.src) ||
isLocalPreviewUrl(metadata[LOCAL_UPLOAD_PREVIEW_METADATA_KEY])
);
}
export function isCanvasImageReadyForAi(node: CanvasNode | null | undefined) {
if (!node || node.type !== "image" || isCanvasImageUploadPending(node)) {
return false;
}
const src = String(((node.data as Record<string, any>)?.src || "")).trim();
return /^https?:\/\//i.test(src);
}