@@ -20,14 +20,7 @@ import {
20
20
useFunnelContext ,
21
21
} from 'pages/TracesFunnels/FunnelContext' ;
22
22
import { filterFunnelsByQuery } from 'pages/TracesFunnels/utils' ;
23
- import {
24
- ChangeEvent ,
25
- useCallback ,
26
- useEffect ,
27
- useMemo ,
28
- useRef ,
29
- useState ,
30
- } from 'react' ;
23
+ import { ChangeEvent , useEffect , useMemo , useState } from 'react' ;
31
24
import { Span } from 'types/api/trace/getTraceV2' ;
32
25
import { FunnelData } from 'types/api/traceFunnels' ;
33
26
@@ -42,14 +35,14 @@ function FunnelDetailsView({
42
35
triggerAutoSave,
43
36
showNotifications,
44
37
onChangesDetected,
45
- setDiscardHandler ,
38
+ triggerDiscard ,
46
39
} : {
47
40
funnel : FunnelData ;
48
41
span : Span ;
49
42
triggerAutoSave : boolean ;
50
43
showNotifications : boolean ;
51
44
onChangesDetected : ( hasChanges : boolean ) => void ;
52
- setDiscardHandler : ( handler : ( ) => void ) => void ;
45
+ triggerDiscard : boolean ;
53
46
} ) : JSX . Element {
54
47
const { handleRestoreSteps, steps } = useFunnelContext ( ) ;
55
48
@@ -61,17 +54,12 @@ function FunnelDetailsView({
61
54
}
62
55
} , [ steps , funnel . steps , onChangesDetected ] ) ;
63
56
64
- const handleDiscardWithRestore = useCallback ( ( ) : void => {
65
- // Restore to the original funnel steps
66
- if ( funnel . steps ) {
57
+ // Handle discard when triggered from parent
58
+ useEffect ( ( ) => {
59
+ if ( triggerDiscard && funnel . steps ) {
67
60
handleRestoreSteps ( funnel . steps ) ;
68
61
}
69
- } , [ funnel . steps , handleRestoreSteps ] ) ;
70
-
71
- // Pass the discard handler to the parent component
72
- useEffect ( ( ) => {
73
- setDiscardHandler ( handleDiscardWithRestore ) ;
74
- } , [ setDiscardHandler , handleDiscardWithRestore ] ) ;
62
+ } , [ triggerDiscard , funnel . steps , handleRestoreSteps ] ) ;
75
63
76
64
return (
77
65
< div className = "add-span-to-funnel-modal__details" >
@@ -111,7 +99,7 @@ function AddSpanToFunnelModal({
111
99
const [ isCreateModalOpen , setIsCreateModalOpen ] = useState < boolean > ( false ) ;
112
100
const [ triggerSave , setTriggerSave ] = useState < boolean > ( false ) ;
113
101
const [ isUnsavedChanges , setIsUnsavedChanges ] = useState < boolean > ( false ) ;
114
- const discardHandlerRef = useRef < ( ( ) => void ) | null > ( null ) ;
102
+ const [ triggerDiscard , setTriggerDiscard ] = useState < boolean > ( false ) ;
115
103
116
104
const handleSearch = ( e : ChangeEvent < HTMLInputElement > ) : void => {
117
105
setSearchQuery ( e . target . value ) ;
@@ -159,15 +147,11 @@ function AddSpanToFunnelModal({
159
147
} ;
160
148
161
149
const handleDiscard = ( ) : void => {
162
- if ( discardHandlerRef . current ) {
163
- discardHandlerRef . current ( ) ;
164
- }
150
+ setTriggerDiscard ( true ) ;
151
+ // Reset trigger after a brief moment
152
+ setTimeout ( ( ) => setTriggerDiscard ( false ) , 100 ) ;
165
153
} ;
166
154
167
- const handleDiscardHandlerReady = useCallback ( ( handler : ( ) => void ) => {
168
- discardHandlerRef . current = handler ;
169
- } , [ ] ) ;
170
-
171
155
const renderListView = ( ) : JSX . Element => (
172
156
< div className = "add-span-to-funnel-modal" >
173
157
{ ! ! filteredData ?. length && (
@@ -232,7 +216,7 @@ function AddSpanToFunnelModal({
232
216
triggerAutoSave = { triggerSave }
233
217
showNotifications
234
218
onChangesDetected = { setIsUnsavedChanges }
235
- setDiscardHandler = { handleDiscardHandlerReady }
219
+ triggerDiscard = { triggerDiscard }
236
220
/>
237
221
</ FunnelProvider >
238
222
) }
0 commit comments