'use client' import { useEffect, useRef } from 'react' import { useTranslation } from 'react-i18next' import NewDatasetCard from './new-dataset-card' import DatasetCard from './dataset-card' import { useSelector as useAppContextWithSelector } from '@/context/app-context' import { useDatasetList, useResetDatasetList } from '@/service/knowledge/use-dataset' type Props = { containerRef: React.RefObject tags: string[] keywords: string includeAll: boolean } const Datasets = ({ tags, keywords, includeAll, }: Props) => { const { t } = useTranslation() const isCurrentWorkspaceEditor = useAppContextWithSelector(state => state.isCurrentWorkspaceEditor) const { data: datasetList, fetchNextPage, hasNextPage, isFetching, } = useDatasetList({ initialPage: 1, tag_ids: tags, limit: 30, include_all: includeAll, keyword: keywords, }) const resetDatasetList = useResetDatasetList() const loadingStateRef = useRef(false) const anchorRef = useRef(null) const observerRef = useRef() useEffect(() => { loadingStateRef.current = isFetching document.title = `${t('dataset.knowledge')} - Dify` }, [isFetching, t]) useEffect(() => { if (anchorRef.current) { observerRef.current = new IntersectionObserver((entries) => { if (entries[0].isIntersecting && hasNextPage) fetchNextPage() }, { rootMargin: '100px', }) observerRef.current.observe(anchorRef.current) } return () => observerRef.current?.disconnect() }, [anchorRef, datasetList, hasNextPage, fetchNextPage]) return ( <>
) } export default Datasets