adminFront/src/pages/dashboard/Content/PromocodeManagement/index.tsx

154 lines
5.5 KiB
TypeScript
Raw Normal View History

2024-03-26 15:41:22 +00:00
import { useState } from "react";
import {Box, Button, FormControl, InputLabel, MenuItem, Select, Typography, useTheme} from "@mui/material";
2024-03-03 13:30:57 +00:00
import { DataGrid, GridLoadingOverlay, GridToolbar } from "@mui/x-data-grid";
2024-02-22 14:12:50 +00:00
import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs";
import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider";
2024-03-03 13:30:57 +00:00
import { usePromocodes } from "@root/api/promocode/swr";
import { fadeIn } from "@root/utils/style/keyframes";
2024-02-22 14:12:50 +00:00
import { CreatePromocodeForm } from "./CreatePromocodeForm";
2024-03-03 13:30:57 +00:00
import { usePromocodeGridColDef } from "./usePromocodeGridColDef";
2024-03-26 15:41:22 +00:00
import { StatisticsModal } from "./StatisticsModal";
2024-03-30 20:19:53 +00:00
import DeleteModal from "./DeleteModal";
import {promocodeApi} from "@root/api/promocode/requests";
import {SelectChangeEvent} from "@mui/material/Select";
import {EditModal} from "@pages/dashboard/Content/PromocodeManagement/EditModal";
2024-02-22 14:12:50 +00:00
export const PromocodeManagement = () => {
2024-05-21 07:41:31 +00:00
const theme = useTheme();
2024-04-02 13:21:17 +00:00
2024-05-21 07:41:31 +00:00
const [deleteModal, setDeleteModal] = useState<string>("");
const deleteModalHC = (id: string) => setDeleteModal(id);
2024-03-30 20:19:53 +00:00
2024-03-26 15:41:22 +00:00
const [showStatisticsModalId, setShowStatisticsModalId] =
useState<string>("");
const [showEditModalId, setShowEditModalId] =
useState<string>("");
2024-03-26 15:41:22 +00:00
const [page, setPage] = useState<number>(0);
const [to, setTo] = useState(0);
const [from, setFrom] = useState(0);
2024-03-26 15:41:22 +00:00
const [pageSize, setPageSize] = useState<number>(10);
2024-05-21 08:53:09 +00:00
const [active, setActive] = useState(true);
2024-03-26 15:41:22 +00:00
const {
data,
error,
isValidating,
promocodesCount,
2024-04-02 14:56:23 +00:00
promocodeStatistics,
2024-03-26 15:41:22 +00:00
deletePromocode,
createPromocode,
editPromocode,
2024-04-02 14:56:23 +00:00
createFastLink,
} = usePromocodes(page, pageSize, showStatisticsModalId, to, from, active);
2024-03-26 15:41:22 +00:00
const columns = usePromocodeGridColDef(
setShowEditModalId,
2024-03-26 15:41:22 +00:00
setShowStatisticsModalId,
2024-03-30 20:19:53 +00:00
deleteModalHC
2024-03-26 15:41:22 +00:00
);
if (error) return <Typography>Ошибка загрузки промокодов</Typography>;
2024-03-26 15:41:22 +00:00
return (
<LocalizationProvider dateAdapter={AdapterDayjs}>
<Typography
variant="subtitle1"
sx={{
width: "90%",
height: "60px",
display: "flex",
flexDirection: "column",
justifyContent: "center",
alignItems: "center",
textTransform: "uppercase",
color: theme.palette.secondary.main,
}}
>
Создание промокода
</Typography>
<CreatePromocodeForm createPromocode={createPromocode} />
<Box sx={{marginTop: "55px", width: "80%", display: "flex"}}>
<FormControl variant="standard" sx={{ m: 1, minWidth: 120 }}>
<Select
labelId="demo-simple-select-standard-label"
id="demo-simple-select-standard"
sx={{color: "white",
backgroundColor: "transparent",
padding: "5px",
border: "1px solid white",
borderRadius: "4px",
".MuiSelect-icon": {
color: "white"
}
}}
value={active? "true" : "false"}
onChange={(event: SelectChangeEvent) => {
setActive((event.target.value) === "true" ? true : false);
}}
label="Age"
>
<MenuItem value={"true"}>Активные</MenuItem>
<MenuItem value={"false"}>Неактивные</MenuItem>
</Select>
</FormControl>
</Box>
<Box style={{ width: "80%", marginTop: "25px" }}>
2024-03-26 15:41:22 +00:00
<DataGrid
disableSelectionOnClick={true}
rows={data?.items ?? []}
columns={columns}
sx={{
color: theme.palette.secondary.main,
"& .MuiDataGrid-iconSeparator": { display: "none" },
"& .css-levciy-MuiTablePagination-displayedRows": {
color: theme.palette.secondary.main,
},
"& .MuiSvgIcon-root": { color: theme.palette.secondary.main },
"& .MuiTablePagination-selectLabel": {
color: theme.palette.secondary.main,
},
"& .MuiInputBase-root": { color: theme.palette.secondary.main },
"& .MuiButton-text": { color: theme.palette.secondary.main },
"& .MuiDataGrid-overlay": {
backgroundColor: "rgba(255, 255, 255, 0.1)",
animation: `${fadeIn} 0.5s ease-out`,
},
}}
components={{
Toolbar: GridToolbar,
LoadingOverlay: GridLoadingOverlay,
}}
loading={isValidating}
paginationMode="server"
page={page}
onPageChange={setPage}
rowCount={promocodesCount}
pageSize={pageSize}
onPageSizeChange={setPageSize}
rowsPerPageOptions={[10, 25, 50, 100]}
autoHeight
/>
</Box>
<EditModal
id={showEditModalId}
setId={setShowEditModalId}
promocodes={data?.items ?? []}
editPromocode={editPromocode}
/>
2024-03-26 15:41:22 +00:00
<StatisticsModal
id={showStatisticsModalId}
setId={setShowStatisticsModalId}
2024-04-02 14:56:23 +00:00
promocodeStatistics={promocodeStatistics}
to={to}
setTo={setTo}
from={from}
setFrom={setFrom}
2024-04-02 13:21:17 +00:00
promocodes={data?.items ?? []}
2024-04-02 14:56:23 +00:00
createFastLink={createFastLink}
2024-04-02 13:21:17 +00:00
/>
<DeleteModal
id={deleteModal}
setModal={setDeleteModal}
deletePromocode={deletePromocode}
2024-03-26 15:41:22 +00:00
/>
</LocalizationProvider>
);
};