Skip to content

Error Handling ​

HQ-Cropper provides built-in validation and error handling through the onError callback.

Basic Error Handling ​

typescript
const cropper = HqCropper(
    (base64, blob, state) => {
        // Success handler
    },
    {
        maxFileSize: 5 * 1024 * 1024, // 5MB
    },
    undefined,
    (message) => {
        // Error handler
        alert(message)
    }
)

Validation Errors ​

The cropper validates files before processing:

File Type ​

typescript
const cropper = HqCropper(
    onSubmit,
    {
        allowedTypes: ['image/jpeg', 'image/png'],
    },
    undefined,
    (error) => {
        // "Invalid file type "image/gif". Allowed types: image/jpeg, image/png"
        console.error(error)
    }
)

File Size ​

typescript
const cropper = HqCropper(
    onSubmit,
    {
        maxFileSize: 2 * 1024 * 1024, // 2MB
    },
    undefined,
    (error) => {
        // "File size (3.50MB) exceeds maximum allowed size (2.00MB)"
        console.error(error)
    }
)

Error Types ​

ErrorCause
Invalid file typeFile MIME type not in allowedTypes
File size exceededFile larger than maxFileSize
Can't read file inputNo file selected or file access denied
Can't load result imageFileReader failed to read file
Failed to load imageImage failed to load (corrupt file)
Failed to crop imageCanvas processing error

Default Behavior ​

If no onError callback is provided, errors are logged to console:

typescript
// Without onError - logs to console
const cropper = HqCropper(onSubmit, {
    maxFileSize: 1024 * 1024,
})

// Console output: "HqCropper: File size (2.50MB) exceeds maximum allowed size (1.00MB)"

UI Integration ​

Toast Notifications ​

typescript
import { toast } from 'your-toast-library'

const cropper = HqCropper(
    onSubmit,
    { maxFileSize: 5 * 1024 * 1024 },
    undefined,
    (message) => {
        toast.error(message)
    }
)

React State ​

tsx
const [error, setError] = useState<string | null>(null)

const cropperRef = useRef(
    HqCropper(
        (base64) => setAvatar(base64),
        { maxFileSize: 5 * 1024 * 1024 },
        undefined,
        (message) => setError(message)
    )
)

return (
    <div>
        {error && <div className="error">{error}</div>}
        <button onClick={() => cropperRef.current.open()}>Upload</button>
    </div>
)

Best Practices ​

Inform Users

Always show meaningful error messages. The default messages are user-friendly and include specific details (file size, allowed types).

Don't Ignore Errors

Even if you don't need custom UI, at least log errors for debugging:

typescript
const cropper = HqCropper(onSubmit, config, undefined, console.error)

Released under the MIT License.