Files
mtdb_movie/common/resources/client/ui/remote-favicon.tsx
maher 703f50a09d
Some checks failed
Build / run (push) Has been cancelled
first commit
2025-10-29 11:42:25 +01:00

44 lines
952 B
TypeScript
Executable File

import {isAbsoluteUrl} from '../utils/urls/is-absolute-url';
import memoize from 'nano-memoize';
import clsx from 'clsx';
interface RemoteFaviconProps {
url: string;
className?: string;
size?: string;
alt?: string;
}
export function RemoteFavicon({
url,
className,
size = 'w-16 h-16',
alt,
}: RemoteFaviconProps) {
if (!url) {
return null;
}
const src = getFaviconSrc(url);
return (
<img
className={clsx(size, className)}
src={getFaviconSrc(url)}
alt={alt || `${src} favicon`}
/>
);
}
const getFaviconSrc = memoize((url: string): string => {
if (url.includes('youtube')) {
return 'https://www.youtube.com/s/desktop/ca54e1bd/img/favicon.ico';
}
// relative url to current site
if (!isAbsoluteUrl(url)) {
url = `${window.location.protocol}//${window.location.host}`;
}
const domain = new URL(url).origin;
return 'https://www.google.com/s2/favicons?domain=' + domain;
});