Added delete bucket lifecycle rule capability (#1547)
Signed-off-by: Benjamin Perez <benjamin@bexsoft.net> Co-authored-by: Benjamin Perez <benjamin@bexsoft.net>
This commit is contained in:
@@ -42,6 +42,7 @@ import SecureComponent, {
|
||||
} from "../../../../common/SecureComponent/SecureComponent";
|
||||
import { IAM_SCOPES } from "../../../../common/SecureComponent/permissions";
|
||||
import RBIconButton from "./SummaryItems/RBIconButton";
|
||||
import DeleteBucketLifecycleRule from "./DeleteBucketLifecycleRule";
|
||||
|
||||
const styles = (theme: Theme) =>
|
||||
createStyles({
|
||||
@@ -73,6 +74,9 @@ const BucketLifecyclePanel = ({
|
||||
const [editLifecycleOpen, setEditLifecycleOpen] = useState<boolean>(false);
|
||||
const [selectedLifecycleRule, setSelectedLifecycleRule] =
|
||||
useState<LifeCycleItem | null>(null);
|
||||
const [deleteLifecycleOpen, setDeleteLifecycleOpen] =
|
||||
useState<boolean>(false);
|
||||
const [selectedID, setSelectedID] = useState<string | null>(null);
|
||||
|
||||
const bucketName = match.params["bucketName"];
|
||||
|
||||
@@ -99,6 +103,7 @@ const BucketLifecyclePanel = ({
|
||||
})
|
||||
.catch((err: ErrorResponseHandler) => {
|
||||
console.error(err);
|
||||
setLifecycleRecords([]);
|
||||
setLoadingLifecycle(false);
|
||||
});
|
||||
} else {
|
||||
@@ -127,6 +132,15 @@ const BucketLifecyclePanel = ({
|
||||
}
|
||||
};
|
||||
|
||||
const closeDelLCRefresh = (refresh: boolean) => {
|
||||
setDeleteLifecycleOpen(false);
|
||||
setSelectedID(null);
|
||||
|
||||
if (refresh) {
|
||||
setLoadingLifecycle(true);
|
||||
}
|
||||
};
|
||||
|
||||
const expirationRender = (expiration: any) => {
|
||||
if (expiration.days) {
|
||||
return `${expiration.days} day${expiration.days > 1 ? "s" : ""}`;
|
||||
@@ -194,6 +208,14 @@ const BucketLifecyclePanel = ({
|
||||
setEditLifecycleOpen(true);
|
||||
},
|
||||
},
|
||||
{
|
||||
type: "delete",
|
||||
onClick(valueToDelete: string): any {
|
||||
setSelectedID(valueToDelete);
|
||||
setDeleteLifecycleOpen(true);
|
||||
},
|
||||
sendOnlyId: true,
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
@@ -213,6 +235,14 @@ const BucketLifecyclePanel = ({
|
||||
closeModalAndRefresh={closeAddLCAndRefresh}
|
||||
/>
|
||||
)}
|
||||
{deleteLifecycleOpen && selectedID && (
|
||||
<DeleteBucketLifecycleRule
|
||||
id={selectedID}
|
||||
bucket={bucketName}
|
||||
deleteOpen={deleteLifecycleOpen}
|
||||
onCloseAndRefresh={closeDelLCRefresh}
|
||||
/>
|
||||
)}
|
||||
<Grid container>
|
||||
<Grid item xs={12} className={classes.actionsTray}>
|
||||
<PanelTitle>Lifecycle Rules</PanelTitle>
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
// This file is part of MinIO Console Server
|
||||
// Copyright (c) 2022 MinIO, Inc.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import React, { useState, useEffect } from "react";
|
||||
import { connect } from "react-redux";
|
||||
import { DialogContentText } from "@mui/material";
|
||||
import { Theme } from "@mui/material/styles";
|
||||
import createStyles from "@mui/styles/createStyles";
|
||||
import withStyles from "@mui/styles/withStyles";
|
||||
import { modalBasic } from "../../Common/FormComponents/common/styleLibrary";
|
||||
import { ErrorResponseHandler } from "../../../../common/types";
|
||||
import { setErrorSnackMessage } from "../../../../actions";
|
||||
import { ConfirmDeleteIcon } from "../../../../icons";
|
||||
import ConfirmDialog from "../../Common/ModalWrapper/ConfirmDialog";
|
||||
import api from "../../../../common/api";
|
||||
|
||||
interface IDeleteLifecycleRule {
|
||||
deleteOpen: boolean;
|
||||
onCloseAndRefresh: (refresh: boolean) => any;
|
||||
bucket: string;
|
||||
id: string;
|
||||
setErrorSnackMessage: typeof setErrorSnackMessage;
|
||||
}
|
||||
|
||||
const styles = (theme: Theme) =>
|
||||
createStyles({
|
||||
...modalBasic,
|
||||
});
|
||||
|
||||
const DeleteBucketLifecycleRule = ({
|
||||
onCloseAndRefresh,
|
||||
deleteOpen,
|
||||
bucket,
|
||||
id,
|
||||
setErrorSnackMessage,
|
||||
}: IDeleteLifecycleRule) => {
|
||||
const [deletingRule, setDeletingRule] = useState<boolean>(false);
|
||||
|
||||
useEffect(() => {
|
||||
if (deletingRule) {
|
||||
api
|
||||
.invoke("DELETE", `/api/v1/buckets/${bucket}/lifecycle/${id}`)
|
||||
.then((res) => {
|
||||
setDeletingRule(false);
|
||||
onCloseAndRefresh(true);
|
||||
})
|
||||
.catch((err: ErrorResponseHandler) => {
|
||||
setDeletingRule(false);
|
||||
setErrorSnackMessage(err);
|
||||
});
|
||||
}
|
||||
}, [deletingRule, bucket, id, onCloseAndRefresh, setErrorSnackMessage]);
|
||||
|
||||
const onConfirmDelete = () => {
|
||||
setDeletingRule(true);
|
||||
};
|
||||
|
||||
return (
|
||||
<ConfirmDialog
|
||||
title={`Delete Lifecycle Rule`}
|
||||
confirmText={"Delete"}
|
||||
isOpen={deleteOpen}
|
||||
isLoading={deletingRule}
|
||||
onConfirm={onConfirmDelete}
|
||||
titleIcon={<ConfirmDeleteIcon />}
|
||||
onClose={() => onCloseAndRefresh(false)}
|
||||
confirmationContent={
|
||||
<DialogContentText>
|
||||
Are you sure you want to delete the <strong>{id}</strong> rule?
|
||||
</DialogContentText>
|
||||
}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
const connector = connect(null, {
|
||||
setErrorSnackMessage,
|
||||
});
|
||||
|
||||
export default withStyles(styles)(connector(DeleteBucketLifecycleRule));
|
||||
@@ -141,7 +141,6 @@ const EditLifecycleConfiguration = ({
|
||||
}, [ilmType, expiryDays, transitionDays, storageClass]);
|
||||
|
||||
useEffect(() => {
|
||||
console.log("lifecycle::", lifecycle);
|
||||
if (lifecycle.status === "Enabled") {
|
||||
setEnabled(true);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user