index.tsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. 'use client'
  2. import type { FC } from 'react'
  3. import React from 'react'
  4. import {
  5. PlayIcon,
  6. } from '@heroicons/react/24/solid'
  7. import { useTranslation } from 'react-i18next'
  8. import CSVReader from './csv-reader'
  9. import CSVDownload from './csv-download'
  10. import Button from '@/app/components/base/button'
  11. export type IRunBatchProps = {
  12. vars: { name: string }[]
  13. onSend: (data: string[][]) => void
  14. }
  15. const RunBatch: FC<IRunBatchProps> = ({
  16. vars,
  17. onSend,
  18. }) => {
  19. const { t } = useTranslation()
  20. const [csvData, setCsvData] = React.useState<string[][]>([])
  21. const [isParsed, setIsParsed] = React.useState(false)
  22. const handleParsed = (data: string[][]) => {
  23. setCsvData(data)
  24. // console.log(data)
  25. setIsParsed(true)
  26. }
  27. const handleSend = () => {
  28. onSend(csvData)
  29. }
  30. return (
  31. <div className='pt-4'>
  32. <CSVReader onParsed={handleParsed} />
  33. <CSVDownload vars={vars} />
  34. <div className='mt-4 h-[1px] bg-gray-100'></div>
  35. <div className='flex justify-end'>
  36. <Button
  37. type="primary"
  38. className='mt-4 !h-8 !pl-3 !pr-4'
  39. onClick={handleSend}
  40. disabled={!isParsed}
  41. >
  42. <PlayIcon className="shrink-0 w-4 h-4 mr-1" aria-hidden="true" />
  43. <span className='uppercase text-[13px]'>{t('share.generation.run')}</span>
  44. </Button>
  45. </div>
  46. </div>
  47. )
  48. }
  49. export default React.memo(RunBatch)