Commit ·
c049d8c
1
Parent(s): a6351fc
update
Browse files
.gitignore
CHANGED
|
@@ -26,3 +26,8 @@ data.db
|
|
| 26 |
|
| 27 |
# Ignore node_modules
|
| 28 |
node_modules
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 26 |
|
| 27 |
# Ignore node_modules
|
| 28 |
node_modules
|
| 29 |
+
|
| 30 |
+
#Ignore compressed things and build
|
| 31 |
+
*.zip
|
| 32 |
+
*.tar.gz
|
| 33 |
+
build
|
frontend/src/pages/Contact.jsx
CHANGED
|
@@ -104,12 +104,12 @@ const Container = styled.div`
|
|
| 104 |
box-sizing: border-box;
|
| 105 |
`
|
| 106 |
|
| 107 |
-
const Title = styled.h1`
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
`
|
| 113 |
|
| 114 |
const Grid = styled.div`
|
| 115 |
display: grid;
|
|
|
|
| 104 |
box-sizing: border-box;
|
| 105 |
`
|
| 106 |
|
| 107 |
+
// const Title = styled.h1`
|
| 108 |
+
// font-size: 2.5rem;
|
| 109 |
+
// font-weight: bold;
|
| 110 |
+
// text-align: center;
|
| 111 |
+
// margin-bottom: 2rem;
|
| 112 |
+
// `
|
| 113 |
|
| 114 |
const Grid = styled.div`
|
| 115 |
display: grid;
|
frontend/src/sections/Header.jsx
CHANGED
|
@@ -49,6 +49,7 @@ const DesktopMenu = styled.nav`
|
|
| 49 |
@media (min-width: 768px) {
|
| 50 |
display: flex;
|
| 51 |
gap: 1rem;
|
|
|
|
| 52 |
}
|
| 53 |
`;
|
| 54 |
|
|
@@ -57,6 +58,7 @@ const MenuLink = styled(Link)`
|
|
| 57 |
padding: 0.5rem 2rem;
|
| 58 |
text-decoration: none;
|
| 59 |
position: relative;
|
|
|
|
| 60 |
|
| 61 |
@media (min-width: 992px) {
|
| 62 |
padding: 0.5rem 4rem;
|
|
@@ -78,6 +80,35 @@ const MenuLink = styled(Link)`
|
|
| 78 |
`}
|
| 79 |
`;
|
| 80 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 81 |
const MobileMenuButton = styled.button`
|
| 82 |
display: block;
|
| 83 |
background: none;
|
|
@@ -126,23 +157,32 @@ const MobileMenu = styled.nav`
|
|
| 126 |
|
| 127 |
const Header = () => {
|
| 128 |
const [isMenuOpen, setIsMenuOpen] = useState(false);
|
|
|
|
| 129 |
const location = useLocation();
|
| 130 |
-
const menuRef = useRef(null);
|
| 131 |
-
const buttonRef = useRef(null);
|
|
|
|
| 132 |
|
| 133 |
const toggleMenu = () => setIsMenuOpen(prev => !prev);
|
|
|
|
| 134 |
|
| 135 |
// Close menu if clicking outside
|
| 136 |
useEffect(() => {
|
| 137 |
const handleClickOutside = (event) => {
|
| 138 |
if (
|
| 139 |
menuRef.current &&
|
| 140 |
-
!menuRef.current.contains(event.target) &&
|
| 141 |
buttonRef.current &&
|
| 142 |
-
!buttonRef.current.contains(event.target)
|
| 143 |
) {
|
| 144 |
setIsMenuOpen(false);
|
| 145 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 146 |
};
|
| 147 |
|
| 148 |
document.addEventListener("mousedown", handleClickOutside);
|
|
@@ -151,9 +191,10 @@ const Header = () => {
|
|
| 151 |
};
|
| 152 |
}, []);
|
| 153 |
|
| 154 |
-
// Close menu on navigation
|
| 155 |
useEffect(() => {
|
| 156 |
setIsMenuOpen(false);
|
|
|
|
| 157 |
}, [location.pathname]);
|
| 158 |
|
| 159 |
return (
|
|
@@ -164,14 +205,25 @@ const Header = () => {
|
|
| 164 |
</SLogo>
|
| 165 |
|
| 166 |
<DesktopMenu>
|
| 167 |
-
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 175 |
</DesktopMenu>
|
| 176 |
|
| 177 |
<MobileMenuButton
|
|
@@ -183,22 +235,20 @@ const Header = () => {
|
|
| 183 |
</MobileMenuButton>
|
| 184 |
</NavWrapper>
|
| 185 |
|
| 186 |
-
<MobileMenu $isOpen={isMenuOpen} ref={menuRef}
|
| 187 |
-
{["/", "/vardig", "/about", "/blogs", "/jobs"
|
| 188 |
-
<Link
|
| 189 |
-
|
| 190 |
-
to={path}
|
| 191 |
-
onClick={() => setIsMenuOpen(false)} // Close on click
|
| 192 |
-
style={{
|
| 193 |
-
backgroundColor: location.pathname === path ? "#1d9b62" : "transparent",
|
| 194 |
-
}}
|
| 195 |
-
>
|
| 196 |
-
{path === "/"
|
| 197 |
-
? "Home"
|
| 198 |
-
: path.replace("/", "").charAt(0).toUpperCase() +
|
| 199 |
-
path.replace("/", "").slice(1)}
|
| 200 |
</Link>
|
| 201 |
))}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 202 |
</MobileMenu>
|
| 203 |
</HeaderContainer>
|
| 204 |
);
|
|
|
|
| 49 |
@media (min-width: 768px) {
|
| 50 |
display: flex;
|
| 51 |
gap: 1rem;
|
| 52 |
+
position: relative;
|
| 53 |
}
|
| 54 |
`;
|
| 55 |
|
|
|
|
| 58 |
padding: 0.5rem 2rem;
|
| 59 |
text-decoration: none;
|
| 60 |
position: relative;
|
| 61 |
+
cursor: pointer;
|
| 62 |
|
| 63 |
@media (min-width: 992px) {
|
| 64 |
padding: 0.5rem 4rem;
|
|
|
|
| 80 |
`}
|
| 81 |
`;
|
| 82 |
|
| 83 |
+
// Dropdown Menu
|
| 84 |
+
const DropdownMenu = styled.div`
|
| 85 |
+
position: absolute;
|
| 86 |
+
background: rgba(0, 0, 0, 0.9);
|
| 87 |
+
border-radius: 5px;
|
| 88 |
+
top: 100%;
|
| 89 |
+
left: 0;
|
| 90 |
+
min-width: 150px;
|
| 91 |
+
display: ${(props) => (props.$isOpen ? "block" : "none")};
|
| 92 |
+
z-index: 1000;
|
| 93 |
+
|
| 94 |
+
a {
|
| 95 |
+
display: block;
|
| 96 |
+
padding: 0.5rem;
|
| 97 |
+
color: white;
|
| 98 |
+
text-decoration: none;
|
| 99 |
+
|
| 100 |
+
&:hover {
|
| 101 |
+
background: #333;
|
| 102 |
+
}
|
| 103 |
+
}
|
| 104 |
+
`;
|
| 105 |
+
|
| 106 |
+
const ContactWrapper = styled.div`
|
| 107 |
+
position: relative;
|
| 108 |
+
cursor: pointer;
|
| 109 |
+
`;
|
| 110 |
+
|
| 111 |
+
// Mobile Menu
|
| 112 |
const MobileMenuButton = styled.button`
|
| 113 |
display: block;
|
| 114 |
background: none;
|
|
|
|
| 157 |
|
| 158 |
const Header = () => {
|
| 159 |
const [isMenuOpen, setIsMenuOpen] = useState(false);
|
| 160 |
+
const [isDropdownOpen, setIsDropdownOpen] = useState(false);
|
| 161 |
const location = useLocation();
|
| 162 |
+
const menuRef = useRef(null);
|
| 163 |
+
const buttonRef = useRef(null);
|
| 164 |
+
const dropdownRef = useRef(null);
|
| 165 |
|
| 166 |
const toggleMenu = () => setIsMenuOpen(prev => !prev);
|
| 167 |
+
const toggleDropdown = () => setIsDropdownOpen(prev => !prev);
|
| 168 |
|
| 169 |
// Close menu if clicking outside
|
| 170 |
useEffect(() => {
|
| 171 |
const handleClickOutside = (event) => {
|
| 172 |
if (
|
| 173 |
menuRef.current &&
|
| 174 |
+
!menuRef.current.contains(event.target) &&
|
| 175 |
buttonRef.current &&
|
| 176 |
+
!buttonRef.current.contains(event.target)
|
| 177 |
) {
|
| 178 |
setIsMenuOpen(false);
|
| 179 |
}
|
| 180 |
+
if (
|
| 181 |
+
dropdownRef.current &&
|
| 182 |
+
!dropdownRef.current.contains(event.target)
|
| 183 |
+
) {
|
| 184 |
+
setIsDropdownOpen(false);
|
| 185 |
+
}
|
| 186 |
};
|
| 187 |
|
| 188 |
document.addEventListener("mousedown", handleClickOutside);
|
|
|
|
| 191 |
};
|
| 192 |
}, []);
|
| 193 |
|
| 194 |
+
// Close menu and dropdown on navigation
|
| 195 |
useEffect(() => {
|
| 196 |
setIsMenuOpen(false);
|
| 197 |
+
setIsDropdownOpen(false);
|
| 198 |
}, [location.pathname]);
|
| 199 |
|
| 200 |
return (
|
|
|
|
| 205 |
</SLogo>
|
| 206 |
|
| 207 |
<DesktopMenu>
|
| 208 |
+
{["/vardig", "/about", "/blogs", "/jobs"].map((path, i) => (
|
| 209 |
+
<MenuLink key={i} to={path} $active={location.pathname === path}>
|
| 210 |
+
{path === "/vardig"
|
| 211 |
+
? "VarDiG"
|
| 212 |
+
: path.replace("/", "").charAt(0).toUpperCase() +
|
| 213 |
+
path.replace("/", "").slice(1)}
|
| 214 |
+
</MenuLink>
|
| 215 |
+
))}
|
| 216 |
+
|
| 217 |
+
{/* Contact with Dropdown */}
|
| 218 |
+
<ContactWrapper ref={dropdownRef}>
|
| 219 |
+
<MenuLink as="div" onClick={toggleDropdown}>
|
| 220 |
+
Contact ▾
|
| 221 |
+
</MenuLink>
|
| 222 |
+
<DropdownMenu $isOpen={isDropdownOpen}>
|
| 223 |
+
<Link to="/contact">Contact</Link>
|
| 224 |
+
<Link to="/privacy-policy">Privacy Policy</Link>
|
| 225 |
+
</DropdownMenu>
|
| 226 |
+
</ContactWrapper>
|
| 227 |
</DesktopMenu>
|
| 228 |
|
| 229 |
<MobileMenuButton
|
|
|
|
| 235 |
</MobileMenuButton>
|
| 236 |
</NavWrapper>
|
| 237 |
|
| 238 |
+
<MobileMenu $isOpen={isMenuOpen} ref={menuRef}>
|
| 239 |
+
{["/", "/vardig", "/about", "/blogs", "/jobs"].map((path, i) => (
|
| 240 |
+
<Link key={i} to={path} onClick={() => setIsMenuOpen(false)}>
|
| 241 |
+
{path === "/" ? "Home" : path.replace("/", "").charAt(0).toUpperCase() + path.slice(2)}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 242 |
</Link>
|
| 243 |
))}
|
| 244 |
+
|
| 245 |
+
{/* Mobile Contact Dropdown */}
|
| 246 |
+
<div>
|
| 247 |
+
<Link to="/contact" onClick={() => setIsMenuOpen(false)}>Contact</Link>
|
| 248 |
+
<Link to="/privacy-policy" onClick={() => setIsMenuOpen(false)} style={{ paddingLeft: "20px" }}>
|
| 249 |
+
Privacy Policy
|
| 250 |
+
</Link>
|
| 251 |
+
</div>
|
| 252 |
</MobileMenu>
|
| 253 |
</HeaderContainer>
|
| 254 |
);
|
frontend/src/sections/about/Leaders.jsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
import React from "react";
|
| 2 |
import styled from "styled-components";
|
| 3 |
-
import { FaLinkedin
|
| 4 |
|
| 5 |
import leaders from "../../data/leaders"; // Import leader data
|
| 6 |
|
|
|
|
| 1 |
import React from "react";
|
| 2 |
import styled from "styled-components";
|
| 3 |
+
import { FaLinkedin } from "react-icons/fa6"; // Correct social media icons
|
| 4 |
|
| 5 |
import leaders from "../../data/leaders"; // Import leader data
|
| 6 |
|
frontend/src/sections/vardig/Testimonials.jsx
CHANGED
|
@@ -19,11 +19,11 @@ const Heading = styled.h2`
|
|
| 19 |
margin-bottom: 16px;
|
| 20 |
`;
|
| 21 |
|
| 22 |
-
const Subheading = styled.p`
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
`;
|
| 27 |
|
| 28 |
const CardList = styled.ul`
|
| 29 |
display: grid;
|
|
|
|
| 19 |
margin-bottom: 16px;
|
| 20 |
`;
|
| 21 |
|
| 22 |
+
// const Subheading = styled.p`
|
| 23 |
+
// font-size: 1.125rem;
|
| 24 |
+
// color: #ccc;
|
| 25 |
+
// margin-bottom: 40px;
|
| 26 |
+
// `;
|
| 27 |
|
| 28 |
const CardList = styled.ul`
|
| 29 |
display: grid;
|