Skip to content

Commit 1dbd3aa

Browse files
authored
Revert "Repositioning the popover and arrow position when the trigger is at the window edge (#2842)" (#3445)
This reverts commit b88d367.
1 parent 30e5207 commit 1dbd3aa

File tree

7 files changed

+28
-405
lines changed

7 files changed

+28
-405
lines changed

packages/@react-aria/overlays/src/calculatePosition.ts

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -313,27 +313,6 @@ export function calculatePositionInternal(
313313
}
314314
}
315315

316-
let boundaryLimits = {
317-
top: boundaryDimensions.top + boundaryDimensions.scroll.top,
318-
bottom: boundaryDimensions.top + boundaryDimensions.scroll.top + boundaryDimensions.height,
319-
left: boundaryDimensions.left + boundaryDimensions.scroll.left,
320-
right: boundaryDimensions.left + boundaryDimensions.scroll.left + boundaryDimensions.width
321-
};
322-
323-
// for popover triggers close to the edge decrease the padding
324-
if (placementInfo.placement === 'left' || placementInfo.placement === 'right') {
325-
let centerOfButtonVertical = childOffset.top + childOffset.height / 2;
326-
// Really it should be center of button center + padding + half of arrow width > boundary but we don't have access to arrow dimensions
327-
if (centerOfButtonVertical + padding * 2 > boundaryLimits.bottom || centerOfButtonVertical - padding * 2 < boundaryLimits.top) {
328-
padding = 6; // setting the padding to 6px as defined by Spectrum for this case
329-
}
330-
} else if (placementInfo.placement === 'top' || placementInfo.placement === 'bottom') {
331-
let centerOfButtonHorizontal = childOffset.left + childOffset.width / 2;
332-
if (centerOfButtonHorizontal + padding * 2 > boundaryLimits.right || centerOfButtonHorizontal - padding * 2 < boundaryLimits.left) {
333-
padding = 6; // setting the padding to 6px as defined by Spectrum for this case
334-
}
335-
}
336-
337316
let delta = getDelta(crossAxis, position[crossAxis], overlaySize[crossSize], boundaryDimensions, padding);
338317
position[crossAxis] += delta;
339318

packages/@react-aria/overlays/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* OF ANY KIND, either express or implied. See the License for the specific language
1010
* governing permissions and limitations under the License.
1111
*/
12-
export {DEFAULT_MODAL_PADDING, useOverlayPosition} from './useOverlayPosition';
12+
export {useOverlayPosition} from './useOverlayPosition';
1313
export {useOverlay} from './useOverlay';
1414
export {useOverlayTrigger} from './useOverlayTrigger';
1515
export {usePreventScroll} from './usePreventScroll';

packages/@react-aria/overlays/src/useOverlayPosition.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,6 @@ export interface PositionAria {
6565
// @ts-ignore
6666
let visualViewport = typeof window !== 'undefined' && window.visualViewport;
6767

68-
export const DEFAULT_MODAL_PADDING = 12;
69-
7068
/**
7169
* Handles positioning overlays like popovers and menus relative to a trigger
7270
* element, and updating the position when the window resizes.
@@ -78,7 +76,7 @@ export function useOverlayPosition(props: AriaPositionProps): PositionAria {
7876
overlayRef,
7977
scrollRef = overlayRef,
8078
placement = 'bottom' as Placement,
81-
containerPadding = DEFAULT_MODAL_PADDING,
79+
containerPadding = 12,
8280
shouldFlip = true,
8381
boundaryElement = typeof document !== 'undefined' ? document.body : null,
8482
offset = 0,

packages/@react-aria/overlays/test/calculatePosition.test.js

Lines changed: 24 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -192,96 +192,96 @@ describe('calculatePosition', function () {
192192
{
193193
placement: 'left',
194194
noOffset: [50, 200, undefined, 100, 350],
195-
offsetBefore: [-200, 6, undefined, 44, 588],
196-
offsetAfter: [300, 394, undefined, 156, 200],
195+
offsetBefore: [-200, 50, undefined, 0, 500],
196+
offsetAfter: [300, 350, undefined, 200, 200],
197197
crossAxisOffset: [50, 210, undefined, 90, 340],
198198
mainAxisOffset: [40, 200, undefined, 100, 350]
199199
},
200200
{
201201
placement: 'left top',
202202
noOffset: [50, 250, undefined, 50, 300],
203-
offsetBefore: [-200, 6, undefined, 44, 588],
204-
offsetAfter: [300, 394, undefined, 156, 200],
203+
offsetBefore: [-200, 50, undefined, 0, 500],
204+
offsetAfter: [300, 350, undefined, 200, 200],
205205
crossAxisOffset: [50, 260, undefined, 40, 290],
206206
mainAxisOffset: [40, 250, undefined, 50, 300]
207207
},
208208
{
209209
placement: 'left bottom',
210210
noOffset: [50, 150, undefined, 150, 400],
211-
offsetBefore: [-200, 6, undefined, 44, 588],
212-
offsetAfter: [300, 394, undefined, 156, 200],
211+
offsetBefore: [-200, 50, undefined, 0, 500],
212+
offsetAfter: [300, 350, undefined, 200, 200],
213213
crossAxisOffset: [50, 160, undefined, 140, 390],
214214
mainAxisOffset: [40, 150, undefined, 150, 400]
215215
},
216216
{
217217
placement: 'top',
218218
noOffset: [200, 50, 100, undefined, 200],
219-
offsetBefore: [6, -200, 44, undefined, 0],
220-
offsetAfter: [394, 300, 156, undefined, 494],
219+
offsetBefore: [50, -200, 0, undefined, 0],
220+
offsetAfter: [350, 300, 200, undefined, 450],
221221
mainAxisOffset: [200, 40, 100, undefined, 200],
222222
crossAxisOffset: [210, 50, 90, undefined, 200]
223223
},
224224
{
225225
placement: 'top left',
226226
noOffset: [250, 50, 50, undefined, 200],
227-
offsetBefore: [6, -200, 44, undefined, 0],
228-
offsetAfter: [394, 300, 156, undefined, 494],
227+
offsetBefore: [50, -200, 0, undefined, 0],
228+
offsetAfter: [350, 300, 200, undefined, 450],
229229
mainAxisOffset: [250, 40, 50, undefined, 200],
230230
crossAxisOffset: [260, 50, 40, undefined, 200]
231231
},
232232
{
233233
placement: 'top right',
234234
noOffset: [150, 50, 150, undefined, 200],
235-
offsetBefore: [6, -200, 44, undefined, 0],
236-
offsetAfter: [394, 300, 156, undefined, 494],
235+
offsetBefore: [50, -200, 0, undefined, 0],
236+
offsetAfter: [350, 300, 200, undefined, 450],
237237
mainAxisOffset: [150, 40, 150, undefined, 200],
238238
crossAxisOffset: [160, 50, 140, undefined, 200]
239239
},
240240
{
241241
placement: 'bottom',
242242
noOffset: [200, 350, 100, undefined, 200],
243-
offsetBefore: [6, 100, 44, undefined, 494],
244-
offsetAfter: [394, 600, 156, undefined, 0],
243+
offsetBefore: [50, 100, 0, undefined, 450],
244+
offsetAfter: [350, 600, 200, undefined, 0],
245245
mainAxisOffset: [200, 360, 100, undefined, 190],
246246
crossAxisOffset: [210, 350, 90, undefined, 200]
247247
},
248248
{
249249
placement: 'bottom left',
250250
noOffset: [250, 350, 50, undefined, 200],
251-
offsetBefore: [6, 100, 44, undefined, 494],
252-
offsetAfter: [394, 600, 156, undefined, 0],
251+
offsetBefore: [50, 100, 0, undefined, 450],
252+
offsetAfter: [350, 600, 200, undefined, 0],
253253
mainAxisOffset: [250, 360, 50, undefined, 190],
254254
crossAxisOffset: [260, 350, 40, undefined, 200]
255255
},
256256
{
257257
placement: 'bottom right',
258258
noOffset: [150, 350, 150, undefined, 200],
259-
offsetBefore: [6, 100, 44, undefined, 494],
260-
offsetAfter: [394, 600, 156, undefined, 0],
259+
offsetBefore: [50, 100, 0, undefined, 450],
260+
offsetAfter: [350, 600, 200, undefined, 0],
261261
mainAxisOffset: [150, 360, 150, undefined, 190],
262262
crossAxisOffset: [160, 350, 140, undefined, 200]
263263
},
264264
{
265265
placement: 'right',
266266
noOffset: [350, 200, undefined, 100, 350],
267-
offsetBefore: [100, 6, undefined, 44, 588],
268-
offsetAfter: [600, 394, undefined, 156, 200],
267+
offsetBefore: [100, 50, undefined, 0, 500],
268+
offsetAfter: [600, 350, undefined, 200, 200],
269269
crossAxisOffset: [350, 210, undefined, 90, 340],
270270
mainAxisOffset: [360, 200, undefined, 100, 350]
271271
},
272272
{
273273
placement: 'right top',
274274
noOffset: [350, 250, undefined, 50, 300],
275-
offsetBefore: [100, 6, undefined, 44, 588],
276-
offsetAfter: [600, 394, undefined, 156, 200],
275+
offsetBefore: [100, 50, undefined, 0, 500],
276+
offsetAfter: [600, 350, undefined, 200, 200],
277277
crossAxisOffset: [350, 260, undefined, 40, 290],
278278
mainAxisOffset: [360, 250, undefined, 50, 300]
279279
},
280280
{
281281
placement: 'right bottom',
282282
noOffset: [350, 150, undefined, 150, 400],
283-
offsetBefore: [100, 6, undefined, 44, 588],
284-
offsetAfter: [600, 394, undefined, 156, 200],
283+
offsetBefore: [100, 50, undefined, 0, 500],
284+
offsetAfter: [600, 350, undefined, 200, 200],
285285
crossAxisOffset: [350, 160, undefined, 140, 390],
286286
mainAxisOffset: [360, 150, undefined, 150, 400]
287287
}
@@ -373,93 +373,4 @@ describe('calculatePosition', function () {
373373
document.body.removeChild(target);
374374
});
375375
});
376-
377-
describe('moves popover arrow', () => {
378-
it('checks if popover positioned within padding and has popover arrow', () => {
379-
const target = createElementWithDimensions('div', {top: 50, left: 50, width: 50, height: 25});
380-
const overlayNode = createElementWithDimensions('div', overlaySize);
381-
const container = createElementWithDimensions('div', containerDimensions);
382-
383-
document.documentElement.appendChild(target);
384-
document.documentElement.appendChild(container);
385-
document.documentElement.appendChild(overlayNode);
386-
387-
let {position: {top: positionTop}, arrowOffsetLeft, arrowOffsetTop} = calculatePosition({
388-
placement: 'right',
389-
targetNode: target,
390-
overlayNode,
391-
scrollNode: overlayNode,
392-
padding: 12,
393-
shouldFlip: false,
394-
boundaryElement: container,
395-
offset: 0,
396-
crossOffset: 0
397-
});
398-
expect(positionTop).toBe(12);
399-
expect(arrowOffsetTop).toBe(50.5);
400-
expect(arrowOffsetLeft).toBe(undefined);
401-
402-
document.documentElement.removeChild(target);
403-
document.documentElement.removeChild(container);
404-
document.documentElement.removeChild(overlayNode);
405-
});
406-
407-
it('checks if popover moves to padding 6 and arrow at popover edge', () => {
408-
const target = createElementWithDimensions('div', {top: 0, left: 50, width: 50, height: 25});
409-
const overlayNode = createElementWithDimensions('div', overlaySize);
410-
const container = createElementWithDimensions('div', containerDimensions);
411-
412-
document.documentElement.appendChild(target);
413-
document.documentElement.appendChild(overlayNode);
414-
document.documentElement.appendChild(container);
415-
416-
let {position: {top: positionTop}, arrowOffsetLeft, arrowOffsetTop} = calculatePosition({
417-
placement: 'right',
418-
targetNode: target,
419-
overlayNode,
420-
scrollNode: overlayNode,
421-
padding: 12,
422-
shouldFlip: false,
423-
boundaryElement: container,
424-
offset: 0,
425-
crossOffset: 0
426-
});
427-
expect(positionTop).toBe(6);
428-
expect(arrowOffsetTop).toBe(6.5);
429-
expect(arrowOffsetLeft).toBe(undefined);
430-
431-
document.documentElement.removeChild(target);
432-
document.documentElement.removeChild(container);
433-
document.documentElement.removeChild(overlayNode);
434-
});
435-
436-
it('checks if popover moves to padding 6 and popover arrow is removed', () => {
437-
const target = createElementWithDimensions('div', {top: -10, left: 50, width: 50, height: 25});
438-
const overlayNode = createElementWithDimensions('div', overlaySize);
439-
const container = createElementWithDimensions('div', containerDimensions);
440-
441-
document.documentElement.appendChild(target);
442-
document.documentElement.appendChild(overlayNode);
443-
document.documentElement.appendChild(container);
444-
445-
let {position: {top: positionTop}, arrowOffsetLeft, arrowOffsetTop} = calculatePosition({
446-
placement: 'left',
447-
targetNode: target,
448-
overlayNode,
449-
scrollNode: overlayNode,
450-
padding: 12,
451-
shouldFlip: false,
452-
boundaryElement: container,
453-
offset: 0,
454-
crossOffset: 0
455-
});
456-
expect(positionTop).toBe(6);
457-
expect(arrowOffsetTop).toBe(-3.5);
458-
expect(arrowOffsetLeft).toBe(undefined);
459-
460-
document.documentElement.removeChild(target);
461-
document.documentElement.removeChild(container);
462-
document.documentElement.removeChild(overlayNode);
463-
});
464-
});
465376
});

0 commit comments

Comments
 (0)