|
1 | | -import React, { useEffect, useState, useCallback } from 'react' |
| 1 | +import React, { useState } from 'react' |
2 | 2 | import styled from 'styled-components' |
3 | 3 |
|
4 | 4 | // Components |
@@ -37,10 +37,10 @@ export interface Props { |
37 | 37 | readonly className?: string |
38 | 38 | readonly tabItems: TabItemInterface[] |
39 | 39 | readonly tabTheme: TabTheme |
40 | | - readonly defaultTab?: TabId |
| 40 | + readonly selectedTab?: TabId |
41 | 41 | readonly extra?: TabBarExtraContent |
42 | 42 | readonly extraPosition?: 'top' | 'bottom' |
43 | | - onChange?: (activeId: TabId) => void |
| 43 | + readonly updateSelectedTab?: (activeId: TabId) => void |
44 | 44 | } |
45 | 45 |
|
46 | 46 | const Wrapper = styled.div` |
@@ -90,37 +90,33 @@ const Tabs: React.FC<Props> = (props) => { |
90 | 90 | const { |
91 | 91 | tabTheme = DEFAULT_TAB_THEME, |
92 | 92 | tabItems, |
93 | | - defaultTab = 1, |
| 93 | + selectedTab: parentSelectedTab, |
94 | 94 | extra: tabBarExtraContent, |
95 | 95 | extraPosition = 'top', |
96 | | - onChange, |
| 96 | + updateSelectedTab: parentUpdateSelectedTab, |
97 | 97 | } = props |
98 | 98 |
|
99 | | - const [activeTab, setActiveTab] = useState(defaultTab) |
100 | | - |
101 | | - const onTabClick = useCallback( |
102 | | - (key: TabId): void => { |
103 | | - setActiveTab(key) |
104 | | - onChange?.(key) |
105 | | - }, |
106 | | - [onChange], |
107 | | - ) |
108 | | - |
109 | | - useEffect(() => { |
110 | | - if (activeTab !== defaultTab) { |
111 | | - onTabClick(defaultTab) |
112 | | - } |
113 | | - }, [activeTab, defaultTab, onTabClick]) |
| 99 | + const [innerSelectedTab, setInnerSelectedTab] = useState(1) |
| 100 | + // Use parent state management if provided, otherwise use internal state |
| 101 | + const selectedTab = parentSelectedTab ?? innerSelectedTab |
| 102 | + const updateTab = parentUpdateSelectedTab ?? setInnerSelectedTab |
114 | 103 |
|
115 | 104 | return ( |
116 | 105 | <Wrapper> |
117 | 106 | <TabList role="tablist" className="tablist"> |
118 | 107 | {tabItems.map(({ tab, id }) => ( |
119 | | - <TabItem key={id} id={id} tab={tab} onTabClick={onTabClick} isActive={activeTab === id} tabTheme={tabTheme} /> |
| 108 | + <TabItem |
| 109 | + key={id} |
| 110 | + id={id} |
| 111 | + tab={tab} |
| 112 | + onTabClick={updateTab} |
| 113 | + isActive={selectedTab === id} |
| 114 | + tabTheme={tabTheme} |
| 115 | + /> |
120 | 116 | ))} |
121 | 117 | {extraPosition === 'top' && <ExtraContent extra={tabBarExtraContent} />} |
122 | 118 | </TabList> |
123 | | - <TabContent tabItems={tabItems} activeTab={activeTab} /> |
| 119 | + <TabContent tabItems={tabItems} activeTab={selectedTab} /> |
124 | 120 | {extraPosition === 'bottom' && <ExtraContent extra={tabBarExtraContent} />} |
125 | 121 | </Wrapper> |
126 | 122 | ) |
|
0 commit comments