import type { ReactElement, ReactNode, SyntheticEvent } from 'react'; import { CameraIcon } from '../../../shared/ui'; import { useMediaViewer } from '../../messaging'; interface Props { url: string | null; /** Placeholder content when there's no photo (initial letter or an icon). */ fallback: ReactNode; alt: string; /** When provided, shows a camera overlay that lets the user pick a new photo. */ onPick?: (file: File) => void; } // Profile/group hero avatar: click the photo to view it full-size in the // lightbox; an optional camera overlay lets owners change it. Must be rendered // inside a MediaViewerProvider. export const HeroAvatar = ({ url, fallback, alt, onPick }: Props): ReactElement => { const viewer = useMediaViewer(); const onFile = (event: SyntheticEvent): void => { const input = event.currentTarget; const file = input.files?.[0]; input.value = ''; if (file !== undefined) { onPick?.(file); } }; return (
{url !== null ? ( ) : ( {fallback} )} {onPick !== undefined ? ( ) : null}
); };