{"version":3,"file":"useCropImg.mjs","sources":["../../../admin/src/hooks/useCropImg.ts"],"sourcesContent":["import * as React from 'react';\n\nimport Cropper from 'cropperjs';\n\nconst QUALITY = 1;\n\ntype Size = {\n  width?: number;\n  height?: number;\n};\n\ntype Resize = {\n  detail: {\n    height: number;\n    width: number;\n  };\n};\n\nexport const useCropImg = () => {\n  const cropperRef = React.useRef<Cropper>();\n  const [isCropping, setIsCropping] = React.useState(false);\n  const [size, setSize] = React.useState<Size>({ width: undefined, height: undefined });\n\n  React.useEffect(() => {\n    return () => {\n      if (cropperRef.current) {\n        cropperRef.current.destroy();\n      }\n    };\n  }, []);\n\n  const handleResize = ({ detail: { height, width } }: Resize) => {\n    const roundedDataWidth = Math.round(width);\n    const roundedDataHeight = Math.round(height);\n\n    setSize({ width: roundedDataWidth, height: roundedDataHeight });\n  };\n\n  const crop = (image: HTMLImageElement) => {\n    if (!cropperRef.current) {\n      cropperRef.current = new Cropper(image, {\n        modal: true,\n        initialAspectRatio: 16 / 9,\n        movable: true,\n        zoomable: false,\n        cropBoxResizable: true,\n        background: false,\n        checkCrossOrigin: false,\n        crop: handleResize,\n      });\n\n      setIsCropping(true);\n    }\n  };\n\n  const stopCropping = () => {\n    if (cropperRef.current) {\n      cropperRef.current.destroy();\n      cropperRef.current = undefined;\n      setIsCropping(false);\n    }\n  };\n\n  const produceFile = (name: string, mimeType: string, lastModifiedDate: string) =>\n    new Promise((resolve, reject) => {\n      if (!cropperRef.current) {\n        reject(\n          new Error(\n            'The cropper has not been instantiated: make sure to call the crop() function before calling produceFile().'\n          )\n        );\n      } else {\n        const canvas = cropperRef.current.getCroppedCanvas();\n\n        canvas.toBlob(\n          (blob) => {\n            resolve(\n              new File([blob!], name, {\n                type: mimeType,\n                lastModified: new Date(lastModifiedDate).getTime(),\n              })\n            );\n          },\n          mimeType,\n          QUALITY\n        );\n      }\n    });\n\n  return {\n    crop,\n    produceFile,\n    stopCropping,\n    isCropping,\n    isCropperReady: Boolean(cropperRef.current),\n    ...size,\n  };\n};\n"],"names":["QUALITY","useCropImg","cropperRef","React","useRef","isCropping","setIsCropping","useState","size","setSize","width","undefined","height","useEffect","current","destroy","handleResize","detail","roundedDataWidth","Math","round","roundedDataHeight","crop","image","Cropper","modal","initialAspectRatio","movable","zoomable","cropBoxResizable","background","checkCrossOrigin","stopCropping","produceFile","name","mimeType","lastModifiedDate","Promise","resolve","reject","Error","canvas","getCroppedCanvas","toBlob","blob","File","type","lastModified","Date","getTime","isCropperReady","Boolean"],"mappings":"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"}