From 8d1192c8bcc192cde0136287d4904857d26fb909 Mon Sep 17 00:00:00 2001 From: Tamara Date: Sat, 20 Jan 2024 03:37:41 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D1=8B=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=B2=D0=BE=D1=81=D1=81=D1=82=D0=B0=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=B0=D1=80?= =?UTF-8?q?=D0=BE=D0=BB=D1=8F(=D0=BD=D0=B5=20=D0=B7=D0=B0=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=87=D0=B5=D0=BD=D0=BE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- src/api/auth.ts | 5 +- src/index.tsx | 7 ++ src/pages/Tariffs/TariffCard.tsx | 10 +- src/pages/auth/OutdatedLink.tsx | 138 ++++++++++++++++++++++ src/pages/auth/Recover.tsx | 2 + src/pages/auth/RecoverPassword.tsx | 184 +++++++++++++++++++++++++++++ yarn.lock | 8 +- 8 files changed, 344 insertions(+), 12 deletions(-) create mode 100644 src/pages/auth/OutdatedLink.tsx create mode 100644 src/pages/auth/RecoverPassword.tsx diff --git a/package.json b/package.json index f67876f..1738857 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "dependencies": { "@emotion/react": "^11.10.5", "@emotion/styled": "^11.10.5", - "@frontend/kitui": "1.0.58", + "@frontend/kitui": "1.0.60", "@mui/icons-material": "^5.10.14", "@mui/material": "^5.10.14", "@popperjs/core": "^2.11.8", diff --git a/src/api/auth.ts b/src/api/auth.ts index f0c8389..f6cd84f 100644 --- a/src/api/auth.ts +++ b/src/api/auth.ts @@ -10,7 +10,7 @@ import type { } from "@frontend/kitui"; const apiUrl = process.env.REACT_APP_DOMAIN + "/auth"; -console.log("переменная", apiUrl); + export async function register( login: string, password: string, @@ -61,8 +61,9 @@ export async function recover( try { const formData = new FormData(); formData.append("email", email); + formData.append("RedirectionURL", process.env.REACT_APP_DOMAIN + "/changepwd") const recoverResponse = await makeRequest({ - url: process.env.REACT_APP_DOMAIN + "/recover", + url: process.env.REACT_APP_DOMAIN + "/codeword/recover", body: formData, useToken: false, withCredentials: true, diff --git a/src/index.tsx b/src/index.tsx index f0f28a1..7020a57 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -30,6 +30,8 @@ import PPofData from "@root/docs/PPofData" import Docs from "@root/docs/docs" import Oferta from "@root/docs/content/oferta" import PrivacyPolicy from "@root/docs/content/PrivacyPolicy" +import RecoverPassword from "@root/pages/auth/RecoverPassword" +import OutdatedLink from "@root/pages/auth/OutdatedLink" pdfjs.GlobalWorkerOptions.workerSrc = new URL("pdfjs-dist/build/pdf.worker.min.js", import.meta.url).toString() @@ -78,6 +80,9 @@ const App = () => { } /> } /> } /> + } /> + } /> + )} @@ -85,6 +90,8 @@ const App = () => { } /> } /> } /> + } /> + } /> }> }> } /> diff --git a/src/pages/Tariffs/TariffCard.tsx b/src/pages/Tariffs/TariffCard.tsx index d380fb6..2d1b9b0 100644 --- a/src/pages/Tariffs/TariffCard.tsx +++ b/src/pages/Tariffs/TariffCard.tsx @@ -7,7 +7,7 @@ interface Props { icon: ReactNode; headerText: string; discount?: string; - text: string | string[]; + text?: any; sx?: SxProps; buttonProps?: { sx?: SxProps; @@ -78,7 +78,7 @@ export default function TariffCard({ icon, headerText, text, sx, price, buttonPr )} - {/* {headerText}} placement="top"> + {headerText}} placement="top"> {headerText} - */} - {/* + ( {line} ))} @@ -111,7 +111,7 @@ export default function TariffCard({ icon, headerText, text, sx, price, buttonPr ))} - */} + {buttonProps && ( + + + + + ); +} diff --git a/src/pages/auth/Recover.tsx b/src/pages/auth/Recover.tsx index 3cef865..2a62c9b 100644 --- a/src/pages/auth/Recover.tsx +++ b/src/pages/auth/Recover.tsx @@ -56,6 +56,8 @@ export default function RecoverDialog() { if (recoverError) { return enqueueSnackbar(recoverError); } + navigate("/") + enqueueSnackbar("Письмо прийдёт Вам на почту") }, }); diff --git a/src/pages/auth/RecoverPassword.tsx b/src/pages/auth/RecoverPassword.tsx new file mode 100644 index 0000000..73e333b --- /dev/null +++ b/src/pages/auth/RecoverPassword.tsx @@ -0,0 +1,184 @@ +import { + Box, + Dialog, + IconButton, + Link, + Typography, + useMediaQuery, + useTheme, + Button, +} from "@mui/material"; +import CloseIcon from "@mui/icons-material/Close"; +import { useLocation, useNavigate } from "react-router-dom"; +import { useFormik } from "formik"; +import InputTextfield from "@components/InputTextfield"; +import PenaLogo from "@components/PenaLogo"; +import { enqueueSnackbar } from "notistack"; +import { Link as RouterLink } from "react-router-dom"; +import { object, string } from "yup"; +import { useEffect, useState } from "react"; +import { useUserStore } from "@root/stores/user"; +import { cardShadow } from "@root/utils/theme"; + +import { recover } from "@root/api/auth"; +import axios, {AxiosResponse} from "axios" +import {getAuthToken, setAuthToken} from "@frontend/kitui" +interface Values { + password: string; +} + +const initialValues: Values = { + password: "", +}; + +const validationSchema = object({ + password: string() + .min(8, "Минимум 8 символов") + .matches(/^[.,:;-_+\d\w]+$/, "Некорректные символы") + .required("Поле обязательно"), +}); + +export default function RecoverPassword() { + const [isDialogOpen, setIsDialogOpen] = useState(true); + const user = useUserStore((state) => state.user); + const theme = useTheme(); + const upMd = useMediaQuery(theme.breakpoints.up("md")); + const navigate = useNavigate(); + const location = useLocation(); + const formik = useFormik({ + initialValues, + validationSchema, + onSubmit: async (values, formikHelpers) => { + const params = new URLSearchParams(window.location.search) + const authToken = params.get("auth") + if (authToken) { + try { + const response = await axios({ + url: process.env.REACT_APP_DOMAIN + "/user", + method: "PATCH", + headers: {"Authorization": "Bearer " + authToken}, + data: {password: values.password}, + }); + + } catch (error) { enqueueSnackbar("Извините, произошла ошибка, попробуйте повторить позже")} + + } else { + enqueueSnackbar("Неверный url-адрес") + } + }, + }); + + function handleClose() { + setIsDialogOpen(false); + setTimeout(() => navigate("/"), theme.transitions.duration.leavingScreen); + } + + return ( + + + + + + + + + + Введите новый пароль + + + + + + + + ); +} diff --git a/yarn.lock b/yarn.lock index e9be9f1..47bd9aa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1420,10 +1420,10 @@ resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz" integrity sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A== -"@frontend/kitui@1.0.58": - version "1.0.58" - resolved "https://penahub.gitlab.yandexcloud.net/api/v4/projects/21/packages/npm/@frontend/kitui/-/@frontend/kitui-1.0.58.tgz" - integrity sha1-b/p7hJXG35suzyplPXAIBcBJ6s4= +"@frontend/kitui@1.0.60": + version "1.0.60" + resolved "https://penahub.gitlab.yandexcloud.net/api/v4/projects/21/packages/npm/@frontend/kitui/-/@frontend/kitui-1.0.60.tgz#159980acd53fdf47ab3c4328f5a88850f2675a36" + integrity sha1-FZmArNU/30erPEMo9aiIUPJnWjY= dependencies: immer "^10.0.2" reconnecting-eventsource "^1.6.2"