Skip to content

Commit 01dfb9f

Browse files
committed
refactor: replace pendingSrc state with boolean probing flag in RetryableImage component
1 parent 5df43a3 commit 01dfb9f

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

packages/imagekit-editor-dev/src/components/RetryableImage.tsx

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ export default function RetryableImage(props: RetryableImageProps) {
6060
const [attempt, setAttempt] = useState<number>(0)
6161
const [displayedSrc, setDisplayedSrc] = useState<string | undefined>(
6262
undefined,
63-
) // last good
64-
const [pendingSrc, setPendingSrc] = useState<string | undefined>(undefined) // hidden probe via <img>
63+
)
64+
const [probing, setProbing] = useState<boolean>(false)
6565

6666
const currentSrcBase = useMemo(
6767
() => baseUrl(typeof src === "string" ? src : undefined),
@@ -101,7 +101,7 @@ export default function RetryableImage(props: RetryableImageProps) {
101101
setError(null)
102102
}
103103

104-
setPendingSrc(String(src))
104+
setProbing(true)
105105
}, [currentSrcBase, src])
106106

107107
useEffect(() => {
@@ -116,27 +116,29 @@ export default function RetryableImage(props: RetryableImageProps) {
116116
setLoading(false)
117117
setError({ message: "Image failed to load after retries." })
118118
onRetryExhausted?.()
119+
setProbing(false)
119120
return
120121
}
121122
const next = attempt + 1
122123
setAttempt(next)
123124
onRetry?.(next)
124125
retryTimeoutRef.current = window.setTimeout(() => {
125126
if (!mountedRef.current) return
126-
beginLoad(next)
127+
beginLoad()
127128
}, retryDelay)
128129
}, [attempt, maxRetries, onRetry, onRetryExhausted, retryDelay, beginLoad])
129130

130131
const handleProbeLoad = () => {
131-
if (!pendingSrc) return
132-
setDisplayedSrc(pendingSrc)
133-
setPendingSrc(undefined)
132+
if (!src) return
133+
setDisplayedSrc(String(src))
134134
setLoading(false)
135135
setError(null)
136+
setProbing(false)
136137
lastSuccessBaseRef.current = currentSrcBase
137138
}
138139

139140
const handleProbeError = () => {
141+
setProbing(false)
140142
scheduleRetry()
141143
}
142144

@@ -231,10 +233,9 @@ export default function RetryableImage(props: RetryableImageProps) {
231233
</Center>
232234
)}
233235

234-
{/* Hidden pending image that actually drives the new request */}
235-
{pendingSrc && (
236+
{probing && src && (
236237
<img
237-
src={pendingSrc}
238+
src={src}
238239
alt=""
239240
onLoad={handleProbeLoad}
240241
onError={handleProbeError}

0 commit comments

Comments
 (0)