import React, { FC, useEffect, useRef, useState, MouseEvent } from 'react' import classNames from 'classnames' import { NavItemProps, NavDataLevel2 } from './types' import A from './a' import Portal from './portal' import Popup from './popup' import _ from 'lodash' function isOneActive(oneSub: NavDataLevel2[], selected: string): boolean { return !!_.find(oneSub, (two) => { return !!_.find(two.sub, (three) => { return selected.includes(three.link) }) }) } const NavItem: FC = ({ data, selected, onSelect, onMouseMove, onPushCreate, showSub, footerImage, }) => { const ref = useRef(null) const [rect, setRect] = useState(null) const { icon, iconActive, name, link, sub } = data const active = isOneActive(sub, selected) useEffect(() => { if (showSub) { setRect(ref.current!.getBoundingClientRect()) } else { setRect(null) } }, [showSub]) const handleClick = (event: MouseEvent) => { event.preventDefault() if (sub[0]) { onSelect(sub[0].sub[0]) } } const handleSelect = (data: NavDataLevel2) => { onSelect(data) setRect(null) } const handlePushCreate = (data: NavDataLevel2) => { onPushCreate(data) setRect(null) } let iconE = icon if ((rect || active) && iconActive) { iconE = iconActive } return (
{footerImage ? ( onMouseMove(e, link)}> {footerImage} ) : ( onMouseMove(e, link)} > {iconE} {name} )} {sub &&
} {sub && ( {rect && ( )} )}
) } export default NavItem