~cytrogen/masto-fe

a65d2d10458fcb6c1c36fa6dd52b8f64d12ce50d — たいち ひ 2 years ago 490ccbf
Rewrite Image component as function component  (#24893)

2 files changed, 27 insertions(+), 33 deletions(-)

D app/javascript/mastodon/components/image.jsx
A app/javascript/mastodon/components/image.tsx
D app/javascript/mastodon/components/image.jsx => app/javascript/mastodon/components/image.jsx +0 -33
@@ 1,33 0,0 @@
import React from 'react';
import PropTypes from 'prop-types';
import Blurhash from './blurhash';
import classNames from 'classnames';

export default class Image extends React.PureComponent {

  static propTypes = {
    src: PropTypes.string,
    srcSet: PropTypes.string,
    blurhash: PropTypes.string,
    className: PropTypes.string,
  };

  state = {
    loaded: false,
  };

  handleLoad = () => this.setState({ loaded: true });

  render () {
    const { src, srcSet, blurhash, className } = this.props;
    const { loaded } = this.state;

    return (
      <div className={classNames('image', { loaded }, className)} role='presentation'>
        {blurhash && <Blurhash hash={blurhash} className='image__preview' />}
        <img src={src} srcSet={srcSet} alt='' onLoad={this.handleLoad} />
      </div>
    );
  }

}

A app/javascript/mastodon/components/image.tsx => app/javascript/mastodon/components/image.tsx +27 -0
@@ 0,0 1,27 @@
import React, { useCallback, useState } from 'react';
import Blurhash from './blurhash';
import classNames from 'classnames';

type Props = {
  src: string;
  srcSet?: string;
  blurhash?: string;
  className?: string;
}

export const Image: 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>
  );
};

export default Image;