35 lines
		
	
	
	
		
			730 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
	
		
			730 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { useCallback, useState } from 'react';
 | 
						|
 | 
						|
import classNames from 'classnames';
 | 
						|
 | 
						|
import { Blurhash } from './blurhash';
 | 
						|
 | 
						|
interface Props {
 | 
						|
  src: string;
 | 
						|
  srcSet?: string;
 | 
						|
  blurhash?: string;
 | 
						|
  className?: string;
 | 
						|
}
 | 
						|
 | 
						|
export const ServerHeroImage: React.FC<Props> = ({
 | 
						|
  src,
 | 
						|
  srcSet,
 | 
						|
  blurhash,
 | 
						|
  className,
 | 
						|
}) => {
 | 
						|
  const [loaded, setLoaded] = useState(false);
 | 
						|
 | 
						|
  const handleLoad = useCallback(() => {
 | 
						|
    setLoaded(true);
 | 
						|
  }, [setLoaded]);
 | 
						|
 | 
						|
  return (
 | 
						|
    <div
 | 
						|
      className={classNames('image', { loaded }, className)}
 | 
						|
      role='presentation'
 | 
						|
    >
 | 
						|
      {blurhash && <Blurhash hash={blurhash} className='image__preview' />}
 | 
						|
      <img src={src} srcSet={srcSet} alt='' onLoad={handleLoad} />
 | 
						|
    </div>
 | 
						|
  );
 | 
						|
};
 |