import * as React from 'react'; import {useState} from 'react'; import {LinearProgress, Stack, useMediaQuery} from "@mui/material"; import Tooltip from '@mui/material/Tooltip'; import Typography from "@mui/material/Typography"; import EditIcon from '@mui/icons-material/Edit'; import Container from "@mui/material/Container"; import Card from "@mui/material/Card"; import Button from "@mui/material/Button"; import {useTranslation} from "react-i18next"; import session from "../app/Session"; import DeleteOutlineIcon from '@mui/icons-material/DeleteOutline'; import theme from "./theme"; import Dialog from "@mui/material/Dialog"; import DialogTitle from "@mui/material/DialogTitle"; import DialogContent from "@mui/material/DialogContent"; import TextField from "@mui/material/TextField"; import DialogActions from "@mui/material/DialogActions"; import api from "../app/Api"; import routes from "./routes"; import IconButton from "@mui/material/IconButton"; import {NavLink, useOutletContext} from "react-router-dom"; import Box from "@mui/material/Box"; const Account = () => { return ( ); }; const Basics = () => { const { t } = useTranslation(); return ( Account ); }; const Stats = () => { const { t } = useTranslation(); const { account } = useOutletContext(); const admin = account?.role === "admin" const usage = account?.usage; const plan = account?.plan; const accountType = plan?.code ?? "none"; return ( {t("Usage")}
{account?.role === "admin" ? <>Unlimited 👑 : t(`account_type_${accountType}`)}
{usage?.requests ?? 0} {plan?.request_limit > 0 ? t("of {{limit}}", { limit: plan.request_limit }) : t("Unlimited")}
15 MB used of 150 MB
2 of 15
); }; const Delete = () => { const { t } = useTranslation(); return ( {t("Delete account")} ); }; const Username = () => { const { t } = useTranslation(); const { account } = useOutletContext(); return (
{session.username()} {account?.role === "admin" ? <>{" "}👑 : ""}
) }; const ChangePassword = () => { const { t } = useTranslation(); const [dialogKey, setDialogKey] = useState(0); const [dialogOpen, setDialogOpen] = useState(false); const labelId = "prefChangePassword"; const handleDialogOpen = () => { setDialogKey(prev => prev+1); setDialogOpen(true); }; const handleDialogCancel = () => { setDialogOpen(false); }; const handleDialogSubmit = async (newPassword) => { try { await api.changePassword("http://localhost:2586", session.token(), newPassword); setDialogOpen(false); console.debug(`[Account] Password changed`); } catch (e) { console.log(`[Account] Error changing password`, e); // TODO show error } }; return (
⬤⬤⬤⬤⬤⬤⬤⬤⬤⬤
) }; const ChangePasswordDialog = (props) => { const { t } = useTranslation(); const [newPassword, setNewPassword] = useState(""); const [confirmPassword, setConfirmPassword] = useState(""); const fullScreen = useMediaQuery(theme.breakpoints.down('sm')); const changeButtonEnabled = (() => { return newPassword.length > 0 && newPassword === confirmPassword; })(); return ( Change password setNewPassword(ev.target.value)} fullWidth variant="standard" /> setConfirmPassword(ev.target.value)} fullWidth variant="standard" /> ); }; const DeleteAccount = () => { const { t } = useTranslation(); const [dialogKey, setDialogKey] = useState(0); const [dialogOpen, setDialogOpen] = useState(false); const labelId = "prefDeleteAccount"; const handleDialogOpen = () => { setDialogKey(prev => prev+1); setDialogOpen(true); }; const handleDialogCancel = () => { setDialogOpen(false); }; const handleDialogSubmit = async (newPassword) => { try { await api.deleteAccount("http://localhost:2586", session.token()); setDialogOpen(false); console.debug(`[Account] Account deleted`); // TODO delete local storage session.reset(); window.location.href = routes.app; } catch (e) { console.log(`[Account] Error deleting account`, e); // TODO show error } }; return (
) }; const DeleteAccountDialog = (props) => { const { t } = useTranslation(); const [username, setUsername] = useState(""); const fullScreen = useMediaQuery(theme.breakpoints.down('sm')); const buttonEnabled = username === session.username(); return ( {t("Delete account")} {t("This will permanently delete your account, including all data that is stored on the server. If you really want to proceed, please type '{{username}}' in the text box below.", { username: session.username()})} setUsername(ev.target.value)} fullWidth variant="standard" /> ); }; // FIXME duplicate code const PrefGroup = (props) => { return (
{props.children}
) }; const Pref = (props) => { return (
{props.title}
{props.description &&
{props.description}
}
{props.children}
); }; export default Account;