{"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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"}