import React, { useCallback, useEffect, useRef, useState, } from 'react'; import classNames from 'classnames'; import compose from 'ramda/src/compose'; import { useDispatch } from 'react-redux'; import { Job } from '@enact/core/util'; import { Marquee, MarqueeController, } from '@enact/sandstone/Marquee'; import Spottable from '@enact/spotlight/Spottable'; import { sendLogTotalRecommend } from '../../actions/logActions'; import { LOG_CONTEXT_NAME, LOG_MESSAGE_ID, } from '../../utils/Config'; import css from './TabItemSub.module.less'; const SpottableComponent = Spottable('div'); const TabItemBase = ({ selected = false, expanded = false, index = 0, mainMenuTitle, title, target, deActivateTab, onClick, itemId, isSubItem, onFocus, path, patncNm, spotlightId, setLastFocusId, setSelectedTitle, setSelectedSubItemId, setSelectedSubIndex, label, icons, ...rest }) => { const [focused, setFocused] = useState(false); const dispatch = useDispatch(); const itemRef = useRef(); const clearPressedJob = useRef(new Job((func) => func(), 0)); const _onClick = useCallback( (ev) => { const subtitle = title.split('-')[0]; const buttonTitle = patncNm ? patncNm : subtitle; clearPressedJob.current.start(() => { if (itemId) { setSelectedSubItemId(itemId); } if (spotlightId) { setLastFocusId(spotlightId); } if (onClick) { onClick({ target, itemId }); } dispatch( sendLogTotalRecommend({ contextName: LOG_CONTEXT_NAME.GNB, messageId: LOG_MESSAGE_ID.GNB, buttonTitle: buttonTitle, buttonId: `GNB_CLICK_${buttonTitle.toUpperCase().replace(' ', '_')}`, }) ); }); }, [target, itemId, onClick, spotlightId, setSelectedSubItemId, setLastFocusId] ); const _onFocus = useCallback(() => { setFocused(true); setSelectedSubItemId(null); setSelectedSubIndex(index); if (onFocus) { onFocus(index); } }, [index, onFocus, setSelectedSubItemId, setSelectedSubIndex]); const _onBlur = useCallback(() => { setFocused(false); setLastFocusId(null); }, [setLastFocusId]); const onKeyDown = useCallback( (event) => { if (event.key === 'ArrowRight') { _onClick(); } }, [deActivateTab, target] ); const ImageComponent = useCallback(() => { return ( <>