From ddd345b0d12ef120054574eb0b353d8c468653ee Mon Sep 17 00:00:00 2001 From: Tamara Date: Mon, 29 Apr 2024 16:29:52 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D1=81=D1=82=D0=B0=D1=82=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D0=B8=D0=BA=D0=B0=20=D0=BF=D1=80=D0=BE=D0=BC=D0=BE=D0=BA=D0=BE?= =?UTF-8?q?=D0=B4=D0=B0(=D0=B1=D0=B5=D0=B7=20=D0=B2=D1=8B=D0=B2=D0=BE?= =?UTF-8?q?=D0=B4=D0=B0=20=D0=B2=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86?= =?UTF-8?q?=D1=83)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/quizStatistic.ts | 19 ++- .../Content/QuizStatistic/StatisticSchild.tsx | 102 +-------------- .../QuizStatistic/StstisticPromocode.tsx | 50 ++++++++ .../Content/QuizStatistic/dateFilter.tsx | 119 ++++++++++++++++++ .../dashboard/Content/QuizStatistic/index.tsx | 111 +--------------- src/utils/hooks/usePromocodeStatistic.ts | 29 +++++ 6 files changed, 224 insertions(+), 206 deletions(-) create mode 100644 src/pages/dashboard/Content/QuizStatistic/StstisticPromocode.tsx create mode 100644 src/pages/dashboard/Content/QuizStatistic/dateFilter.tsx create mode 100644 src/utils/hooks/usePromocodeStatistic.ts diff --git a/src/api/quizStatistic.ts b/src/api/quizStatistic.ts index 0551ada..217e300 100644 --- a/src/api/quizStatistic.ts +++ b/src/api/quizStatistic.ts @@ -29,7 +29,7 @@ export const getStatistic = async ( }; export const getStatisticSchild = async ( - from: any, to: any): Promise => { + from: number, to: number): Promise => { try { const StatisticResponse = await makeRequest({ url: process.env.REACT_APP_DOMAIN + "/customer/quizlogo/stat" , @@ -48,3 +48,20 @@ export const getStatisticSchild = async ( return [{ID: 0, Regs: 0, Money: 0, Quizes:[{QuizID: 0, Regs: 0, Money: 0}]}]; } }; + export const getStatisticPromocode = async (from: number, to: number): Promise => { + try { + const StatisticPromo = await makeRequest({ + url: process.env.REACT_APP_DOMAIN + "/customer/promocode/ltv" , + method: "post", + useToken: true, + body: { + "to": to, + "from": from, + }, + }); + return StatisticPromo; + } catch (nativeError) { + + console.log(nativeError) + } + } \ No newline at end of file diff --git a/src/pages/dashboard/Content/QuizStatistic/StatisticSchild.tsx b/src/pages/dashboard/Content/QuizStatistic/StatisticSchild.tsx index 74087a0..7694877 100644 --- a/src/pages/dashboard/Content/QuizStatistic/StatisticSchild.tsx +++ b/src/pages/dashboard/Content/QuizStatistic/StatisticSchild.tsx @@ -19,12 +19,10 @@ import { DatePicker, LocalizationProvider } from '@mui/x-date-pickers'; import ModalUser from "@pages/dashboard/ModalUser"; import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; import useSchildStatistic from "@root/utils/hooks/useSchildStatistic"; +import DateFilter from "@pages/dashboard/Content/QuizStatistic/dateFilter"; export default function StatisticSchild() { const theme = useTheme() - const [isOpen, setOpen] = useState(false); - const [isOpenEnd, setOpenEnd] = useState(false); - const [openUserModal, setOpenUserModal] = useState(false); const [activeUserId, setActiveUserId] = useState(""); @@ -32,35 +30,6 @@ export default function StatisticSchild() { const [to, setTo] = useState(moment(Date.now())); const statistic = useSchildStatistic(from, to) - const handleClose = () => { - setOpen(false); - }; - - const handleOpen = () => { - setOpen(true); - }; - - const onAdornmentClick = () => { - setOpen((old) => !old); - if (isOpenEnd) { - handleCloseEnd(); - } - }; - - const handleCloseEnd = () => { - setOpenEnd(false); - }; - - const handleOpenEnd = () => { - setOpenEnd(true); - }; - - const onAdornmentClickEnd = () => { - setOpenEnd((old) => !old); - if (isOpen) { - handleClose(); - } - }; useEffect(() => { if (!openUserModal) { setActiveUserId(""); @@ -82,74 +51,7 @@ export default function StatisticSchild() { return( Статистика переходов с шильдика - - - Дата начала - - date && setFrom(date)} - renderInput={(params) => ( - - )} - InputProps={{ - sx: { - height: "40px", - color: theme.palette.secondary.main, - border: "1px solid", - borderColor: theme.palette.secondary.main, - "& .MuiSvgIcon-root": { - color: theme.palette.secondary.main, - }, - }, - }} - /> - - - - Дата окончания - - date && setTo(date)} - renderInput={(params) => ( - - )} - InputProps={{ - sx: { - height: "40px", - color: theme.palette.secondary.main, - border: "1px solid", - borderColor: theme.palette.secondary.main, - "& .MuiSvgIcon-root": { - color: theme.palette.secondary.main, - }, - }, - }} - /> - + (moment("01.01.2023")); + const [to, setTo] = useState(moment(Date.now())); + + const statisticPromo = usePromocodeStatistic({to, from}) + + return( + + Статистика промокодов + +
+ + + Промокод + Регистации + Внесено + + + + {/*{Registrations}*/} + {/*{Quizes}*/} + {/*{Results}*/} + +
+
+ ) +} \ No newline at end of file diff --git a/src/pages/dashboard/Content/QuizStatistic/dateFilter.tsx b/src/pages/dashboard/Content/QuizStatistic/dateFilter.tsx new file mode 100644 index 0000000..9d8339e --- /dev/null +++ b/src/pages/dashboard/Content/QuizStatistic/dateFilter.tsx @@ -0,0 +1,119 @@ +import {Box, TextField, Typography, useTheme} from "@mui/material"; +import {useState} from "react"; +import moment, {Moment} from "moment"; +import {DatePicker} from "@mui/x-date-pickers"; + +interface Props{ + from: Moment | null, + to: Moment | null, + setFrom: (a: Moment | null) => void, + setTo: (a: Moment | null) => void, +} + +export default function DateFilter({to, setTo, from, setFrom}: Props) { + const theme = useTheme() + const [isOpen, setOpen] = useState(false); + const [isOpenEnd, setOpenEnd] = useState(false); + const handleClose = () => { + setOpen(false); + }; + + const handleOpen = () => { + setOpen(true); + }; + + const onAdornmentClick = () => { + setOpen((old) => !old); + if (isOpenEnd) { + handleCloseEnd(); + } + }; + + const handleCloseEnd = () => { + setOpenEnd(false); + }; + + const handleOpenEnd = () => { + setOpenEnd(true); + }; + + const onAdornmentClickEnd = () => { + setOpenEnd((old) => !old); + if (isOpen) { + handleClose(); + } + }; + return( + <> + + + Дата начала + + date && setFrom(date)} + renderInput={(params) => ( + + )} + InputProps={{ + sx: { + height: "40px", + color: theme.palette.secondary.main, + border: "1px solid", + borderColor: theme.palette.secondary.main, + "& .MuiSvgIcon-root": { + color: theme.palette.secondary.main, + }, + }, + }} + /> + + + + Дата окончания + + date && setTo(date)} + renderInput={(params) => ( + + )} + InputProps={{ + sx: { + height: "40px", + color: theme.palette.secondary.main, + border: "1px solid", + borderColor: theme.palette.secondary.main, + "& .MuiSvgIcon-root": { + color: theme.palette.secondary.main, + }, + }, + }} + /> + + + + ) +} \ No newline at end of file diff --git a/src/pages/dashboard/Content/QuizStatistic/index.tsx b/src/pages/dashboard/Content/QuizStatistic/index.tsx index 172aeba..2dbbcea 100644 --- a/src/pages/dashboard/Content/QuizStatistic/index.tsx +++ b/src/pages/dashboard/Content/QuizStatistic/index.tsx @@ -6,18 +6,16 @@ import { DatePicker, LocalizationProvider } from '@mui/x-date-pickers'; import { useQuizStatistic } from '@root/utils/hooks/useQuizStatistic'; import { AdapterMoment } from '@mui/x-date-pickers/AdapterMoment' import StatisticSchild from "./StatisticSchild"; +import makeRequest from "@root/api/makeRequest"; +import {parseAxiosError} from "@root/utils/parse-error"; +import DateFilter from "@pages/dashboard/Content/QuizStatistic/dateFilter"; +import StstisticPromocode from "@pages/dashboard/Content/QuizStatistic/StstisticPromocode"; export default () => { const theme = useTheme() - - const [isOpen, setOpen] = useState(false); - const [isOpenEnd, setOpenEnd] = useState(false); - const [from, setFrom] = useState(null); const [to, setTo] = useState(moment(Date.now())); - - const { Registrations, Quizes, Results } = useQuizStatistic({ from, to, @@ -28,106 +26,9 @@ export default () => { setTo(moment(Date.now())); }; - const handleClose = () => { - setOpen(false); - }; - - const handleOpen = () => { - setOpen(true); - }; - - const onAdornmentClick = () => { - setOpen((old) => !old); - if (isOpenEnd) { - handleCloseEnd(); - } - }; - - const handleCloseEnd = () => { - setOpenEnd(false); - }; - - const handleOpenEnd = () => { - setOpenEnd(true); - }; - - const onAdornmentClickEnd = () => { - setOpenEnd((old) => !old); - if (isOpen) { - handleClose(); - } - }; - return <> - - - Дата начала - - date && setFrom(date)} - renderInput={(params) => ( - - )} - InputProps={{ - sx: { - height: "40px", - color: theme.palette.secondary.main, - border: "1px solid", - borderColor: theme.palette.secondary.main, - "& .MuiSvgIcon-root": { - color: theme.palette.secondary.main, - }, - }, - }} - /> - - - - Дата окончания - - date && setTo(date)} - renderInput={(params) => ( - - )} - InputProps={{ - sx: { - height: "40px", - color: theme.palette.secondary.main, - border: "1px solid", - borderColor: theme.palette.secondary.main, - "& .MuiSvgIcon-root": { - color: theme.palette.secondary.main, - }, - }, - }} - /> - + Внесено - - {/*{Registrations}*/} - {/*{Quizes}*/} - {/*{Results}*/} - + + {Object.values(statisticPromo).map((sPromo:any)=> { + let codeword + let listPromo = promocodes + let statisticP = statisticPromo + console.log("in map", sPromo.key) + + for (statisticP.key in statisticP) { + const codewordSearch = listPromo.find(obj => obj.id === statisticP.key) + codeword = codewordSearch?.codeword + console.log(codeword) + } + + return( + + {codeword} + {sPromo.Regs} + {sPromo.Money} + + ) + }) + }
) diff --git a/src/utils/hooks/usePromocodeStatistic.ts b/src/utils/hooks/usePromocodeStatistic.ts index b876579..b881980 100644 --- a/src/utils/hooks/usePromocodeStatistic.ts +++ b/src/utils/hooks/usePromocodeStatistic.ts @@ -18,7 +18,7 @@ export function usePromocodeStatistic({ to, from }: useStatisticProps) { const requestStatistics = async () => { - const gottenData = await getStatisticPromocode(Number(formatTo), Number(formatFrom)); + const gottenData = await getStatisticPromocode(Number(formatFrom), Number(formatTo)); setStatisticPromo(gottenData) } From eb6cd2face7571fa852ef25b56ba612a68d9e1e4 Mon Sep 17 00:00:00 2001 From: Tamara Date: Tue, 30 Apr 2024 04:20:34 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D1=81=D1=82=D0=B0=D1=82=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D0=B8=D0=BA=D0=B0=20=D0=BF=D1=80=D0=BE=D0=BC=D0=BE=D0=BA=D0=BE?= =?UTF-8?q?=D0=B4=D0=B0(=D0=B1=D0=B5=D0=B7=20=D0=BA=D0=BE=D0=B4=D0=B2?= =?UTF-8?q?=D0=BE=D1=80=D0=B4=D0=BE=D0=B2,=20=D0=BF=D0=BE=D1=87=D0=B8?= =?UTF-8?q?=D1=89=D0=B5=D0=BD=D0=BE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../QuizStatistic/StstisticPromocode.tsx | 22 +++++-------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/src/pages/dashboard/Content/QuizStatistic/StstisticPromocode.tsx b/src/pages/dashboard/Content/QuizStatistic/StstisticPromocode.tsx index 14d6dfc..edd80a3 100644 --- a/src/pages/dashboard/Content/QuizStatistic/StstisticPromocode.tsx +++ b/src/pages/dashboard/Content/QuizStatistic/StstisticPromocode.tsx @@ -2,10 +2,9 @@ import {Button, Table, TableBody, TableCell, TableHead, TableRow, Typography, us import {AdapterMoment} from "@mui/x-date-pickers/AdapterMoment"; import { DatePicker, LocalizationProvider } from '@mui/x-date-pickers'; import DateFilter from "@pages/dashboard/Content/QuizStatistic/dateFilter"; -import {useEffect, useState} from "react"; +import {useState} from "react"; import moment, {Moment} from "moment"; import {usePromocodeStatistic} from "@root/utils/hooks/usePromocodeStatistic"; -import {promocodeApi} from "@root/api/promocode/requests"; import {useAllPromocodes} from "@root/api/promocode/swr"; export default function StstisticPromocode() { @@ -16,19 +15,9 @@ export default function StstisticPromocode() { const statisticPromo = usePromocodeStatistic({to, from}) - for (statisticPromo.key in statisticPromo) { - const codewordSearch = promocodes.find(obj => obj.id === statisticPromo.key) - let codeword = codewordSearch?.codeword - console.log( "xnj 'nj", codeword) - } - - return( Статистика промокодов - - {Object.values(statisticPromo).map((sPromo:any)=> { + {Object.values(statisticPromo || {}).map((sPromo:any)=> { let codeword let listPromo = promocodes let statisticP = statisticPromo - console.log("in map", sPromo.key) - for (statisticP.key in statisticP) { - const codewordSearch = listPromo.find(obj => obj.id === statisticP.key) + for (let key in statisticP) { + const codewordSearch = listPromo.find(obj => obj.id === key) codeword = codewordSearch?.codeword - console.log(codeword) + // console.log(codeword) } return(