@@ -20,32 +20,48 @@ import { route } from '@/constants/routes'
2020interface DeleteThreadDialogProps {
2121 thread : Thread
2222 onDelete : ( threadId : string ) => void
23- onDropdownClose : ( ) => void
23+ onDropdownClose ? : ( ) => void
2424 variant ?: 'default' | 'project'
25+ open ?: boolean
26+ onOpenChange ?: ( open : boolean ) => void
27+ withoutTrigger ?: boolean
2528}
2629
2730export function DeleteThreadDialog ( {
2831 thread,
2932 onDelete,
3033 onDropdownClose,
3134 variant = 'default' ,
35+ open,
36+ onOpenChange,
37+ withoutTrigger,
3238} : DeleteThreadDialogProps ) {
3339 const { t } = useTranslation ( )
3440 const navigate = useNavigate ( )
35- const [ isOpen , setIsOpen ] = useState ( false )
41+ const [ internalOpen , setInternalOpen ] = useState ( false )
3642 const deleteButtonRef = useRef < HTMLButtonElement > ( null )
3743
44+ const isControlled = open !== undefined
45+ const isOpen = isControlled ? ! ! open : internalOpen
46+ const setOpenSafe = ( next : boolean ) => {
47+ if ( isControlled ) {
48+ onOpenChange ?.( next )
49+ } else {
50+ setInternalOpen ( next )
51+ }
52+ }
53+
3854 const handleOpenChange = ( open : boolean ) => {
39- setIsOpen ( open )
55+ setOpenSafe ( open )
4056 if ( ! open ) {
41- onDropdownClose ( )
57+ onDropdownClose ?. ( )
4258 }
4359 }
4460
4561 const handleDelete = ( ) => {
4662 onDelete ( thread . id )
47- setIsOpen ( false )
48- onDropdownClose ( )
63+ setOpenSafe ( false )
64+ onDropdownClose ?. ( )
4965 toast . success ( t ( 'common:toast.deleteThread.title' ) , {
5066 id : 'delete-thread' ,
5167 description : t ( 'common:toast.deleteThread.description' ) ,
@@ -65,12 +81,14 @@ export function DeleteThreadDialog({
6581
6682 return (
6783 < Dialog open = { isOpen } onOpenChange = { handleOpenChange } >
68- < DialogTrigger asChild >
69- < DropdownMenuItem onSelect = { ( e ) => e . preventDefault ( ) } >
70- < IconTrash />
71- < span > { t ( 'common:delete' ) } </ span >
72- </ DropdownMenuItem >
73- </ DialogTrigger >
84+ { ! withoutTrigger && (
85+ < DialogTrigger asChild >
86+ < DropdownMenuItem onSelect = { ( e ) => e . preventDefault ( ) } >
87+ < IconTrash />
88+ < span > { t ( 'common:delete' ) } </ span >
89+ </ DropdownMenuItem >
90+ </ DialogTrigger >
91+ ) }
7492 < DialogContent
7593 onOpenAutoFocus = { ( e ) => {
7694 e . preventDefault ( )
0 commit comments