1- import { useEffect , useRef , useState } from "react"
1+ import { useRef , useState } from "react"
22
33import useFeedIcons from "@/hooks/useFeedIcons"
44import { updateFeedIcon } from "@/store/feedIconsState"
@@ -15,43 +15,47 @@ const FeedIcon = ({ feed, className = "feed-icon" }) => {
1515 const { icon_id : iconId } = feed . icon
1616 const fallbackIconURL = getFallbackIconURL ( feed )
1717
18- const [ iconURL , setIconURL ] = useState ( iconId === 0 ? fallbackIconURL : DEFAULT_ICON_URL )
18+ const [ useFallback , setUseFallback ] = useState ( false )
1919 const [ fallbackFailed , setFallbackFailed ] = useState ( false )
2020
2121 const imgRef = useRef ( null )
2222
2323 const fetchedIcon = useFeedIcons ( iconId , feed )
2424 const fetchedIconURL = fetchedIcon ?. url
2525
26- useEffect ( ( ) => {
27- if ( fetchedIconURL ) {
28- setIconURL ( fetchedIconURL )
29- } else if ( iconId === 0 && ! fallbackFailed ) {
30- setIconURL ( fallbackIconURL )
26+ const iconURL = ( ( ) => {
27+ if ( fallbackFailed ) {
28+ return DEFAULT_ICON_URL
3129 }
32- } , [ fetchedIconURL , iconId , fallbackFailed , fallbackIconURL ] )
30+ if ( fetchedIconURL && ! useFallback ) {
31+ return fetchedIconURL
32+ }
33+ if ( iconId === 0 || useFallback ) {
34+ return fallbackIconURL
35+ }
36+ return DEFAULT_ICON_URL
37+ } ) ( )
3338
3439 const handleImageLoad = ( ) => {
3540 if ( imgRef . current ) {
3641 const { naturalWidth, naturalHeight } = imgRef . current
3742 if ( naturalWidth > 200 && naturalHeight > 200 && fetchedIcon . width === null ) {
3843 updateFeedIcon ( iconId , { width : naturalWidth , height : naturalHeight } )
3944 }
40- if ( ( naturalWidth !== naturalHeight || naturalWidth === 0 ) && ! fallbackFailed ) {
41- setIconURL ( fallbackIconURL )
45+ if ( ( naturalWidth !== naturalHeight || naturalWidth === 0 ) && ! useFallback ) {
46+ setUseFallback ( true )
4247 }
4348 }
4449 }
4550
4651 const handleError = ( ) => {
4752 if ( iconURL === fallbackIconURL && ! fallbackFailed ) {
4853 setFallbackFailed ( true )
49- setIconURL ( DEFAULT_ICON_URL )
5054 return
5155 }
5256
53- if ( ! fallbackFailed ) {
54- setIconURL ( fallbackIconURL )
57+ if ( ! fallbackFailed && ! useFallback ) {
58+ setUseFallback ( true )
5559 }
5660 }
5761
0 commit comments