import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { Button, Input, Typography } from "@mui/joy"; import { useStorageStore } from "../store/module"; import { generateDialog } from "./Dialog"; import Icon from "./Icon"; import toastHelper from "./Toast"; import { showCommonDialog } from "./Dialog/CommonDialog"; interface Props extends DialogProps { storage?: Storage; } const CreateStorageServiceDialog: React.FC = (props: Props) => { const { destroy, storage } = props; const { t } = useTranslation(); const storageStore = useStorageStore(); const [storageCreate, setStorageCreate] = useState({ name: "", endPoint: "", region: "", accessKey: "", secretKey: "", bucket: "", urlPrefix: "", }); const isCreating = storage === undefined; useEffect(() => { if (storage) { setStorageCreate({ ...storage }); } }, []); const handleCloseBtnClick = () => { destroy(); }; const allowConfirmAction = () => { if ( storageCreate.name === "" || storageCreate.endPoint === "" || storageCreate.region === "" || storageCreate.accessKey === "" || storageCreate.bucket === "" || storageCreate.bucket === "" ) { return false; } return true; }; const handleConfirmBtnClick = async () => { try { if (isCreating) { await storageStore.createStorage(storageCreate); } else { await storageStore.patchStorage({ id: storage.id, ...storageCreate, }); } } catch (error: any) { console.error(error); toastHelper.error(error.response.data.message); } destroy(); }; const handleDeleteBtnClick = async () => { if (isCreating) { return; } showCommonDialog({ title: t("setting.storage-section.delete-storage"), content: t("setting.storage-section.warning-text"), style: "warning", dialogName: "delete-storage-dialog", onConfirm: async () => { try { await storageStore.deleteStorageById(storage.id); } catch (error: any) { console.error(error); toastHelper.error(error.response.data.message); } destroy(); }, }); }; const handleNameChange = (event: React.ChangeEvent) => { const name = event.target.value; setStorageCreate({ ...storageCreate, name, }); }; const handleEndPointChange = (event: React.ChangeEvent) => { const endPoint = event.target.value; setStorageCreate({ ...storageCreate, endPoint, }); }; const handleRegionChange = (event: React.ChangeEvent) => { const region = event.target.value; setStorageCreate({ ...storageCreate, region, }); }; const handleAccessKeyChange = (event: React.ChangeEvent) => { const accessKey = event.target.value; setStorageCreate({ ...storageCreate, accessKey, }); }; const handleSecretKeyChange = (event: React.ChangeEvent) => { const secretKey = event.target.value; setStorageCreate({ ...storageCreate, secretKey, }); }; const handleBucketChange = (event: React.ChangeEvent) => { const bucket = event.target.value; setStorageCreate({ ...storageCreate, bucket, }); }; const handleURLPrefixChange = (event: React.ChangeEvent) => { const urlPrefix = event.target.value; setStorageCreate({ ...storageCreate, urlPrefix, }); }; return ( <>

{isCreating ? t("setting.storage-section.create-a-service") : t("setting.storage-section.update-a-service")}

Name EndPoint Region AccessKey SecretKey Bucket URLPrefix
{!isCreating && ( )}
); }; function showCreateStorageServiceDialog(storage?: Storage) { generateDialog( { className: "create-storage-service-dialog", dialogName: "create-storage-service-dialog", }, CreateStorageServiceDialog, { storage } ); } export default showCreateStorageServiceDialog;