Blame view

天文台pc/tianwentai-ui/node_modules/react-dnd/src/hooks/useDrop/useRegisteredDropTarget.ts 1.1 KB
bc518174   王天杨   提交两个项目文件
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
35
36
37
38
  import type { TargetConnector } from '../../internals/index.js'
  import { registerTarget } from '../../internals/index.js'
  import type { DropTargetMonitor } from '../../types/index.js'
  import type { DropTargetHookSpec } from '../types.js'
  import { useDragDropManager } from '../useDragDropManager.js'
  import { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect.js'
  import { useAccept } from './useAccept.js'
  import { useDropTarget } from './useDropTarget.js'
  
  export function useRegisteredDropTarget<O, R, P>(
  	spec: DropTargetHookSpec<O, R, P>,
  	monitor: DropTargetMonitor<O, R>,
  	connector: TargetConnector,
  ): void {
  	const manager = useDragDropManager()
  	const dropTarget = useDropTarget(spec, monitor)
  	const accept = useAccept(spec)
  
  	useIsomorphicLayoutEffect(
  		function registerDropTarget() {
  			const [handlerId, unregister] = registerTarget(
  				accept,
  				dropTarget,
  				manager,
  			)
  			monitor.receiveHandlerId(handlerId)
  			connector.receiveHandlerId(handlerId)
  			return unregister
  		},
  		[
  			manager,
  			monitor,
  			dropTarget,
  			connector,
  			accept.map((a) => a.toString()).join('|'),
  		],
  	)
  }