import React, { useCallback } from "react";
|
import { useAPI } from "../../../providers/ApiProvider";
|
import { unique } from "../../../utils/helpers";
|
import { importFiles } from "./utils";
|
|
const DEFAULT_COLUMN = "$undefined$";
|
|
export const useImportPage = (project, sample) => {
|
const [uploading, setUploadingStatus] = React.useState(false);
|
const [fileIds, setFileIds] = React.useState([]);
|
const [_columns, _setColumns] = React.useState([]);
|
const addColumns = (cols) => _setColumns((current) => unique(current.concat(cols)));
|
// undefined - no csv added, all good, keep moving
|
// choose - csv added, block modal until user chooses a way to hangle csv
|
// tasks | ts — choice made, all good, this cannot be undone
|
const [csvHandling, setCsvHandling] = React.useState(); // undefined | choose | tasks | ts
|
const uploadDisabled = csvHandling === "choose";
|
const api = useAPI();
|
|
// don't use columns from csv if we'll not use it as csv
|
const columns = ["choose", "ts"].includes(csvHandling) ? [DEFAULT_COLUMN] : _columns;
|
|
const finishUpload = async () => {
|
setUploadingStatus(true);
|
const imported = await api.callApi("reimportFiles", {
|
params: {
|
pk: project.id,
|
},
|
body: {
|
file_upload_ids: fileIds,
|
files_as_tasks_list: csvHandling === "tasks",
|
},
|
});
|
|
setUploadingStatus(false);
|
return imported;
|
};
|
|
const uploadSample = useCallback(
|
async (sample, onStart, onFinish) => {
|
onStart?.();
|
const url = sample.url;
|
const body = new URLSearchParams({ url });
|
await importFiles({
|
files: [{ name: url }],
|
body,
|
project,
|
});
|
onFinish?.();
|
},
|
[project],
|
);
|
|
const pageProps = {
|
onWaiting: setUploadingStatus,
|
// onDisableSubmit: onDisableSubmit,
|
highlightCsvHandling: uploadDisabled,
|
addColumns,
|
csvHandling,
|
setCsvHandling,
|
onFileListUpdate: setFileIds,
|
dontCommitToProject: true,
|
};
|
|
return { columns, uploading, uploadDisabled, finishUpload, fileIds, pageProps, uploadSample };
|
};
|