← GPT-AI-BANNER
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;
}