import React, { useState } from 'react'; import { LabelsList } from './LabelsList'; import { LabelCategoriesView } from './LabelCategoriesView'; import { LabelTypesView } from './LabelTypesView'; import { LabelTemplatesView } from './LabelTemplatesView'; import { MultipleOptionsView } from './MultipleOptionsView'; type Tab = 'Labels' | 'Label Categories' | 'Label Types' | 'Label Templates' | 'Multiple Options'; interface LabelsViewProps { currentView?: string; onViewChange?: (view: string) => void; /** Dashboard「New Label」递增;由 Labels 列表消费后应调用 onLabelCreateIntentConsumed */ labelCreateOpenSeq?: number; onLabelCreateIntentConsumed?: () => void; } export function LabelsView({ currentView = 'Labels', onViewChange, labelCreateOpenSeq = 0, onLabelCreateIntentConsumed, }: LabelsViewProps) { const [templateEditorHidesTabs, setTemplateEditorHidesTabs] = useState(false); const tabs: Tab[] = [ 'Labels', 'Label Categories', 'Label Types', 'Label Templates', 'Multiple Options' ]; const handleTabClick = (tab: Tab) => { if (onViewChange) { onViewChange(tab); } }; return (
{/* Tabs:模板编辑器全屏编辑时隐藏 */} {!templateEditorHidesTabs && (
{tabs.map((tab) => (
handleTabClick(tab)} style={ currentView === tab ? { borderBottomWidth: 2, borderBottomStyle: 'solid', borderBottomColor: '#2563eb' } : undefined } className={`px-4 py-2.5 text-sm font-medium whitespace-nowrap cursor-pointer transition-colors -mb-px ${ currentView === tab ? 'text-blue-600' : 'border-b-2 border-b-transparent text-gray-600 hover:text-gray-800' }`} > {tab}
))}
)} {/* Content:Label Templates 编辑态需占满主区域高度,故用 flex-1 + min-h-0 传递 */}
{currentView === 'Labels' && (
)} {currentView === 'Label Categories' && (
)} {currentView === 'Label Types' && (
)} {currentView === 'Label Templates' && (
)} {currentView === 'Multiple Options' && (
)} {!['Labels', 'Label Categories', 'Label Types', 'Label Templates', 'Multiple Options'].includes(currentView) && (
{currentView} content coming soon...
)}
); }