feat: implement generation preconditions check and integrate with generation commands

This commit is contained in:
syntaxbullet
2026-07-10 23:25:24 +02:00
parent 678a0a40a7
commit 06f2898080
4 changed files with 160 additions and 3 deletions

View File

@@ -8,6 +8,7 @@ import { runGenerate, runGenerateFromCandidate } from "@operations/generation/ru
import { runGenerationJob } from "@operations/generation/generationJob";
import { currentGenerationJob, GenerationJobStatus } from "../GenerationJobStatus";
import { createRefinementMask } from "@operations/masks/rasterActions";
import { checkGenerationPreconditions } from "@operations/generation/preconditions";
export type GenerateActionControlsProps = {
document: ImageDocument;
@@ -22,7 +23,9 @@ export function GenerateActionControls({ document, selection, viewport, settings
const job = currentGenerationJob(generation);
const busy = job?.status === "running";
const candidate = selectedCandidate(generation);
const canGenerate = Boolean(settings.prompt.trim()) && !busy;
const precondition = checkGenerationPreconditions(document, selection, settings);
const canGenerate = precondition.ready && !busy;
const preconditionMessage = precondition.ready ? undefined : precondition.message;
return (
<div className="flex max-w-[calc(100vw-2rem)] flex-wrap items-center justify-center gap-2 px-2">
@@ -30,13 +33,14 @@ export function GenerateActionControls({ document, selection, viewport, settings
type="button"
disabled={!canGenerate}
className="h-12 rounded-full bg-white px-7 text-base font-semibold !text-black transition hover:bg-white/90 focus:outline-none focus-visible:ring-2 focus-visible:ring-white/40 disabled:pointer-events-none disabled:opacity-35"
title={job?.status === "failed" ? job.error : "Generate with ComfyUI"}
title={job?.status === "failed" ? job.error : preconditionMessage ?? "Generate with ComfyUI"}
onClick={() => {
void runGenerationJob({ kind: "generate", label: "Generating", dispatch, task: () => runGenerate({ document, selection, viewport, settings, dispatch }) });
}}
>
{busy && job?.kind === "generate" ? "Generating..." : "Generate"}
</button>
{preconditionMessage ? <span className="max-w-72 text-xs text-white/55" role="status">{preconditionMessage}</span> : null}
<GenerationJobStatus generation={generation} />
{candidate ? (
<>