hanav
Version:
A React Navigation Menu Component Library.
26 lines (24 loc) • 990 B
JavaScript
import { Children, cloneElement } from "react";
export function getSlateWrapperTranslateVal(y, openedMenuIdx, triggerRef, slateClientWidthRef, offsetX = 0) {
const curSlateWidth = slateClientWidthRef.current[openedMenuIdx];
const curTrigger = triggerRef.current[openedMenuIdx];
const left = (curSlateWidth == null || curTrigger == null) ?
0 :
(curTrigger.offsetLeft + curTrigger.clientWidth / 2 - curSlateWidth / 2);
return `translate(${left + offsetX}px, ${y}px)`;
}
/** 递归地为 `<Item>` 设置 `type` 和 `orderI` */
export function passTypeAndOrderI(children, relatedIdx = -1) {
return Children.map(children, child => {
const dn = (child.type || {}).displayName;
if (dn === "Item") {
++ relatedIdx;
return cloneElement(child, { type: "T", orderI: relatedIdx });
} else if (dn === "Group") {
return cloneElement(child, {
children: passTypeAndOrderI(child.props.children, relatedIdx),
});
}
return child;
});
}