import { DetailsList, DetailsListLayoutMode, IColumn, SelectionMode } from "@fluentui/react"; import React, { ChangeEvent, FunctionComponent, useState } from "react"; import { Upload } from "../../../Common/Upload/Upload"; import { UploadDetailsRecord } from "../../../Contracts/ViewModels"; import { userContext } from "../../../UserContext"; import { logConsoleError } from "../../../Utils/NotificationConsoleUtils"; import Explorer from "../../Explorer"; import { getErrorMessage } from "../../Tables/Utilities"; import { GenericRightPaneComponent, GenericRightPaneProps, } from "../GenericRightPaneComponent/GenericRightPaneComponent"; export interface UploadItemsPaneProps { explorer: Explorer; closePanel: () => void; } const getTitle = (): string => { if (userContext.apiType === "Cassandra" || userContext.apiType === "Tables") { return "Upload Tables"; } else if (userContext.apiType === "Gremlin") { return "Upload Graph"; } else { return "Upload Items"; } }; export const UploadItemsPane: FunctionComponent = ({ explorer, closePanel, }: UploadItemsPaneProps) => { const [files, setFiles] = useState(); const [uploadFileData, setUploadFileData] = useState([]); const [formError, setFormError] = useState(""); const [formErrorDetail, setFormErrorDetail] = useState(""); const [isExecuting, setIsExecuting] = useState(); const onSubmit = () => { setFormError(""); if (!files || files.length === 0) { setFormError("No files specified"); setFormErrorDetail("No files were specified. Please input at least one file."); logConsoleError("Could not upload items -- No files were specified. Please input at least one file."); } const selectedCollection = explorer.findSelectedCollection(); setIsExecuting(true); selectedCollection ?.uploadFiles(files) .then( (uploadDetails) => { setUploadFileData(uploadDetails.data); setFiles(undefined); }, (error: Error) => { const errorMessage = getErrorMessage(error); setFormError(errorMessage); setFormErrorDetail(errorMessage); } ) .finally(() => { setIsExecuting(false); }); }; const updateSelectedFiles = (event: ChangeEvent): void => { setFiles(event.target.files); }; const genericPaneProps: GenericRightPaneProps = { expandConsole: () => explorer.expandConsole(), formError, formErrorDetail, id: "uploaditemspane", isExecuting: isExecuting, title: getTitle(), submitButtonText: "Upload", onClose: closePanel, onSubmit, }; const columns: IColumn[] = [ { key: "fileName", name: "FILE NAME", fieldName: "fileName", minWidth: 140, maxWidth: 140, }, { key: "status", name: "STATUS", fieldName: "numSucceeded", minWidth: 140, maxWidth: 140, isRowHeader: true, isResizable: true, data: "string", isPadded: true, }, ]; const _renderItemColumn = (item: UploadDetailsRecord, index: number, column: IColumn) => { switch (column.key) { case "status": return `${item.numSucceeded} created, ${item.numThrottled} throttled, ${item.numFailed} errors`; default: return item.fileName; } }; return (
{uploadFileData?.length > 0 && (
File upload status
)}
); };