import { useEffect, useState } from "react"; import { Button, Input, Typography } from "@mui/joy"; import * as api from "../helpers/api"; import { generateDialog } from "./Dialog"; import Icon from "./Icon"; import toastHelper from "./Toast"; interface Props extends DialogProps { storage?: ObjectStorage; confirmCallback?: () => void; } const CreateStorageServiceDialog: React.FC = (props: Props) => { const { destroy, storage, confirmCallback } = props; const [basicInfo, setBasicInfo] = useState({ name: "", }); const [type, setType] = useState("S3"); const [s3Config, setS3Config] = useState({ endPoint: "", region: "", accessKey: "", secretKey: "", bucket: "", urlPrefix: "", }); const isCreating = storage === undefined; useEffect(() => { if (storage) { setBasicInfo({ name: storage.name, }); setType(storage.type); if (storage.type === "S3") { setS3Config(storage.config.s3Config); } } }, []); const handleCloseBtnClick = () => { destroy(); }; const allowConfirmAction = () => { if (basicInfo.name === "") { return false; } if (type === "S3") { if (s3Config.endPoint === "" || s3Config.region === "" || s3Config.accessKey === "" || s3Config.bucket === "") { return false; } } return true; }; const handleConfirmBtnClick = async () => { try { if (isCreating) { await api.createStorage({ ...basicInfo, type: type, config: { s3Config: s3Config, }, }); } else { await api.patchStorage({ id: storage.id, type: type, ...basicInfo, config: { s3Config: s3Config, }, }); } } catch (error: any) { console.error(error); toastHelper.error(error.response.data.message); } if (confirmCallback) { confirmCallback(); } destroy(); }; const setPartialS3Config = (state: Partial) => { setS3Config({ ...s3Config, ...state, }); }; return ( <>

{isCreating ? "Create storage" : "Update storage"} Learn more

Name setBasicInfo({ ...basicInfo, name: e.target.value, }) } fullWidth /> EndPoint (S3-compatible server URL) setPartialS3Config({ endPoint: e.target.value })} fullWidth /> Region (Region name) setPartialS3Config({ region: e.target.value })} fullWidth /> AccessKey (Access Key / Access ID) setPartialS3Config({ accessKey: e.target.value })} fullWidth /> SecretKey (Secret Key / Secret Access Key) setPartialS3Config({ secretKey: e.target.value })} fullWidth /> Bucket (Bucket name) setPartialS3Config({ bucket: e.target.value })} fullWidth /> URLPrefix (Custom URL prefix; Optional) setPartialS3Config({ urlPrefix: e.target.value })} fullWidth />
); }; function showCreateStorageServiceDialog(storage?: ObjectStorage, confirmCallback?: () => void) { generateDialog( { className: "create-storage-service-dialog", dialogName: "create-storage-service-dialog", }, CreateStorageServiceDialog, { storage, confirmCallback } ); } export default showCreateStorageServiceDialog;