From a0a6b33ecdaa3400e2b2712b93bd6be794a62b55 Mon Sep 17 00:00:00 2001 From: jinapurapu <65002498+jinapurapu@users.noreply.github.com> Date: Tue, 30 Jan 2024 21:15:11 -0800 Subject: [PATCH] Add HelpTip to clarify Usage calculation (#3143) --- .../Buckets/ListBuckets/BucketListItem.tsx | 26 +++++++++++--- .../BasicDashboard/ReportedUsage.tsx | 35 ++++++++++++++++--- .../Console/ObjectBrowser/OBBucketList.tsx | 20 +++++++++-- 3 files changed, 70 insertions(+), 11 deletions(-) diff --git a/web-app/src/screens/Console/Buckets/ListBuckets/BucketListItem.tsx b/web-app/src/screens/Console/Buckets/ListBuckets/BucketListItem.tsx index 80c11f71a..d750e9838 100644 --- a/web-app/src/screens/Console/Buckets/ListBuckets/BucketListItem.tsx +++ b/web-app/src/screens/Console/Buckets/ListBuckets/BucketListItem.tsx @@ -13,7 +13,7 @@ // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -import React, { Fragment } from "react"; +import React, { Fragment, useState } from "react"; import get from "lodash/get"; import styled from "styled-components"; import { Link, useNavigate } from "react-router-dom"; @@ -23,6 +23,7 @@ import { BucketsIcon, Checkbox, Grid, + HelpTip, ReportedUsageIcon, TotalObjectsIcon, } from "mds"; @@ -37,6 +38,7 @@ import { } from "../../../../common/SecureComponent/permissions"; import { hasPermission } from "../../../../common/SecureComponent"; import { Bucket } from "../../../../api/consoleApi"; +import { usageClarifyingContent } from "screens/Console/Dashboard/BasicDashboard/ReportedUsage"; const BucketItemMain = styled.div(({ theme }) => ({ border: `${get(theme, "borderColor", "#eaeaea")} 1px solid`, @@ -129,6 +131,8 @@ const BucketListItem = ({ }: IBucketListItem) => { const navigate = useNavigate(); + const [clickOverride, setClickOverride] = useState(false); + const usage = niceBytes(`${bucket.size}` || "0"); const usageScalar = usage.split(" ")[0]; const usageUnit = usage.split(" ")[1]; @@ -157,7 +161,7 @@ const BucketListItem = ({ return ( { - navigate(`/buckets/${bucket.name}/admin`); + !clickOverride && navigate(`/buckets/${bucket.name}/admin`); }} id={`manageBucket-${bucket.name}`} className={`bucket-item ${manageAllowed ? "disabled" : ""}`} @@ -205,8 +209,22 @@ const BucketListItem = ({ /> - - + + bucket.details?.versioning && setClickOverride(true) + } + onMouseLeave={() => + bucket.details?.versioning && setClickOverride(false) + } + > + {bucket.details?.versioning && ( + + {" "} + + )} + {!bucket.details?.versioning && } Usage
{usageScalar} diff --git a/web-app/src/screens/Console/Dashboard/BasicDashboard/ReportedUsage.tsx b/web-app/src/screens/Console/Dashboard/BasicDashboard/ReportedUsage.tsx index 6cb19ebf4..d5b7b8226 100644 --- a/web-app/src/screens/Console/Dashboard/BasicDashboard/ReportedUsage.tsx +++ b/web-app/src/screens/Console/Dashboard/BasicDashboard/ReportedUsage.tsx @@ -14,10 +14,10 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -import React from "react"; +import React, { Fragment } from "react"; import get from "lodash/get"; import styled from "styled-components"; -import { Box, Tooltip } from "mds"; +import { Box, HelpTip } from "mds"; import { Cell, Pie, PieChart } from "recharts"; const ReportedUsageMain = styled.div(({ theme }) => ({ @@ -53,6 +53,31 @@ const ReportedUsageMain = styled.div(({ theme }) => ({ }, }, })); +export const usageClarifyingContent = ( + +
+ Not what you expected? +
+ This Usage value is comparable to mc du --versions which + represents the size of all object versions that exist in the buckets. +
+ Running{" "} + + mc du + {" "} + without the --versions flag or{" "} + + df + {" "} + will provide different values corresponding to the size of all{" "} + current versions and the physical disk space occupied + respectively. +
+
+); const ReportedUsage = ({ usageValue, @@ -79,7 +104,7 @@ const ReportedUsage = ({ Reported Usage
- + - - + + diff --git a/web-app/src/screens/Console/ObjectBrowser/OBBucketList.tsx b/web-app/src/screens/Console/ObjectBrowser/OBBucketList.tsx index 599e453c5..8e2d53624 100644 --- a/web-app/src/screens/Console/ObjectBrowser/OBBucketList.tsx +++ b/web-app/src/screens/Console/ObjectBrowser/OBBucketList.tsx @@ -27,6 +27,7 @@ import { ProgressBar, RefreshIcon, Grid, + HelpTip, } from "mds"; import { actionsTray } from "../Common/FormComponents/common/styleLibrary"; import { SecureComponent } from "../../../common/SecureComponent"; @@ -50,6 +51,7 @@ import { Bucket } from "../../../api/consoleApi"; import { api } from "../../../api"; import { errorToHandler } from "../../../api/errors"; import HelpMenu from "../HelpMenu"; +import { usageClarifyingContent } from "../Dashboard/BasicDashboard/ReportedUsage"; const OBListBuckets = () => { const dispatch = useAppDispatch(); @@ -57,6 +59,7 @@ const OBListBuckets = () => { const [records, setRecords] = useState([]); const [loading, setLoading] = useState(true); + const [clickOverride, setClickOverride] = useState(false); const [filterBuckets, setFilterBuckets] = useState(""); const features = useSelector(selFeatures); @@ -102,7 +105,8 @@ const OBListBuckets = () => { { type: "view", onClick: (bucket: Bucket) => { - navigate(`${IAM_PAGES.OBJECT_BROWSER_VIEW}/${bucket.name}`); + !clickOverride && + navigate(`${IAM_PAGES.OBJECT_BROWSER_VIEW}/${bucket.name}`); }, }, ]; @@ -213,7 +217,19 @@ const OBListBuckets = () => { { label: "Size", elementKey: "size", - renderFunction: (size: number) => niceBytesInt(size || 0), + renderFunction: (size: number) => ( +
setClickOverride(true)} + onMouseLeave={() => setClickOverride(false)} + > + + {niceBytesInt(size || 0)} + +
+ ), }, { label: "Access",