import { Job } from "@enact/core/util"; import { Marquee, MarqueeController } from "@enact/sandstone/Marquee"; import Spottable from "@enact/spotlight/Spottable"; import { getTargetByDirectionFromElement } from "@enact/spotlight/src/target"; import classNames from "classnames"; import compose from "ramda/src/compose"; import { useCallback, useMemo, useRef, useState } from "react"; import css from "./TabItem.module.less"; const SpottableComponent = Spottable("div"); const TabItemBase = ({ icons, title, expanded = false, selected = false, index = 0, target, panel, deActivateTab, className, onClick, ...rest }) => { const [focused, setFocused] = useState(false); const itemRef = useRef(); const clearPressedJob = useRef( new Job((func) => { // setPressed(false); setTimeout(func, 100); }, 100) ); const _onClick = useCallback( (ev) => { // if(ev?.target?.nodeName === 'IMG'){ // return; // } clearPressedJob.current.start(() => { if (onClick) { onClick({ index, target }); } }); onClick({ index, target }); }, [target, index, onClick] ); const _onFocus = useCallback(() => { setFocused(true); }, [index]); const _onBlur = useCallback(() => { setFocused(false); }, []); const isDivider = useMemo(() => { return !title; }, []); const onKeyDown = useCallback( (event) => { if (event.key === "ArrowRight") { const next = getTargetByDirectionFromElement( "right", itemRef.current.node ); if (!next && deActivateTab) { deActivateTab(); } } }, [deActivateTab] ); const renderIcon = useCallback(() => { if (icons) { const Component = icons; return ; } else { return null; } }, [focused, selected, expanded]); return ( {icons &&
{renderIcon()}
} {expanded && title && ( {title} )}
); }; const ItemDecorator = compose(MarqueeController({ marqueeOnFocus: true })); const TabItem = ItemDecorator(TabItemBase); export default TabItem;