'use client' import type { FC } from 'react' import type { CrawlResultItem } from '@/models/datasets' import { cn } from '@langgenius/dify-ui/cn' import * as React from 'react' import { useCallback } from 'react' import { useTranslation } from 'react-i18next' import CheckboxWithLabel from './checkbox-with-label' import CrawledResultItem from './crawled-result-item' const I18N_PREFIX = 'stepOne.website' type Props = Readonly<{ className?: string list: CrawlResultItem[] checkedList: CrawlResultItem[] onSelectedChange: (selected: CrawlResultItem[]) => void onPreview: (payload: CrawlResultItem) => void usedTime: number }> const CrawledResult: FC = ({ className = '', list, checkedList, onSelectedChange, onPreview, usedTime, }) => { const { t } = useTranslation() const isCheckAll = checkedList.length === list.length const handleCheckedAll = useCallback(() => { if (!isCheckAll) onSelectedChange(list) else onSelectedChange([]) }, [isCheckAll, list, onSelectedChange]) const handleItemCheckChange = useCallback( (item: CrawlResultItem) => { return (checked: boolean) => { if (checked) onSelectedChange([...checkedList, item]) else onSelectedChange( checkedList.filter((checkedItem) => checkedItem.source_url !== item.source_url), ) } }, [checkedList, onSelectedChange], ) const [previewIndex, setPreviewIndex] = React.useState(-1) const handlePreview = useCallback( (index: number) => { return () => { setPreviewIndex(index) onPreview(list[index]!) } }, [list, onPreview], ) return (
$[`${I18N_PREFIX}.resetAll`], { ns: 'datasetCreation' }) : t(($) => $[`${I18N_PREFIX}.selectAll`], { ns: 'datasetCreation' }) } labelClassName="system-[13px] leading-[16px] font-medium text-text-secondary" />
{t(($) => $[`${I18N_PREFIX}.scrapTimeInfo`], { ns: 'datasetCreation', total: list.length, time: usedTime.toFixed(1), })}
{list.map((item, index) => ( checkedItem.source_url === item.source_url, )} onCheckChange={handleItemCheckChange(item)} /> ))}
) } export default React.memo(CrawledResult)