Skip to content

Commit 3ba7b34

Browse files
adfostprakashsvmxdvaldivia
authored
Delete all versions (#1376)
* delete all versions * style Co-authored-by: Prakash Senthil Vel <23444145+prakashsvmx@users.noreply.github.com> Co-authored-by: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com>
1 parent d9531f9 commit 3ba7b34

File tree

12 files changed

+211
-16
lines changed

12 files changed

+211
-16
lines changed

portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/DeleteMultipleObjects.tsx

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,23 @@
1414
// You should have received a copy of the GNU Affero General Public License
1515
// along with this program. If not, see <http://www.gnu.org/licenses/>.
1616

17-
import React from "react";
17+
import React, { useState } from "react";
1818
import { connect } from "react-redux";
1919
import { DialogContentText } from "@mui/material";
2020
import { setErrorSnackMessage } from "../../../../../../actions";
2121
import { ErrorResponseHandler } from "../../../../../../common/types";
2222
import useApi from "../../../../Common/Hooks/useApi";
2323
import ConfirmDialog from "../../../../Common/ModalWrapper/ConfirmDialog";
2424
import { ConfirmDeleteIcon } from "../../../../../../icons";
25+
import FormSwitchWrapper from "../../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper";
2526

2627
interface IDeleteObjectProps {
2728
closeDeleteModalAndRefresh: (refresh: boolean) => void;
2829
deleteOpen: boolean;
2930
selectedObjects: string[];
3031
selectedBucket: string;
3132
setErrorSnackMessage: typeof setErrorSnackMessage;
33+
versioning: boolean;
3234
}
3335

3436
const DeleteObject = ({
@@ -37,10 +39,12 @@ const DeleteObject = ({
3739
selectedBucket,
3840
selectedObjects,
3941
setErrorSnackMessage,
42+
versioning,
4043
}: IDeleteObjectProps) => {
4144
const onDelSuccess = () => closeDeleteModalAndRefresh(true);
4245
const onDelError = (err: ErrorResponseHandler) => setErrorSnackMessage(err);
4346
const onClose = () => closeDeleteModalAndRefresh(false);
47+
const [deleteVersions, setDeleteVersions] = useState<boolean>(false);
4448

4549
const [deleteLoading, invokeDeleteApi] = useApi(onDelSuccess, onDelError);
4650

@@ -68,7 +72,7 @@ const DeleteObject = ({
6872
if (toSend) {
6973
invokeDeleteApi(
7074
"POST",
71-
`/api/v1/buckets/${selectedBucket}/delete-objects`,
75+
`/api/v1/buckets/${selectedBucket}/delete-objects?all_versions=${deleteVersions}`,
7276
toSend
7377
);
7478
}
@@ -87,6 +91,20 @@ const DeleteObject = ({
8791
<DialogContentText>
8892
Are you sure you want to delete the selected {selectedObjects.length}{" "}
8993
objects?{" "}
94+
{versioning && (
95+
<FormSwitchWrapper
96+
label={"Delete All Versions"}
97+
indicatorLabels={["Yes", "No"]}
98+
checked={deleteVersions}
99+
value={"delete_versions"}
100+
id="delete-versions"
101+
name="delete-versions"
102+
onChange={(e) => {
103+
setDeleteVersions(!deleteVersions);
104+
}}
105+
description=""
106+
/>
107+
)}
90108
</DialogContentText>
91109
}
92110
/>

portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/DeleteObject.tsx

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
// You should have received a copy of the GNU Affero General Public License
1515
// along with this program. If not, see <http://www.gnu.org/licenses/>.
1616

17-
import React from "react";
17+
import React, { useState } from "react";
1818
import { connect } from "react-redux";
1919
import { DialogContentText } from "@mui/material";
2020
import { setErrorSnackMessage } from "../../../../../../actions";
@@ -23,13 +23,15 @@ import { decodeFileName } from "../../../../../../common/utils";
2323
import ConfirmDialog from "../../../../Common/ModalWrapper/ConfirmDialog";
2424
import useApi from "../../../../Common/Hooks/useApi";
2525
import { ConfirmDeleteIcon } from "../../../../../../icons";
26+
import FormSwitchWrapper from "../../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper";
2627

2728
interface IDeleteObjectProps {
2829
closeDeleteModalAndRefresh: (refresh: boolean) => void;
2930
deleteOpen: boolean;
3031
selectedObject: string;
3132
selectedBucket: string;
3233
setErrorSnackMessage: typeof setErrorSnackMessage;
34+
versioning: boolean;
3335
}
3436

3537
const DeleteObject = ({
@@ -38,12 +40,14 @@ const DeleteObject = ({
3840
selectedBucket,
3941
selectedObject,
4042
setErrorSnackMessage,
43+
versioning,
4144
}: IDeleteObjectProps) => {
4245
const onDelSuccess = () => closeDeleteModalAndRefresh(true);
4346
const onDelError = (err: ErrorResponseHandler) => setErrorSnackMessage(err);
4447
const onClose = () => closeDeleteModalAndRefresh(false);
4548

4649
const [deleteLoading, invokeDeleteApi] = useApi(onDelSuccess, onDelError);
50+
const [deleteVersions, setDeleteVersions] = useState<boolean>(false);
4751

4852
if (!selectedObject) {
4953
return null;
@@ -53,7 +57,7 @@ const DeleteObject = ({
5357
const recursive = decodedSelectedObject.endsWith("/");
5458
invokeDeleteApi(
5559
"DELETE",
56-
`/api/v1/buckets/${selectedBucket}/objects?path=${selectedObject}&recursive=${recursive}`
60+
`/api/v1/buckets/${selectedBucket}/objects?path=${selectedObject}&recursive=${recursive}&all_versions=${deleteVersions}`
5761
);
5862
};
5963

@@ -69,7 +73,21 @@ const DeleteObject = ({
6973
confirmationContent={
7074
<DialogContentText>
7175
Are you sure you want to delete:{" "}
72-
<b>{decodeFileName(selectedObject)}</b>?{" "}
76+
<b>{decodeFileName(selectedObject)}</b>? <br />
77+
{versioning && (
78+
<FormSwitchWrapper
79+
label={"Delete All Versions"}
80+
indicatorLabels={["Yes", "No"]}
81+
checked={deleteVersions}
82+
value={"delete_versions"}
83+
id="delete-versions"
84+
name="delete-versions"
85+
onChange={(e) => {
86+
setDeleteVersions(!deleteVersions);
87+
}}
88+
description=""
89+
/>
90+
)}
7391
</DialogContentText>
7492
}
7593
/>

portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/ListObjects.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1098,6 +1098,7 @@ const ListObjects = ({
10981098
selectedBucket={bucketName}
10991099
selectedObject={encodeFileName(selectedObject)}
11001100
closeDeleteModalAndRefresh={closeDeleteModalAndRefresh}
1101+
versioning={isVersioned}
11011102
/>
11021103
)}
11031104
{deleteMultipleOpen && (
@@ -1106,6 +1107,7 @@ const ListObjects = ({
11061107
selectedBucket={bucketName}
11071108
selectedObjects={selectedObjects}
11081109
closeDeleteModalAndRefresh={closeDeleteMultipleModalAndRefresh}
1110+
versioning={isVersioned}
11091111
/>
11101112
)}
11111113
{createFolderOpen && (

portal-ui/src/screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/ObjectDetails.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,7 @@ const ObjectDetails = ({
478478
selectedBucket={bucketName}
479479
selectedObject={internalPaths}
480480
closeDeleteModalAndRefresh={closeDeleteModal}
481+
versioning={distributedSetup}
481482
/>
482483
)}
483484
{tagModalOpen && actualInfo && (

restapi/embedded_spec.go

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

restapi/operations/user_api/delete_multiple_objects_parameters.go

Lines changed: 35 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

restapi/operations/user_api/delete_multiple_objects_urlbuilder.go

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

restapi/operations/user_api/delete_object_parameters.go

Lines changed: 32 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

restapi/operations/user_api/delete_object_urlbuilder.go

Lines changed: 12 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)