MCPcopy Index your code
hub / github.com/anomalyco/opencode / RunQuestionBody

Function RunQuestionBody

packages/opencode/src/cli/cmd/run/footer.question.tsx:47–573  ·  view source on GitHub ↗
(props: {
  request: QuestionRequest
  theme: RunFooterTheme
  onReply: (input: QuestionReply) => void | Promise<void>
  onReject: (input: QuestionReject) => void | Promise<void>
})

Source from the content-addressed store, hash-verified

45import type { QuestionReject, QuestionReply } from "./types"
46
47export function RunQuestionBody(props: {
48 request: QuestionRequest
49 theme: RunFooterTheme
50 onReply: (input: QuestionReply) => void | Promise<void>
51 onReject: (input: QuestionReject) => void | Promise<void>
52}) {
53 const dims = useTerminalDimensions()
54 const [state, setState] = createSignal(createQuestionBodyState(props.request.id))
55 const single = createMemo(() => questionSingle(props.request))
56 const confirm = createMemo(() => questionConfirm(props.request, state()))
57 const info = createMemo(() => questionInfo(props.request, state()))
58 const input = createMemo(() => questionInput(state()))
59 const other = createMemo(() => questionOther(props.request, state()))
60 const picked = createMemo(() => questionPicked(state()))
61 const disabled = createMemo(() => state().submitting)
62 const narrow = createMemo(() => footerWidthPolicy(dims().width).dialog.narrow)
63 const verb = createMemo(() => {
64 if (confirm()) {
65 return "submit"
66 }
67
68 if (info()?.multiple) {
69 return "toggle"
70 }
71
72 if (single()) {
73 return "submit"
74 }
75
76 return "confirm"
77 })
78 let area: TextareaRenderable | undefined
79
80 createEffect(() => {
81 setState((prev) => questionSync(prev, props.request.id))
82 })
83
84 const setTab = (tab: number) => {
85 setState((prev) => questionSetTab(prev, tab))
86 }
87
88 const move = (dir: -1 | 1) => {
89 setState((prev) => questionMove(prev, props.request, dir))
90 }
91
92 const beginReply = async (input: QuestionReply) => {
93 setState((prev) => questionSetSubmitting(prev, true))
94
95 try {
96 await props.onReply(input)
97 } catch {
98 setState((prev) => questionSetSubmitting(prev, false))
99 }
100 }
101
102 const beginReject = async (input: QuestionReject) => {
103 setState((prev) => questionSetSubmitting(prev, true))
104

Callers

nothing calls this directly

Calls 15

createQuestionBodyStateFunction · 0.90
questionSingleFunction · 0.90
questionConfirmFunction · 0.90
questionInfoFunction · 0.90
questionInputFunction · 0.90
questionOtherFunction · 0.90
questionPickedFunction · 0.90
footerWidthPolicyFunction · 0.90
questionSyncFunction · 0.90
questionSetEditingFunction · 0.90
questionTabsFunction · 0.90
questionTotalFunction · 0.90

Tested by

no test coverage detected