diff --git a/src/renderer/src/components/NewWorkspaceComposerModal.tsx b/src/renderer/src/components/NewWorkspaceComposerModal.tsx
index 1631d39a355..aa46a10f7bf 100644
--- a/src/renderer/src/components/NewWorkspaceComposerModal.tsx
+++ b/src/renderer/src/components/NewWorkspaceComposerModal.tsx
@@ -1,4 +1,4 @@
-import React, { Suspense, useCallback, useEffect, useMemo, useState } from 'react'
+import React, { Suspense, useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { useAppStore } from '@/store'
import { lazyWithRetry } from '@/lib/lazy-with-retry'
import {
@@ -61,42 +61,29 @@ export default function NewWorkspaceComposerModal(): React.JSX.Element | null {
const modalData = useAppStore((s) => s.modalData as ComposerModalData | undefined)
const closeModal = useAppStore((s) => s.closeModal)
- // Why: Dialog open-state transitions must be driven by the store, not a
- // mirror useState, so palette/open-modal calls feel instantaneous and the
- // modal doesn't linger with stale data after close.
- const handleOpenChange = useCallback(
- (open: boolean) => {
- if (!open) {
- closeModal()
- }
- },
- [closeModal]
- )
-
if (!visible) {
return null
}
- return (
-
- )
+ return
}
function ComposerModalBody({
modalData,
- onClose,
- onOpenChange
+ onClose
}: {
modalData: ComposerModalData
onClose: () => void
- onOpenChange: (open: boolean) => void
}): React.JSX.Element {
+ const submitCancelledRef = useRef(false)
+ const handleDismiss = useCallback(() => {
+ submitCancelledRef.current = true
+ onClose()
+ }, [onClose])
+ const isSubmissionCancelled = useCallback(() => submitCancelledRef.current, [])
+
return (
-