[TabLayout, TabItem] 2depts 이동 시 1depts 포커싱 유지

This commit is contained in:
hyunwoo93.cha
2024-02-07 23:01:16 +09:00
parent 9b1b6f3c6e
commit 2df9f436bc
2 changed files with 30 additions and 17 deletions

View File

@@ -24,6 +24,7 @@ const TabItemBase = ({
showSubTab = false, showSubTab = false,
temp, temp,
setTemp, setTemp,
mainSelectedIndex,
...rest ...rest
}) => { }) => {
const [focused, setFocused] = useState(false); const [focused, setFocused] = useState(false);
@@ -68,23 +69,25 @@ const TabItemBase = ({
const renderIcon = useCallback(() => { const renderIcon = useCallback(() => {
if (icons) { if (icons) {
const Component = icons; const Component = icons;
return (
<Component let iconType;
iconType={ if (expanded && index === mainSelectedIndex) {
focused iconType = "focused";
? "focused" } else {
: selected iconType = focused
? "selected" ? "focused"
: expanded : selected
? "expanded" ? "selected"
: "normal" : expanded
} ? "expanded"
/> : "normal";
); }
return <Component iconType={iconType} />;
} else { } else {
return null; return null;
} }
}, [focused, expanded, selected, fixed]); }, [focused, expanded, selected, mainSelectedIndex, index, icons]);
delete rest.hasChildren; delete rest.hasChildren;
delete rest.getChildren; delete rest.getChildren;
@@ -92,9 +95,13 @@ const TabItemBase = ({
<SpottableComponent <SpottableComponent
className={classNames( className={classNames(
css.tabItem, css.tabItem,
focused && css.focused, (focused || index === mainSelectedIndex) && css.focused,
// focused && css.focused,
showSubTab && fixed && css.fixed, showSubTab && fixed && css.fixed,
!isSubItem && focused && showSubTab && css.arrow, !isSubItem &&
(focused || index === mainSelectedIndex) &&
showSubTab &&
css.arrow,
selected && css.selected selected && css.selected
)} )}
onKeyDown={onKeyDown} onKeyDown={onKeyDown}
@@ -102,7 +109,12 @@ const TabItemBase = ({
onBlur={_onBlur} onBlur={_onBlur}
onClick={_onClick} onClick={_onClick}
> >
<div className={classNames(css.itemWrap, focused && css.focused)}> <div
className={classNames(
css.itemWrap,
(focused || index === mainSelectedIndex) && css.focused
)}
>
{icons && <div className={css.icon}>{renderIcon()}</div>} {icons && <div className={css.icon}>{renderIcon()}</div>}
{expanded && title && ( {expanded && title && (
<Marquee <Marquee

View File

@@ -516,6 +516,7 @@ export default function TabLayout({ topPanelName, onTabActivated }) {
} }
title={item.title} title={item.title}
index={index} index={index}
mainSelectedIndex={mainSelectedIndex}
/> />
))} ))}
</MainContainer> </MainContainer>