import type { Uppy, UppyEventMap } from '@uppy/core' import type { Meta, Body } from '@uppy/utils/lib/UppyFile' import { useEffect, useState } from 'react' type EventResults< M extends Meta, B extends Body, K extends keyof UppyEventMap, > = Parameters[K]> export default function useUppyEvent< M extends Meta, B extends Body, K extends keyof UppyEventMap, >( uppy: Uppy, event: K, callback?: (...args: EventResults) => void, ): [EventResults | [], () => void] { const [result, setResult] = useState | []>([]) const clear = () => setResult([]) useEffect(() => { const handler = ((...args: EventResults) => { setResult(args) // eslint-disable-next-line node/no-callback-literal callback?.(...args) }) as UppyEventMap[K] uppy.on(event, handler) return function cleanup() { uppy.off(event, handler) } }, [uppy, event, callback]) return [result, clear] }