diff --git a/infra/staff/src/App.tsx b/infra/staff/src/App.tsx index 01d79b18cc6..e9e38636bd6 100644 --- a/infra/staff/src/App.tsx +++ b/infra/staff/src/App.tsx @@ -1,28 +1,227 @@ -import React from "react"; -import { getUserDetails } from "./services/support-service"; +import React, { useEffect, useState } from "react"; import S from "./utils/strings"; export const App: React.FC = () => { - const handleClick = () => { - const authToken = "xxx"; - getUserDetails(authToken) - .then((userDetails) => { - console.log("Fetched user details", userDetails); - }) - .catch((e: unknown) => { - console.error("Failed to fetch user details", e); - }); + const [serverUrl /*, setServerUrl */] = useState( + import.meta.env.VITE_ENTE_ENDPOINT || "", + ); + const [token, setToken] = useState(""); + const [email, setEmail] = useState(""); + const [userData, setUserData] = useState(null); + const [error, setError] = useState(null); + + useEffect(() => { + const storedToken = localStorage.getItem("token"); + if (storedToken) { + setToken(storedToken); + } + console.log(import.meta.env.VITE_ENTE_ENDPOINT); + }, []); + + useEffect(() => { + if (token) { + localStorage.setItem("token", token); + } else { + localStorage.removeItem("token"); + } + }, [token]); + + const fetchData = async () => { + try { + const url = `${serverUrl}/admin/user?email=${email}&token=${token}`; + const response = await fetch(url); + if (!response.ok) { + throw new Error("Network response was not ok"); + } + const userData = await response.json(); + console.log("API Response:", userData); + setUserData(userData); + setError(null); + } catch (error) { + console.error("Error fetching data:", error); + setError((error as Error).message); + } + }; + + const renderAttributes = (data: any) => { + if (!data) return null; + + let nullAttributes: string[] = []; + + const rows = Object.entries(data).map(([key, value]) => { + console.log("Processing key:", key, "value:", value); + + if ( + typeof value === "object" && + value !== null && + !Array.isArray(value) + ) { + return ( + + + + {key.toUpperCase()} + + + {renderAttributes(value)} + + ); + } else { + if (value === null) { + nullAttributes.push(key); + } + + let displayValue: React.ReactNode; + if (key === "expiryTime" && typeof value === "number") { + displayValue = new Date(value / 1000).toLocaleString(); + } else if ( + key === "creationTime" && + typeof value === "number" + ) { + displayValue = new Date(value / 1000).toLocaleString(); + } else if (key === "storage" && typeof value === "number") { + displayValue = `${(value / 1024 ** 3).toFixed(2)} GB`; + } else if (typeof value === "string") { + try { + const parsedValue = JSON.parse(value); + displayValue = parsedValue; + } catch (error) { + displayValue = value; + } + } else if (value === null) { + displayValue = "null"; + } else if (typeof value !== "undefined") { + displayValue = value.toString(); + } else { + displayValue = "undefined"; + } + + return ( + + + {key} + + + {displayValue} + + + ); + } + }); + + console.log("Attributes with null values:", nullAttributes); + + return rows; }; return ( -
+

{S.hello}

-

- help.ente.io -

-

- -

+ +
+
+ +
+
+ +
+
+
+ +
+
+ {error &&

{`Error: ${error}`}

} + {userData && ( + + + {Object.keys(userData).map((category) => ( + + + + + {renderAttributes(userData[category])} + + ))} + +
+ {category.toUpperCase()} +
+ )} +
); };