fleet/frontend/pages/ManageControlsPage/Scripts/components/ScriptUploader/ScriptUploader.tsx
Marko Lisica 8162d052bf
Icons improvements (making frontend consistent with Figma component library) (#14185)
# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [ ] Manual QA for all new/changed functionality

---------

Co-authored-by: Gabriel Hernandez <ghernandez345@gmail.com>
2023-10-31 16:06:38 +00:00

58 lines
1.5 KiB
TypeScript

import React, { useContext, useState } from "react";
import { AxiosResponse } from "axios";
import { IApiError } from "interfaces/errors";
import { NotificationContext } from "context/notification";
import scriptAPI from "services/entities/scripts";
import FileUploader from "pages/ManageControlsPage/components/FileUploader";
import { getErrorMessage } from "./helpers";
const baseClass = "script-uploader";
interface IScriptPackageUploaderProps {
currentTeamId: number;
onUpload: () => void;
}
const ScriptPackageUploader = ({
currentTeamId,
onUpload,
}: IScriptPackageUploaderProps) => {
const { renderFlash } = useContext(NotificationContext);
const [showLoading, setShowLoading] = useState(false);
const onUploadFile = async (files: FileList | null) => {
if (!files || files.length === 0) {
return;
}
const file = files[0];
setShowLoading(true);
try {
await scriptAPI.uploadScript(file, currentTeamId);
renderFlash("success", "Successfully uploaded!");
onUpload();
} catch (e) {
const error = e as AxiosResponse<IApiError>;
renderFlash("error", `Couldn't upload. ${getErrorMessage(error)}`);
} finally {
setShowLoading(false);
}
};
return (
<FileUploader
className={baseClass}
graphicName="file-sh"
message="Script (.sh)"
additionalInfo="Script will run with “#!/bin/sh”."
accept=".sh"
onFileUpload={onUploadFile}
isLoading={showLoading}
/>
);
};
export default ScriptPackageUploader;