2024-04-22 08:37:17 +00:00
|
|
|
|
import {useState} from "react";
|
|
|
|
|
import {
|
|
|
|
|
Box,
|
|
|
|
|
IconButton,
|
|
|
|
|
Typography,
|
|
|
|
|
useMediaQuery,
|
|
|
|
|
useTheme
|
|
|
|
|
} from "@mui/material";
|
2024-03-12 17:07:56 +00:00
|
|
|
|
import ArrowBackIcon from "@mui/icons-material/ArrowBack";
|
2023-07-25 22:31:04 +00:00
|
|
|
|
|
2024-03-12 17:07:56 +00:00
|
|
|
|
import SectionWrapper from "@root/components/SectionWrapper";
|
2024-04-22 08:37:17 +00:00
|
|
|
|
import {Select} from "@root/components/Select";
|
|
|
|
|
import {Tabs} from "@root/components/Tabs";
|
2023-07-25 22:31:04 +00:00
|
|
|
|
|
2024-03-12 17:07:56 +00:00
|
|
|
|
import AccordionWrapper from "./AccordionWrapper";
|
2024-04-22 08:37:17 +00:00
|
|
|
|
import {useHistoryTracker} from "@root/utils/hooks/useHistoryTracker";
|
|
|
|
|
import {ErrorBoundary} from "react-error-boundary";
|
|
|
|
|
import {handleComponentError} from "@root/utils/handleComponentError";
|
|
|
|
|
import {useHistoryStore} from "@root/stores/history";
|
|
|
|
|
import {enqueueSnackbar} from "notistack";
|
|
|
|
|
import {makeRequest} from "@frontend/kitui";
|
|
|
|
|
import {HistoryRecord, HistoryRecord2} from "@root/api/history";
|
2024-03-12 17:07:56 +00:00
|
|
|
|
import AccordionWrapper2 from "./AccordionWrapper2";
|
2023-07-25 22:31:04 +00:00
|
|
|
|
|
2024-03-12 17:07:56 +00:00
|
|
|
|
const subPages = ["Платежи"];
|
2024-01-27 00:14:45 +00:00
|
|
|
|
// const subPages = ["Платежи", "Покупки тарифов", "Окончания тарифов"]
|
2023-07-25 22:31:04 +00:00
|
|
|
|
|
|
|
|
|
export default function History() {
|
2024-03-12 17:07:56 +00:00
|
|
|
|
const [selectedItem, setSelectedItem] = useState<number>(0);
|
2023-08-16 14:03:45 +00:00
|
|
|
|
|
2024-03-12 17:07:56 +00:00
|
|
|
|
const theme = useTheme();
|
|
|
|
|
const upMd = useMediaQuery(theme.breakpoints.up("md"));
|
|
|
|
|
const isMobile = useMediaQuery(theme.breakpoints.down(600));
|
|
|
|
|
const isTablet = useMediaQuery(theme.breakpoints.down(1000));
|
|
|
|
|
const historyData = useHistoryStore(state => state.history);
|
|
|
|
|
const handleCustomBackNavigation = useHistoryTracker();
|
2023-08-16 14:03:45 +00:00
|
|
|
|
|
2024-03-12 17:07:56 +00:00
|
|
|
|
const extractDateFromString = (tariffName: string) => {
|
|
|
|
|
const dateMatch = tariffName.match(/\d{4}-\d{2}-\d{2}/);
|
|
|
|
|
return dateMatch ? dateMatch[0] : "";
|
|
|
|
|
};
|
2023-10-24 11:49:39 +00:00
|
|
|
|
|
2024-03-12 17:07:56 +00:00
|
|
|
|
async function handleHistoryResponse(tariffId: string) {
|
|
|
|
|
try {
|
|
|
|
|
await makeRequest(
|
|
|
|
|
{
|
|
|
|
|
url: process.env.REACT_APP_DOMAIN + `/customer/sendReport/${tariffId}`,
|
|
|
|
|
method: "POST",
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
enqueueSnackbar("Запрос отправлен");
|
|
|
|
|
} catch (e) {
|
|
|
|
|
enqueueSnackbar("извините, произошла ошибка");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return (
|
|
|
|
|
<SectionWrapper
|
|
|
|
|
maxWidth="lg"
|
|
|
|
|
sx={{
|
|
|
|
|
mt: upMd ? "25px" : "20px",
|
|
|
|
|
mb: upMd ? "70px" : "37px",
|
|
|
|
|
px: isTablet ? (isTablet ? "18px" : "40px") : "20px",
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
<Box
|
|
|
|
|
sx={{
|
|
|
|
|
mt: "20px",
|
|
|
|
|
mb: isTablet ? "38px" : "20px",
|
|
|
|
|
display: "flex",
|
|
|
|
|
alignItems: "center",
|
|
|
|
|
gap: "10px",
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
{isMobile && (
|
|
|
|
|
<IconButton onClick={handleCustomBackNavigation} sx={{ p: 0, height: "28px", width: "28px", color: "black" }}>
|
|
|
|
|
<ArrowBackIcon />
|
|
|
|
|
</IconButton>
|
|
|
|
|
)}
|
|
|
|
|
<Typography
|
|
|
|
|
sx={{
|
|
|
|
|
fontSize: isMobile ? "24px" : "36px",
|
|
|
|
|
fontWeight: "500",
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
История
|
|
|
|
|
</Typography>
|
|
|
|
|
</Box>
|
|
|
|
|
{isMobile ? (
|
|
|
|
|
<Select items={subPages} selectedItem={selectedItem} setSelectedItem={setSelectedItem} />
|
|
|
|
|
) : (
|
|
|
|
|
<Tabs items={subPages} selectedItem={selectedItem} setSelectedItem={setSelectedItem} />
|
|
|
|
|
)}
|
|
|
|
|
<ErrorBoundary
|
|
|
|
|
fallback={
|
|
|
|
|
<Typography mt="8px">Ошибка загрузки истории</Typography>
|
|
|
|
|
}
|
|
|
|
|
onError={handleComponentError}
|
|
|
|
|
>
|
|
|
|
|
{historyData?.length === 0 && <Typography textAlign="center">Нет данных</Typography>}
|
|
|
|
|
{/* Для ненормального rawDetails */}
|
|
|
|
|
{historyData?.filter((e): e is HistoryRecord => {
|
|
|
|
|
e.createdAt = extractDateFromString(e.createdAt);
|
|
|
|
|
return (
|
|
|
|
|
!e.isDeleted
|
|
|
|
|
&& e.key === "payCart"
|
|
|
|
|
&& Array.isArray(e.rawDetails)
|
|
|
|
|
&& Array.isArray(e.rawDetails[0].Value)
|
|
|
|
|
);
|
|
|
|
|
}).map((e, index) => {
|
|
|
|
|
return (
|
|
|
|
|
<Box key={index} sx={{ mt: index === 0 ? "27px" : "0px" }}>
|
|
|
|
|
<AccordionWrapper
|
|
|
|
|
first={index === 0}
|
|
|
|
|
last={index === historyData?.length - 1}
|
|
|
|
|
content={(e as HistoryRecord).rawDetails}
|
2024-05-21 19:03:35 +00:00
|
|
|
|
mainId={(e as HistoryRecord).id}
|
2024-03-12 17:07:56 +00:00
|
|
|
|
key={e.id}
|
|
|
|
|
createdAt={e.createdAt}
|
|
|
|
|
onClickMail={(event: any) => {
|
|
|
|
|
event.stopPropagation();
|
|
|
|
|
handleHistoryResponse(e.id);
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
</Box>
|
|
|
|
|
);
|
|
|
|
|
})}
|
|
|
|
|
{/* Для нормального rawDetails */}
|
|
|
|
|
{historyData?.filter((e): e is HistoryRecord2 => {
|
|
|
|
|
e.createdAt = extractDateFromString(e.createdAt);
|
|
|
|
|
return (
|
|
|
|
|
!e.isDeleted
|
|
|
|
|
&& e.key === "payCart"
|
|
|
|
|
&& !Array.isArray(e.rawDetails)
|
|
|
|
|
&& !!e.rawDetails.tariffs[0]
|
|
|
|
|
);
|
|
|
|
|
}).map((e, index) => {
|
|
|
|
|
return (
|
|
|
|
|
<Box key={index} sx={{ mt: index === 0 ? "27px" : "0px" }}>
|
|
|
|
|
<AccordionWrapper2
|
|
|
|
|
key={e.id}
|
|
|
|
|
first={index === 0}
|
|
|
|
|
last={index === historyData?.length - 1}
|
2024-05-21 19:03:35 +00:00
|
|
|
|
mainId={(e as HistoryRecord2).id}
|
2024-03-12 17:07:56 +00:00
|
|
|
|
createdAt={e.createdAt}
|
|
|
|
|
tariff={e.rawDetails.tariffs[0]}
|
2024-04-05 16:26:19 +00:00
|
|
|
|
price={e.rawDetails.price/100}
|
2024-03-12 17:07:56 +00:00
|
|
|
|
/>
|
|
|
|
|
</Box>
|
|
|
|
|
);
|
|
|
|
|
})}
|
|
|
|
|
</ErrorBoundary>
|
|
|
|
|
</SectionWrapper>
|
|
|
|
|
);
|
2023-07-25 22:31:04 +00:00
|
|
|
|
}
|