adminFront/src/pages/dashboard/ModalUser/index.tsx
2023-07-26 12:59:40 +03:00

221 lines
7.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { useEffect, useState } from "react";
import { useLinkClickHandler, useParams } from "react-router-dom";
import {
Box,
Modal,
Fade,
Backdrop,
Typography,
Tabs,
Tab,
useTheme,
useMediaQuery,
} from "@mui/material";
import { UserTab } from "./UserTab";
import { PurchaseTab } from "./PurchaseTab";
import { TransactionsTab } from "./TransactionsTab";
import { VerificationTab } from "./VerificationTab";
import { authStore } from "@root/stores/auth";
import userIcon from "@root/assets/icons/user.svg";
import packageIcon from "@root/assets/icons/package.svg";
import transactionsIcon from "@root/assets/icons/transactions.svg";
import checkIcon from "@root/assets/icons/check.svg";
import forwardIcon from "@root/assets/icons/forward.svg";
import type { SyntheticEvent } from "react";
const TABS = [
{ name: "Пользователь", icon: userIcon },
{ name: "Покупка товаров и услуг", icon: packageIcon },
{ name: "Транзакции", icon: transactionsIcon },
{ name: "Верификация", icon: checkIcon },
];
const baseUrl =
process.env.NODE_ENV === "production" ? "" : "https://hub.pena.digital";
export type File = {
name: "inn" | "rule" | "egrule" | "certificate";
url: string;
};
export type Verification = {
_id: string;
accepted: boolean;
status: "org" | "nko";
updated_at: string;
comment: string;
files: File[];
};
const ModalUser = () => {
const [user, setUser] = useState<Verification | null>(null);
const [value, setValue] = useState<number>(0);
const [openNavigation, setOpenNavigation] = useState<boolean>(false);
const { userId } = useParams();
const { makeRequest } = authStore();
const theme = useTheme();
const tablet = useMediaQuery(theme.breakpoints.down(1070));
const mobile = useMediaQuery(theme.breakpoints.down(700));
useEffect(() => {
makeRequest<never, Verification>({
method: "get",
url: baseUrl + `/verification/verification/${userId}`,
}).then(setUser);
}, []);
return (
<>
<Modal
aria-labelledby="transition-modal-title"
aria-describedby="transition-modal-description"
open
onClose={useLinkClickHandler("/users")}
closeAfterTransition
BackdropComponent={Backdrop}
BackdropProps={{
timeout: 500,
}}
>
<Fade in>
<Box
sx={{
position: "absolute",
top: "50%",
left: "50%",
transform: "translate(-50%, -50%)",
display: "flex",
flexDirection: "column",
width: mobile ? "100%" : "98vw",
maxWidth: tablet ? "920px" : "1070px",
height: mobile ? "100%" : "605px",
bgcolor: theme.palette.background.default,
color: theme.palette.secondary.main,
boxShadow: 24,
borderRadius: mobile ? "0" : "12px",
outline: "none",
overflow: "hidden",
}}
>
<Typography
id="transition-modal-title"
variant="caption"
sx={{
display: "block",
textAlign: "center",
fontSize: "18px",
padding: "12px",
color: theme.palette.common.white,
background: "#9A9AAF",
}}
>
Пользователь сервиса
</Typography>
<Box sx={{ width: "100%", height: "100%", display: "flex" }}>
<Box
sx={{
width: "100%",
height: "100%",
maxWidth: mobile
? openNavigation
? "276px"
: "68px"
: "276px",
}}
>
{mobile && (
<img
src={forwardIcon}
alt="forward"
style={{
display: "block",
width: "11px",
margin: "25px 0 15px 28px",
transform: openNavigation ? "rotate(180deg)" : "",
transition: ".2s",
}}
onClick={() => setOpenNavigation((isOpened) => !isOpened)}
/>
)}
<Tabs
orientation="vertical"
variant="scrollable"
value={value}
onChange={(event: SyntheticEvent, newValue: number) =>
setValue(newValue)
}
aria-label="Vertical tabs example"
sx={{
padding: mobile ? "16px" : "10px",
width: "100%",
}}
TabIndicatorProps={{ style: { background: "transparent" } }}
>
{TABS.map(({ name, icon }) => (
<Tab
icon={<img src={icon} alt={name} />}
iconPosition="start"
key={name}
label={mobile ? (openNavigation ? name : "") : name}
sx={{
justifyContent: "flex-start",
textTransform: "inherit",
minHeight: "auto",
minWidth: "auto",
fontSize: "15px",
padding: mobile ? "9px" : "15px",
marginBottom: mobile ? "15px" : "5px",
color: theme.palette.common.black,
whiteSpace: "nowrap",
lineHeight: "18px",
"&.MuiButtonBase-root.Mui-selected": {
borderRadius: "12px",
color: "#7E2AEA",
background: "rgba(126, 42, 234, 0.07)",
},
}}
/>
))}
</Tabs>
</Box>
<Box
sx={{
position: "relative",
width: "100%",
color: theme.palette.common.black,
boxShadow: "inset 30px 0px 40px 0px rgba(210, 208, 225, 0.2)",
}}
>
{value === 0 && (
<UserTab
user={{
id: 2810,
registrationDate: "17.02.2023",
email: "emailexamle@gmail.com",
phone: "+7 123 456 78 90",
type: "НКО",
fullname: "Куликов Геннадий Викторович",
walletBalance: "2 096 руб.",
}}
/>
)}
{value === 1 && <PurchaseTab />}
{value === 2 && <TransactionsTab />}
{value === 3 && <VerificationTab files={user?.files || []} />}
</Box>
</Box>
</Box>
</Fade>
</Modal>
</>
);
};
export default ModalUser;