fix(tui): align form visibility with active answers

This commit is contained in:
Aiden Cline 2026-07-03 12:54:04 -05:00
commit ae8a591426

View file

@ -172,16 +172,19 @@ function FieldsPrompt(props: { form: FormInfo & { mode: "form" } }) {
let textarea: TextareaRenderable | undefined let textarea: TextareaRenderable | undefined
let review: ScrollBoxRenderable | undefined let review: ScrollBoxRenderable | undefined
const fields = createMemo(() => const fields = createMemo(() => {
props.form.fields.filter((field) => const answers: Record<string, FormValue | undefined> = {}
(field.when ?? []).every((when) => { return props.form.fields.filter((field) => {
const value = store.answers[when.key] const active = (field.when ?? []).every((when) => {
const value = answers[when.key]
if (value === undefined) return false if (value === undefined) return false
const hit = Array.isArray(value) ? value.some((item) => item === when.value) : value === when.value const hit = Array.isArray(value) ? value.some((item) => item === when.value) : value === when.value
return when.op === "eq" ? hit : !hit return when.op === "eq" ? hit : !hit
}), })
), if (active) answers[field.key] = store.answers[field.key]
) return active
})
})
const single = createMemo(() => { const single = createMemo(() => {
const list = fields() const list = fields()
if (list.length !== 1) return false if (list.length !== 1) return false
@ -254,11 +257,20 @@ function FieldsPrompt(props: { form: FormInfo & { mode: "form" } }) {
answer(current.key, value) answer(current.key, value)
if (customValue !== undefined) setStore("custom", { ...store.custom, [current.key]: customValue }) if (customValue !== undefined) setStore("custom", { ...store.custom, [current.key]: customValue })
if (single()) { if (single()) {
void sdk.api.form.reply({ sdk.api.form
sessionID: props.form.sessionID, .reply({
formID: props.form.id, sessionID: props.form.sessionID,
answer: { [current.key]: value }, formID: props.form.id,
}) answer: { [current.key]: value },
})
.catch((error: unknown) => {
setStore(
"error",
typeof error === "object" && error !== null && "message" in error && typeof error.message === "string"
? error.message
: "Invalid answer",
)
})
return return
} }
setStore("tab", store.tab + 1) setStore("tab", store.tab + 1)
@ -446,6 +458,13 @@ function FieldsPrompt(props: { form: FormInfo & { mode: "form" } }) {
setStore("editing", false) setStore("editing", false)
return return
} }
if (current.type === "string") {
const invalid = validateText(current, text)
if (invalid) {
setStore("error", invalid)
return
}
}
pick(text, text) pick(text, text)
setStore("editing", false) setStore("editing", false)
}, },