import React, { useCallback, useRef, useState } from "react"; import classNames from "classnames"; import compose from "ramda/src/compose"; import { Job } from "@enact/core/util"; import { Marquee, MarqueeController } from "@enact/sandstone/Marquee"; import Spottable from "@enact/spotlight/Spottable"; import css from "./TabItem.module.less"; const SpottableComponent = Spottable("div"); const TabItemBase = ({ icons, title, expanded = false, selected = false, index = 0, target, deActivateTab, onClick, isSubItem, onFocus, showSubTab = false, temp, setTemp, ...rest }) => { const [focused, setFocused] = useState(false); const [fixed, setFixed] = useState(false); const clearPressedJob = useRef( new Job((func) => { setTimeout(func, 100); }, 100) ); const _onClick = useCallback( (ev) => { clearPressedJob.current.start(() => { if (onClick) { onClick({ index, target }); } }); }, [target, index, onClick] ); const _onFocus = useCallback(() => { setFocused(true); if (onFocus) { onFocus(index); } }, [index, showSubTab, onFocus]); const _onBlur = useCallback(() => { setFocused(false); }, [showSubTab]); const onKeyDown = useCallback( (event) => { if (event.key === "ArrowRight") { _onClick(); } }, [deActivateTab] ); const renderIcon = useCallback(() => { if (icons) { const Component = icons; return ( ); } else { return null; } }, [focused, expanded, selected, fixed]); delete rest.hasChildren; delete rest.getChildren; return (
{icons &&
{renderIcon()}
} {expanded && title && ( {title} )} {/* */}
); }; const ItemDecorator = compose(MarqueeController({ marqueeOnFocus: true })); const TabItem = ItemDecorator(TabItemBase); export default TabItem;