diff --git a/web-app/package.json b/web-app/package.json
index 5217f9ad45..0717354972 100644
--- a/web-app/package.json
+++ b/web-app/package.json
@@ -5,6 +5,7 @@
"homepage": ".",
"private": true,
"dependencies": {
+ "@emotion/react": "^11.14.0",
"@reduxjs/toolkit": "^1.9.7",
"clsx": "^2.1.1",
"http-status-codes": "^2.3.0",
@@ -12,7 +13,7 @@
"local-storage-fallback": "^4.1.2",
"lodash": "^4.17.21",
"luxon": "^3.4.4",
- "mds": "https://github.com/minio/mds.git#v1.0.4",
+ "mds": "https://github.com/minio/mds.git#v3.1.9",
"react": "^18.3.1",
"react-component-export-image": "^1.0.6",
"react-copy-to-clipboard": "^5.1.0",
@@ -26,7 +27,6 @@
"react-window": "^1.8.10",
"react-window-infinite-loader": "^1.0.9",
"recharts": "^2.12.7",
- "styled-components": "5.3.11",
"superagent": "^9.0.2",
"tinycolor2": "^1.6.0"
},
@@ -99,5 +99,5 @@
"cookie": "^0.7.2"
},
"main": "index.js",
- "packageManager": "yarn@4.4.0"
+ "packageManager": "yarn@4.5.3"
}
diff --git a/web-app/src/StyleHandler.tsx b/web-app/src/StyleHandler.tsx
index 90e0e84aed..9439fb0844 100644
--- a/web-app/src/StyleHandler.tsx
+++ b/web-app/src/StyleHandler.tsx
@@ -18,7 +18,6 @@ import React, { Fragment } from "react";
import { GlobalStyles, ThemeHandler } from "mds";
import "react-virtualized/styles.css";
-import { generateOverrideTheme } from "./utils/stylesUtils";
import "./index.css";
import { useSelector } from "react-redux";
import { AppState } from "./store";
@@ -33,16 +32,16 @@ const StyleHandler = ({ children }: IStyleHandler) => {
);
const darkMode = useSelector((state: AppState) => state.system.darkMode);
- let thm = undefined;
+ /*let thm = undefined;
if (colorVariants) {
thm = generateOverrideTheme(colorVariants);
- }
+ }*/
return (
-
-
+
+
{children}
diff --git a/web-app/src/common/MoreLink.tsx b/web-app/src/common/MoreLink.tsx
index 2ed53b9393..af39e33744 100644
--- a/web-app/src/common/MoreLink.tsx
+++ b/web-app/src/common/MoreLink.tsx
@@ -15,7 +15,7 @@
// along with this program. If not, see .
import React from "react";
-import { ArrowIcon, Box } from "mds";
+import { ArrowRightIcon, Box } from "mds";
const MoreLink = ({
LeadingIcon,
@@ -74,7 +74,7 @@ const MoreLink = ({
marginTop: 2,
}}
>
-
+
diff --git a/web-app/src/screens/Console/Dashboard/dashboardThunks.ts b/web-app/src/common/MultipleBase.tsx
similarity index 55%
rename from web-app/src/screens/Console/Dashboard/dashboardThunks.ts
rename to web-app/src/common/MultipleBase.tsx
index cff2a7d84b..10d27f9c4a 100644
--- a/web-app/src/screens/Console/Dashboard/dashboardThunks.ts
+++ b/web-app/src/common/MultipleBase.tsx
@@ -14,22 +14,31 @@
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
-import { createAsyncThunk } from "@reduxjs/toolkit";
-import { setErrorSnackMessage } from "../../../systemSlice";
-import { api } from "api";
-import { errorToHandler } from "api/errors";
+import { styled } from "mds";
-export const getUsageAsync = createAsyncThunk(
- "dashboard/getUsageAsync",
- async (_, { getState, rejectWithValue, dispatch }) => {
- return api.admin
- .adminInfo()
- .then((res) => {
- return res.data;
- })
- .catch((err) => {
- dispatch(setErrorSnackMessage(errorToHandler(err.error)));
- return rejectWithValue(err);
- });
+const MultipleBase = styled.div(({ theme }) => ({
+ display: "flex",
+ alignItems: "center",
+ justifyContent: "space-between",
+ padding: 4,
+ borderRadius: 12,
+ backgroundColor: theme.colors["Color/Neutral/Bg/colorBgShell"],
+ "& #expand-options .button-label": {
+ display: "none",
},
-);
+ "& .selectionElm": {
+ fontSize: 12,
+ fontStyle: "normal",
+ fontWeight: 600,
+ lineHeight: "16px",
+ letterSpacing: "0.5px",
+ },
+ "& .detSelection": {
+ display: "flex",
+ alignItems: "center",
+ gap: 24,
+ padding: "0 4px",
+ },
+}));
+
+export default MultipleBase;
diff --git a/web-app/src/common/utils.ts b/web-app/src/common/utils.ts
index 6f37551083..0b8742acdf 100644
--- a/web-app/src/common/utils.ts
+++ b/web-app/src/common/utils.ts
@@ -523,3 +523,15 @@ export const safeDecodeURIComponent = (value: any) => {
return value;
}
};
+
+// calculate last modify time
+export const calculateLastModifyTime = (lastModified: string) => {
+ const currentTime = new Date();
+ const modifiedTime = new Date(lastModified);
+
+ const difTime = currentTime.getTime() - modifiedTime.getTime();
+
+ const formatTime = niceDaysInt(difTime, "ms");
+
+ return formatTime.trim() !== "" ? `${formatTime} ago` : "Just now";
+};
diff --git a/web-app/src/screens/AnonymousAccess/AnonymousAccess.tsx b/web-app/src/screens/AnonymousAccess/AnonymousAccess.tsx
index f4321fa13b..a60ea9a6b7 100644
--- a/web-app/src/screens/AnonymousAccess/AnonymousAccess.tsx
+++ b/web-app/src/screens/AnonymousAccess/AnonymousAccess.tsx
@@ -55,7 +55,7 @@ const AnonymousAccess = () => {
)}
{deleteVersions && (
-
- This will remove the object as well as all of its versions,{" "}
-
- This action is irreversible.
-
-
- Are you sure you want to continue?
+
+ This will remove the object as well as all of its versions.
+
)}
diff --git a/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/DetailsListPanel.tsx b/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/DetailsListPanel.tsx
index 7d99bfa63f..460ec19415 100644
--- a/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/DetailsListPanel.tsx
+++ b/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/DetailsListPanel.tsx
@@ -15,18 +15,16 @@
// along with this program. If not, see .
import React from "react";
-import { Box, Button, ClosePanelIcon } from "mds";
+import { Box, Button, ArrowRightToLineIcon } from "mds";
interface IDetailsListPanel {
open: boolean;
className?: string;
- closePanel: () => void;
children: React.ReactNode;
}
const DetailsListPanel = ({
open,
- closePanel,
className = "",
children,
}: IDetailsListPanel) => {
@@ -34,12 +32,6 @@ const DetailsListPanel = ({
- }
- sx={{
- position: "absolute",
- right: 5,
- top: 18,
- padding: 0,
- height: 14,
- "&:hover:not(:disabled)": {
- backgroundColor: "transparent",
- },
- }}
- />
{children}
);
diff --git a/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/InspectObject.tsx b/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/InspectObject.tsx
index b81192cc12..3dedd34434 100644
--- a/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/InspectObject.tsx
+++ b/web-app/src/screens/Console/Buckets/ListBuckets/Objects/ListObjects/InspectObject.tsx
@@ -16,12 +16,14 @@
import React, { useState } from "react";
import {
+ Box,
Button,
- InspectMenuIcon,
- PasswordKeyIcon,
- Switch,
+ Checkbox,
+ FeatherIcon,
Grid,
- Box,
+ KeyRoundIcon,
+ Link,
+ NotificationAlert, ScanEyeIcon
} from "mds";
import {
deleteCookie,
@@ -62,7 +64,13 @@ const InspectObject = ({
const performInspect = async () => {
let basename = document.baseURI.replace(window.location.origin, "");
- const urlOfInspectApi = `${window.location.origin}${basename}/api/v1/admin/inspect?volume=${encodeURIComponent(volumeName)}&file=${encodeURIComponent(inspectPath + "/xl.meta")}&encrypt=${isEncrypt}`;
+ const urlOfInspectApi = `${
+ window.location.origin
+ }${basename}/api/v1/admin/inspect?volume=${encodeURIComponent(
+ volumeName
+ )}&file=${encodeURIComponent(
+ inspectPath + "/xl.meta"
+ )}&encrypt=${isEncrypt}`;
makeRequest(urlOfInspectApi)
.then(async (res) => {
@@ -73,7 +81,7 @@ const InspectObject = ({
setErrorSnackMessage({
errorMessage: resErr.message,
detailedError: resErr.code,
- }),
+ })
);
}
const blob: Blob = await res.blob();
@@ -110,10 +118,23 @@ const InspectObject = ({
{!decryptionKey && (
}
+ titleIcon={}
title={`Inspect Object`}
onClose={onClose}
+ customWidth={608}
>
+ Inspect will produce non-human-readable xl.meta binary file containing
+ the data and metadata associated to this object, which is intended for
+ troubleshooting use by MinIO Engineering. For more information{" "}
+
+ visit this.
+