[SHOPTIME-3518] Category / GNB 2뎁스 맨 아래의 카테고리로 이동할 경우 스크롤 오류

1. TabLayout.jsx
2. TabItemSub.jsx
- 원인: scrollTop 동작 조건 오류
- 대책: scrollTop 동작 조건 수정
This commit is contained in:
younghoon100.park
2024-10-31 19:16:03 +09:00
parent 5d2b153ec2
commit 5169a378db
2 changed files with 15 additions and 12 deletions

View File

@@ -28,19 +28,13 @@ const TabItemBase = ({
setLastFocusId, setLastFocusId,
setSelectedTitle, setSelectedTitle,
setSelectedSubItemId, setSelectedSubItemId,
setSelectedSubIndex,
label, label,
...rest ...rest
}) => { }) => {
const [focused, setFocused] = useState(false); const [focused, setFocused] = useState(false);
const itemRef = useRef(); const itemRef = useRef();
// const clearPressedJob = useRef(
// new Job((func) => {
// setTimeout(func, 0);
// }, 0)
// );
const clearPressedJob = useRef(new Job((func) => func(), 0)); const clearPressedJob = useRef(new Job((func) => func(), 0));
const _onClick = useCallback( const _onClick = useCallback(
@@ -65,11 +59,12 @@ const TabItemBase = ({
const _onFocus = useCallback(() => { const _onFocus = useCallback(() => {
setFocused(true); setFocused(true);
setSelectedSubItemId(null); setSelectedSubItemId(null);
setSelectedSubIndex(index);
if (onFocus) { if (onFocus) {
onFocus(index); onFocus(index);
} }
}, [index, onFocus, setSelectedSubItemId]); }, [index, onFocus, setSelectedSubItemId, setSelectedSubIndex]);
const _onBlur = useCallback(() => { const _onBlur = useCallback(() => {
setFocused(false); setFocused(false);

View File

@@ -136,6 +136,7 @@ export default function TabLayout({ topPanelName, onTabActivated, panelInfo }) {
const [lastFocusId, setLastFocusId] = useState(null); const [lastFocusId, setLastFocusId] = useState(null);
const [selectedTitle, setSelectedTitle] = useState(""); const [selectedTitle, setSelectedTitle] = useState("");
const [selectedSubItemId, setSelectedSubItemId] = useState(null); const [selectedSubItemId, setSelectedSubItemId] = useState(null);
const [selectedSubIndex, setSelectedSubIndex] = useState(-1);
const [subTabLastFocusId, setSubTabLastFocusId] = useState(null); const [subTabLastFocusId, setSubTabLastFocusId] = useState(null);
const [tabs, setTabs] = useState([]); const [tabs, setTabs] = useState([]);
const [tabFocused, setTabFocused] = useState([false, false, false]); //COLLABSED_MAIN, ACTIVATED_MAIN, ACTIVATED_SUB const [tabFocused, setTabFocused] = useState([false, false, false]); //COLLABSED_MAIN, ACTIVATED_MAIN, ACTIVATED_SUB
@@ -159,6 +160,7 @@ export default function TabLayout({ topPanelName, onTabActivated, panelInfo }) {
const deviceCountryCode = httpHeader["X-Device-Country"]; const deviceCountryCode = httpHeader["X-Device-Country"];
const mouseNavOpen = useRef(new Job((func) => func(), 1000)); const mouseNavOpen = useRef(new Job((func) => func(), 1000));
const mouseMainEntered = useRef(false); const mouseMainEntered = useRef(false);
const scrollTopJobRef = useRef(new Job((func) => func(), 0));
const getMenuData = (type) => { const getMenuData = (type) => {
let result = []; let result = [];
@@ -679,13 +681,18 @@ export default function TabLayout({ topPanelName, onTabActivated, panelInfo }) {
useEffect(() => { useEffect(() => {
if (tabActivated && showSubTab && subTabLastFocusId !== null) { if (tabActivated && showSubTab && subTabLastFocusId !== null) {
Spotlight.focus(subTabLastFocusId); Spotlight.focus(subTabLastFocusId);
} else {
if (tabActivated) {
scrollTop({ y: 0 });
}
} }
}, [tabActivated, subTabLastFocusId, mainSelectedIndex]); }, [tabActivated, subTabLastFocusId, mainSelectedIndex]);
useEffect(() => {
if (selectedSubIndex >= 0) {
if (selectedSubIndex === 0) {
scrollTopJobRef.current.start(() => scrollTop({ y: 0 }));
return () => scrollTopJobRef.current.stop();
}
}
}, [selectedSubIndex]);
// 1Depth > 2Depth로 넘어갈때 서브메뉴가 없을때만 ( 의존성배열 ) // 1Depth > 2Depth로 넘어갈때 서브메뉴가 없을때만 ( 의존성배열 )
useEffect(() => { useEffect(() => {
if (tabActivated && lastFocusId && !showSubTab) { if (tabActivated && lastFocusId && !showSubTab) {
@@ -863,6 +870,7 @@ export default function TabLayout({ topPanelName, onTabActivated, panelInfo }) {
showSubTab={showSubTab} showSubTab={showSubTab}
setSelectedTitle={setSelectedTitle} setSelectedTitle={setSelectedTitle}
setSelectedSubItemId={setSelectedSubItemId} setSelectedSubItemId={setSelectedSubItemId}
setSelectedSubIndex={setSelectedSubIndex}
selected={ selected={
Array.isArray(item.target) && Array.isArray(item.target) &&
item.target[0]?.panelInfo && item.target[0]?.panelInfo &&