From 57eb1d6ccf2328128efc6b7b4621ea7cb997bf2a Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Tue, 26 Nov 2024 16:50:16 +0530 Subject: [PATCH] [staff] Show correct status for passkey --- infra/staff/src/App.tsx | 3 +- infra/staff/src/components/UserComponent.tsx | 519 +++++++------------ 2 files changed, 200 insertions(+), 322 deletions(-) diff --git a/infra/staff/src/App.tsx b/infra/staff/src/App.tsx index bb3e04f78f..f37ffa7ea8 100644 --- a/infra/staff/src/App.tsx +++ b/infra/staff/src/App.tsx @@ -45,6 +45,7 @@ interface Security { isEmailMFAEnabled: boolean; isTwoFactorEnabled: boolean; passkeys: string; + passkeyCount: number; } interface UserResponse { @@ -181,7 +182,7 @@ const App: React.FC = () => { .isTwoFactorEnabled ? "Enabled" : "Disabled", - Passkeys: "None", + Passkeys: (userDataResponse.details?.profileData.passkeyCount ?? 0) > 0 ? "Enabled" : "Disabled", }, }; diff --git a/infra/staff/src/components/UserComponent.tsx b/infra/staff/src/components/UserComponent.tsx index f26e9431a4..4cefabed50 100644 --- a/infra/staff/src/components/UserComponent.tsx +++ b/infra/staff/src/components/UserComponent.tsx @@ -2,7 +2,6 @@ import DeleteIcon from "@mui/icons-material/Delete"; import EditIcon from "@mui/icons-material/Edit"; import Box from "@mui/material/Box"; import Button from "@mui/material/Button"; - import Grid from "@mui/material/Grid"; import IconButton from "@mui/material/IconButton"; import Paper from "@mui/material/Paper"; @@ -19,6 +18,7 @@ import DeleteAccount from "./DeleteAccont"; import Disable2FA from "./Disable2FA"; import DisablePasskeys from "./DisablePasskeys"; import UpdateSubscription from "./UpdateSubscription"; + export interface UserData { User: Record; Storage: Record; @@ -34,341 +34,218 @@ const UserComponent: React.FC = ({ userData }) => { const [deleteAccountOpen, setDeleteAccountOpen] = React.useState(false); const [disable2FAOpen, setDisable2FAOpen] = React.useState(false); const [twoFactorEnabled, setTwoFactorEnabled] = React.useState(false); - const [is2FADisabled, setIs2FADisabled] = React.useState(false); - const [updateSubscriptionOpen, setUpdateSubscriptionOpen] = - React.useState(false); + const [updateSubscriptionOpen, setUpdateSubscriptionOpen] = React.useState(false); const [changeEmailOpen, setChangeEmailOpen] = React.useState(false); - const [DisablePasskeysOpen, setDisablePasskeysOpen] = React.useState(false); + const [disablePasskeysOpen, setDisablePasskeysOpen] = React.useState(false); React.useEffect(() => { - if (userData?.Security["Two factor 2FA"] === "Enabled") { - setTwoFactorEnabled(true); - } else { - setTwoFactorEnabled(false); - } + setTwoFactorEnabled(userData?.Security["Two factor 2FA"] === "Enabled"); }, [userData]); - const handleEditEmail = () => { - console.log("Edit Email clicked"); - setChangeEmailOpen(true); - }; + const handleEditEmail = () => setChangeEmailOpen(true); + const handleDeleteAccountClick = () => setDeleteAccountOpen(true); + const handleEditSubscription = () => setUpdateSubscriptionOpen(true); + const handleDisablePasskeys = () => setDisablePasskeysOpen(true); - const handleCloseChangeEmail = () => { - setChangeEmailOpen(false); - }; - - const handleDeleteAccountClick = () => { - setDeleteAccountOpen(true); - }; - - const handleCloseDeleteAccount = () => { - setDeleteAccountOpen(false); - }; - - const handleOpenDisable2FA = () => { - setDisable2FAOpen(true); - }; - - const handleCloseDisable2FA = () => { - setDisable2FAOpen(false); - }; - - const handleDisable2FA = () => { - setIs2FADisabled(true); - }; - - const handleCancelDisable2FA = () => { - setTwoFactorEnabled(true); - handleCloseDisable2FA(); - }; - - const handleEditSubscription = () => { - setUpdateSubscriptionOpen(true); - }; - - const handleCloseUpdateSubscription = () => { - setUpdateSubscriptionOpen(false); - }; - - const handleOpenDisablePasskeys = () => { - setDisablePasskeysOpen(true); - }; - - const handleCloseDisablePasskeys = () => { - setDisablePasskeysOpen(false); - }; - - const handleDisablePasskeys = () => { - console.log("Close family action"); - handleOpenDisablePasskeys(); - }; - - if (!userData) { - return null; - } + if (!userData) return null; return ( {Object.entries(userData).map(([title, data]) => ( - - - - {title} - - {title === "User" && ( - - - - )} - {title === "Subscription" && ( - - - - )} - - - - - {Object.entries( - data as Record, - ).map(([label, value], index) => ( - - - {label} - - - {label === "Email" ? ( - - - {value} - - - - - - ) : label === "Passkeys" ? ( - - ) : typeof value === "string" ? ( - label === "Two factor 2FA" ? ( - is2FADisabled || - value === "Disabled" ? ( - - {value} - - ) : ( - - - {value} - - {value === - "Enabled" && ( - { - const isChecked = - e - .target - .checked; - setTwoFactorEnabled( - isChecked, - ); - if ( - !isChecked - ) { - handleOpenDisable2FA(); - } - }} - sx={{ - "& .MuiSwitch-switchBase.Mui-checked": - { - color: "#00B33C", - "&:hover": - { - backgroundColor: - "rgba(0, 179, 60, 0.08)", - }, - }, - "& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track": - { - backgroundColor: - "#00B33C", - }, - }} - /> - )} - - ) - ) : ( - - {value} - - ) - ) : ( - - {String(value)} - - )} - - - ))} - -
-
+
))} - - - - - - - - - + setDeleteAccountOpen(false)} /> + setDisable2FAOpen(false)} handleDisable2FA={() => setTwoFactorEnabled(false)} /> + setUpdateSubscriptionOpen(false)} /> + setChangeEmailOpen(false)} /> + setDisablePasskeysOpen(false)} handleDisablePasskeys={() => setDisablePasskeysOpen(false)} />
); }; -export default UserComponent; +interface DataTableProps { + title: string; + data: Record; + onEditEmail: () => void; + onDeleteAccount: () => void; + onEditSubscription: () => void; + onDisablePasskeys: () => void; + twoFactorEnabled: boolean; + setTwoFactorEnabled: (enabled: boolean) => void; + setDisable2FAOpen: (open: boolean) => void; +} + +const DataTable: React.FC = ({ + title, + data, + onEditEmail, + onDeleteAccount, + onEditSubscription, + onDisablePasskeys, + twoFactorEnabled, + setTwoFactorEnabled, + setDisable2FAOpen, +}) => ( + + + + {title} + + {title === "User" && ( + + + + )} + {title === "Subscription" && ( + + + + )} + + + + + {Object.entries(data).map(([label, value], index) => ( + + + {label} + + + {renderTableCellContent(label, value, onEditEmail, onDisablePasskeys, twoFactorEnabled, setTwoFactorEnabled, setDisable2FAOpen)} + + + ))} + +
+
+); + +const renderTableCellContent = ( + label: string, + value: string, + onEditEmail: () => void, + onDisablePasskeys: () => void, + twoFactorEnabled: boolean, + setTwoFactorEnabled: (enabled: boolean) => void, + setDisable2FAOpen: (open: boolean) => void, +) => { + switch (label) { + case "Email": + return ( + + {value} + + + + + ); + case "Passkeys": + return value === "Enabled" ? ( + + ) : ( + {value} + ); + case "Two factor 2FA": + return ( + + {value} + {value === "Enabled" && ( + { + const isChecked = e.target.checked; + setTwoFactorEnabled(isChecked); + if (!isChecked) { + setDisable2FAOpen(true); + } + }} + sx={{ + "& .MuiSwitch-switchBase.Mui-checked": { + color: "#00B33C", + "&:hover": { + backgroundColor: "rgba(0, 179, 60, 0.08)", + }, + }, + "& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track": { + backgroundColor: "#00B33C", + }, + }} + /> + )} + + ); + default: + return {value}; + } +}; + +export default UserComponent; \ No newline at end of file