CODE · 1.2 KB
src/generation-state.js
Workspace snapshot · 09/04 13:35
export function initialGenerationState(directions = []) {
return Object.fromEntries(directions.map(direction => [direction, { status: "idle", imageUrl: null, jobId: null, error: null }]));
}
export function generationReducer(state, action) {
if (action.type === "reset") return initialGenerationState(action.directions);
if (action.type === "start") return { ...state, ...Object.fromEntries(action.directions.map(direction => [direction, { ...state[direction], status: "loading", error: null }])) };
if (action.type === "results") {
const next = { ...state };
action.results.forEach(result => { next[result.direction] = result.status === "success" ? { status: "success", imageUrl: result.imageUrl, jobId: result.jobId, error: null } : result.status === "loading" ? { status: "loading", imageUrl: null, jobId: result.jobId, error: null } : { status: "error", imageUrl: null, jobId: result.jobId || null, error: result.error }; });
return next;
}
if (action.type === "failure") return { ...state, ...Object.fromEntries(action.directions.map(direction => [direction, { status: "error", imageUrl: null, jobId: null, error: action.error }])) };
return state;
}