| 
									
										
										
										
											2023-06-16 21:47:51 +08:00
										 |  |  | import cn from 'classnames' | 
					
						
							|  |  |  | import s from './index.module.css' | 
					
						
							|  |  |  | import type { DataSourceNotionPage } from '@/models/common' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type IconTypes = 'workspace' | 'page' | 
					
						
							|  |  |  | type NotionIconProps = { | 
					
						
							|  |  |  |   type?: IconTypes | 
					
						
							|  |  |  |   name?: string | null | 
					
						
							|  |  |  |   className?: string | 
					
						
							| 
									
										
										
										
											2023-08-28 19:48:53 +08:00
										 |  |  |   src?: string | null | DataSourceNotionPage['page_icon'] | 
					
						
							| 
									
										
										
										
											2023-06-16 21:47:51 +08:00
										 |  |  | } | 
					
						
							|  |  |  | const NotionIcon = ({ | 
					
						
							|  |  |  |   type = 'workspace', | 
					
						
							|  |  |  |   src, | 
					
						
							|  |  |  |   name, | 
					
						
							|  |  |  |   className, | 
					
						
							|  |  |  | }: NotionIconProps) => { | 
					
						
							|  |  |  |   if (type === 'workspace') { | 
					
						
							|  |  |  |     if (typeof src === 'string') { | 
					
						
							|  |  |  |       if (src.startsWith('https://') || src.startsWith('http://')) { | 
					
						
							|  |  |  |         return ( | 
					
						
							|  |  |  |           <img | 
					
						
							|  |  |  |             alt='workspace icon' | 
					
						
							|  |  |  |             src={src} | 
					
						
							|  |  |  |             className={cn('block object-cover w-5 h-5', className)} | 
					
						
							|  |  |  |           /> | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       return ( | 
					
						
							|  |  |  |         <div className={cn('flex items-center justify-center w-5 h-5', className)}>{src}</div> | 
					
						
							|  |  |  |       ) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return ( | 
					
						
							|  |  |  |       <div className={cn('flex items-center justify-center w-5 h-5 bg-gray-200 text-xs font-medium text-gray-500 rounded', className)}>{name?.[0].toLocaleUpperCase()}</div> | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (typeof src === 'object' && src !== null) { | 
					
						
							|  |  |  |     if (src?.type === 'url') { | 
					
						
							|  |  |  |       return ( | 
					
						
							|  |  |  |         <img | 
					
						
							|  |  |  |           alt='page icon' | 
					
						
							|  |  |  |           src={src.url || ''} | 
					
						
							|  |  |  |           className={cn('block object-cover w-5 h-5', className)} | 
					
						
							|  |  |  |         /> | 
					
						
							|  |  |  |       ) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return ( | 
					
						
							|  |  |  |       <div className={cn('flex items-center justify-center w-5 h-5', className)}>{src?.emoji}</div> | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return ( | 
					
						
							|  |  |  |     <div className={cn(s['default-page-icon'], className)} /> | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default NotionIcon |