index.tsx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import React from 'react';
  2. import { ViewportType, AnnotationType } from '../../constants/type';
  3. import AnnotationSelector from '../AnnotationSelector';
  4. import Markup from '../Markup';
  5. import {
  6. Popper,
  7. } from './styled';
  8. type Props = AnnotationType & {
  9. isCovered: boolean;
  10. isCollapse: boolean;
  11. mousePosition: Record<string, any>;
  12. onUpdate: (data: any) => void;
  13. onDelete: () => void;
  14. scale: number;
  15. viewport: ViewportType;
  16. };
  17. const Annotation: React.FunctionComponent<Props> = ({
  18. obj_type,
  19. obj_attr,
  20. isCovered,
  21. mousePosition,
  22. isCollapse,
  23. onUpdate,
  24. onDelete,
  25. scale,
  26. viewport,
  27. }: any) => {
  28. const {
  29. page, position, bdcolor, transparency,
  30. } = obj_attr;
  31. const processPosition = (type: string, ele: any): any => {
  32. switch (type) {
  33. case 'Squiggly':
  34. return {
  35. top: `${viewport.height - ele.top * scale}px`,
  36. left: `${ele.left * scale}px`,
  37. width: `${(ele.right - ele.left) * scale}px`,
  38. height: `${(ele.top - ele.bottom) * scale + 5}px`,
  39. };
  40. default:
  41. return {
  42. top: `${viewport.height - ele.top * scale}px`,
  43. left: `${ele.left * scale}px`,
  44. width: `${(ele.right - ele.left) * scale}px`,
  45. height: `${(ele.top - ele.bottom) * scale + 2}px`,
  46. };
  47. }
  48. };
  49. return (
  50. <>
  51. {
  52. position.map((ele: any, index: number) => {
  53. const pos = processPosition(obj_type, ele);
  54. return (
  55. <Markup
  56. key={`block_${page + index}`}
  57. position={pos}
  58. bdcolor={bdcolor}
  59. opacity={transparency}
  60. markupType={obj_type}
  61. isCovered={isCovered}
  62. />
  63. );
  64. })
  65. }
  66. {
  67. !isCollapse ? (
  68. <Popper position={mousePosition}>
  69. <AnnotationSelector
  70. onUpdate={onUpdate}
  71. onDelete={onDelete}
  72. colorProps={bdcolor}
  73. opacityProps={transparency * 100}
  74. />
  75. </Popper>
  76. ) : ''
  77. }
  78. </>
  79. );
  80. };
  81. export default Annotation;