Blame view

天文台pc/tianwentai-ui/node_modules/react-dnd/src/internals/DropTargetMonitorImpl.ts 2.48 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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
  import { invariant } from '@react-dnd/invariant'
  import type {
  	DragDropManager,
  	DragDropMonitor,
  	Identifier,
  	Listener,
  	Unsubscribe,
  	XYCoord,
  } from 'dnd-core'
  
  import type { DropTargetMonitor } from '../types/index.js'
  
  let isCallingCanDrop = false
  
  export class DropTargetMonitorImpl implements DropTargetMonitor {
  	private internalMonitor: DragDropMonitor
  	private targetId: Identifier | null = null
  
  	public constructor(manager: DragDropManager) {
  		this.internalMonitor = manager.getMonitor()
  	}
  
  	public receiveHandlerId(targetId: Identifier | null): void {
  		this.targetId = targetId
  	}
  
  	public getHandlerId(): Identifier | null {
  		return this.targetId
  	}
  
  	public subscribeToStateChange(
  		listener: Listener,
  		options?: { handlerIds?: Identifier[] },
  	): Unsubscribe {
  		return this.internalMonitor.subscribeToStateChange(listener, options)
  	}
  
  	public canDrop(): boolean {
  		// Cut out early if the target id has not been set. This should prevent errors
  		// where the user has an older version of dnd-core like in
  		// https://github.com/react-dnd/react-dnd/issues/1310
  		if (!this.targetId) {
  			return false
  		}
  		invariant(
  			!isCallingCanDrop,
  			'You may not call monitor.canDrop() inside your canDrop() implementation. ' +
  				'Read more: http://react-dnd.github.io/react-dnd/docs/api/drop-target-monitor',
  		)
  
  		try {
  			isCallingCanDrop = true
  			return this.internalMonitor.canDropOnTarget(this.targetId)
  		} finally {
  			isCallingCanDrop = false
  		}
  	}
  
  	public isOver(options?: { shallow?: boolean }): boolean {
  		if (!this.targetId) {
  			return false
  		}
  		return this.internalMonitor.isOverTarget(this.targetId, options)
  	}
  
  	public getItemType(): Identifier | null {
  		return this.internalMonitor.getItemType()
  	}
  
  	public getItem(): any {
  		return this.internalMonitor.getItem()
  	}
  
  	public getDropResult(): any {
  		return this.internalMonitor.getDropResult()
  	}
  
  	public didDrop(): boolean {
  		return this.internalMonitor.didDrop()
  	}
  
  	public getInitialClientOffset(): XYCoord | null {
  		return this.internalMonitor.getInitialClientOffset()
  	}
  
  	public getInitialSourceClientOffset(): XYCoord | null {
  		return this.internalMonitor.getInitialSourceClientOffset()
  	}
  
  	public getSourceClientOffset(): XYCoord | null {
  		return this.internalMonitor.getSourceClientOffset()
  	}
  
  	public getClientOffset(): XYCoord | null {
  		return this.internalMonitor.getClientOffset()
  	}
  
  	public getDifferenceFromInitialOffset(): XYCoord | null {
  		return this.internalMonitor.getDifferenceFromInitialOffset()
  	}
  }