|
@@ -3,109 +3,218 @@ import { history } from "./../App";
|
|
|
import { Button, Form, Row, Col, Alert } from "react-bootstrap";
|
|
|
import { AuthCheck } from "./../components/AuthCheck";
|
|
|
import { useState } from "react";
|
|
|
+
|
|
|
import {
|
|
|
validateEmail,
|
|
|
validatePassword,
|
|
|
validateNickname,
|
|
|
} from "./../helpers/index";
|
|
|
import { actionUserUpdate } from "./../actions/index";
|
|
|
+import { Loader } from "../components/Loader";
|
|
|
+import { CMyDropzone } from "../components/Dropzone";
|
|
|
+import { Spoiler } from "../components/Spoiler";
|
|
|
|
|
|
const Profile = ({ auth, promise, actionUpdate }) => {
|
|
|
- const [login, setLogin] = useState(promise.user.payload.login);
|
|
|
+ // promise.user?.payload?.login
|
|
|
+ const [login, setLogin] = useState("");
|
|
|
+ // promise.user?.payload?.nick
|
|
|
+ const [nick, setNickname] = useState("");
|
|
|
const [password, setPassword] = useState("");
|
|
|
- const [nick, setNickname] = useState(promise.user.payload.nick);
|
|
|
-
|
|
|
- return (
|
|
|
+ return promise?.user?.status === "PENDING" ? (
|
|
|
+ <Loader />
|
|
|
+ ) : (
|
|
|
<div className="ProfilePage">
|
|
|
{auth.token && history.location.pathname === "/profile" ? (
|
|
|
<div className="d-block mx-auto mt-2 container w-50">
|
|
|
- <h1>Ваш профиль, {promise.user.payload.nick}</h1>
|
|
|
- <Form>
|
|
|
- {validateEmail(login) ? null : (
|
|
|
- <Alert>Email должен быть в формате: email@gmail.com.</Alert>
|
|
|
- )}
|
|
|
- {validatePassword(password) ? null : (
|
|
|
- <Alert>
|
|
|
- Пароль должен быть от 6 символов, иметь хотя бы одну цифру и
|
|
|
- заглавную букву.
|
|
|
- </Alert>
|
|
|
- )}
|
|
|
- {validateNickname(nick) ? null : (
|
|
|
- <Alert>
|
|
|
- Никнейм может состоять только из букв и цифр, а так же иметь
|
|
|
- максимальную длину в 8 символов.
|
|
|
- </Alert>
|
|
|
- )}
|
|
|
- <Form.Group
|
|
|
- as={Row}
|
|
|
- className="mb-3"
|
|
|
- controlId="formHorizontalEmail"
|
|
|
- >
|
|
|
- <Form.Label column sm={2}>
|
|
|
- Никнейм:
|
|
|
- </Form.Label>
|
|
|
- <Col sm={10}>
|
|
|
- <Form.Control
|
|
|
- type="text"
|
|
|
- placeholder="Введите ваш новый никнейм"
|
|
|
- value={nick}
|
|
|
- max="8"
|
|
|
- onChange={(e) => setNickname(e.target.value)}
|
|
|
- />
|
|
|
- </Col>
|
|
|
- </Form.Group>
|
|
|
- <Form.Group
|
|
|
- as={Row}
|
|
|
- className="mb-3"
|
|
|
- controlId="formHorizontalEmail"
|
|
|
- >
|
|
|
- <Form.Label column sm={2}>
|
|
|
- Почта:
|
|
|
- </Form.Label>
|
|
|
- <Col sm={10}>
|
|
|
- <Form.Control
|
|
|
- type="text"
|
|
|
- placeholder="Введите вашу новую почту"
|
|
|
- value={login}
|
|
|
- onChange={(e) => setLogin(e.target.value)}
|
|
|
- />
|
|
|
- </Col>
|
|
|
- </Form.Group>
|
|
|
- <Form.Group
|
|
|
- as={Row}
|
|
|
- className="mb-3"
|
|
|
- controlId="formHorizontalPassword"
|
|
|
- >
|
|
|
- <Form.Label column sm={2}>
|
|
|
- Пароль:
|
|
|
- </Form.Label>
|
|
|
- <Col sm={10}>
|
|
|
- <Form.Control
|
|
|
- type="password"
|
|
|
- placeholder="Введите ваш новый пароль"
|
|
|
- onChange={(e) => setPassword(e.target.value)}
|
|
|
- />
|
|
|
- </Col>
|
|
|
- </Form.Group>
|
|
|
- <Form.Group as={Row} className="mb-3">
|
|
|
- <Col sm={{ span: 10, offset: 2 }} className="my-3">
|
|
|
- <Button
|
|
|
- variant="success"
|
|
|
- disabled={
|
|
|
- validateEmail(login) &&
|
|
|
- password.length !== 0 &&
|
|
|
- validatePassword(password) &&
|
|
|
- validateNickname(nick)
|
|
|
- ? false
|
|
|
- : true
|
|
|
- }
|
|
|
- onClick={() => actionUpdate(promise.user.payload._id)}
|
|
|
+ <h1>Ваш профиль, {promise?.user?.payload?.nick}</h1>
|
|
|
+ <Spoiler
|
|
|
+ children={
|
|
|
+ <>
|
|
|
+ <br />
|
|
|
+ <form
|
|
|
+ action="/upload"
|
|
|
+ method="post"
|
|
|
+ enctype="multipart/form-data"
|
|
|
+ id="form"
|
|
|
>
|
|
|
- Сохранить
|
|
|
- </Button>
|
|
|
- </Col>
|
|
|
- </Form.Group>
|
|
|
- </Form>
|
|
|
+ <img
|
|
|
+ className="avatarProfile"
|
|
|
+ src={
|
|
|
+ promise?.user?.payload?.avatar
|
|
|
+ ? "https://dthezntil550i.cloudfront.net/kg/latest/kg1802132010216500004834729/1280_960/557d644f-12f3-49e1-bb66-23c16400540d.png"
|
|
|
+ : "https://i.ibb.co/bBxzmTm/default-avatar.jpg"
|
|
|
+ }
|
|
|
+ alt="Avatar"
|
|
|
+ />
|
|
|
+ <CMyDropzone />
|
|
|
+ </form>
|
|
|
+ </>
|
|
|
+ }
|
|
|
+ header={<h3>Изменить аватар</h3>}
|
|
|
+ />
|
|
|
+ <Spoiler
|
|
|
+ children={
|
|
|
+ <>
|
|
|
+ <br />
|
|
|
+ <Form>
|
|
|
+ {/*
|
|
|
+ {validateNickname(nick) ? null : (
|
|
|
+ <Alert>
|
|
|
+ Никнейм может состоять только из букв и цифр, а так же иметь
|
|
|
+ максимальную длину в 8 символов.
|
|
|
+ </Alert>
|
|
|
+ )} */}
|
|
|
+ <Form.Group
|
|
|
+ as={Row}
|
|
|
+ className="m-2"
|
|
|
+ controlId="formHorizontalEmail"
|
|
|
+ >
|
|
|
+ <Form.Label column sm={2}>
|
|
|
+ Никнейм:
|
|
|
+ </Form.Label>
|
|
|
+ <Col sm={10}>
|
|
|
+ <Form.Control
|
|
|
+ type="text"
|
|
|
+ placeholder="Введите ваш новый логин"
|
|
|
+ value={nick}
|
|
|
+ max="8"
|
|
|
+ onChange={(e) => setNickname(e.target.value)}
|
|
|
+ />
|
|
|
+ </Col>
|
|
|
+ </Form.Group>
|
|
|
+ <Form.Group as={Row} className="mb-3">
|
|
|
+ <Col sm={{ span: 10, offset: 2 }} className="my-3">
|
|
|
+ <Button
|
|
|
+ variant="success"
|
|
|
+ disabled={
|
|
|
+ validateEmail(login) &&
|
|
|
+ password.length !== 0 &&
|
|
|
+ validatePassword(password) &&
|
|
|
+ validateNickname(nick)
|
|
|
+ ? false
|
|
|
+ : true
|
|
|
+ }
|
|
|
+ onClick={() =>
|
|
|
+ actionUpdate(promise?.user?.payload?._id)
|
|
|
+ }
|
|
|
+ >
|
|
|
+ Сохранить
|
|
|
+ </Button>
|
|
|
+ </Col>
|
|
|
+ </Form.Group>
|
|
|
+ </Form>
|
|
|
+ </>
|
|
|
+ }
|
|
|
+ header={<h3>Изменить логин</h3>}
|
|
|
+ />
|
|
|
+ <Spoiler
|
|
|
+ children={
|
|
|
+ <>
|
|
|
+ <br />
|
|
|
+ <Form>
|
|
|
+ {/* {validateEmail(login) ? null : (
|
|
|
+ <Alert>Email должен быть в формате: email@gmail.com.</Alert>
|
|
|
+ )}
|
|
|
+ {validatePassword(password) ? null : (
|
|
|
+ <Alert>
|
|
|
+ Пароль должен быть от 6 символов, иметь хотя бы одну цифру и
|
|
|
+ заглавную букву.
|
|
|
+ </Alert>
|
|
|
+ )}
|
|
|
+ {validateNickname(nick) ? null : (
|
|
|
+ <Alert>
|
|
|
+ Никнейм может состоять только из букв и цифр, а так же иметь
|
|
|
+ максимальную длину в 8 символов.
|
|
|
+ </Alert>
|
|
|
+ )} */}
|
|
|
+ <Form.Group
|
|
|
+ as={Row}
|
|
|
+ className="m-2"
|
|
|
+ controlId="formHorizontalEmail"
|
|
|
+ >
|
|
|
+ <Form.Label column sm={2}>
|
|
|
+ Почта:
|
|
|
+ </Form.Label>
|
|
|
+ <Col sm={10}>
|
|
|
+ <Form.Control
|
|
|
+ type="text"
|
|
|
+ placeholder="Введите вашу новую почту"
|
|
|
+ value={login}
|
|
|
+ onChange={(e) => setLogin(e.target.value)}
|
|
|
+ />
|
|
|
+ </Col>
|
|
|
+ </Form.Group>
|
|
|
+ <Form.Group as={Row} className="mb-3">
|
|
|
+ <Col sm={{ span: 10, offset: 2 }} className="my-3">
|
|
|
+ <Button
|
|
|
+ variant="success"
|
|
|
+ disabled={
|
|
|
+ validateEmail(login) &&
|
|
|
+ password.length !== 0 &&
|
|
|
+ validatePassword(password) &&
|
|
|
+ validateNickname(nick)
|
|
|
+ ? false
|
|
|
+ : true
|
|
|
+ }
|
|
|
+ onClick={() =>
|
|
|
+ actionUpdate(promise?.user?.payload?._id)
|
|
|
+ }
|
|
|
+ >
|
|
|
+ Сохранить
|
|
|
+ </Button>
|
|
|
+ </Col>
|
|
|
+ </Form.Group>
|
|
|
+ </Form>
|
|
|
+ </>
|
|
|
+ }
|
|
|
+ header={<h3>Изменить почту</h3>}
|
|
|
+ />
|
|
|
+ <Spoiler
|
|
|
+ children={
|
|
|
+ <>
|
|
|
+ <br />
|
|
|
+ <Form>
|
|
|
+ <Form.Group
|
|
|
+ as={Row}
|
|
|
+ className="m-2"
|
|
|
+ controlId="formHorizontalPassword"
|
|
|
+ >
|
|
|
+ <Form.Label column sm={2}>
|
|
|
+ Пароль:
|
|
|
+ </Form.Label>
|
|
|
+ <Col sm={10}>
|
|
|
+ <Form.Control
|
|
|
+ type="password"
|
|
|
+ placeholder="Введите ваш новый пароль"
|
|
|
+ onChange={(e) => setPassword(e.target.value)}
|
|
|
+ />
|
|
|
+ </Col>
|
|
|
+ </Form.Group>
|
|
|
+ <Form.Group as={Row} className="mb-3">
|
|
|
+ <Col sm={{ span: 10, offset: 2 }} className="my-3">
|
|
|
+ <Button
|
|
|
+ variant="success"
|
|
|
+ disabled={
|
|
|
+ validateEmail(login) &&
|
|
|
+ password.length !== 0 &&
|
|
|
+ validatePassword(password) &&
|
|
|
+ validateNickname(nick)
|
|
|
+ ? false
|
|
|
+ : true
|
|
|
+ }
|
|
|
+ onClick={() =>
|
|
|
+ actionUpdate(promise?.user?.payload?._id)
|
|
|
+ }
|
|
|
+ >
|
|
|
+ Сохранить
|
|
|
+ </Button>
|
|
|
+ </Col>
|
|
|
+ </Form.Group>
|
|
|
+ </Form>
|
|
|
+ </>
|
|
|
+ }
|
|
|
+ header={<h3>Изменить пароль</h3>}
|
|
|
+ />
|
|
|
</div>
|
|
|
) : (
|
|
|
<div className="d-block mx-auto mt-2 container w-50">
|