@kiwicom/orbit-components
Version:
Orbit-components is a React component library which provides developers with the easiest possible way of building Kiwi.com’s products.
36 lines (28 loc) • 1.26 kB
JavaScript
import { POSITIONS } from "../consts";
const isInside = (p, canBe) => {
if (p === POSITIONS.TOP && canBe[p]) {
return POSITIONS.TOP;
}
if (p === POSITIONS.BOTTOM && canBe[p]) {
return POSITIONS.BOTTOM;
}
return false;
};
const calculateVerticalPosition = (desiredPositions, pos) => {
const canBeInWindow = {
[POSITIONS.TOP]: pos.containerTop - pos.popoverHeight > pos.windowScrollTop,
[POSITIONS.BOTTOM]: pos.containerTop - pos.windowScrollTop + pos.containerHeight + pos.popoverHeight < pos.windowHeight
};
const canBeInDocument = {
[POSITIONS.TOP]: pos.containerTop - pos.popoverHeight >= 0,
[POSITIONS.BOTTOM]: pos.containerTop + pos.containerHeight + pos.popoverHeight < pos.documentHeight
};
const possibleWindowPositions = desiredPositions.map(p => isInside(p, canBeInWindow)).filter(p => typeof p === "string");
const possibleDocumentPositions = desiredPositions.map(p => isInside(p, canBeInDocument)).filter(p => typeof p === "string"); // ordering in POSITIONS const is important
const posPosition = possibleWindowPositions[0] || possibleDocumentPositions[0];
if (typeof posPosition === "string") {
return posPosition;
}
return POSITIONS.BOTTOM;
};
export default calculateVerticalPosition;