UNPKG

@zohodesk/hooks

Version:

Unified Component Library - Hooks

71 lines (65 loc) 1.84 kB
import possibilities from "./possibilities"; import defaultOrder from "./defaultOrder"; import relativePositionMapping from "./relativePositionMapping"; import relativePositionValues from "./relativePositionValues"; export default function betterView(popup, relativeBox) { let defaultView = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; let customFrame = arguments.length > 3 ? arguments[3] : undefined; let { needArrow, isAbsolute, customOrder = [] } = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; const customScrollFrame = isAbsolute ? customFrame : ''; const viewPortPossibilities = possibilities(popup, relativeBox, customScrollFrame, { needArrow, isAbsolute }); if (!viewPortPossibilities) { return; } const { views, viewsOffset, targetOffset, popupOffset } = viewPortPossibilities; let view = null; let isViewFound = false; if (!isViewFound && defaultView && views[defaultView]) { view = defaultView; isViewFound = true; } if (!isViewFound) { if (customOrder.length > 0) { isViewFound = customOrder.some(position => { if (views[position]) { view = position; return true; } }); } else { isViewFound = defaultOrder.some(position => { if (views[position]) { view = position; return true; } }); } } if (!isViewFound) { view = defaultView; } const relativePosition = relativePositionMapping[view]; const relativeOffset = relativePositionValues[relativePosition.positionStyle]; return { view, views, viewsOffset, targetOffset, popupOffset, relativeOffset, relativePosition, popupPosition: isAbsolute ? relativeOffset : viewsOffset[view] }; }