Skip to content

Commit 17e62a3

Browse files
fix(dnd): added check for null dragFromOutsideItem, updated example (#2651)
Based on the work of @achrafl0 in #2616 closes #2383
1 parent d66bd12 commit 17e62a3

File tree

3 files changed

+23
-8
lines changed

3 files changed

+23
-8
lines changed

src/addons/dragAndDrop/EventContainerWrapper.js

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,18 @@ class EventContainerWrapper extends React.Component {
126126
})
127127
}
128128

129+
handleDragOverFromOutside = (point, bounds) => {
130+
const { slotMetrics } = this.props
131+
132+
const start = slotMetrics.closestSlotFromPoint(
133+
{ y: point.y, x: point.x },
134+
bounds
135+
)
136+
const end = slotMetrics.nextSlot(start)
137+
const event = this.context.draggable.dragFromOutsideItem()
138+
this.update(event, slotMetrics.getRange(start, end, false, true))
139+
}
140+
129141
updateParentScroll = (parent, node) => {
130142
setTimeout(() => {
131143
const draggedEl = qsa(node, '.rbc-addons-dnd-drag-preview')[0]
@@ -200,10 +212,12 @@ class EventContainerWrapper extends React.Component {
200212
this.handleDropFromOutside(point, bounds)
201213
})
202214

203-
selector.on('dragOver', (point) => {
204-
if (!this.context.draggable.dragFromOutsideItem) return
215+
selector.on('dragOverFromOutside', (point) => {
216+
const item = this.context.draggable.dragFromOutsideItem ? this.context.draggable.dragFromOutsideItem() : null
217+
if (!item) return
205218
const bounds = getBoundsForNode(node)
206-
this.handleDropFromOutside(point, bounds)
219+
if (!pointInColumn(bounds, point)) return this.reset()
220+
this.handleDragOverFromOutside(point, bounds)
207221
})
208222

209223
selector.on('selectStart', () => {

src/addons/dragAndDrop/WeekWrapper.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,9 @@ class WeekWrapper extends React.Component {
9191
}
9292

9393
handleDragOverFromOutside = (point, node) => {
94-
if (!this.context.draggable.dragFromOutsideItem) return
95-
this.handleMove(point, node, this.context.draggable.dragFromOutsideItem())
94+
const item = this.context.draggable.dragFromOutsideItem ? this.context.draggable.dragFromOutsideItem() : null
95+
if (!item) return
96+
this.handleMove(point, node, item)
9697
}
9798

9899
handleResize(point, bounds) {

stories/demos/exampleCode/dndOutsideSource.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ export default function DnDOutsideResource({ localizer }) {
3535
//,
3636
const handleDragStart = useCallback((event) => setDraggedEvent(event), [])
3737

38-
const dragFromOutsideItem = useCallback(() => draggedEvent, [draggedEvent])
38+
const dragFromOutsideItem = useCallback(() => draggedEvent === 'undroppable' ? null : draggedEvent, [draggedEvent])
3939

40-
const customOnDragOver = useCallback(
40+
const customOnDragOverFromOutside = useCallback(
4141
(dragEvent) => {
4242
// check for undroppable is specific to this example
4343
// and not part of API. This just demonstrates that
@@ -177,7 +177,7 @@ export default function DnDOutsideResource({ localizer }) {
177177
events={myEvents}
178178
localizer={localizer}
179179
onDropFromOutside={onDropFromOutside}
180-
onDragOver={customOnDragOver}
180+
onDragOverFromOutside={customOnDragOverFromOutside}
181181
onEventDrop={moveEvent}
182182
onEventResize={resizeEvent}
183183
onSelectSlot={newEvent}

0 commit comments

Comments
 (0)