| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  | 'use client' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import { useTranslation } from 'react-i18next' | 
					
						
							|  |  |  | import useSWR from 'swr' | 
					
						
							|  |  |  | import Link from 'next/link' | 
					
						
							| 
									
										
										
										
											2024-01-04 15:37:51 +08:00
										 |  |  | import s from './index.module.css' | 
					
						
							| 
									
										
										
										
											2024-07-09 15:05:40 +08:00
										 |  |  | import classNames from '@/utils/classnames' | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  | import { fetchAccountIntegrates } from '@/service/common' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const titleClassName = `
 | 
					
						
							|  |  |  |   mb-2 text-sm font-medium text-gray-900 | 
					
						
							|  |  |  | `
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default function IntegrationsPage() { | 
					
						
							|  |  |  |   const { t } = useTranslation() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const integrateMap = { | 
					
						
							|  |  |  |     google: { | 
					
						
							|  |  |  |       name: t('common.integrations.google'), | 
					
						
							|  |  |  |       description: t('common.integrations.googleAccount'), | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     github: { | 
					
						
							|  |  |  |       name: t('common.integrations.github'), | 
					
						
							|  |  |  |       description: t('common.integrations.githubAccount'), | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const { data } = useSWR({ url: '/account/integrates' }, fetchAccountIntegrates) | 
					
						
							|  |  |  |   const integrates = data?.data?.length ? data.data : [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return ( | 
					
						
							|  |  |  |     <> | 
					
						
							|  |  |  |       <div className='mb-8'> | 
					
						
							|  |  |  |         <div className={titleClassName}>{t('common.integrations.connected')}</div> | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           integrates.map(integrate => ( | 
					
						
							| 
									
										
										
										
											2025-03-21 17:41:03 +08:00
										 |  |  |             <div key={integrate.provider} className='mb-2 flex items-center rounded-lg border-[0.5px] border-gray-200 bg-gray-50 px-3 py-2'> | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |               <div className={classNames('w-8 h-8 mr-3 bg-white rounded-lg border border-gray-100', s[`${integrate.provider}-icon`])} /> | 
					
						
							|  |  |  |               <div className='grow'> | 
					
						
							| 
									
										
										
										
											2025-03-21 17:41:03 +08:00
										 |  |  |                 <div className='text-sm font-medium leading-[21px] text-gray-800'>{integrateMap[integrate.provider].name}</div> | 
					
						
							|  |  |  |                 <div className='text-xs font-normal leading-[18px] text-gray-500'>{integrateMap[integrate.provider].description}</div> | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |               </div> | 
					
						
							|  |  |  |               { | 
					
						
							|  |  |  |                 !integrate.is_bound && ( | 
					
						
							| 
									
										
										
										
											2024-01-04 15:37:51 +08:00
										 |  |  |                   <Link | 
					
						
							| 
									
										
										
										
											2025-03-21 17:41:03 +08:00
										 |  |  |                     className='flex h-8 cursor-pointer items-center rounded-lg border border-gray-200 bg-white px-[7px] text-xs font-medium text-gray-700' | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |                     href={integrate.link} | 
					
						
							| 
									
										
										
										
											2024-02-02 15:42:42 +08:00
										 |  |  |                     target='_blank' rel='noopener noreferrer'> | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |                     {t('common.integrations.connect')} | 
					
						
							|  |  |  |                   </Link> | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  |           )) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       </div> | 
					
						
							|  |  |  |       {/* <div className='mb-8'> | 
					
						
							|  |  |  |         <div className={titleClassName}>Add a service </div> | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           services.map(service => ( | 
					
						
							|  |  |  |             <div key={service.key} className='mb-2 flex items-center px-3 py-2 bg-gray-50 border-[0.5px] border-gray-200 rounded-lg'> | 
					
						
							|  |  |  |               <div className={classNames('w-8 h-8 mr-3 bg-white rounded-lg border border-gray-100', s[`${service.key}-icon`])} /> | 
					
						
							|  |  |  |               <div className='grow'> | 
					
						
							|  |  |  |                 <div className='leading-[21px] text-sm font-medium text-gray-800'>{service.name}</div> | 
					
						
							|  |  |  |                 <div className='leading-[18px] text-xs font-normal text-gray-500'>{service.description}</div> | 
					
						
							|  |  |  |               </div> | 
					
						
							|  |  |  |               <Button className='text-xs font-medium text-gray-800'>Connect</Button> | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  |           )) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       </div> */} | 
					
						
							|  |  |  |     </> | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | } |