Skip to content

Commit 8902932

Browse files
committed
feature: message handling implemented
1 parent f23ed39 commit 8902932

File tree

7 files changed

+53
-15
lines changed

7 files changed

+53
-15
lines changed

src/assets/css/common/messages.css

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
.message-container{
44
transform: matrix(125);
55
transition: all ease-in-out 1s 1s !important;
6+
border-radius: 60%/8.5em;
67
width: 5em;
78
height: 2em;
89
position: relative;
@@ -19,14 +20,15 @@
1920

2021
}
2122

22-
.message-container.hides{
23+
.message-container.hides, .message-container.appears{
2324
width: 0.3em;
2425
height: 0.3em;
2526
font-size: 0.1em;
2627
visibility: hidden;
2728
}
2829

2930
.message-container > div{
31+
border-radius: 60%/50%;
3032
background: rgb(132,11,11,0.5);
3133
width: 50%;
3234
margin-left: 25%;

src/components/accounts/Login.jsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import {useForm} from "../../hooks/useForm.js";
33
import useAuth from "../../hooks/useAuth.js";
44
import {useNavigate} from "react-router";
55
import routes from "../../routes/routes.js";
6+
import {useContext} from "react";
7+
import MainContext from "../../contexts/MainContext.js";
68

79
const formValues = {
810
username:"",
@@ -12,11 +14,12 @@ const formValues = {
1214
export default function Login() {
1315
const {addStyle} = useOrderedStyles();
1416
const {login} = useAuth();
17+
const {setMessage} = useContext(MainContext)
1518
const navigate = useNavigate();
1619

1720
const loginSubmitHandler = ({username, password}) =>{
1821
(async ()=> {
19-
const logged = await login(username, password)
22+
const logged = await login(username, password, setMessage)
2023
if (logged?.status === 200){
2124
navigate(routes["home"])
2225
}else{

src/components/accounts/Logout.jsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,22 @@ import {Navigate} from "react-router-dom";
33
import routes from "../../routes/routes.js";
44
import useApi from "../../hooks/useAPI.js";
55
import useReload from "../../hooks/useReload.js";
6-
import {useEffect} from "react";
6+
import {useContext, useEffect} from "react";
77
import {useNavigate} from "react-router-dom";
8+
import MainContext from "../../contexts/MainContext.js";
89

910
export default function Logout() {
1011

1112
const {logout} = useAuth()
13+
const {setMessage} = useContext(MainContext)
1214
const {loadNavFiles} = useApi()
1315
const {reloadPage} = useReload()
1416
const navigate = useNavigate()
1517
const {apiLoaded} = useApi()
1618

1719
useEffect(()=> {
1820
(async () => {
19-
await logout()
21+
await logout(setMessage)
2022
})();
2123
},[])
2224

src/components/common/Base.jsx

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,36 +6,49 @@ import useOrderedStyles from "../../hooks/useOrderedStyles.js";
66
import Nav from "../navigation/Nav.jsx";
77
import {Outlet} from "react-router-dom";
88
import useAuth from "../../hooks/useAuth.js";
9-
import {useEffect, useState} from "react";
9+
import {useContext, useEffect, useState} from "react";
1010
import useReload from "../../hooks/useReload.js";
1111
import routes from "../../routes/routes.js";
1212
import useAPI from "../../hooks/useAPI.js";
1313
import {Link} from "react-router";
14+
import MainContext from "../../contexts/MainContext.js";
1415

1516

1617
export default function Base(){
1718

1819
const {reload,setReload} = useState(false)
1920
const {setReloadPage} = useReload()
21+
const [message, setMessage_] = useState(null)
22+
const [styleHides, setStyleHides] = useState(false)
23+
const [styleAppears, setStyleAppears] = useState(true)
2024
const {addStyle,addExternalStyle} = useOrderedStyles();
2125
addStyle(`/main.css`,'main')
2226
addExternalStyle(`${import.meta.env.VITE_API_ADDRESS}dstyles/marble/css/`)
2327
const {context, login, user} = useAuth()
2428
const reloadCallback = ()=> setReload(!reload)
29+
const hideDuration = 6000
2530

26-
31+
const setMessage = (message, duration=hideDuration) => {
32+
setMessage_((<div>{message}</div>))
33+
setTimeout(() => {setMessage_(null); setStyleHides(false); setStyleAppears(true)}, duration)
34+
}
2735

2836
useEffect(() => {
2937
(async () =>{
30-
await login()
38+
await login(null,null,setMessage)
3139
})();
3240
setReloadPage("home", reloadCallback)
3341
}, []);
3442

43+
useEffect(() => {
44+
message && setTimeout(()=>{setStyleHides(true)},hideDuration - 2000)
45+
message && setTimeout(()=>{setStyleAppears(false)},2)
46+
},[message])
47+
3548

3649

3750
return (
38-
<>
51+
<MainContext.Provider value={{setMessage}}>
3952
{/*<ExternalStyle url={`${import.meta.env.VITE_API_ADDRESS}dstyles/marble/css/`}/>*/}
4053
{/*!--{# here you can add planet image container if you'd like#}--*/}
4154
<div id="container">
@@ -181,15 +194,16 @@ export default function Base(){
181194
</div>
182195

183196
<div id="component" className="no-component-background" >
184-
<div className="message-container" >
197+
{message && (<div className={"message-container" + (styleHides ? " hides" : "") + (styleAppears ? " appears" : "")}>
198+
{message}
185199
{/*<!--{% block message_content %}
186200
{% for message in messages %}
187201
<div>
188202
{{message}}
189203
</div>
190204
{% endfor %}
191205
{% endblock %}-->*/}
192-
</div>
206+
</div>)}
193207

194208
<div className={`component-wrapper`} >
195209
<Outlet/>
@@ -232,6 +246,6 @@ export default function Base(){
232246

233247
{/*<!--</tag|class=div|containerplanetimage>-->*/}
234248

235-
</>
249+
</MainContext.Provider>
236250
);
237251
}

src/contexts/MainContext.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import {createContext} from "react";
2+
3+
const MainContext = createContext();
4+
5+
export default MainContext;

src/hooks/useAPI.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ function useAPI(){
1212
const apiAddress = import.meta.env.VITE_API_ADDRESS;
1313

1414
async function loadApiFiles(){
15-
import(`${apiAddress}orth_calendar/apijs/?v=${Date.now()}`).
15+
import(`${apiAddress}orth_calendar/apijs/?v=${Date.now()}` /* @vite-ignore */).
1616
then(response=>{
1717
setApiMethods(response)
1818
setApiLoaded(true)

src/hooks/useAuth.js

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,17 @@ import {useContext, useEffect} from "react";
22
import AuthContext from "../contexts/AuthContext.js";
33
import axios, {AxiosHeaders} from "axios";
44
import {jwtDecode} from "jwt-decode";
5+
import MainContext from "../contexts/MainContext.js";
56

67
export default function useAuth() {
78
const context = useContext(AuthContext);
89
const {token, setToken, api, setUser, user} = context;
910

10-
const login = (username, password)=>{
11+
const toggleSuccess = (success,onSuccess="",onFail="",fn=()=>{}) => {
12+
success ? fn(onSuccess) : fn(onFail);
13+
}
14+
15+
const login = (username, password, messageCallback=()=>{})=>{
1116
let response;
1217

1318
console.log(token)
@@ -39,8 +44,10 @@ export default function useAuth() {
3944
setToken(response.data.access);
4045
console.log(jwtDecode(response.data.access))
4146
setUser(jwtDecode(response.data.access))
47+
toggleSuccess(response.status === 200, "Влизането e успешно!", "Влизането e неуспешно!", messageCallback)
4248
return {status: 200, data: response};
4349
}).catch((error) => {
50+
messageCallback("Влизането сe провали!")
4451
console.error("Error logging in:", error);
4552
return {status: 500, error}
4653
})
@@ -80,8 +87,13 @@ export default function useAuth() {
8087
return response;
8188
}
8289

83-
const logout = async () => {
84-
await api.post(`/api/token/logout/`, {});
90+
const logout = async (messageCallback=()=>{}) => {
91+
await api.post(`/api/token/logout/`, {}).
92+
then(response=>toggleSuccess(response.status === 200, "Излязохте успешено!", "Излизането сe провали!", messageCallback)).
93+
catch((error) => {
94+
console.error("Error logging out:", error);
95+
messageCallback("Излизането сe провали!")
96+
});
8597
await setToken(null);
8698
await setUser({});
8799
}

0 commit comments

Comments
 (0)