add page profile
This commit is contained in:
parent
c1c2f7cfc5
commit
16a82736a4
30
src/App.jsx
30
src/App.jsx
@ -1,30 +1,30 @@
|
||||
import React, { useState } from "react";
|
||||
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 NavBar from "./components/NavBar.jsx";
|
||||
import 'bootstrap/dist/css/bootstrap.min.css';
|
||||
|
||||
const App = () => {
|
||||
const navigate = useNavigate();
|
||||
const [forms, setForms] = useState([])
|
||||
const [forms, setForms] = useState([]);
|
||||
const [user, setUser] = useState(false);
|
||||
|
||||
return (
|
||||
<FormsData.Provider value={{
|
||||
forms,
|
||||
setForms
|
||||
}}>
|
||||
<div className={classes.main}>
|
||||
<div className={classes.container}>
|
||||
<div className={classes.header}>
|
||||
<NavBar navigate={navigate}/>
|
||||
</div>
|
||||
<div className={classes.content}>
|
||||
<Outlet/>
|
||||
<UserData.Provider value={{ user, setUser }}>
|
||||
<FormsData.Provider value={{ forms, setForms }}>
|
||||
<div className={classes.main}>
|
||||
<div className={classes.container}>
|
||||
<div className={classes.header}>
|
||||
<NavBar navigate={navigate} auth={user} setAuth={setUser}/>
|
||||
</div>
|
||||
<div className={classes.content}>
|
||||
<Outlet/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</FormsData.Provider>
|
||||
</FormsData.Provider>
|
||||
</UserData.Provider>
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -40,7 +40,7 @@
|
||||
height: 100%;
|
||||
&__header {
|
||||
width: 100%;
|
||||
height: 20%;
|
||||
height: 30%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
@ -54,8 +54,7 @@
|
||||
}
|
||||
&__body {
|
||||
width: 100%;
|
||||
height: 60%;
|
||||
// border: 1px solid red;
|
||||
height: 50%;
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
flex-direction: column;
|
||||
|
@ -1,7 +1,41 @@
|
||||
.main {
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.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) => {
|
||||
return (
|
||||
<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>
|
||||
)
|
||||
}
|
||||
|
@ -1,9 +1,7 @@
|
||||
import React, { useState } from "react";
|
||||
import classes from "../assets/styles/components/navbar.module.scss"
|
||||
|
||||
const NavBar = ({navigate}) => {
|
||||
const [auth, setAuth] = useState(true);
|
||||
|
||||
const NavBar = ({navigate, auth, setAuth}) => {
|
||||
return (
|
||||
<div className={classes.main}>
|
||||
<div className={classes.wrapper}>
|
||||
@ -18,7 +16,7 @@ const NavBar = ({navigate}) => {
|
||||
<div className={classes.profile}>
|
||||
{auth ?
|
||||
<div className={classes.profile__authorized}>
|
||||
<span onClick={() => navigate("/profile")}>Профиль</span>
|
||||
<span onClick={() => navigate("/profile")}>Профиль ({auth.name})</span>
|
||||
</div> :
|
||||
<div className={classes.profile__nonAuthorized}>
|
||||
<span onClick={() => navigate("/enter")}>Вход <i class="fa-solid fa-arrow-right-to-bracket"></i></span>
|
||||
|
@ -1,3 +1,5 @@
|
||||
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 MyInput from "../components/MyInput.jsx";
|
||||
import MyButton from "../components/MyButton.jsx";
|
||||
import { UserData } from "../context";
|
||||
|
||||
const EnterAccount = ({navigate}) => {
|
||||
const EnterAccount = () => {
|
||||
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 (
|
||||
<div className={classes.main}>
|
||||
@ -27,10 +68,10 @@ const EnterAccount = ({navigate}) => {
|
||||
</div>
|
||||
<div className={classes.content__wrapper__login__body}>
|
||||
<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 className={classes.content__wrapper__login__footer}>
|
||||
<MyButton text={"Войти"} otherStyle={{height: "60%", width: "20%"}}/>
|
||||
<MyButton text={"Войти"} otherStyle={{height: "50%", width: "20%"}}/>
|
||||
</div>
|
||||
</div> :
|
||||
<div className={classes.content__wrapper__register}>
|
||||
@ -38,18 +79,18 @@ const EnterAccount = ({navigate}) => {
|
||||
<h3>Зарегестрировать учетную запись</h3>
|
||||
</div>
|
||||
<div className={classes.content__wrapper__register__body}>
|
||||
<MyInput placeholder={"Email"} otherMainStyle={{width: "100%", height: "15%"}} otherInputStyle={{width: "100%"}}/>
|
||||
<MyInput placeholder={"Номер телефона"} 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%"}} value={phone} change={setPhone}/>
|
||||
<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%"}}/>
|
||||
<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%"}} value={surname} change={setSurname}/>
|
||||
<MyInput placeholder={"Отчество (при наличии)"} otherMainStyle={{width: "32%", height: "100%"}} otherInputStyle={{width: "100%"}} value={patronymic} change={setPatronymic}/>
|
||||
</div>
|
||||
<MyInput placeholder={"Пароль"} otherMainStyle={{width: "100%", height: "15%"}} otherInputStyle={{width: "100%"}}/>
|
||||
<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 type={'password'} placeholder={"Повторите пароль"} otherMainStyle={{width: "100%", height: "15%"}} otherInputStyle={{width: "100%"}} value={repiedPassword} change={setRepiedPassword}/>
|
||||
</div>
|
||||
<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>
|
||||
|
@ -1,11 +1,50 @@
|
||||
import React, { useState } from "react";
|
||||
import classes from "../assets/styles/profile.module.scss"
|
||||
import React, { useState, useContext } from "react";
|
||||
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 (
|
||||
<div className={classes.main}>
|
||||
<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>
|
||||
)
|
||||
|
@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import { createBrowserRouter } from "react-router-dom";
|
||||
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 Home from "../pages/Home.jsx";
|
||||
import App from "../App.jsx";
|
||||
|
Loading…
Reference in New Issue
Block a user