@zohodesk/hooks
Version:
Unified Component Library - Hooks
71 lines (65 loc) • 1.84 kB
JavaScript
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]
};
}