File size: 1,034 Bytes
a0fda44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
const useModalBestPosition =
  () =>
  (event, { overlayId, modalData }) => {
    const overlayData = document
      .getElementById(overlayId)
      .getBoundingClientRect();
    let left;
    let top;

    // Co ordinates of click position
    const clickX = event.clientX;
    const clickY = event.clientY;

    //   Get horizontal position
    const clickXPositionInOverlay = clickX - overlayData.left;
    const canModalFitX =
      overlayData.width - clickXPositionInOverlay > modalData.width;

    left = canModalFitX
      ? clickXPositionInOverlay
      : overlayData.width - modalData.width;

    // Get vertical position
    const clickYPositionInOverlay = clickY - overlayData.top;

    const canModalFitY =
      overlayData.height - clickYPositionInOverlay > modalData.height;

    // If click position is too close to the bottom
    top = canModalFitY
      ? clickYPositionInOverlay
      : overlayData.height - modalData.height;

    return {
      left,
      top,
    };
  };

export default useModalBestPosition;