сохранение кэша в рублях, копейках и строкой
This commit is contained in:
parent
e77e83d5d4
commit
843877c570
@ -204,23 +204,22 @@ export const Answers: FC<AnswersProps> = ({ data }) => {
|
||||
const theme = useTheme();
|
||||
const answers = useMemo(
|
||||
() =>
|
||||
data === null ?
|
||||
[]
|
||||
:
|
||||
Object.keys(data ?? {})
|
||||
.map((key) =>
|
||||
Object.entries(data[key]).map(([title, percent]) => ({
|
||||
title,
|
||||
percent,
|
||||
key,
|
||||
})),
|
||||
)
|
||||
.flat(),
|
||||
data === null
|
||||
? []
|
||||
: Object.keys(data ?? {})
|
||||
.map((key) =>
|
||||
Object.entries(data[key]).map(([title, percent]) => ({
|
||||
title,
|
||||
percent,
|
||||
key,
|
||||
})),
|
||||
)
|
||||
.flat(),
|
||||
[data],
|
||||
);
|
||||
|
||||
console.log(answers)
|
||||
console.log(page)
|
||||
console.log(answers);
|
||||
console.log(page);
|
||||
if (!data) {
|
||||
return (
|
||||
<Typography textAlign="center" m="10px 0">
|
||||
@ -274,7 +273,13 @@ console.log(page)
|
||||
},
|
||||
}}
|
||||
>
|
||||
Заголовок вопроса. {answers.slice(ANSWERS_PER_PAGE * (page - 1), ANSWERS_PER_PAGE * page)[0]?.key}
|
||||
Заголовок вопроса.{" "}
|
||||
{
|
||||
answers.slice(
|
||||
ANSWERS_PER_PAGE * (page - 1),
|
||||
ANSWERS_PER_PAGE * page,
|
||||
)[0]?.key
|
||||
}
|
||||
</Typography>
|
||||
<ButtonBase>
|
||||
<DoubleCheckIcon />
|
||||
|
@ -44,15 +44,18 @@ const GeneralItem = ({
|
||||
const numberValue =
|
||||
numberType === "sum"
|
||||
? Object.values(general).reduce((total, item) => total + item, 0)
|
||||
: 0
|
||||
Object.entries(general).reduce(
|
||||
(total, [key, value]) => total + (value / Number(key)) * 100,
|
||||
0,
|
||||
) / Object.keys(general).length || Number(0);
|
||||
: 0;
|
||||
Object.entries(general).reduce(
|
||||
(total, [key, value]) => total + (value / Number(key)) * 100,
|
||||
0,
|
||||
) / Object.keys(general).length || Number(0);
|
||||
|
||||
console.log("general" , general)
|
||||
console.log(Object.keys(general).length === 0)
|
||||
if (Object.keys(general).length === 0) return <Typography textAlign="center">{`${title} - нет данных`}</Typography>
|
||||
console.log("general", general);
|
||||
console.log(Object.keys(general).length === 0);
|
||||
if (Object.keys(general).length === 0)
|
||||
return (
|
||||
<Typography textAlign="center">{`${title} - нет данных`}</Typography>
|
||||
);
|
||||
return (
|
||||
<Paper
|
||||
sx={{
|
||||
@ -66,7 +69,6 @@ const GeneralItem = ({
|
||||
{numberType === "sum" ? numberValue : `${numberValue.toFixed()}%`}
|
||||
</Typography>
|
||||
<LineChart
|
||||
|
||||
xAxis={[
|
||||
{
|
||||
data: Object.keys(general),
|
||||
@ -126,25 +128,41 @@ export const General: FC<GeneralProps> = ({ data }) => {
|
||||
<GeneralItem
|
||||
title="Открыли квиз"
|
||||
numberType="sum"
|
||||
general={ Object.entries(data.Open).filter(([, v]) => v > 0).reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {}) || { 0: 0 }}
|
||||
general={
|
||||
Object.entries(data.Open)
|
||||
.filter(([, v]) => v > 0)
|
||||
.reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {}) || { 0: 0 }
|
||||
}
|
||||
color={COLORS[0]}
|
||||
/>
|
||||
<GeneralItem
|
||||
title="Получено заявок"
|
||||
numberType="sum"
|
||||
general={ Object.entries(data.Result).filter(([, v]) => v > 0).reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {}) || { 0: 0 }}
|
||||
general={
|
||||
Object.entries(data.Result)
|
||||
.filter(([, v]) => v > 0)
|
||||
.reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {}) || { 0: 0 }
|
||||
}
|
||||
color={COLORS[1]}
|
||||
/>
|
||||
<GeneralItem
|
||||
title="Конверсия"
|
||||
numberType="percent"
|
||||
general={ Object.entries(data.Conversion).filter(([, v]) => v > 0).reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {}) || { 0: 0 }}
|
||||
general={
|
||||
Object.entries(data.Conversion)
|
||||
.filter(([, v]) => v > 0)
|
||||
.reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {}) || { 0: 0 }
|
||||
}
|
||||
color={COLORS[2]}
|
||||
/>
|
||||
<GeneralItem
|
||||
title="Среднее время прохождения квиза"
|
||||
numberType="time"
|
||||
general={Object.entries(data.AvTime).filter(([, v]) => v > 0).reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {}) || { 0: 0 }}
|
||||
general={
|
||||
Object.entries(data.AvTime)
|
||||
.filter(([, v]) => v > 0)
|
||||
.reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {}) || { 0: 0 }
|
||||
}
|
||||
color={COLORS[3]}
|
||||
/>
|
||||
</Box>
|
||||
|
@ -48,7 +48,7 @@ function TariffPage() {
|
||||
const [user, setUser] = useState();
|
||||
const [discounts, setDiscounts] = useState();
|
||||
const [openModal, setOpenModal] = useState({});
|
||||
const {cash} = useWallet()
|
||||
const { cashString, cashCop, cashRub } = useWallet();
|
||||
const [selectedItem, setSelectedItem] = useState<"count" | "day" | "dop">(
|
||||
"day",
|
||||
);
|
||||
@ -95,8 +95,10 @@ function TariffPage() {
|
||||
setUser(user);
|
||||
setTariffs(tariffsList);
|
||||
setDiscounts(discounts.Discounts);
|
||||
let c = currencyFormatter.format(Number(user.wallet.cash) / 100);
|
||||
setCash(c);
|
||||
let cs = currencyFormatter.format(Number(user.wallet.cash) / 100);
|
||||
let cc = Number(user.wallet.cash);
|
||||
let cr = Number(user.wallet.cash) / 100;
|
||||
setCash(cs, cc, cr);
|
||||
};
|
||||
get();
|
||||
}, []);
|
||||
@ -105,8 +107,8 @@ function TariffPage() {
|
||||
|
||||
const openModalHC = (tariffInfo: any) => setOpenModal(tariffInfo);
|
||||
const tryBuy = async ({ id, price }: { id: string; price: number }) => {
|
||||
console.log("цена", price)
|
||||
console.log("мои деньги", (user.wallet.cash / 100))
|
||||
console.log("цена", price);
|
||||
// console.log("мои деньги", (user.wallet.cash / 100))
|
||||
openModalHC({});
|
||||
//Если в корзине что-то было - выкладываем содержимое и запоминаем чо там лежало
|
||||
if (user.cart.length > 0) {
|
||||
@ -118,14 +120,18 @@ function TariffPage() {
|
||||
url: process.env.REACT_APP_DOMAIN + `/customer/cart?id=${id}`,
|
||||
});
|
||||
//Если нам хватает денежек - покупаем тариф
|
||||
if ((price * 100) <= user.wallet.cash) {
|
||||
if (price * 100 <= cashCop) {
|
||||
try {
|
||||
const data = await makeRequest({
|
||||
method: "POST",
|
||||
url: process.env.REACT_APP_DOMAIN + "/customer/cart/pay",
|
||||
});
|
||||
console.log(data)
|
||||
setCash(currencyFormatter.format(Number(data.wallet.cash) / 100));
|
||||
console.log(data);
|
||||
setCash(
|
||||
currencyFormatter.format(Number(data.wallet.cash) / 100),
|
||||
Number(data.wallet.cash),
|
||||
Number(data.wallet.cash) / 100,
|
||||
);
|
||||
enqueueSnackbar("Тариф успешно приобретён");
|
||||
} catch (e) {
|
||||
enqueueSnackbar("Произошла ошибка. Попробуйте позже");
|
||||
@ -137,9 +143,9 @@ function TariffPage() {
|
||||
// history.pushState({}, null, "https://hub.pena.digital/wallet?action=squizpay");
|
||||
|
||||
var link = document.createElement("a");
|
||||
link.href = `https://${isTestServer ? "s" : ""}hub.pena.digital/quizpayment?action=squizpay&dif=${
|
||||
Math.floor((price * 100) - Math.floor(Number(user.wallet.cash)))
|
||||
}&data=${token}&userid=${userId}`;
|
||||
link.href = `https://${isTestServer ? "s" : ""}hub.pena.digital/quizpayment?action=squizpay&dif=${Math.floor(
|
||||
price * 100 - cashCop,
|
||||
)}&data=${token}&userid=${userId}`;
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
}
|
||||
@ -192,6 +198,7 @@ function TariffPage() {
|
||||
enqueueSnackbar(error.message);
|
||||
});
|
||||
}
|
||||
console.log("nfhbas", filteredTariffs);
|
||||
|
||||
return (
|
||||
<>
|
||||
@ -231,9 +238,11 @@ function TariffPage() {
|
||||
<Typography
|
||||
variant="body2"
|
||||
color={"#7e2aea"}
|
||||
fontSize={isMobile ? (cash.length > 9 ? "13px" : "16px") : "16px"}
|
||||
fontSize={
|
||||
isMobile ? (cashString.length > 9 ? "13px" : "16px") : "16px"
|
||||
}
|
||||
>
|
||||
{cash}
|
||||
{cashString}
|
||||
</Typography>
|
||||
</Box>
|
||||
<LogoutButton
|
||||
@ -338,7 +347,8 @@ function TariffPage() {
|
||||
component="h2"
|
||||
mb="20px"
|
||||
>
|
||||
Вы подтверждаете платёж в сумму {openModal.price ? openModal.price.toFixed(2) : 0} ₽
|
||||
Вы подтверждаете платёж в сумму{" "}
|
||||
{openModal.price ? openModal.price.toFixed(2) : 0} ₽
|
||||
</Typography>
|
||||
<Button variant="contained" onClick={() => tryBuy(openModal)}>
|
||||
купить
|
||||
|
@ -1,14 +1,16 @@
|
||||
import { create } from "zustand";
|
||||
import { devtools } from "zustand/middleware";
|
||||
|
||||
type Wallet = { cash: number }
|
||||
type Wallet = { cashString: string; cashCop: number; cashRub: number };
|
||||
export const useWallet = create<Wallet>()(
|
||||
devtools(() => (
|
||||
{ cash: 0 }
|
||||
))
|
||||
devtools(() => ({ cashString: "", cashCop: 0, cashRub: 0 })),
|
||||
);
|
||||
|
||||
export const setCash = (cash: number) => {
|
||||
console.log("я получил ", cash)
|
||||
useWallet.setState({ cash })
|
||||
};
|
||||
export const setCash = (
|
||||
cashString: string,
|
||||
cashCop: number,
|
||||
cashRub: number,
|
||||
) => {
|
||||
console.log("я получил ", cashString);
|
||||
useWallet.setState({ cashString, cashCop, cashRub });
|
||||
};
|
||||
|
@ -2,13 +2,13 @@ import { useNavigate } from "react-router-dom";
|
||||
import { useWallet, setCash } from "@root/cash";
|
||||
|
||||
import { payCart } from "@api/cart";
|
||||
import { currencyFormatter } from "../../pages/Tariffs/tariffsUtils/currencyFormatter";
|
||||
import { currencyFormatter } from "../../pages/Tariffs/tariffsUtils/currencyFormatter";
|
||||
|
||||
const MINUTE = 1000 * 60;
|
||||
|
||||
export const useAfterpay = () => {
|
||||
const navigate = useNavigate();
|
||||
const { cash } = useWallet()
|
||||
// const { cash } = useWallet()
|
||||
|
||||
const checkPayment = () => {
|
||||
const redirectUrl = new URL(window.location.href);
|
||||
@ -31,7 +31,12 @@ export const useAfterpay = () => {
|
||||
tryCount += 1;
|
||||
|
||||
const [data, payCartError] = await payCart();
|
||||
if (data !== null) setCash(currencyFormatter.format(Number(data.wallet.cash) / 100));
|
||||
if (data !== null)
|
||||
setCash(
|
||||
currencyFormatter.format(Number(data.wallet.cash) / 100),
|
||||
Number(data.wallet.cash),
|
||||
Number(data.wallet.cash) / 100,
|
||||
);
|
||||
|
||||
if (!payCartError || Date.now() > deadline) {
|
||||
localStorage.removeItem("payCartPendingRequestDeadline");
|
||||
|
Loading…
Reference in New Issue
Block a user