forked from react-dnd/react-dnd
-
Notifications
You must be signed in to change notification settings - Fork 0
/
useDrop.ts
34 lines (32 loc) · 1.22 KB
/
useDrop.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import { ConnectDropTarget } from '../../types'
import { DropTargetHookSpec, FactoryOrInstance } from '../types'
import { useRegisteredDropTarget } from './useRegisteredDropTarget'
import { useOptionalFactory } from '../useOptionalFactory'
import { useDropTargetMonitor } from './useDropTargetMonitor'
import { useDropTargetConnector } from './useDropTargetConnector'
import { useCollectedProps } from '../useCollectedProps'
import { useConnectDropTarget } from './connectors'
/**
* useDropTarget Hook
* @param spec The drop target specification (object or function, function preferred)
* @param deps The memoization deps array to use when evaluating spec changes
*/
export function useDrop<
DragObject = unknown,
DropResult = unknown,
CollectedProps = unknown,
>(
specArg: FactoryOrInstance<
DropTargetHookSpec<DragObject, DropResult, CollectedProps>
>,
deps?: unknown[],
): [CollectedProps, ConnectDropTarget] {
const spec = useOptionalFactory(specArg, deps)
const monitor = useDropTargetMonitor<DragObject, DropResult>()
const connector = useDropTargetConnector(spec.options)
useRegisteredDropTarget(spec, monitor, connector)
return [
useCollectedProps(spec.collect, monitor, connector),
useConnectDropTarget(connector),
]
}