mirror of
https://github.com/anomalyco/opencode.git
synced 2026-07-10 05:48:28 +00:00
fix(tui): align form visibility with active answers
This commit is contained in:
parent
d6472bfda7
commit
ae8a591426
1 changed files with 31 additions and 12 deletions
|
|
@ -172,16 +172,19 @@ function FieldsPrompt(props: { form: FormInfo & { mode: "form" } }) {
|
|||
let textarea: TextareaRenderable | undefined
|
||||
let review: ScrollBoxRenderable | undefined
|
||||
|
||||
const fields = createMemo(() =>
|
||||
props.form.fields.filter((field) =>
|
||||
(field.when ?? []).every((when) => {
|
||||
const value = store.answers[when.key]
|
||||
const fields = createMemo(() => {
|
||||
const answers: Record<string, FormValue | undefined> = {}
|
||||
return props.form.fields.filter((field) => {
|
||||
const active = (field.when ?? []).every((when) => {
|
||||
const value = answers[when.key]
|
||||
if (value === undefined) return false
|
||||
const hit = Array.isArray(value) ? value.some((item) => item === when.value) : value === when.value
|
||||
return when.op === "eq" ? hit : !hit
|
||||
}),
|
||||
),
|
||||
)
|
||||
})
|
||||
if (active) answers[field.key] = store.answers[field.key]
|
||||
return active
|
||||
})
|
||||
})
|
||||
const single = createMemo(() => {
|
||||
const list = fields()
|
||||
if (list.length !== 1) return false
|
||||
|
|
@ -254,11 +257,20 @@ function FieldsPrompt(props: { form: FormInfo & { mode: "form" } }) {
|
|||
answer(current.key, value)
|
||||
if (customValue !== undefined) setStore("custom", { ...store.custom, [current.key]: customValue })
|
||||
if (single()) {
|
||||
void sdk.api.form.reply({
|
||||
sessionID: props.form.sessionID,
|
||||
formID: props.form.id,
|
||||
answer: { [current.key]: value },
|
||||
})
|
||||
sdk.api.form
|
||||
.reply({
|
||||
sessionID: props.form.sessionID,
|
||||
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
|
||||
}
|
||||
setStore("tab", store.tab + 1)
|
||||
|
|
@ -446,6 +458,13 @@ function FieldsPrompt(props: { form: FormInfo & { mode: "form" } }) {
|
|||
setStore("editing", false)
|
||||
return
|
||||
}
|
||||
if (current.type === "string") {
|
||||
const invalid = validateText(current, text)
|
||||
if (invalid) {
|
||||
setStore("error", invalid)
|
||||
return
|
||||
}
|
||||
}
|
||||
pick(text, text)
|
||||
setStore("editing", false)
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue