react-grid-layout
Advanced tools
Comparing version 1.4.1 to 1.4.2
@@ -233,6 +233,26 @@ "use strict"; | ||
} = this.props; | ||
let shouldMoveItem = false; | ||
let finalLayout; | ||
let x; | ||
let y; | ||
const [newLayout, l] = (0, _utils.withLayoutItem)(layout, i, l => { | ||
let hasCollisions; | ||
x = l.x; | ||
y = l.y; | ||
if (["sw", "w", "nw", "n", "ne"].indexOf(handle) !== -1) { | ||
if (["sw", "nw", "w"].indexOf(handle) !== -1) { | ||
x = l.x + (l.w - w); | ||
w = l.x !== x && x < 0 ? l.w : w; | ||
x = x < 0 ? 0 : x; | ||
} | ||
if (["ne", "n", "nw"].indexOf(handle) !== -1) { | ||
y = l.y + (l.h - h); | ||
h = l.y !== y && y < 0 ? l.h : h; | ||
y = y < 0 ? 0 : y; | ||
} | ||
shouldMoveItem = true; | ||
} | ||
// Something like quad tree should be used | ||
// to find collisions faster | ||
let hasCollisions; | ||
if (preventCollision && !allowOverlap) { | ||
@@ -242,3 +262,5 @@ const collisions = (0, _utils.getAllCollisions)(layout, { | ||
w, | ||
h | ||
h, | ||
x, | ||
y | ||
}).filter(layoutItem => layoutItem.i !== l.i); | ||
@@ -249,13 +271,12 @@ hasCollisions = collisions.length > 0; | ||
if (hasCollisions) { | ||
// adjust w && h to maximum allowed space | ||
let leastX = Infinity, | ||
leastY = Infinity; | ||
collisions.forEach(layoutItem => { | ||
if (layoutItem.x > l.x) leastX = Math.min(leastX, layoutItem.x); | ||
if (layoutItem.y > l.y) leastY = Math.min(leastY, layoutItem.y); | ||
}); | ||
if (Number.isFinite(leastX)) l.w = leastX - l.x; | ||
if (Number.isFinite(leastY)) l.h = leastY - l.y; | ||
// Reset layoutItem dimensions if there were collisions | ||
y = l.y; | ||
h = l.h; | ||
x = l.x; | ||
w = l.w; | ||
shouldMoveItem = false; | ||
} | ||
} | ||
l.w = w; | ||
l.h = h; | ||
return l; | ||
@@ -266,25 +287,7 @@ }); | ||
if (!l) return; | ||
let finalLayout; | ||
if (["sw", "w", "nw", "n", "ne"].indexOf(handle) !== -1) { | ||
let x = l.x; | ||
let y = l.y; | ||
if (["sw", "nw", "w"].indexOf(handle) !== -1) { | ||
x = l.x + (l.w - w); | ||
w = l.x !== x && x < 0 ? l.w : w; | ||
x = x < 0 ? 0 : x; | ||
} | ||
if (["ne", "n", "nw"].indexOf(handle) !== -1) { | ||
y = l.y + (l.h - h); | ||
h = l.y !== y && y < 0 ? l.h : h; | ||
y = y < 0 ? 0 : y; | ||
} | ||
l.w = w; | ||
l.h = h; | ||
finalLayout = newLayout; | ||
if (shouldMoveItem) { | ||
// Move the element to the new position. | ||
const isUserAction = true; | ||
finalLayout = (0, _utils.moveElement)(newLayout, l, x, y, isUserAction, this.props.preventCollision, (0, _utils.compactType)(this.props), cols, allowOverlap); | ||
} else { | ||
l.w = w; | ||
l.h = h; | ||
finalLayout = newLayout; | ||
} | ||
@@ -291,0 +294,0 @@ |
# Changelog | ||
## 1.4.2 (Sep 22, 2023) | ||
### Bugfixes | ||
- Resizing in every directionnow obeys preventCollision restrictions [#1937](https://github.com/react-grid-layout/react-grid-layout/pull/1937) | ||
## 1.4.1 (Sep 12, 2023) | ||
### Bugfixes | ||
- Fixed bug where height/width could not be resized if `h = 0` or `w = 0` and 0 `containerPadding`. [#1931](https://github.com/react-grid-layout/react-grid-layout/pull/1931) | ||
- Revert `fast-equals` to @4. Fixes incompatibility with `Create-React-App@5`. | ||
## 1.4.0 (Sep 11, 2023) | ||
@@ -4,0 +17,0 @@ |
@@ -408,10 +408,37 @@ // @flow | ||
let shouldMoveItem = false; | ||
let finalLayout; | ||
let x; | ||
let y; | ||
const [newLayout, l] = withLayoutItem(layout, i, l => { | ||
let hasCollisions; | ||
x = l.x; | ||
y = l.y; | ||
if (["sw", "w", "nw", "n", "ne"].indexOf(handle) !== -1) { | ||
if (["sw", "nw", "w"].indexOf(handle) !== -1) { | ||
x = l.x + (l.w - w); | ||
w = l.x !== x && x < 0 ? l.w : w; | ||
x = x < 0 ? 0 : x; | ||
} | ||
if (["ne", "n", "nw"].indexOf(handle) !== -1) { | ||
y = l.y + (l.h - h); | ||
h = l.y !== y && y < 0 ? l.h : h; | ||
y = y < 0 ? 0 : y; | ||
} | ||
shouldMoveItem = true; | ||
} | ||
// Something like quad tree should be used | ||
// to find collisions faster | ||
let hasCollisions; | ||
if (preventCollision && !allowOverlap) { | ||
const collisions = getAllCollisions(layout, { ...l, w, h }).filter( | ||
layoutItem => layoutItem.i !== l.i | ||
); | ||
const collisions = getAllCollisions(layout, { | ||
...l, | ||
w, | ||
h, | ||
x, | ||
y | ||
}).filter(layoutItem => layoutItem.i !== l.i); | ||
hasCollisions = collisions.length > 0; | ||
@@ -421,15 +448,14 @@ | ||
if (hasCollisions) { | ||
// adjust w && h to maximum allowed space | ||
let leastX = Infinity, | ||
leastY = Infinity; | ||
collisions.forEach(layoutItem => { | ||
if (layoutItem.x > l.x) leastX = Math.min(leastX, layoutItem.x); | ||
if (layoutItem.y > l.y) leastY = Math.min(leastY, layoutItem.y); | ||
}); | ||
if (Number.isFinite(leastX)) l.w = leastX - l.x; | ||
if (Number.isFinite(leastY)) l.h = leastY - l.y; | ||
// Reset layoutItem dimensions if there were collisions | ||
y = l.y; | ||
h = l.h; | ||
x = l.x; | ||
w = l.w; | ||
shouldMoveItem = false; | ||
} | ||
} | ||
l.w = w; | ||
l.h = h; | ||
return l; | ||
@@ -441,20 +467,4 @@ }); | ||
let finalLayout; | ||
if (["sw", "w", "nw", "n", "ne"].indexOf(handle) !== -1) { | ||
let x = l.x; | ||
let y = l.y; | ||
if (["sw", "nw", "w"].indexOf(handle) !== -1) { | ||
x = l.x + (l.w - w); | ||
w = l.x !== x && x < 0 ? l.w : w; | ||
x = x < 0 ? 0 : x; | ||
} | ||
if (["ne", "n", "nw"].indexOf(handle) !== -1) { | ||
y = l.y + (l.h - h); | ||
h = l.y !== y && y < 0 ? l.h : h; | ||
y = y < 0 ? 0 : y; | ||
} | ||
l.w = w; | ||
l.h = h; | ||
finalLayout = newLayout; | ||
if (shouldMoveItem) { | ||
// Move the element to the new position. | ||
@@ -473,6 +483,2 @@ const isUserAction = true; | ||
); | ||
} else { | ||
l.w = w; | ||
l.h = h; | ||
finalLayout = newLayout; | ||
} | ||
@@ -479,0 +485,0 @@ |
{ | ||
"name": "react-grid-layout", | ||
"version": "1.4.1", | ||
"version": "1.4.2", | ||
"description": "A draggable and resizable grid layout with responsive breakpoints, for React.", | ||
@@ -125,7 +125,9 @@ "main": "index.js", | ||
"lint-staged": { | ||
"*.{js,jsx,css}": [ | ||
"eslint --ext .js,.jsx --fix", | ||
"yarn fmt" | ||
"*.{js,jsx}": [ | ||
"eslint --ext .js,.jsx --fix" | ||
], | ||
"*": [ | ||
"prettier --ignore-unknown --write" | ||
] | ||
} | ||
} |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
6601
490482