@@ -224,67 +224,43 @@ function EpisodeArtworkImg({
224224 latestSrcRef . current = safeSrc
225225 }
226226
227- const isReplacing = fallbackSrc !== safeSrc
228- const fallbackClassName = clsx (
227+ const isPending = fallbackSrc !== safeSrc
228+ const imgClassName = clsx (
229229 className ,
230230 'transition-opacity' ,
231- isReplacing ? 'opacity-60' : 'opacity-100' ,
231+ isPending ? 'opacity-60' : 'opacity-100' ,
232232 )
233- const loadedClassName = clsx ( className , 'transition-opacity' , 'opacity-100' )
234233
235234 function handleResolved ( resolvedSrc : string ) {
236235 if ( resolvedSrc !== latestSrcRef . current ) return
237236 setFallbackSrc ( resolvedSrc )
238237 }
239238
240- if ( ! isReplacing ) {
241- return < img src = { safeSrc } { ...props } className = { loadedClassName } />
242- }
243-
244239 return (
245- < ErrorBoundary
246- resetKeys = { [ safeSrc ] }
247- fallback = {
248- < img
249- src = { fallbackSrc || safeSrc }
250- { ...props }
251- className = { fallbackClassName }
252- />
253- }
254- >
255- < React . Suspense
256- fallback = {
257- < img
258- src = { fallbackSrc || safeSrc }
259- { ...props }
260- className = { fallbackClassName }
261- />
262- }
263- >
264- < Img
265- src = { safeSrc }
266- { ...props }
267- className = { loadedClassName }
268- onSrcResolved = { handleResolved }
269- />
270- </ React . Suspense >
271- </ ErrorBoundary >
240+ < >
241+ < img src = { fallbackSrc } { ...props } className = { imgClassName } />
242+ { isPending ? (
243+ < ErrorBoundary resetKeys = { [ safeSrc ] } fallback = { null } >
244+ < React . Suspense fallback = { null } >
245+ < PreloadImage src = { safeSrc } onResolved = { handleResolved } />
246+ </ React . Suspense >
247+ </ ErrorBoundary >
248+ ) : null }
249+ </ >
272250 )
273251}
274252
275- function Img ( {
276- src = '' ,
277- onSrcResolved ,
278- ... props
279- } : React . ComponentProps < 'img' > & {
280- onSrcResolved ? : ( resolvedSrc : string ) => void
253+ function PreloadImage ( {
254+ src,
255+ onResolved ,
256+ } : {
257+ src : string
258+ onResolved : ( resolvedSrc : string ) => void
281259} ) {
282- const isServer = typeof document === 'undefined'
283- const loadedSrc = isServer ? src : React . use ( imgSrc ( src ) )
260+ const loadedSrc = React . use ( imgSrc ( src ) )
284261 React . useEffect ( ( ) => {
285- if ( isServer ) return
286- onSrcResolved ?.( loadedSrc )
287- } , [ isServer , loadedSrc , onSrcResolved ] )
288- return < img src = { loadedSrc } { ...props } />
262+ onResolved ( loadedSrc )
263+ } , [ loadedSrc , onResolved ] )
264+ return null
289265}
290266
0 commit comments