mirror of
https://github.com/langgenius/dify.git
synced 2026-07-28 23:59:34 +08:00
59 lines
1.8 KiB
TypeScript
59 lines
1.8 KiB
TypeScript
'use client'
|
|
import type { FC } from 'react'
|
|
import { Button } from '@langgenius/dify-ui/button'
|
|
import { cn } from '@langgenius/dify-ui/cn'
|
|
import { RiLoader2Line, RiPlayLargeLine } from '@remixicon/react'
|
|
import * as React from 'react'
|
|
import { useTranslation } from 'react-i18next'
|
|
import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints'
|
|
import CSVDownload from './csv-download'
|
|
import CSVReader from './csv-reader'
|
|
|
|
type IRunBatchProps = {
|
|
vars: { name: string }[]
|
|
onSend: (data: string[][]) => void
|
|
isAllFinished: boolean
|
|
}
|
|
|
|
const RunBatch: FC<IRunBatchProps> = ({ vars, onSend, isAllFinished }) => {
|
|
const { t } = useTranslation()
|
|
const media = useBreakpoints()
|
|
const isPC = media === MediaType.pc
|
|
|
|
const [csvData, setCsvData] = React.useState<string[][]>([])
|
|
const [isParsed, setIsParsed] = React.useState(false)
|
|
const handleParsed = (data: string[][]) => {
|
|
setCsvData(data)
|
|
// console.log(data)
|
|
setIsParsed(true)
|
|
}
|
|
|
|
const handleSend = () => {
|
|
onSend(csvData)
|
|
}
|
|
const Icon = isAllFinished ? RiPlayLargeLine : RiLoader2Line
|
|
return (
|
|
<div className="pt-4">
|
|
<CSVReader onParsed={handleParsed} />
|
|
<CSVDownload vars={vars} />
|
|
<div className="flex justify-end">
|
|
<Button
|
|
variant="primary"
|
|
className={cn('mt-4 pr-4 pl-3', !isPC && 'grow')}
|
|
onClick={handleSend}
|
|
disabled={!isParsed || !isAllFinished}
|
|
>
|
|
<Icon
|
|
className={cn(!isAllFinished && 'animate-spin', 'mr-1 size-4 shrink-0')}
|
|
aria-hidden="true"
|
|
/>
|
|
<span className="text-[13px] uppercase">
|
|
{t(($) => $['generation.run'], { ns: 'share' })}
|
|
</span>
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
export default React.memo(RunBatch)
|