(input: PromptSubmitInput)
| 194 | } |
| 195 | |
| 196 | export function createPromptSubmit(input: PromptSubmitInput) { |
| 197 | const navigate = useNavigate() |
| 198 | const sdk = useSDK() |
| 199 | const sync = useSync() |
| 200 | const serverSync = useServerSync() |
| 201 | const local = useLocal() |
| 202 | const permission = usePermission() |
| 203 | const prompt = input.prompt |
| 204 | const layout = useLayout() |
| 205 | const language = useLanguage() |
| 206 | const params = useParams() |
| 207 | const [search] = useSearchParams<{ draftId?: string }>() |
| 208 | const tabs = useTabs() |
| 209 | const pendingKey = (sessionID: string) => ScopedKey.from(sdk().scope, sessionID) |
| 210 | |
| 211 | const errorMessage = (err: unknown) => { |
| 212 | if (err && typeof err === "object" && "data" in err) { |
| 213 | const data = (err as { data?: { message?: string } }).data |
| 214 | if (data?.message) return data.message |
| 215 | } |
| 216 | if (err instanceof Error) return err.message |
| 217 | return language.t("common.requestFailed") |
| 218 | } |
| 219 | |
| 220 | const abort = async () => { |
| 221 | const sessionID = params.id |
| 222 | if (!sessionID) return Promise.resolve() |
| 223 | |
| 224 | serverSync().session.set("todo", sessionID, []) |
| 225 | |
| 226 | input.onAbort?.() |
| 227 | |
| 228 | const key = pendingKey(sessionID) |
| 229 | const queued = pending.get(key) |
| 230 | if (queued) { |
| 231 | queued.abort.abort() |
| 232 | queued.cleanup() |
| 233 | pending.delete(key) |
| 234 | return Promise.resolve() |
| 235 | } |
| 236 | return sdk() |
| 237 | .client.session.abort({ |
| 238 | sessionID, |
| 239 | }) |
| 240 | .catch(() => {}) |
| 241 | } |
| 242 | |
| 243 | const restoreCommentItems = ( |
| 244 | target: ReturnType<ReturnType<typeof usePrompt>["capture"]>, |
| 245 | items: (ContextItem & { key: string })[], |
| 246 | ) => { |
| 247 | for (const item of items) { |
| 248 | target.context.add({ |
| 249 | type: "file", |
| 250 | path: item.path, |
| 251 | selection: item.selection, |
| 252 | comment: item.comment, |
| 253 | commentID: item.commentID, |
no test coverage detected