Skip to content

Commit e10ef2a

Browse files
authored
fix: Toasts can be auto-dismissed when concurrent mode is enabled (#918)
1 parent ea4bba1 commit e10ef2a

File tree

1 file changed

+17
-14
lines changed

1 file changed

+17
-14
lines changed

src/toast/use-toasts.tsx

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -67,19 +67,8 @@ const InternalToast = React.forwardRef<HTMLDivElement, InternalToastProps>(funct
6767
},
6868
ref,
6969
) {
70-
const [timeoutRunning, setTimeoutRunning] = React.useState(Boolean(autoDismissDelay))
7170
const timeoutRef = React.useRef<number | undefined>()
7271

73-
const startTimeout = React.useCallback(function startTimeout() {
74-
setTimeoutRunning(true)
75-
}, [])
76-
77-
const stopTimeout = React.useCallback(function stopTimeout() {
78-
setTimeoutRunning(false)
79-
clearTimeout(timeoutRef.current)
80-
timeoutRef.current = undefined
81-
}, [])
82-
8372
const removeToast = React.useCallback(
8473
function removeToast() {
8574
onRemoveToast(toastId)
@@ -88,13 +77,27 @@ const InternalToast = React.forwardRef<HTMLDivElement, InternalToastProps>(funct
8877
[onDismiss, onRemoveToast, toastId],
8978
)
9079

80+
const startTimeout = React.useCallback(
81+
function startTimeout() {
82+
if (!autoDismissDelay) return
83+
timeoutRef.current = window.setTimeout(removeToast, autoDismissDelay * 1000)
84+
},
85+
[autoDismissDelay, removeToast],
86+
)
87+
88+
const stopTimeout = React.useCallback(function stopTimeout() {
89+
clearTimeout(timeoutRef.current)
90+
timeoutRef.current = undefined
91+
}, [])
92+
9193
React.useEffect(
9294
function setupAutoDismiss() {
93-
if (!timeoutRunning || !autoDismissDelay) return
94-
timeoutRef.current = window.setTimeout(removeToast, autoDismissDelay * 1000)
95+
stopTimeout()
96+
startTimeout()
97+
9598
return stopTimeout
9699
},
97-
[autoDismissDelay, removeToast, stopTimeout, timeoutRunning],
100+
[startTimeout, stopTimeout],
98101
)
99102

100103
/**

0 commit comments

Comments
 (0)