'use client'; import { FC, Fragment, useCallback, useState, MouseEvent, FocusEvent } from 'react'; import { ComponentInstance, flattenValues } from '@uniformdev/canvas'; import { UniformSlot, UniformText, ComponentParameter } from '@uniformdev/next-app-router/component'; import Container from '@/components/ui/Container'; import { TabsParameters, TabsProps } from '.'; import { getButtonClasses, getButtonContainerClasses } from './style-utils'; const TAB_ITEM_TEXT_PARAMETER_ID = 'text'; const TAB_ITEM_TEXT_PARAMETER_TYPE = 'text'; export const Tabs: FC }> = ({ slots, color, backgroundColor, spacing, border, fluidContent, height, variant, slotData, context, }) => { const tabItems = slotData?.tabItems?.map(tabComponent => ({ ...(flattenValues(tabComponent) as { text?: string }), id: (tabComponent?._id as string) || '', })); const [activeTabId, setActiveTabId] = useState(tabItems?.[0]?.id || ''); const handleTabClick = useCallback((event: MouseEvent) => { const tabId = (event.target as HTMLButtonElement).id; setActiveTabId(tabId); }, []); const handleContextualEditingTabClick = useCallback( (event: FocusEvent) => { const tabId = event.target.id; if (!context.isContextualEditing) return; setActiveTabId(tabId); }, [context.isContextualEditing] ); const buttonContainer = getButtonContainerClasses({ color, variant }); return (
{tabItems?.map(({ id: currentTabId, [TAB_ITEM_TEXT_PARAMETER_ID]: currentTabText }) => { const buttonClasses = getButtonClasses({ color, variant, isActiveTab: currentTabId === activeTabId }); return ( ); })}
{({ child, _id: currentComponentId, key }) => currentComponentId === activeTabId ? {child} : }
); };