|
import type { FC } from 'react' |
|
import { memo } from 'react' |
|
import type { BlockEnum } from '../types' |
|
import { useTabs } from './hooks' |
|
import type { ToolDefaultValue } from './types' |
|
import { TabsEnum } from './types' |
|
import Blocks from './blocks' |
|
import AllTools from './all-tools' |
|
import cn from '@/utils/classnames' |
|
|
|
export type TabsProps = { |
|
activeTab: TabsEnum |
|
onActiveTabChange: (activeTab: TabsEnum) => void |
|
searchText: string |
|
onSelect: (type: BlockEnum, tool?: ToolDefaultValue) => void |
|
availableBlocksTypes?: BlockEnum[] |
|
noBlocks?: boolean |
|
} |
|
const Tabs: FC<TabsProps> = ({ |
|
activeTab, |
|
onActiveTabChange, |
|
searchText, |
|
onSelect, |
|
availableBlocksTypes, |
|
noBlocks, |
|
}) => { |
|
const tabs = useTabs() |
|
|
|
return ( |
|
<div onClick={e => e.stopPropagation()}> |
|
{ |
|
!noBlocks && ( |
|
<div className='flex items-center px-3 border-b-[0.5px] border-b-black/5'> |
|
{ |
|
tabs.map(tab => ( |
|
<div |
|
key={tab.key} |
|
className={cn( |
|
'relative mr-4 h-[34px] text-[13px] leading-[34px] font-medium cursor-pointer', |
|
activeTab === tab.key |
|
? 'text-gray-700 after:absolute after:bottom-0 after:left-0 after:h-0.5 after:w-full after:bg-primary-600' |
|
: 'text-gray-500', |
|
)} |
|
onClick={() => onActiveTabChange(tab.key)} |
|
> |
|
{tab.name} |
|
</div> |
|
)) |
|
} |
|
</div> |
|
) |
|
} |
|
{ |
|
activeTab === TabsEnum.Blocks && !noBlocks && ( |
|
<Blocks |
|
searchText={searchText} |
|
onSelect={onSelect} |
|
availableBlocksTypes={availableBlocksTypes} |
|
/> |
|
) |
|
} |
|
{ |
|
activeTab === TabsEnum.Tools && ( |
|
<AllTools |
|
searchText={searchText} |
|
onSelect={onSelect} |
|
/> |
|
) |
|
} |
|
</div> |
|
) |
|
} |
|
|
|
export default memo(Tabs) |
|
|