in packages-rc/console-base-rc-dropdown/src/model/hook/use-drop-style.ts [17:81]
export default function useDropStyle(): CSSProperties {
const {
align,
width,
minWidth,
maxWidth,
zIndex,
offset,
dropContainer
} = useModelProps();
const domDropdown = useDomDropdown();
const domDrop = useDomDrop();
const alignIsRight = align === 'right';
const [offsetX = 0, offsetY = 0] = offset;
return useMemo(() => {
const style: CSSProperties = {
zIndex
};
if (width) {
style.width = width;
}
if (minWidth) {
style.minWidth = minWidth;
}
if (maxWidth) {
style.maxWidth = maxWidth;
}
// compute position
if (dropContainer === 'body') {
const rect = domDropdown ? getRect(domDropdown, true) : null;
if (rect) {
style.top = rect.top + rect.height + offsetY;
if (alignIsRight) {
if (domDrop) {
style.left = rect.left + rect.width - domDrop.getBoundingClientRect().width - offsetX;
}
} else {
style.left = rect.left + offsetX;
}
}
} else {
style.top = '100%';
if (alignIsRight) {
style.right = offsetX;
} else {
style.left = offsetX;
}
if (offsetY) {
style.marginTop = offsetY;
}
}
return style;
}, [alignIsRight, domDrop, domDropdown, dropContainer, maxWidth, minWidth, offsetX, offsetY, width, zIndex]);
}