Skip to content

Commit 2bc3dbb

Browse files
committed
Try making the list view popover a modal drop zone
1 parent 9d77457 commit 2bc3dbb

3 files changed

Lines changed: 19 additions & 0 deletions

File tree

packages/block-editor/src/components/block-navigation/use-block-navigation-drop-zone.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ export default function useBlockNavigationDropZone( ref ) {
283283
const { position, type: dragEventType } = useDropZone( {
284284
element: ref,
285285
withPosition: true,
286+
__experimentalIsModal: true,
286287
...dropEventHandlers,
287288
} );
288289

packages/components/src/drop-zone/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export function useDropZone( {
2222
onDrop,
2323
isDisabled,
2424
withPosition,
25+
__experimentalIsModal = false,
2526
__unstableIsRelative = false,
2627
} ) {
2728
const { addDropZone, removeDropZone } = useContext( Context );
@@ -40,6 +41,7 @@ export function useDropZone( {
4041
onHTMLDrop,
4142
setState,
4243
withPosition,
44+
__experimentalIsModal,
4345
isRelative: __unstableIsRelative,
4446
};
4547
addDropZone( dropZone );
@@ -70,6 +72,7 @@ function DropZoneComponent( {
7072
onFilesDrop,
7173
onHTMLDrop,
7274
onDrop,
75+
__experimentalIsModal = false,
7376
} ) {
7477
const element = useRef();
7578
const { isDraggingOverDocument, isDraggingOverElement, type } = useDropZone(
@@ -78,6 +81,7 @@ function DropZoneComponent( {
7881
onFilesDrop,
7982
onHTMLDrop,
8083
onDrop,
84+
__experimentalIsModal,
8185
__unstableIsRelative: true,
8286
}
8387
);

packages/components/src/drop-zone/provider.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,12 +149,23 @@ class DropZoneProvider extends Component {
149149
)
150150
);
151151

152+
const hasActiveModalDropZone = some( hoveredDropZones, ( zone ) => {
153+
return (
154+
zone.__experimentalIsModal &&
155+
zone.element.current.contains( event.target )
156+
);
157+
} );
158+
152159
// Find the leaf dropzone not containing another dropzone
153160
const hoveredDropZone = find( hoveredDropZones, ( zone ) => {
154161
const container = zone.isRelative
155162
? zone.element.current.parentElement
156163
: zone.element.current;
157164

165+
if ( hasActiveModalDropZone && ! zone.__experimentalIsModal ) {
166+
return false;
167+
}
168+
158169
return ! some(
159170
hoveredDropZones,
160171
( subZone ) =>
@@ -193,6 +204,9 @@ class DropZoneProvider extends Component {
193204

194205
// Notifying the dropzones
195206
toUpdate.forEach( ( dropZone ) => {
207+
if ( ! dropZone ) {
208+
return;
209+
}
196210
const index = this.dropZones.indexOf( dropZone );
197211
const isDraggingOverDropZone = index === hoveredDropZoneIndex;
198212
dropZone.setState( {

0 commit comments

Comments
 (0)