mirror of
https://github.com/langgenius/dify.git
synced 2026-02-12 04:01:29 -05:00
55 lines
1.6 KiB
TypeScript
55 lines
1.6 KiB
TypeScript
import type { FC, ReactNode } from 'react'
|
|
import { useMemo } from 'react'
|
|
import { useTranslation } from 'react-i18next'
|
|
import { useFeatures } from '@/app/components/base/features/hooks'
|
|
import { cn } from '@/utils/classnames'
|
|
import { InspectTab } from './types'
|
|
|
|
const TAB_ITEMS = [
|
|
{ value: InspectTab.Variables, labelKey: 'debug.variableInspect.tab.variables' as const },
|
|
{ value: InspectTab.Artifacts, labelKey: 'debug.variableInspect.tab.artifacts' as const, sandboxOnly: true as const },
|
|
]
|
|
|
|
type TabHeaderProps = {
|
|
activeTab: InspectTab
|
|
onTabChange: (tab: InspectTab) => void
|
|
children?: ReactNode
|
|
}
|
|
|
|
const TabHeader: FC<TabHeaderProps> = ({
|
|
activeTab,
|
|
onTabChange,
|
|
children,
|
|
}) => {
|
|
const { t } = useTranslation('workflow')
|
|
const sandboxEnabled = useFeatures(s => s.features.sandbox?.enabled) ?? false
|
|
|
|
const visibleTabs = useMemo(
|
|
() => TAB_ITEMS.filter(tab => !tab.sandboxOnly || sandboxEnabled),
|
|
[sandboxEnabled],
|
|
)
|
|
|
|
return (
|
|
<div className="flex h-10 w-full shrink-0 items-center gap-0.5 pl-3 pr-2">
|
|
{visibleTabs.map(tab => (
|
|
<button
|
|
key={tab.value}
|
|
type="button"
|
|
onClick={() => onTabChange(tab.value)}
|
|
className={cn(
|
|
'rounded-md px-2 py-1 transition-colors system-sm-semibold',
|
|
activeTab === tab.value
|
|
? 'bg-state-base-active text-text-primary'
|
|
: 'text-text-tertiary hover:text-text-secondary',
|
|
)}
|
|
>
|
|
{t(tab.labelKey)}
|
|
</button>
|
|
))}
|
|
<div className="ml-auto">{children}</div>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export default TabHeader
|