diff --git a/src/components/modules/account/AccountNavigation/AccountNavigation.module.scss b/src/components/modules/account/AccountNavigation/AccountNavigation.module.scss index 7b67772c3..8bece6668 100644 --- a/src/components/modules/account/AccountNavigation/AccountNavigation.module.scss +++ b/src/components/modules/account/AccountNavigation/AccountNavigation.module.scss @@ -1,8 +1,8 @@ @import '../../../../styles/utilities'; .accountNavigation { - border-left: 2px solid #FBFBFB; - max-width: 28.9rem; + @apply flex; + width: 100%; .slider { @apply inline-block; @@ -14,4 +14,14 @@ left: 11.2rem; transition: all .2s linear; } + + .tabList { + margin-top: 3.8rem; + margin-right: 12.4rem; + } + + .tabBody { + margin-top: -4.7rem; + width: 100%; + } } \ No newline at end of file diff --git a/src/components/modules/account/AccountNavigation/AccountNavigation.tsx b/src/components/modules/account/AccountNavigation/AccountNavigation.tsx index 97bb0733c..cf12cdbfb 100644 --- a/src/components/modules/account/AccountNavigation/AccountNavigation.tsx +++ b/src/components/modules/account/AccountNavigation/AccountNavigation.tsx @@ -1,49 +1,68 @@ -import React, { useRef, RefObject, useEffect } from "react" +import React, { useRef, useEffect, Children, ReactElement, PropsWithChildren, useState, cloneElement } from "react" import s from './AccountNavigation.module.scss' -import AccountNavigationItem from './components/AccountNavigationItem' +import AccountNavigationItem from './components/AccountNavigationItem/AccountNavigationItem' +import {TabPaneProps} from '../../../common/TabCommon/components/TabPane/TabPane' interface AccountNavigationProps { - items: {ref: RefObject, active: boolean, itemName: string, onClick: (tabIndex: number)=>void}[]; defaultActiveIndex: number; + children: React.ReactNode } -const AccountNavigation = ({ items, defaultActiveIndex } : AccountNavigationProps) => { - +const AccountNavigation = ({ defaultActiveIndex, children } : AccountNavigationProps) => { + const [active, setActive] = useState(defaultActiveIndex) const sliderRef = useRef(null); + const headerRef = useRef(null) - function slide(index: number) { - const previousItem = items[index].ref.current; - const slider = sliderRef.current; - if (previousItem && slider) { - const top = previousItem.offsetTop; - slider.style.top = top.toString()+"px"; + const onTabClick = (index: number) => { + setActive(index) + } + + function slide(index: number) { + const active = headerRef.current?.children.item(index)?.getBoundingClientRect() + const header = headerRef.current?.getBoundingClientRect() + const current = sliderRef.current + + if (current && active && header) { + const top = active.top; + current.style.top = top.toString()+"px"; } } - const handleClick = (item: {ref: RefObject, active: boolean, itemName: string, onClick: (tabIndex: number)=>void}, - index: number) => { - slide(index); - item.onClick(index); - - } - useEffect(() => { - slide(defaultActiveIndex); - }, []) + slide(active); + }, [active]) return (
- { - items.map((item, i) => { - return ( -
- {handleClick(item, i)}} active={item.active}>{item.itemName} -
- ) - }) - } -
+
    + { + Children.map(children, (tab, index) => { + let item = tab as ReactElement> + return ( +
  • + + {item.props.tabName} + +
  • + ) + }) + } +
    +
+ +
+ { + Children.map(children, (tab, index) => { + let item = tab as ReactElement> + return cloneElement(item, { active: index === active }); + }) + } +
) } diff --git a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.module.scss b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.module.scss index 10037cdc7..12d3e1f02 100644 --- a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.module.scss +++ b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.module.scss @@ -1,4 +1,4 @@ -@import '../../../../../styles/utilities'; +@import '../../../../../../styles/utilities'; .accountNavigationItem { width: 28rem; diff --git a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.tsx b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.tsx index dd53909e7..9f94fb1fc 100644 --- a/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.tsx +++ b/src/components/modules/account/AccountNavigation/components/AccountNavigationItem.tsx @@ -5,12 +5,17 @@ import s from './AccountNavigationItem.module.scss' interface AccountNavigationItemProps { children?: string; active?: boolean; - onClick: () => void; + tabIndex: number + onClick: (index: number) => void; } -const AccountNavigationItem = ({ children, active, onClick } : AccountNavigationItemProps) => { +const AccountNavigationItem = ({ children, active, tabIndex, onClick } : AccountNavigationItemProps) => { + + const handleClick = () => { + onClick(tabIndex) + } return ( -
{children}