All files / src/pages/flowsheet-page/flowsheet/LeftSideBar/Scenarios useFileUpload.ts

38.63% Statements 17/44
12.5% Branches 2/16
40% Functions 4/10
40% Lines 16/40

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106                                        82x 2x 2x       2x         2x 2x 2x 4x 2x 70x 140x     2x               2x 2x 2x 2x                                                                                                            
// useFileUpload.ts
import Papa from "papaparse";
import readXlsxFile from "read-excel-file";
import { toast } from "sonner";
 
export function useFileUpload({ 
  onSuccess, 
  onError, 
  uploadMSS, 
  updateUploadedFileName, 
  flowsheetId, 
  scenarioId 
}: {
  onSuccess: (fileName: string) => void;
  onError: (err: any) => void;
  uploadMSS: any;
  updateUploadedFileName: (name: string) => void;
  flowsheetId: string;
  scenarioId: number;
}) {
  return async (file: File) => {
    if (file.type === "text/csv") {
      Papa.parse(file, {
        worker: true,
        skipEmptyLines: true,
        complete: (result) => {
          Iif (result.error) {
            toast.error(`CSV parsing error: ${result.error?.message}`);
            onError(result.error);
            return;
          }
          const data = result.data;
          const columns = Object.keys(data[0]);
          const uploadData: { [key: string]: number[] } = {};
          for (const columnName of columns) uploadData[columnName] = [];
          for (const row of data) {
            for (const columnName of columns) {
              uploadData[columnName].push(row[columnName]);
            }
          }
          uploadMSS({
            uploadData: {
              flowsheet: flowsheetId,
              data: uploadData,
              scenario: scenarioId,
            },
          })
            .then((response: any) => {
              if (!response.error) {
                updateUploadedFileName(file.name);
                toast.success("Upload successful!");
                onSuccess(file.name);
              } else E{
                toast.error(`Upload failed: ${response.error}`);
                onError(response.error);
              }
            })
            .catch((error: any) => {
              toast.error(`Upload error: ${error.message || error}`);
              onError(error);
            });
        },
        header: true,
      });
    } else E{
      readXlsxFile(file).then((rows: any) => {
        const data = rows.map((row: any) => row as string[] | number[]);
        Iif (
          data[data.length - 1].length === 1 &&
          data[data.length - 1][0] === ""
        ) {
          data.pop(); // remove empty row
        }
        const columns = data[0];
        const uploadData: Record<string, any[]> = {};
        for (let i = 0; i < columns.length; i++) {
          uploadData[columns[i]] = data.slice(1).map((row) => row[i]);
        }
        uploadMSS({
          uploadData: {
            flowsheet: flowsheetId,
            data: uploadData,
            scenario: scenarioId,
          },
        })
          .then((response: any) => {
            if (!response.error) {
              updateUploadedFileName("Preview");
              toast.success("Upload successful!");
              onSuccess("Preview");
            } else {
              toast.error(
                `Upload failed: ${response.error.message || response.error}`,
              );
              onError(response.error);
            }
          })
          .catch((error: any) => {
            toast.error(`Upload error: ${error.message || error}`);
            onError(error);
          });
      });
    }
  };
}