import React, { ReactNode, useMemo, useState } from 'react' import { v4 as uuid } from 'uuid' import classNames from 'classnames' export interface Tab { id: string title: ReactNode view: ReactNode } export const Tabs: React.FC<{ tabs: Tab[] initialTabId: string onTabSelect?: (tab: Tab) => void titleClassName?: string className?: string }> = (props) => { const { tabs, onTabSelect, className, titleClassName, initialTabId } = props const [selectedTabId, setSelectedTabId] = useState(initialTabId) const selectedTab = useMemo(() => tabs.find((tab) => tab.id === selectedTabId), [selectedTabId]) const id = useMemo(() => uuid(), []) return ( <>
{tabs.map((tab) => ( { onTabSelect?.(tab) setSelectedTabId(tab.id) }} /> ))}
{selectedTab.view}
) } export const TabTitle: React.FC< { isSelected: boolean; setSelected: () => void; textClassName?: string } & Tab > = (props) => { const { isSelected, setSelected, title, textClassName } = props return ( ) } TabTitle.defaultProps = { textClassName: 'text-lg' }