add page profile
This commit is contained in:
parent
c1c2f7cfc5
commit
16a82736a4
14
src/App.jsx
14
src/App.jsx
@ -1,23 +1,22 @@
|
|||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
import { Outlet, useNavigate } from "react-router-dom";
|
import { Outlet, useNavigate } from "react-router-dom";
|
||||||
import { FormsData } from "./context";
|
import { FormsData, UserData } from "./context";
|
||||||
import classes from "./assets/styles/app.module.scss"
|
import classes from "./assets/styles/app.module.scss"
|
||||||
import NavBar from "./components/NavBar.jsx";
|
import NavBar from "./components/NavBar.jsx";
|
||||||
import 'bootstrap/dist/css/bootstrap.min.css';
|
import 'bootstrap/dist/css/bootstrap.min.css';
|
||||||
|
|
||||||
const App = () => {
|
const App = () => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const [forms, setForms] = useState([])
|
const [forms, setForms] = useState([]);
|
||||||
|
const [user, setUser] = useState(false);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<FormsData.Provider value={{
|
<UserData.Provider value={{ user, setUser }}>
|
||||||
forms,
|
<FormsData.Provider value={{ forms, setForms }}>
|
||||||
setForms
|
|
||||||
}}>
|
|
||||||
<div className={classes.main}>
|
<div className={classes.main}>
|
||||||
<div className={classes.container}>
|
<div className={classes.container}>
|
||||||
<div className={classes.header}>
|
<div className={classes.header}>
|
||||||
<NavBar navigate={navigate}/>
|
<NavBar navigate={navigate} auth={user} setAuth={setUser}/>
|
||||||
</div>
|
</div>
|
||||||
<div className={classes.content}>
|
<div className={classes.content}>
|
||||||
<Outlet/>
|
<Outlet/>
|
||||||
@ -25,6 +24,7 @@ const App = () => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</FormsData.Provider>
|
</FormsData.Provider>
|
||||||
|
</UserData.Provider>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
&__header {
|
&__header {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 20%;
|
height: 30%;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@ -54,8 +54,7 @@
|
|||||||
}
|
}
|
||||||
&__body {
|
&__body {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 60%;
|
height: 50%;
|
||||||
// border: 1px solid red;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-around;
|
justify-content: space-around;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
@ -1,7 +1,41 @@
|
|||||||
.main {
|
.main {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.wrapper {
|
.wrapper {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.profile {
|
||||||
|
width: 70%;
|
||||||
|
height: 70%;
|
||||||
|
box-shadow: 0 0 5px 1px rgb(200, 200, 200);
|
||||||
|
padding: 1.5%;
|
||||||
|
&__wrapper {
|
||||||
|
&__header {
|
||||||
|
width: 100%;
|
||||||
|
height: 15%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
h3 {
|
||||||
|
font-size: 25px;
|
||||||
|
font-family: "Montserrat", sans-serif;
|
||||||
|
color: rgb(100, 100, 100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__body {
|
||||||
|
width: 100%;
|
||||||
|
height: 85%;
|
||||||
|
&__item {
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -4,7 +4,7 @@ import classes from "../assets/styles/components/myInput.module.scss"
|
|||||||
const MyInput = (props) => {
|
const MyInput = (props) => {
|
||||||
return (
|
return (
|
||||||
<div className={classes.main} style={{...props.otherMainStyle}}>
|
<div className={classes.main} style={{...props.otherMainStyle}}>
|
||||||
<input type="text" placeholder={props.placeholder} style={{...props.otherInputStyle}}/>
|
<input type={props.type} placeholder={props.placeholder} style={{...props.otherInputStyle}} onChange={(e) => props.change(e.target.value)} value={props.value}/>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
import classes from "../assets/styles/components/navbar.module.scss"
|
import classes from "../assets/styles/components/navbar.module.scss"
|
||||||
|
|
||||||
const NavBar = ({navigate}) => {
|
const NavBar = ({navigate, auth, setAuth}) => {
|
||||||
const [auth, setAuth] = useState(true);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={classes.main}>
|
<div className={classes.main}>
|
||||||
<div className={classes.wrapper}>
|
<div className={classes.wrapper}>
|
||||||
@ -18,7 +16,7 @@ const NavBar = ({navigate}) => {
|
|||||||
<div className={classes.profile}>
|
<div className={classes.profile}>
|
||||||
{auth ?
|
{auth ?
|
||||||
<div className={classes.profile__authorized}>
|
<div className={classes.profile__authorized}>
|
||||||
<span onClick={() => navigate("/profile")}>Профиль</span>
|
<span onClick={() => navigate("/profile")}>Профиль ({auth.name})</span>
|
||||||
</div> :
|
</div> :
|
||||||
<div className={classes.profile__nonAuthorized}>
|
<div className={classes.profile__nonAuthorized}>
|
||||||
<span onClick={() => navigate("/enter")}>Вход <i class="fa-solid fa-arrow-right-to-bracket"></i></span>
|
<span onClick={() => navigate("/enter")}>Вход <i class="fa-solid fa-arrow-right-to-bracket"></i></span>
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
import { createContext } from "react";
|
import { createContext } from "react";
|
||||||
|
|
||||||
export const FormsData = createContext([])
|
export const FormsData = createContext([]);
|
||||||
|
|
||||||
|
export const UserData = createContext(false);
|
@ -1,10 +1,51 @@
|
|||||||
import React, { useState } from "react";
|
import React, { useState, useContext } from "react";
|
||||||
|
import { useNavigate } from "react-router-dom";
|
||||||
import classes from "../assets/styles/enterAccount.module.scss";
|
import classes from "../assets/styles/enterAccount.module.scss";
|
||||||
import MyInput from "../components/MyInput.jsx";
|
import MyInput from "../components/MyInput.jsx";
|
||||||
import MyButton from "../components/MyButton.jsx";
|
import MyButton from "../components/MyButton.jsx";
|
||||||
|
import { UserData } from "../context";
|
||||||
|
|
||||||
const EnterAccount = ({navigate}) => {
|
const EnterAccount = () => {
|
||||||
const [enter, setEnter] = useState("login");
|
const [enter, setEnter] = useState("login");
|
||||||
|
const navigate = useNavigate();
|
||||||
|
|
||||||
|
const [email, setEmail] = useState("");
|
||||||
|
const [phone, setPhone] = useState("");
|
||||||
|
const [name, setName] = useState("");
|
||||||
|
const [surname, setSurname] = useState("");
|
||||||
|
const [patronymic, setPatronymic] = useState("");
|
||||||
|
const [password, setPassword] = useState("");
|
||||||
|
const [repiedPassword, setRepiedPassword] = useState("");
|
||||||
|
|
||||||
|
const {user, setUser} = useContext(UserData);
|
||||||
|
|
||||||
|
function cleanState() {
|
||||||
|
setEmail();
|
||||||
|
setPhone();
|
||||||
|
setName();
|
||||||
|
setSurname();
|
||||||
|
setPatronymic();
|
||||||
|
setPassword();
|
||||||
|
setRepiedPassword();
|
||||||
|
}
|
||||||
|
|
||||||
|
function createUser() {
|
||||||
|
if (password === repiedPassword) {
|
||||||
|
setUser({
|
||||||
|
email: email,
|
||||||
|
phone: phone,
|
||||||
|
name: name,
|
||||||
|
surname: surname,
|
||||||
|
patronymic: patronymic,
|
||||||
|
password: password
|
||||||
|
})
|
||||||
|
cleanState();
|
||||||
|
navigate("/");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log('Error')
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={classes.main}>
|
<div className={classes.main}>
|
||||||
@ -27,10 +68,10 @@ const EnterAccount = ({navigate}) => {
|
|||||||
</div>
|
</div>
|
||||||
<div className={classes.content__wrapper__login__body}>
|
<div className={classes.content__wrapper__login__body}>
|
||||||
<MyInput placeholder={"Email"} otherMainStyle={{width: "100%", height: "20%"}} otherInputStyle={{width: "100%"}}/>
|
<MyInput placeholder={"Email"} otherMainStyle={{width: "100%", height: "20%"}} otherInputStyle={{width: "100%"}}/>
|
||||||
<MyInput placeholder={"Пароль"} otherMainStyle={{width: "100%", height: "20%"}} otherInputStyle={{width: "100%"}}/>
|
<MyInput type={"password"} placeholder={"Пароль"} otherMainStyle={{width: "100%", height: "20%"}} otherInputStyle={{width: "100%"}}/>
|
||||||
</div>
|
</div>
|
||||||
<div className={classes.content__wrapper__login__footer}>
|
<div className={classes.content__wrapper__login__footer}>
|
||||||
<MyButton text={"Войти"} otherStyle={{height: "60%", width: "20%"}}/>
|
<MyButton text={"Войти"} otherStyle={{height: "50%", width: "20%"}}/>
|
||||||
</div>
|
</div>
|
||||||
</div> :
|
</div> :
|
||||||
<div className={classes.content__wrapper__register}>
|
<div className={classes.content__wrapper__register}>
|
||||||
@ -38,18 +79,18 @@ const EnterAccount = ({navigate}) => {
|
|||||||
<h3>Зарегестрировать учетную запись</h3>
|
<h3>Зарегестрировать учетную запись</h3>
|
||||||
</div>
|
</div>
|
||||||
<div className={classes.content__wrapper__register__body}>
|
<div className={classes.content__wrapper__register__body}>
|
||||||
<MyInput placeholder={"Email"} otherMainStyle={{width: "100%", height: "15%"}} otherInputStyle={{width: "100%"}}/>
|
<MyInput placeholder={"Email"} otherMainStyle={{width: "100%", height: "15%"}} otherInputStyle={{width: "100%"}} value={email} change={setEmail}/>
|
||||||
<MyInput placeholder={"Номер телефона"} otherMainStyle={{width: "100%", height: "15%"}} otherInputStyle={{width: "100%"}}/>
|
<MyInput placeholder={"Номер телефона"} otherMainStyle={{width: "100%", height: "15%"}} otherInputStyle={{width: "100%"}} value={phone} change={setPhone}/>
|
||||||
<div className={classes.content__wrapper__register__body__fio}>
|
<div className={classes.content__wrapper__register__body__fio}>
|
||||||
<MyInput placeholder={"Имя"} otherMainStyle={{width: "32%", height: "100%"}} otherInputStyle={{width: "100%"}}/>
|
<MyInput placeholder={"Имя"} otherMainStyle={{width: "32%", height: "100%"}} otherInputStyle={{width: "100%"}} value={name} change={setName}/>
|
||||||
<MyInput placeholder={"Фамилия"} otherMainStyle={{width: "32%", height: "100%"}} otherInputStyle={{width: "100%"}}/>
|
<MyInput placeholder={"Фамилия"} otherMainStyle={{width: "32%", height: "100%"}} otherInputStyle={{width: "100%"}} value={surname} change={setSurname}/>
|
||||||
<MyInput placeholder={"Отчество (при наличии)"} otherMainStyle={{width: "32%", height: "100%"}} otherInputStyle={{width: "100%"}}/>
|
<MyInput placeholder={"Отчество (при наличии)"} otherMainStyle={{width: "32%", height: "100%"}} otherInputStyle={{width: "100%"}} value={patronymic} change={setPatronymic}/>
|
||||||
</div>
|
</div>
|
||||||
<MyInput placeholder={"Пароль"} otherMainStyle={{width: "100%", height: "15%"}} otherInputStyle={{width: "100%"}}/>
|
<MyInput type={'password'} placeholder={"Пароль"} otherMainStyle={{width: "100%", height: "15%"}} otherInputStyle={{width: "100%"}} value={password} change={setPassword}/>
|
||||||
<MyInput placeholder={"Повторите пароль"} otherMainStyle={{width: "100%", height: "15%"}} otherInputStyle={{width: "100%"}}/>
|
<MyInput type={'password'} placeholder={"Повторите пароль"} otherMainStyle={{width: "100%", height: "15%"}} otherInputStyle={{width: "100%"}} value={repiedPassword} change={setRepiedPassword}/>
|
||||||
</div>
|
</div>
|
||||||
<div className={classes.content__wrapper__register__footer}>
|
<div className={classes.content__wrapper__register__footer}>
|
||||||
<MyButton text={"Создать"} otherStyle={{height: "100%", width: "20%"}}/>
|
<MyButton text={"Создать"} otherStyle={{height: "100%", width: "20%"}} click={() => createUser()}/>
|
||||||
</div>
|
</div>
|
||||||
</div>}
|
</div>}
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,11 +1,50 @@
|
|||||||
import React, { useState } from "react";
|
import React, { useState, useContext } from "react";
|
||||||
import classes from "../assets/styles/profile.module.scss"
|
import classes from "../assets/styles/profile.module.scss";
|
||||||
|
import MyButton from "../components/MyButton.jsx";
|
||||||
|
import { UserData } from "../context";
|
||||||
|
|
||||||
|
const Profile = () => {
|
||||||
|
const [edit, setEdit] = useState(true);
|
||||||
|
const {user, setUser} = useContext(UserData);
|
||||||
|
|
||||||
|
const [email, setEmail] = useState("");
|
||||||
|
const [phone, setPhone] = useState("");
|
||||||
|
const [name, setName] = useState("");
|
||||||
|
const [surname, setSurname] = useState("");
|
||||||
|
const [patronymic, setPatronymic] = useState("");
|
||||||
|
|
||||||
const Profile = ({navigate}) => {
|
|
||||||
return (
|
return (
|
||||||
<div className={classes.main}>
|
<div className={classes.main}>
|
||||||
<div className={classes.wrapper}>
|
<div className={classes.wrapper}>
|
||||||
|
<div className={classes.profile}>
|
||||||
|
<div className={classes.profile__wrapper}>
|
||||||
|
<div className={classes.profile__wrapper__header}>
|
||||||
|
<h3>Ваши данные</h3>
|
||||||
|
<MyButton
|
||||||
|
text={
|
||||||
|
edit ?
|
||||||
|
<span>Редактировать <i class="fa-solid fa-pen"></i></span> :
|
||||||
|
<span>Сохранить <i class="fa-solid fa-floppy-disk"></i></span>
|
||||||
|
}
|
||||||
|
backgroundColor={edit ? "rgb(200, 200, 200)" : ""}
|
||||||
|
click={() => setEdit(!edit)}/>
|
||||||
|
</div>
|
||||||
|
<div className={classes.profile__wrapper__body}>
|
||||||
|
{Object.keys(user).map(key => key !== "password" ? <div className={classes.profile__wrapper__body__item}>
|
||||||
|
<div class="input-group mb-3">
|
||||||
|
<span class="input-group-text">{key}</span>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
class="form-control shadow-none"
|
||||||
|
value={user[key]}
|
||||||
|
pattern={key === "email" ? "+[7-8]{1}[0-9]{3} [0-9]{3}-[0-9]{2}-[0-9]{2}" : ""}
|
||||||
|
disabled={edit}
|
||||||
|
required={key !== "patronymic" ? true : false}/>
|
||||||
|
</div>
|
||||||
|
</div> : <div></div>)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { createBrowserRouter } from "react-router-dom";
|
import { createBrowserRouter } from "react-router-dom";
|
||||||
import Forms from '../pages/Forms.jsx';
|
import Forms from '../pages/Forms.jsx';
|
||||||
import EnterAccount from "../pages/EnterAccount.jsx"
|
import EnterAccount from "../pages/EnterAccount.jsx";
|
||||||
import NewForm from '../pages/NewForm.jsx';
|
import NewForm from '../pages/NewForm.jsx';
|
||||||
import Home from "../pages/Home.jsx";
|
import Home from "../pages/Home.jsx";
|
||||||
import App from "../App.jsx";
|
import App from "../App.jsx";
|
||||||
|
Loading…
Reference in New Issue
Block a user