File size: 2,138 Bytes
79278ec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import "../styles.scss";

import { FC, useCallback, useState } from "react";
import { useAddFileToDataset, useCreateDatasetsDraft } from "@/api/documents/hooks";

import { AddDocumentFormProps } from "./AddDocumentForm.interface";
import Button from "@/components/generics/button/Button";
import { GoFile } from "react-icons/go";

export const AddDocumentForm: FC<AddDocumentFormProps> = ({ datasetId, isDraft, closeModal, setSearchParams }) => {
  const [file, setFile] = useState<File | undefined>();
  const { mutate: addFileToDatasetFn } = useAddFileToDataset();
  const { mutate: createDatasetsDraftFn } = useCreateDatasetsDraft();

  const handleUpload = useCallback(() => {
    if (file) {
      if (!isDraft) {
        createDatasetsDraftFn(datasetId, {
          onSuccess: (newDatasetData) => {
            const formData = new FormData();

            formData.append("file", file);
            addFileToDatasetFn(
              {
                id: newDatasetData.id,
                data: formData,
              },
              {
                onSuccess: () => {
                  closeModal();
                  setSearchParams({ datasetId: newDatasetData.id.toString() });
                },
              }
            );
          },
        });
      } else {
        const formData = new FormData();

        formData.append("file", file);
        addFileToDatasetFn(
          {
            id: datasetId,
            data: formData,
          },
          { onSuccess: closeModal }
        );
      }
    }
  }, [addFileToDatasetFn, closeModal, createDatasetsDraftFn, datasetId, file, isDraft, setSearchParams]);

  return (
    <div>
      <label className="input-file">
        <input type="file" name="file" onChange={(file) => setFile(file.target.files?.[0])} accept=".xml, .docx" />
        <span>Выберите файл формата xml или docx</span>
      </label>
      <div className="file-name">
        {file && <GoFile />}
        {file?.name}
      </div>
      <div className="actions">
        <Button name="Продолжить" onClick={handleUpload} />
      </div>
    </div>
  );
};