-
-
Notifications
You must be signed in to change notification settings - Fork 103
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Global messages implemented #81
Changes from 2 commits
6494bc9
05a8e22
ed67389
38b7c35
6a7ef29
9c6f337
b42bd8d
d5be656
c2ec8e2
d2a7020
2416f88
bfb942b
3ce1cfd
c43d8a9
77174be
c7d058b
e5492ae
525bdfe
cab8921
285bebd
f182713
fcf44df
0879bed
17d3029
27b7a3e
6541f37
f9fe8bd
206280c
9ca75c6
ab717ea
e58c8c0
bd44e24
f6703a7
e41beaf
a54dbe4
cd66b3a
01dd8f6
1f2e6e0
7812c74
e761101
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
This file was deleted.
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -2,13 +2,14 @@ import { useState, useEffect } from "react"; | |||||||||||||||||||||||||||||||||||||
import Logo from "../../assets/Logo/logo.png"; | ||||||||||||||||||||||||||||||||||||||
import { Link, useLocation } from "react-router-dom"; | ||||||||||||||||||||||||||||||||||||||
import { useKindeAuth } from "@kinde-oss/kinde-auth-react"; | ||||||||||||||||||||||||||||||||||||||
import { message } from "antd"; | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
const Navbar = () => { | ||||||||||||||||||||||||||||||||||||||
const { login, logout, isAuthenticated } = useKindeAuth(); | ||||||||||||||||||||||||||||||||||||||
const [isScrolled, setIsScrolled] = useState(false); | ||||||||||||||||||||||||||||||||||||||
const [isMenuOpen, setIsMenuOpen] = useState(false); | ||||||||||||||||||||||||||||||||||||||
const location = useLocation(); | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
const [wasAuthenticated, setWasAuthenticated] = useState(false); | ||||||||||||||||||||||||||||||||||||||
const menuItems = [ | ||||||||||||||||||||||||||||||||||||||
{ name: "Home", path: "/" }, | ||||||||||||||||||||||||||||||||||||||
{ name: "Events", path: "/events" }, | ||||||||||||||||||||||||||||||||||||||
|
@@ -30,6 +31,14 @@ const Navbar = () => { | |||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||
}, []); | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
useEffect(() => { | ||||||||||||||||||||||||||||||||||||||
// Check when user goes from not authenticated to authenticated | ||||||||||||||||||||||||||||||||||||||
if (!wasAuthenticated && isAuthenticated) { | ||||||||||||||||||||||||||||||||||||||
message.success("Login successful!"); | ||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||
setWasAuthenticated(isAuthenticated); | ||||||||||||||||||||||||||||||||||||||
}, [isAuthenticated, wasAuthenticated]); | ||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Avoid unnecessary re-renders in useEffect due to dependency on 'wasAuthenticated' Including Here's a suggested fix using +import { useRef } from "react";
...
- const [wasAuthenticated, setWasAuthenticated] = useState(false);
+ const wasAuthenticated = useRef(false);
useEffect(() => {
// Check when user goes from not authenticated to authenticated
- if (!wasAuthenticated && isAuthenticated) {
+ if (!wasAuthenticated.current && isAuthenticated) {
message.success("Login successful!");
}
- setWasAuthenticated(isAuthenticated);
+ wasAuthenticated.current = isAuthenticated;
- }, [isAuthenticated, wasAuthenticated]);
+ }, [isAuthenticated]); 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
const toggleMenu = () => { | ||||||||||||||||||||||||||||||||||||||
setIsMenuOpen(!isMenuOpen); | ||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||
|
@@ -47,6 +56,27 @@ const Navbar = () => { | |||||||||||||||||||||||||||||||||||||
const hoverTextColorClass = isScrolled ? "hover:text-gray-900" : "hover:text-gray-800"; | ||||||||||||||||||||||||||||||||||||||
const baseTextColorClass = isScrolled ? "text-gray-800" : "text-gray-900"; | ||||||||||||||||||||||||||||||||||||||
const mobileMenuBaseTextColorClass = isScrolled ? "text-gray-900" : "text-gray-800"; | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
// Handle login | ||||||||||||||||||||||||||||||||||||||
const handleLogin = async () => { | ||||||||||||||||||||||||||||||||||||||
try { | ||||||||||||||||||||||||||||||||||||||
await login(); | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
} catch (error) { | ||||||||||||||||||||||||||||||||||||||
message.error("Login failed. Please try again."); | ||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
const handleLogout = async () => { | ||||||||||||||||||||||||||||||||||||||
try { | ||||||||||||||||||||||||||||||||||||||
await logout(); | ||||||||||||||||||||||||||||||||||||||
message.success("Logout successful!"); | ||||||||||||||||||||||||||||||||||||||
} catch (error) { | ||||||||||||||||||||||||||||||||||||||
message.error("Logout failed. Please try again."); | ||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Ensure consistent handling of success messages for login and logout In Option 1: Move the logout success message to the useEffect(() => {
// Check when user goes from authenticated to not authenticated
+ if (wasAuthenticated.current && !isAuthenticated) {
+ message.success("Logout successful!");
+ }
if (!wasAuthenticated.current && isAuthenticated) {
message.success("Login successful!");
}
wasAuthenticated.current = isAuthenticated;
}, [isAuthenticated]); Option 2: Display the login success message directly in const handleLogin = async () => {
try {
await login();
+ message.success("Login successful!");
} catch (error) {
message.error("Login failed. Please try again.");
}
}; Consider which approach aligns better with your authentication flow and whether
|
||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||
return ( | ||||||||||||||||||||||||||||||||||||||
<nav | ||||||||||||||||||||||||||||||||||||||
className={`w-full fixed top-0 z-50 transition duration-300 ${isScrolled ? "bg-[#E0F0B1]" : "bg-transparent"} | ||||||||||||||||||||||||||||||||||||||
|
@@ -75,15 +105,15 @@ const Navbar = () => { | |||||||||||||||||||||||||||||||||||||
))} | ||||||||||||||||||||||||||||||||||||||
{isAuthenticated ? ( | ||||||||||||||||||||||||||||||||||||||
<button | ||||||||||||||||||||||||||||||||||||||
onClick={logout} | ||||||||||||||||||||||||||||||||||||||
onClick={handleLogout} | ||||||||||||||||||||||||||||||||||||||
className={`${baseTextColorClass} ${hoverTextColorClass}`} | ||||||||||||||||||||||||||||||||||||||
type="button" | ||||||||||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||||||||||
Log Out | ||||||||||||||||||||||||||||||||||||||
</button> | ||||||||||||||||||||||||||||||||||||||
) : ( | ||||||||||||||||||||||||||||||||||||||
<button | ||||||||||||||||||||||||||||||||||||||
onClick={login} | ||||||||||||||||||||||||||||||||||||||
onClick={handleLogin} | ||||||||||||||||||||||||||||||||||||||
className={`${baseTextColorClass} ${hoverTextColorClass}`} | ||||||||||||||||||||||||||||||||||||||
type="button" | ||||||||||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||||||||||
|
@@ -120,15 +150,15 @@ const Navbar = () => { | |||||||||||||||||||||||||||||||||||||
))} | ||||||||||||||||||||||||||||||||||||||
{isAuthenticated ? ( | ||||||||||||||||||||||||||||||||||||||
<button | ||||||||||||||||||||||||||||||||||||||
onClick={logout} | ||||||||||||||||||||||||||||||||||||||
onClick={handleLogout} | ||||||||||||||||||||||||||||||||||||||
className={`block w-full text-left px-4 py-3 rounded-md text-base font-semibold transition duration-300 | ||||||||||||||||||||||||||||||||||||||
${mobileMenuBaseTextColorClass} hover:bg-amber-300 hover:text-black`} | ||||||||||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||||||||||
Log Out | ||||||||||||||||||||||||||||||||||||||
</button> | ||||||||||||||||||||||||||||||||||||||
) : ( | ||||||||||||||||||||||||||||||||||||||
<button | ||||||||||||||||||||||||||||||||||||||
onClick={login} | ||||||||||||||||||||||||||||||||||||||
onClick={handleLogin} | ||||||||||||||||||||||||||||||||||||||
className={`block w-full text-left px-4 py-3 rounded-md text-base font-semibold transition duration-300 | ||||||||||||||||||||||||||||||||||||||
${mobileMenuBaseTextColorClass} hover:bg-amber-300 hover:text-black`} | ||||||||||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Add Build Stats Generation and Bundle Analysis Tools
To effectively monitor and manage the bundle size impact of new dependencies like "antd", please implement the following:
Add a build script that generates stats:
Add a bundle analysis tool:
These additions will help in tracking and optimizing the bundle size, ensuring that new dependencies do not negatively affect the application's load times.
🔗 Analysis chain
Verify impact on bundle size
The addition of new dependencies may impact the overall bundle size of the application. It's important to ensure that these additions don't significantly increase the bundle size, which could affect load times.
To assess the impact on bundle size, please run the following script:
This script checks for existing build and analysis scripts, and provides suggestions if they're not present. Implementing these suggestions will help in monitoring and managing the bundle size as new dependencies are added.
Also applies to: 27-27
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
Length of output: 905
Script:
Length of output: 931