Login
This commit is contained in:
22
src/App.js
22
src/App.js
@@ -12,7 +12,7 @@ import DeliveryForm from './components/DeliveryForm';
|
|||||||
import OrderTracking from './components/OrderTracking';
|
import OrderTracking from './components/OrderTracking';
|
||||||
import { users, addUser } from './mockData';
|
import { users, addUser } from './mockData';
|
||||||
import LoginRegister from './components/LoginRegister'; // Import LoginRegister
|
import LoginRegister from './components/LoginRegister'; // Import LoginRegister
|
||||||
|
import { getLoggedInUser, logoutUser } from './utils/auth';
|
||||||
import './App.css';
|
import './App.css';
|
||||||
|
|
||||||
function Home() {
|
function Home() {
|
||||||
@@ -30,30 +30,40 @@ function Home() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
const [currentUser, setCurrentUser] = useState(null);
|
|
||||||
|
const [currentUser, setCurrentUser] = useState(getLoggedInUser());
|
||||||
|
|
||||||
const handleLogin = (user) => {
|
const handleLogin = (user) => {
|
||||||
setCurrentUser(user);
|
setCurrentUser(user);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleLogout = () => {
|
const handleLogout = () => {
|
||||||
|
logoutUser();
|
||||||
setCurrentUser(null);
|
setCurrentUser(null);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const [isLoginOpen, setIsLoginOpen] = useState(false);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="App">
|
<div className="App">
|
||||||
<Header onLogin={handleLogin} /> {/* Pass handleLogin to Header */}
|
<Header onLogin={handleLogin} />
|
||||||
{currentUser && (
|
{currentUser && (
|
||||||
<div>
|
<div>
|
||||||
<h2>Привет, {currentUser.name}</h2>
|
<h2>Привет, {currentUser.name}</h2>
|
||||||
<button onClick={handleLogout}>Выйти</button>
|
<button onClick={handleLogout}>Выйти</button>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
<LoginRegister
|
||||||
|
isOpen={isLoginOpen}
|
||||||
|
onClose={() => setIsLoginOpen(false)}
|
||||||
|
onLogin={(user) => {
|
||||||
|
handleLogin(user);
|
||||||
|
setIsLoginOpen(false);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
<Routes>
|
<Routes>
|
||||||
{/* Parent Route */}
|
|
||||||
<Route path="/" element={<Home />} />
|
<Route path="/" element={<Home />} />
|
||||||
|
|
||||||
{/* Nested Routes */}
|
|
||||||
<Route path="/delivery-form" element={<DeliveryForm />} />
|
<Route path="/delivery-form" element={<DeliveryForm />} />
|
||||||
<Route path="/order-tracking" element={<OrderTracking />} />
|
<Route path="/order-tracking" element={<OrderTracking />} />
|
||||||
</Routes>
|
</Routes>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React, { useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
import { Link, useNavigate } from 'react-router-dom';
|
import { Link, useNavigate } from 'react-router-dom';
|
||||||
import './Header.css';
|
import './Header.css';
|
||||||
import LoginRegister from './LoginRegister'; // Убедитесь, что импорт есть
|
import LoginRegister from './LoginRegister';
|
||||||
|
|
||||||
function Header({ onLogin }) {
|
function Header({ onLogin }) {
|
||||||
const [isModalOpen, setIsModalOpen] = useState(false);
|
const [isModalOpen, setIsModalOpen] = useState(false);
|
||||||
@@ -42,7 +42,10 @@ function Header({ onLogin}) {
|
|||||||
<LoginRegister
|
<LoginRegister
|
||||||
isOpen={isModalOpen}
|
isOpen={isModalOpen}
|
||||||
onClose={handleCloseModal}
|
onClose={handleCloseModal}
|
||||||
onLogin={onLogin}
|
onLogin={(user) => {
|
||||||
|
onLogin(user);
|
||||||
|
setIsModalOpen(false); // Закрыть модалку после логина/регистрации
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</header>
|
</header>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
import React, { useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
import Modal from 'react-modal';
|
import Modal from 'react-modal';
|
||||||
import { users, addUser } from '../mockData';
|
import { users, addUser } from '../mockData';
|
||||||
|
import { setLoggedInUser } from '../utils/auth';
|
||||||
|
|
||||||
const LoginRegister = ({ isOpen, onClose, onLogin }) => {
|
const LoginRegister = ({ isOpen, onClose, onLogin }) => {
|
||||||
|
// Все useState - только в начале компонента!
|
||||||
const [isRegistering, setIsRegistering] = useState(false);
|
const [isRegistering, setIsRegistering] = useState(false);
|
||||||
const [name, setName] = useState('');
|
const [name, setName] = useState('');
|
||||||
const [surname, setSurname] = useState('');
|
const [surname, setSurname] = useState('');
|
||||||
@@ -12,6 +14,12 @@ const LoginRegister = ({ isOpen, onClose, onLogin }) => {
|
|||||||
const [showPassword, setShowPassword] = useState(false);
|
const [showPassword, setShowPassword] = useState(false);
|
||||||
const [error, setError] = useState('');
|
const [error, setError] = useState('');
|
||||||
|
|
||||||
|
// Для логина
|
||||||
|
const [loginPhone, setLoginPhone] = useState('');
|
||||||
|
const [loginPassword, setLoginPassword] = useState('');
|
||||||
|
const [loginError, setLoginError] = useState('');
|
||||||
|
|
||||||
|
|
||||||
const handleRegistration = () => {
|
const handleRegistration = () => {
|
||||||
if (!name || !surname || !phone || !password || !confirmPassword) {
|
if (!name || !surname || !phone || !password || !confirmPassword) {
|
||||||
setError('Пожалуйста, заполните все поля');
|
setError('Пожалуйста, заполните все поля');
|
||||||
@@ -29,19 +37,16 @@ const LoginRegister = ({ isOpen, onClose, onLogin }) => {
|
|||||||
const newUser = { name, surname, phone, password };
|
const newUser = { name, surname, phone, password };
|
||||||
addUser(newUser);
|
addUser(newUser);
|
||||||
setError('');
|
setError('');
|
||||||
// Автоматически входим после регистрации
|
setLoggedInUser(newUser); // <--- сохраняем пользователя в localStorage
|
||||||
onLogin(newUser);
|
onLogin(newUser);
|
||||||
onClose();
|
onClose();
|
||||||
};
|
};
|
||||||
|
|
||||||
const [loginPhone, setLoginPhone] = useState('');
|
|
||||||
const [loginPassword, setLoginPassword] = useState('');
|
|
||||||
const [loginError, setLoginError] = useState('');
|
|
||||||
|
|
||||||
const handleLogin = () => {
|
const handleLogin = () => {
|
||||||
const user = users.find(u => u.phone === loginPhone && u.password === loginPassword);
|
const user = users.find(u => u.phone === loginPhone && u.password === loginPassword);
|
||||||
if (user) {
|
if (user) {
|
||||||
setLoginError('');
|
setLoginError('');
|
||||||
|
setLoggedInUser(user); // <--- сохраняем пользователя в localStorage
|
||||||
onLogin(user);
|
onLogin(user);
|
||||||
onClose();
|
onClose();
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -11,11 +11,11 @@ export const orders = [];
|
|||||||
export const addUser = (user) => {
|
export const addUser = (user) => {
|
||||||
const id = users.length + 1;
|
const id = users.length + 1;
|
||||||
users.push({ id, ...user });
|
users.push({ id, ...user });
|
||||||
return id; // return id for confirmation
|
return id;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const addOrder = (order) => {
|
export const addOrder = (order) => {
|
||||||
const id = orders.length + 1;
|
const id = orders.length + 1;
|
||||||
orders.push({ id, ...order });
|
orders.push({ id, ...order });
|
||||||
return id; // return id for confirmation
|
return id;
|
||||||
};
|
};
|
||||||
|
|||||||
13
src/utils/auth.js
Normal file
13
src/utils/auth.js
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// src/utils/auth.js
|
||||||
|
export const setLoggedInUser = (user) => {
|
||||||
|
localStorage.setItem('loggedInUser', JSON.stringify(user));
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getLoggedInUser = () => {
|
||||||
|
const user = localStorage.getItem('loggedInUser');
|
||||||
|
return user ? JSON.parse(user) : null;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const logoutUser = () => {
|
||||||
|
localStorage.removeItem('loggedInUser');
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user