| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | import type { FC } from 'react' | 
					
						
							| 
									
										
										
										
											2024-08-08 15:33:02 +08:00
										 |  |  | import { memo } from 'react' | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | import type { BlockEnum } from '../types' | 
					
						
							|  |  |  | import { useTabs } from './hooks' | 
					
						
							|  |  |  | import type { ToolDefaultValue } from './types' | 
					
						
							|  |  |  | import { TabsEnum } from './types' | 
					
						
							|  |  |  | import Blocks from './blocks' | 
					
						
							| 
									
										
										
										
											2024-05-27 21:57:08 +08:00
										 |  |  | import AllTools from './all-tools' | 
					
						
							| 
									
										
										
										
											2024-07-09 15:05:40 +08:00
										 |  |  | import cn from '@/utils/classnames' | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | export type TabsProps = { | 
					
						
							| 
									
										
										
										
											2024-08-08 15:33:02 +08:00
										 |  |  |   activeTab: TabsEnum | 
					
						
							|  |  |  |   onActiveTabChange: (activeTab: TabsEnum) => void | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |   searchText: string | 
					
						
							|  |  |  |   onSelect: (type: BlockEnum, tool?: ToolDefaultValue) => void | 
					
						
							|  |  |  |   availableBlocksTypes?: BlockEnum[] | 
					
						
							| 
									
										
										
										
											2024-05-27 21:57:08 +08:00
										 |  |  |   noBlocks?: boolean | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | } | 
					
						
							|  |  |  | const Tabs: FC<TabsProps> = ({ | 
					
						
							| 
									
										
										
										
											2024-08-08 15:33:02 +08:00
										 |  |  |   activeTab, | 
					
						
							|  |  |  |   onActiveTabChange, | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |   searchText, | 
					
						
							|  |  |  |   onSelect, | 
					
						
							|  |  |  |   availableBlocksTypes, | 
					
						
							| 
									
										
										
										
											2024-05-27 21:57:08 +08:00
										 |  |  |   noBlocks, | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | }) => { | 
					
						
							|  |  |  |   const tabs = useTabs() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return ( | 
					
						
							|  |  |  |     <div onClick={e => e.stopPropagation()}> | 
					
						
							|  |  |  |       { | 
					
						
							| 
									
										
										
										
											2024-05-27 21:57:08 +08:00
										 |  |  |         !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( | 
					
						
							| 
									
										
										
										
											2024-07-10 15:34:56 +08:00
										 |  |  |                     'relative mr-4 h-[34px] text-[13px] leading-[34px] font-medium cursor-pointer', | 
					
						
							| 
									
										
										
										
											2024-05-27 21:57:08 +08:00
										 |  |  |                     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', | 
					
						
							|  |  |  |                   )} | 
					
						
							| 
									
										
										
										
											2024-08-08 15:33:02 +08:00
										 |  |  |                   onClick={() => onActiveTabChange(tab.key)} | 
					
						
							| 
									
										
										
										
											2024-05-27 21:57:08 +08:00
										 |  |  |                 > | 
					
						
							|  |  |  |                   {tab.name} | 
					
						
							|  |  |  |                 </div> | 
					
						
							|  |  |  |               )) | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           </div> | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |         ) | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       { | 
					
						
							| 
									
										
										
										
											2024-05-27 21:57:08 +08:00
										 |  |  |         activeTab === TabsEnum.Blocks && !noBlocks && ( | 
					
						
							|  |  |  |           <Blocks | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |             searchText={searchText} | 
					
						
							| 
									
										
										
										
											2024-05-27 21:57:08 +08:00
										 |  |  |             onSelect={onSelect} | 
					
						
							|  |  |  |             availableBlocksTypes={availableBlocksTypes} | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |           /> | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       { | 
					
						
							| 
									
										
										
										
											2024-05-27 21:57:08 +08:00
										 |  |  |         activeTab === TabsEnum.Tools && ( | 
					
						
							|  |  |  |           <AllTools | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |             searchText={searchText} | 
					
						
							|  |  |  |             onSelect={onSelect} | 
					
						
							|  |  |  |           /> | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default memo(Tabs) |