index.tsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import React, { useEffect, useState } from 'react';
  2. import { scrollIntoView } from '../../helpers/utility';
  3. import {
  4. Wrapper, PageNum, Img, Loading,
  5. } from './styled';
  6. type Props = {
  7. pageNum: number;
  8. getPdfImage: (page: number) => Promise<string>;
  9. renderingState: string;
  10. };
  11. const index: React.FunctionComponent<Props> = ({
  12. pageNum,
  13. getPdfImage,
  14. renderingState,
  15. }: Props) => {
  16. const [dataUrl, setDataUrl] = useState('');
  17. const getDataUrl = async (): Promise<any> => {
  18. const imageDataUrl = await getPdfImage(pageNum);
  19. setDataUrl(imageDataUrl);
  20. };
  21. const onClick = (): void => {
  22. const ele: HTMLElement | null = document.getElementById(`page_${pageNum}`);
  23. if (ele) {
  24. scrollIntoView(ele);
  25. }
  26. };
  27. useEffect(() => {
  28. if (renderingState === 'RENDERING') {
  29. getDataUrl();
  30. }
  31. }, [renderingState]);
  32. return (
  33. <Wrapper id={`thumbnail_${pageNum}`}>
  34. <PageNum>{pageNum}</PageNum>
  35. {
  36. renderingState === 'RENDERING' && dataUrl ? (
  37. <Img src={dataUrl} onClick={onClick} />
  38. ) : (
  39. <Loading />
  40. )
  41. }
  42. </Wrapper>
  43. );
  44. };
  45. export default index;