UNPKG

@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
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;