| 
									
										
										
										
											2023-07-07 10:35:05 +08:00
										 |  |  | 'use client' | 
					
						
							|  |  |  | import type { FC } from 'react' | 
					
						
							|  |  |  | import React from 'react' | 
					
						
							|  |  |  | import { | 
					
						
							|  |  |  |   useCSVDownloader, | 
					
						
							|  |  |  | } from 'react-papaparse' | 
					
						
							|  |  |  | import { useTranslation } from 'react-i18next' | 
					
						
							|  |  |  | import { Download02 as DownloadIcon } from '@/app/components/base/icons/src/vender/solid/general' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export type ICSVDownloadProps = { | 
					
						
							|  |  |  |   vars: { name: string }[] | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const CSVDownload: FC<ICSVDownloadProps> = ({ | 
					
						
							|  |  |  |   vars, | 
					
						
							|  |  |  | }) => { | 
					
						
							|  |  |  |   const { t } = useTranslation() | 
					
						
							|  |  |  |   const { CSVDownloader, Type } = useCSVDownloader() | 
					
						
							| 
									
										
										
										
											2023-09-10 00:12:34 +08:00
										 |  |  |   const addQueryContentVars = [...vars] | 
					
						
							| 
									
										
										
										
											2023-07-07 10:35:05 +08:00
										 |  |  |   const template = (() => { | 
					
						
							|  |  |  |     const res: Record<string, string> = {} | 
					
						
							|  |  |  |     addQueryContentVars.forEach((item) => { | 
					
						
							|  |  |  |       res[item.name] = '' | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  |     return res | 
					
						
							|  |  |  |   })() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return ( | 
					
						
							|  |  |  |     <div className='mt-6'> | 
					
						
							|  |  |  |       <div className='text-sm text-gray-900 font-medium'>{t('share.generation.csvStructureTitle')}</div> | 
					
						
							|  |  |  |       <div className='mt-2 max-h-[500px] overflow-auto'> | 
					
						
							|  |  |  |         <table className='w-full border-separate border-spacing-0 border border-gray-200 rounded-lg text-xs'> | 
					
						
							|  |  |  |           <thead className='text-gray-500'> | 
					
						
							|  |  |  |             <tr> | 
					
						
							|  |  |  |               {addQueryContentVars.map((item, i) => ( | 
					
						
							|  |  |  |                 <td key={i} className='h-9 pl-4 border-b border-gray-200'>{item.name}</td> | 
					
						
							|  |  |  |               ))} | 
					
						
							|  |  |  |             </tr> | 
					
						
							|  |  |  |           </thead> | 
					
						
							|  |  |  |           <tbody className='text-gray-300'> | 
					
						
							|  |  |  |             <tr> | 
					
						
							|  |  |  |               {addQueryContentVars.map((item, i) => ( | 
					
						
							|  |  |  |                 <td key={i} className='h-9 pl-4'>{item.name} {t('share.generation.field')}</td> | 
					
						
							|  |  |  |               ))} | 
					
						
							|  |  |  |             </tr> | 
					
						
							|  |  |  |           </tbody> | 
					
						
							|  |  |  |         </table> | 
					
						
							|  |  |  |       </div> | 
					
						
							|  |  |  |       <CSVDownloader | 
					
						
							|  |  |  |         className="block mt-2 cursor-pointer" | 
					
						
							|  |  |  |         type={Type.Link} | 
					
						
							|  |  |  |         filename={'template'} | 
					
						
							|  |  |  |         bom={true} | 
					
						
							|  |  |  |         config={{ | 
					
						
							|  |  |  |           // delimiter: ';',
 | 
					
						
							|  |  |  |         }} | 
					
						
							|  |  |  |         data={[ | 
					
						
							|  |  |  |           template, | 
					
						
							|  |  |  |         ]} | 
					
						
							|  |  |  |       > | 
					
						
							|  |  |  |         <div className='flex items-center h-[18px] space-x-1 text-[#155EEF] text-xs font-medium'> | 
					
						
							|  |  |  |           <DownloadIcon className='w-3 h-3' /> | 
					
						
							|  |  |  |           <span>{t('share.generation.downloadTemplate')}</span> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |       </CSVDownloader> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | export default React.memo(CSVDownload) |