fix(web): 穩定治理頁 deep link 與盤點容錯
This commit is contained in:
@@ -101,12 +101,15 @@ export function PageTabs({ tabs, defaultTab, syncWithUrl = true }: PageTabsProps
|
||||
const [activeTab, setActiveTab] = useState(initialTab)
|
||||
const tabIds = tabs.map(t => t.id).join('|')
|
||||
const firstTabId = tabs[0]?.id || ''
|
||||
const knownTabIds = useMemo(() => tabIds.split('|'), [tabIds])
|
||||
const urlActiveTab = syncWithUrl && urlTab && knownTabIds.includes(urlTab) ? urlTab : null
|
||||
const resolvedActiveTab = urlActiveTab || activeTab || defaultTab || firstTabId
|
||||
|
||||
useEffect(() => {
|
||||
const nextTab = (syncWithUrl ? urlTab : null) || defaultTab || firstTabId
|
||||
if (!nextTab || !tabIds.split('|').includes(nextTab)) return
|
||||
if (!nextTab || !knownTabIds.includes(nextTab)) return
|
||||
setActiveTab(prev => prev === nextTab ? prev : nextTab)
|
||||
}, [defaultTab, firstTabId, syncWithUrl, tabIds, urlTab])
|
||||
}, [defaultTab, firstTabId, knownTabIds, syncWithUrl, urlTab])
|
||||
|
||||
// 切換 Tab
|
||||
const switchTab = useCallback((tabId: string) => {
|
||||
@@ -126,8 +129,8 @@ export function PageTabs({ tabs, defaultTab, syncWithUrl = true }: PageTabsProps
|
||||
|
||||
// 找到目前的 Tab 內容
|
||||
const activeContent = useMemo(() => {
|
||||
return tabs.find(t => t.id === activeTab)?.content ?? tabs[0]?.content
|
||||
}, [tabs, activeTab])
|
||||
return tabs.find(t => t.id === resolvedActiveTab)?.content ?? tabs[0]?.content
|
||||
}, [tabs, resolvedActiveTab])
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -147,17 +150,17 @@ export function PageTabs({ tabs, defaultTab, syncWithUrl = true }: PageTabsProps
|
||||
}}
|
||||
>
|
||||
{tabs.map(tab => {
|
||||
const isActive = tab.id === activeTab
|
||||
const isActive = tab.id === resolvedActiveTab
|
||||
return (
|
||||
<button
|
||||
key={tab.id}
|
||||
data-tab-id={tab.id}
|
||||
onClick={() => switchTab(tab.id)}
|
||||
style={{
|
||||
padding: '0 14px',
|
||||
fontSize: 12,
|
||||
fontWeight: isActive ? 600 : 500,
|
||||
color: isActive ? '#d97757' : '#87867f',
|
||||
borderBottom: `2px solid ${isActive ? '#d97757' : 'transparent'}`,
|
||||
background: 'transparent',
|
||||
border: 'none',
|
||||
borderBottomWidth: 2,
|
||||
|
||||
Reference in New Issue
Block a user