diff --git a/src/components/common/Favicon.tsx b/src/components/common/Favicon.tsx
index a6b5e522..47f7a410 100644
--- a/src/components/common/Favicon.tsx
+++ b/src/components/common/Favicon.tsx
@@ -1,3 +1,4 @@
+import { useEffect, useState } from 'react';
import { useConfig } from '@/components/hooks';
import { FAVICON_URL, GROUPED_DOMAINS } from '@/lib/constants';
@@ -13,10 +14,29 @@ export function Favicon({ domain, ...props }) {
return null;
}
- const url = config?.faviconUrl || FAVICON_URL;
const hostName = domain ? getHostName(domain) : null;
- const domainName = GROUPED_DOMAINS[hostName]?.domain || hostName;
- const src = hostName ? url.replace(/\{\{\s*domain\s*}}/, domainName) : null;
+ const domainName = hostName ? GROUPED_DOMAINS[hostName]?.domain || hostName : null;
+ const primaryUrl = hostName
+ ? config?.faviconUrl
+ ? config.faviconUrl.replace(/\{\{\s*domain\s*}}/, domainName)
+ : `https://${domainName}/favicon.ico`
+ : null;
+ const fallbackUrl = hostName
+ ? FAVICON_URL.replace(/\{\{\s*domain\s*}}/, domainName)
+ : null;
+ const [src, setSrc] = useState(primaryUrl);
- return hostName ?
: null;
+ useEffect(() => {
+ setSrc(primaryUrl);
+ }, [primaryUrl]);
+
+ function handleError() {
+ if (src && fallbackUrl && src !== fallbackUrl) {
+ setSrc(fallbackUrl);
+ }
+ }
+
+ return hostName && src ? (
+
+ ) : null;
}