Skip to content

Commit d9812d1

Browse files
committed
refactor: improve discard handler logic
1 parent 115c480 commit d9812d1

File tree

1 file changed

+12
-28
lines changed

1 file changed

+12
-28
lines changed

frontend/src/container/TraceWaterfall/AddSpanToFunnelModal/AddSpanToFunnelModal.tsx

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,7 @@ import {
2020
useFunnelContext,
2121
} from 'pages/TracesFunnels/FunnelContext';
2222
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';
3124
import { Span } from 'types/api/trace/getTraceV2';
3225
import { FunnelData } from 'types/api/traceFunnels';
3326

@@ -42,14 +35,14 @@ function FunnelDetailsView({
4235
triggerAutoSave,
4336
showNotifications,
4437
onChangesDetected,
45-
setDiscardHandler,
38+
triggerDiscard,
4639
}: {
4740
funnel: FunnelData;
4841
span: Span;
4942
triggerAutoSave: boolean;
5043
showNotifications: boolean;
5144
onChangesDetected: (hasChanges: boolean) => void;
52-
setDiscardHandler: (handler: () => void) => void;
45+
triggerDiscard: boolean;
5346
}): JSX.Element {
5447
const { handleRestoreSteps, steps } = useFunnelContext();
5548

@@ -61,17 +54,12 @@ function FunnelDetailsView({
6154
}
6255
}, [steps, funnel.steps, onChangesDetected]);
6356

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) {
6760
handleRestoreSteps(funnel.steps);
6861
}
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]);
7563

7664
return (
7765
<div className="add-span-to-funnel-modal__details">
@@ -111,7 +99,7 @@ function AddSpanToFunnelModal({
11199
const [isCreateModalOpen, setIsCreateModalOpen] = useState<boolean>(false);
112100
const [triggerSave, setTriggerSave] = useState<boolean>(false);
113101
const [isUnsavedChanges, setIsUnsavedChanges] = useState<boolean>(false);
114-
const discardHandlerRef = useRef<(() => void) | null>(null);
102+
const [triggerDiscard, setTriggerDiscard] = useState<boolean>(false);
115103

116104
const handleSearch = (e: ChangeEvent<HTMLInputElement>): void => {
117105
setSearchQuery(e.target.value);
@@ -159,15 +147,11 @@ function AddSpanToFunnelModal({
159147
};
160148

161149
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);
165153
};
166154

167-
const handleDiscardHandlerReady = useCallback((handler: () => void) => {
168-
discardHandlerRef.current = handler;
169-
}, []);
170-
171155
const renderListView = (): JSX.Element => (
172156
<div className="add-span-to-funnel-modal">
173157
{!!filteredData?.length && (
@@ -232,7 +216,7 @@ function AddSpanToFunnelModal({
232216
triggerAutoSave={triggerSave}
233217
showNotifications
234218
onChangesDetected={setIsUnsavedChanges}
235-
setDiscardHandler={handleDiscardHandlerReady}
219+
triggerDiscard={triggerDiscard}
236220
/>
237221
</FunnelProvider>
238222
)}

0 commit comments

Comments
 (0)