import { FC, useCallback, useEffect, useMemo, useState } from "react"; import { useSearchParams } from "react-router-dom"; import Select from "react-select"; import { useActivateDataset, useCreateDatasetsDraft, useDeleteDataset, useDeleteFileFromDataset, useGetDatasets, } from "@/api/documents/hooks"; import Button from "@/components/generics/button/Button"; import Modal from "@/components/generics/modal/Modal"; import { DocsList } from "@/components/views/documents/docsList/DocsList"; import { CreateDatasetForm } from "@/components/views/documents/createDatasetForm/CreateDatasetForm"; import { AddDocumentForm } from "@/components/views/documents/addDocuimentForm/AddDocumentForm"; import "./Documents.scss"; const Documents: FC = () => { const { data: datasetsData, isLoading } = useGetDatasets(); const { mutate: deleteDatasetFn, isPending: isPendingDelete } = useDeleteDataset(); const { mutate: activateDatasetFn } = useActivateDataset(); const { mutate: deleteFileFn } = useDeleteFileFromDataset(); const { mutate: createDatasetsDraftFn } = useCreateDatasetsDraft(); const [searchParams, setSearchParams] = useSearchParams(); const [isOpen, setIsOpen] = useState(false); const [modalContent, setModalContent] = useState(null); useEffect(() => { if ( (!searchParams.get("datasetId") || !datasetsData?.find((e) => e.id.toString() == searchParams.get("datasetId"))) && datasetsData?.[0].id ) { setSearchParams({ datasetId: String(datasetsData?.[0].id) }); } }, [datasetsData, searchParams, setSearchParams]); const closeModal = () => setIsOpen(false); const currentDataset = useMemo( () => datasetsData?.find((e) => searchParams.get("datasetId") == e.id.toString()), [datasetsData, searchParams] ); const deleteDatasetModal = useMemo( () => (

Вы уверены что хотите удалить базу документов?

), [currentDataset?.id, datasetsData, deleteDatasetFn, isPendingDelete, setSearchParams] ); const activateDatasetModal = useMemo( () => (

Вы уверены что хотите выбрать новую базу документов? Процесс векторизации может занять продолжительное время.

), [activateDatasetFn, currentDataset?.id] ); const handleSelectChange = (selectedOption: { value: string; label: string } | null) => { const datasetId = selectedOption?.value ?? ""; setSearchParams({ datasetId }); }; const handleDeleteFile = useCallback( (fileId: number) => { if (currentDataset) { if (!currentDataset.isDraft) { createDatasetsDraftFn(currentDataset.id, { onSuccess: (newDatasetData) => { setSearchParams({ datasetId: newDatasetData.id.toString() }); deleteFileFn({ datasetId: newDatasetData.id, fileId: fileId }); }, }); } else { deleteFileFn({ datasetId: currentDataset.id, fileId: fileId }); } } }, [createDatasetsDraftFn, currentDataset, deleteFileFn, setSearchParams] ); const options = useMemo( () => datasetsData?.map((dataset) => ({ value: dataset.id.toString(), label: `${dataset.name} ${dataset.isDraft ? "(черновик)" : ""} ${dataset.isActive ? "(активный)" : ""}`, })), [datasetsData] ); return (