Files
yingqing/core/frontend/src/quick-create-lock.ts
T

56 lines
1.4 KiB
TypeScript

const QUICK_JOB_KEY = "airshelf:quick-create-job";
const QUICK_CREATE_SUFFIX = / · (?:极速成片|一键成片)$/;
export function hasQuickCreateSuffix(name?: string) {
return QUICK_CREATE_SUFFIX.test(name || "");
}
export function stripQuickCreateSuffix(name: string) {
return name.replace(QUICK_CREATE_SUFFIX, "");
}
export function isQuickCreateBusy(project?: { quick_create_status?: string } | null) {
return project?.quick_create_status === "queued" || project?.quick_create_status === "running";
}
export function lockedQuickCreateProject<T extends { quick_create_status?: string }>(
listed?: T | null,
detailed?: T | null,
): T | null {
const source = detailed || listed || null;
return source && isQuickCreateBusy(source) ? source : null;
}
export function withQuickCreateStatus<T extends { id: string; quick_create_status?: string }>(
items: T[],
projectId: string,
status: string,
): T[] {
return items.map((item) => (item.id === projectId ? { ...item, quick_create_status: status } : item));
}
export function readQuickCreateJobId() {
try {
return localStorage.getItem(QUICK_JOB_KEY) || "";
} catch {
return "";
}
}
export function rememberQuickCreateJob(jobId?: string) {
if (!jobId) return;
try {
localStorage.setItem(QUICK_JOB_KEY, jobId);
} catch {
/* ignore */
}
}
export function forgetQuickCreateJob() {
try {
localStorage.removeItem(QUICK_JOB_KEY);
} catch {
/* ignore */
}
}