import { ReactNode, useEffect, useState } from 'react'; import * as React from 'react'; type tabId = string|number; interface Tab { id: tabId, title: ReactNode, content: ReactNode, onSelected?: () => void, } interface FabTabsProps { tabs: Array, defaultTab?: tabId, className?: string } /** * Tabulation system */ export const FabTabs: React.FC = ({ tabs, defaultTab, className }) => { const [active, setActive] = useState(tabs.filter(Boolean).find(t => t.id === defaultTab) || tabs.filter(Boolean)[0]); useEffect(() => { setActive(tabs.filter(Boolean).find(t => t.id === defaultTab) || tabs.filter(Boolean)[0]); }, [tabs]); /** * Callback triggered when a tab a selected */ const onTabSelected = (tab: Tab) => { setActive(tab); if (typeof tab.onSelected === 'function') tab.onSelected(); }; return (
{tabs.filter(Boolean).map((tab, index) => (

onTabSelected(tab)}>{tab.title}

))}
{active?.content}
); };