front-hub/src/pages/History/index.tsx

99 lines
3.0 KiB
TypeScript
Raw Normal View History

2023-11-05 23:33:40 +00:00
import { useEffect, useState } from "react"
import { Box, IconButton, Typography, useMediaQuery, useTheme } from "@mui/material"
import ArrowBackIcon from "@mui/icons-material/ArrowBack"
2023-07-25 22:31:04 +00:00
2023-11-05 23:33:40 +00:00
import SectionWrapper from "@root/components/SectionWrapper"
import { Select } from "@root/components/Select"
import { Tabs } from "@root/components/Tabs"
2023-07-25 22:31:04 +00:00
2023-11-05 23:33:40 +00:00
import AccordionWrapper from "./AccordionWrapper"
import { HISTORY } from "./historyMocks"
import { useHistoryTracker } from "@root/utils/hooks/useHistoryTracker"
import { useHistoryData } from "@root/utils/hooks/useHistoryData"
import { isArray } from "cypress/types/lodash"
import { ErrorBoundary } from "react-error-boundary"
import { handleComponentError } from "@root/utils/handleComponentError"
2023-07-25 22:31:04 +00:00
2023-11-05 23:33:40 +00:00
const subPages = ["Платежи", "Покупки тарифов", "Окончания тарифов"]
2023-07-25 22:31:04 +00:00
export default function History() {
2023-11-05 23:33:40 +00:00
const [selectedItem, setSelectedItem] = useState<number>(0)
2023-11-05 23:33:40 +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, error } = useHistoryData()
2023-07-25 22:31:04 +00:00
2023-11-05 23:33:40 +00:00
const handleCustomBackNavigation = useHistoryTracker()
2023-11-05 23:33:40 +00:00
const extractDateFromString = (tariffName: string) => {
const dateMatch = tariffName.match(/\d{4}-\d{2}-\d{2}/)
return dateMatch ? dateMatch[0] : ""
}
2023-11-05 23:33:40 +00:00
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",
}}
>
2023-08-23 13:24:47 +00:00
История
2023-11-05 23:33:40 +00:00
</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?.records
.filter((e) => {
e.createdAt = extractDateFromString(e.createdAt)
return(!e.isDeleted && e.key === "payCart" && 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?.records.length - 1}
content={e.rawDetails}
key={e.id}
createdAt={e.createdAt}
/>
</Box>
)})}
</ErrorBoundary>
</SectionWrapper>
)
2023-07-25 22:31:04 +00:00
}