import { Button, Input, Typography } from "@mui/joy"; import { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import * as api from "@/helpers/api"; import { useTranslate } from "@/utils/i18n"; import { generateDialog } from "./Dialog"; import Icon from "./Icon"; import LearnMore from "./LearnMore"; import RequiredBadge from "./RequiredBadge"; interface Props extends DialogProps { storage?: ObjectStorage; confirmCallback?: () => void; } const CreateStorageServiceDialog: React.FC = (props: Props) => { const t = useTranslate(); const { destroy, storage, confirmCallback } = props; const [basicInfo, setBasicInfo] = useState({ name: "", }); const [type, setType] = useState("S3"); const [s3Config, setS3Config] = useState({ endPoint: "", region: "", accessKey: "", secretKey: "", path: "", bucket: "", urlPrefix: "", urlSuffix: "", }); 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.secretKey === "" || 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); toast.error(error.response.data.message); } if (confirmCallback) { confirmCallback(); } destroy(); }; const setPartialS3Config = (state: Partial) => { setS3Config({ ...s3Config, ...state, }); }; return ( <>
{t(isCreating ? "setting.storage-section.create-storage" : "setting.storage-section.update-storage")}
{t("common.name")} setBasicInfo({ ...basicInfo, name: e.target.value, }) } fullWidth /> {t("setting.storage-section.endpoint")} setPartialS3Config({ endPoint: e.target.value })} fullWidth /> {t("setting.storage-section.region")} setPartialS3Config({ region: e.target.value })} fullWidth /> {t("setting.storage-section.accesskey")} setPartialS3Config({ accessKey: e.target.value })} fullWidth /> {t("setting.storage-section.secretkey")} setPartialS3Config({ secretKey: e.target.value })} fullWidth /> {t("setting.storage-section.bucket")} setPartialS3Config({ bucket: e.target.value })} fullWidth />
{t("setting.storage-section.path")}
setPartialS3Config({ path: e.target.value })} fullWidth /> {t("setting.storage-section.url-prefix")} setPartialS3Config({ urlPrefix: e.target.value })} fullWidth /> {t("setting.storage-section.url-suffix")} setPartialS3Config({ urlSuffix: 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;