diff --git a/components/navbar-components/NavHeader.jsx b/components/navbar-components/NavHeader.jsx
deleted file mode 100644
index 0aa3c379..00000000
--- a/components/navbar-components/NavHeader.jsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import React from 'react';
-import { Fade as Hamburger } from 'hamburger-react';
-import style from 'styles/NavBar.module.css';
-import NavLinks from './NavLinks';
-
-export default function NavHeader(props) {
- const { toggleMenu } = props;
- const { isMenuOpen } = props;
-
- return (
- <>
-
-
-
-
-
-
-
-
-
-
-
- >
- );
-}
diff --git a/components/navbar-components/NavLinks.jsx b/components/navbar-components/NavLinks.jsx
deleted file mode 100644
index cd38c69f..00000000
--- a/components/navbar-components/NavLinks.jsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import React from 'react';
-import Link from 'next/link';
-import useTranslation from 'next-translate/useTranslation';
-import { navBarItem } from '../../styles/NavBar.module.css';
-
-export default function NavLinks(props) {
- const { t } = useTranslation();
- const navTexts = t('common:navBar', { count: -1 }, { returnObjects: true });
- return (
- <>
-
- -
- {navTexts[0]}
-
- -
- {navTexts[1]}
-
- -
- {navTexts[2]}
-
- -
- {navTexts[3]}
-
- -
- {navTexts[4]}
-
-
- >
- );
-}
diff --git a/components/navbar-components/NavMenu.jsx b/components/navbar-components/NavMenu.jsx
deleted file mode 100644
index f069b2a1..00000000
--- a/components/navbar-components/NavMenu.jsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from 'react';
-import NavLinks from './NavLinks';
-import style from 'styles/NavBar.module.css';
-
-export default function NavMenu(props) {
- return (
-
-
-
- );
-}
diff --git a/components/projects-components/HeroSection.jsx b/components/projects-components/HeroSection.jsx
index 275ba987..08215c1d 100644
--- a/components/projects-components/HeroSection.jsx
+++ b/components/projects-components/HeroSection.jsx
@@ -4,23 +4,25 @@ import styles from 'styles/projects/ProjectHeroSection.module.css';
export default function HeroSection(props) {
const backgroundImage = {
backgroundImage: `${props.backgroundImage}`,
- backgroundColor: `${props.backgroundColor}`,
+ backgroundColor: `${props.backgroundColor}`
};
- const { path } = props
+ const { path } = props;
return (
{props.title}
-
- {props.subtitle}
-
+ {props.subtitle}
-
-

-
-
+ {props.page !== 'launches' && (
+
+

+
+ )}
);
}
diff --git a/locales/en/common.json b/locales/en/common.json
index a56446b9..85ad00b9 100644
--- a/locales/en/common.json
+++ b/locales/en/common.json
@@ -1,7 +1,7 @@
{
- "navBar": ["ABOUT US", "PROJECTS", "KURUMIM", "SELECTION PROCESS", "OBSAT"],
- "footer": {
- "copyright": "© 2024 Zenith Aerospace",
- "easterEgg": "MADE WITH TONS OF JAVASCRIPT AND CONFUSION ON DISCORD"
- }
+ "navBar": ["ABOUT US", "PROJECTS", "KURUMIM", "SELECTION PROCESS", "OBSAT"],
+ "footer": {
+ "copyright": "©Zenith Aerospace",
+ "easterEgg": "MADE WITH TONS OF JAVASCRIPT AND CONFUSION ON DISCORD"
+ }
}
diff --git a/locales/es/common.json b/locales/es/common.json
index af750480..3af9e5a1 100644
--- a/locales/es/common.json
+++ b/locales/es/common.json
@@ -1,7 +1,7 @@
{
- "navBar": ["SOBRE NÓS", "PROJETOS", "KURUMIM", "PROCESSO SELETIVO", "OBSAT"],
- "footer": {
- "copyright": "© 2024 Zenith Aerospace",
- "easterEgg": "FEITO COM MUITO JAVASCRIPT E CONFUSÃO NO DISCORD"
- }
+ "navBar": ["SOBRE NÓS", "PROJETOS", "KURUMIM", "PROCESSO SELETIVO", "LANÇAMENTOS", "OBSAT"],
+ "footer": {
+ "copyright": "© Zenith Aerospace",
+ "easterEgg": "FEITO COM MUITO JAVASCRIPT E CONFUSÃO NO DISCORD"
+ }
}
diff --git a/locales/pt/allLaunches.json b/locales/pt/allLaunches.json
index 9dd5e55b..628406d5 100644
--- a/locales/pt/allLaunches.json
+++ b/locales/pt/allLaunches.json
@@ -1,4 +1,12 @@
{
+ "metaTags": {
+ "pageName": "lançamentos",
+ "lang": "pt",
+ "pageTitle": "Lançamentos",
+ "title": "Lançamentos",
+ "description": "Acompanhe alguns lançamentos e os dados de cada missão.",
+ "subtitle": "Acompanhe alguns lançamentos e os dados de cada missão."
+ },
"allLaunchesPage": {
"header": {
"title": "Lançamentos",
diff --git a/locales/pt/common.json b/locales/pt/common.json
index af750480..1ef11b64 100644
--- a/locales/pt/common.json
+++ b/locales/pt/common.json
@@ -1,7 +1,15 @@
{
- "navBar": ["SOBRE NÓS", "PROJETOS", "KURUMIM", "PROCESSO SELETIVO", "OBSAT"],
- "footer": {
- "copyright": "© 2024 Zenith Aerospace",
- "easterEgg": "FEITO COM MUITO JAVASCRIPT E CONFUSÃO NO DISCORD"
- }
+ "navBar": ["SOBRE NÓS", "PROJETOS", "KURUMIM", "PROCESSO SELETIVO", "LANÇAMENTOS", "OBSAT"],
+ "NAVBAR": {
+ "ABOUT_US": "SOBRE NÓS",
+ "PROJECTS": "PROJETOS",
+ "KURUMIM": "KURUMIM",
+ "RECRUITMENT_PROCESS": "PROCESSO SELETIVO",
+ "LAUNCHES": "LANÇAMENTOS",
+ "OBSAT": "OBSAT"
+ },
+ "footer": {
+ "copyright": "© Zenith Aerospace",
+ "easterEgg": "FEITO COM MUITO JAVASCRIPT E CONFUSÃO NO DISCORD"
+ }
}
diff --git a/pages/index.jsx b/pages/index.jsx
index c3a9922e..d5a26039 100644
--- a/pages/index.jsx
+++ b/pages/index.jsx
@@ -1,26 +1,42 @@
import React from 'react';
-import NavBar from 'components/navbar-components/NavBar';
+import HeadTags from 'components/general/HeadTags';
import HighlightsSection from 'components/home-components/highlights-section/HighlightsSection';
import ProjectBanner from 'components/banners-components/ProjectBanner';
import SupportersBanner from 'components/banners-components/SupportersBanner';
import Sectors from 'components/home-components/sectors-section/Sectors';
import Footer from 'components/Footer';
import useTranslation from 'next-translate/useTranslation';
-import HeadTags from 'components/general/HeadTags';
+import NavBar from '../src/components/Navbar/NavBar.tsx';
import HomepageHeroSection from '../components/home-components/HeroSection';
function Home() {
-
const { t } = useTranslation();
const metaTags = t('homePage:metaTags', { count: -1 }, { returnObjects: true });
return (
<>
-
+
-
-
+
+
@@ -28,6 +44,8 @@ function Home() {
);
}
-export function getServerSideProps() { return { props: {} }; }
+export function getServerSideProps() {
+ return { props: {} };
+}
export default Home;
diff --git a/pages/kurumim.jsx b/pages/kurumim.jsx
index c290fd4b..9d7da444 100644
--- a/pages/kurumim.jsx
+++ b/pages/kurumim.jsx
@@ -1,116 +1,146 @@
-import React from "react";
+import React from 'react';
import useTranslation from 'next-translate/useTranslation';
-import NavBar from 'components/navbar-components/NavBar';
import HeroSection from 'components/general/HeroSection';
import Footer from 'components/Footer';
-import FormWrapper from "components/general/FormWrapper"
-import CardContainer from "components/general/CardContainer";
-import Card from "components/general/Card";
-import boldParser from "components/utils/boldParser";
-import Config from "configs/configs.json";
+import FormWrapper from 'components/general/FormWrapper';
+import CardContainer from 'components/general/CardContainer';
+import Card from 'components/general/Card';
+import boldParser from 'components/utils/boldParser';
+import Config from 'configs/configs.json';
import HeadTags from 'components/general/HeadTags';
import UnderlinedButton from 'components/general/UnderlinedButton';
+import NavBar from '../src/components/Navbar/NavBar.tsx';
function mapTable(content, idx) {
- if (Array.isArray(content) && content.length === 2) {
- return {content[0]}: {content[1]}
;
- }
+ if (Array.isArray(content) && content.length === 2) {
+ return (
+
+ {content[0]}: {content[1]}
+
+ );
+ }
- return {Array.isArray(content) ? content[0] : content}
;
+ return (
+
+ {Array.isArray(content) ? content[0] : content}
+
+ );
}
function mapStylish(content, idx) {
- // TODO: Put style in class
- return
- {content.line.map((part, idx) => {
- if (typeof part === 'number') {
- return {part}
- } else {
- return {part}
- }
- })}
+ // TODO: Put style in class
+ return (
+
+ {content.line.map((part, idx) => {
+ if (typeof part === 'number') {
+ return (
+
+ {part}
+
+ );
+ } else {
+ return {part} ;
+ }
+ })}
+ );
}
function Kurumim() {
- const { t } = useTranslation();
- const title = t('kurumim:kurumimHero.title');
- const subtitle = t('kurumim:kurumimHero.subtitle');
- const TextContent = t('kurumim:cards', { count: -1 }, { returnObjects: true });
- const metaTags = t('kurumim:metaTags', { count: -1 }, { returnObjects: true });
- return (
- <>
-
-
-
-
-
- {TextContent.kurumimCard1.title}
- {TextContent.kurumimCard1.text.map((a, idx) => {boldParser(a)}
)}
- >
- }
- right={
- <>
- {TextContent.kurumimCard2.title}
- {TextContent.kurumimCard2.text.map((a, idx) => {boldParser(a)}
)}
- >
- }
- text={'right'}
- />
-
-
-
-
-
- {TextContent.kurumimCard3.titleSabado}
- {TextContent.kurumimCard3.textSabado.map((a, idx) => {boldParser(a)}
)}
+ const { t } = useTranslation();
+ const title = t('kurumim:kurumimHero.title');
+ const subtitle = t('kurumim:kurumimHero.subtitle');
+ const TextContent = t('kurumim:cards', { count: -1 }, { returnObjects: true });
+ const metaTags = t('kurumim:metaTags', { count: -1 }, { returnObjects: true });
+ return (
+ <>
+
+
+
+
+
+ {TextContent.kurumimCard1.title}
+ {TextContent.kurumimCard1.text.map((a, idx) => (
+ {boldParser(a)}
+ ))}
+ >
+ }
+ right={
+ <>
+ {TextContent.kurumimCard2.title}
+ {TextContent.kurumimCard2.text.map((a, idx) => (
+ {boldParser(a)}
+ ))}
+ >
+ }
+ text={'right'}
+ />
+
+
+
+
+
+ {TextContent.kurumimCard3.titleSabado}
+ {TextContent.kurumimCard3.textSabado.map((a, idx) => (
+ {boldParser(a)}
+ ))}
- {TextContent.kurumimCard3.titleParticipacao}
- {TextContent.kurumimCard3.detailParticipacao.map((a, idx) => {boldParser(a)}
)}
-
- >
- }
- right={
- <>
- {TextContent.kurumimCard4.titleDates}
- {TextContent.kurumimCard4.text.map((a, idx) => mapTable(a, idx))}
- {TextContent.kurumimCard4.linksTitle}
-
-
-
- >
- }
- text={'right'}
+ {TextContent.kurumimCard3.titleParticipacao}
+ {TextContent.kurumimCard3.detailParticipacao.map((a, idx) => (
+ {boldParser(a)}
+ ))}
+ >
+ }
+ right={
+ <>
+ {TextContent.kurumimCard4.titleDates}
+ {TextContent.kurumimCard4.text.map((a, idx) => mapTable(a, idx))}
+ {TextContent.kurumimCard4.linksTitle}
+
+
-
- {(Config.kurumimOpen)
- ? <>
-
-
-
-
- >
- : <> >
- }
-
-
- >
- );
+
+ >
+ }
+ text={'right'}
+ />
+
+ {Config.kurumimOpen ? (
+ <>
+
+
+
+
+ >
+ ) : (
+ <> >
+ )}
+
+
+ >
+ );
+}
+export function getServerSideProps() {
+ return { props: {} };
}
-export function getServerSideProps() { return { props: {} }; }
export default Kurumim;
diff --git a/pages/launches/[launchName].tsx b/pages/launches/[launchName].tsx
index ac4d1bc2..c6384a29 100644
--- a/pages/launches/[launchName].tsx
+++ b/pages/launches/[launchName].tsx
@@ -1,6 +1,5 @@
import React, { useEffect, useMemo, useState } from 'react';
import { useRouter } from 'next/router';
-import Link from 'next/link';
import ArrowBackIcon from '@mui/icons-material/ArrowBack';
import { Alert, Box, Button, Card, CardContent, Chip, CircularProgress, Container, Stack, Typography } from '@mui/material';
import {
@@ -83,8 +82,7 @@ export default function LaunchDetailsPage() {
diff --git a/components/navbar-components/NavBar.jsx b/src/components/Navbar/NavBar.tsx
similarity index 51%
rename from components/navbar-components/NavBar.jsx
rename to src/components/Navbar/NavBar.tsx
index 09380ceb..06e95995 100644
--- a/components/navbar-components/NavBar.jsx
+++ b/src/components/Navbar/NavBar.tsx
@@ -1,38 +1,20 @@
import React, { useState, useEffect } from 'react';
import NavHeader from './NavHeader';
-import NavMenu from './NavMenu';
import style from 'styles/NavBar.module.css';
-function NavBar(props) {
- const [menu, setMenuState] = useState(false);
- const [scrollDir, setScrollDir] = useState('top');
-
- const toggleMenu = (open) => {
- setMenuState(open);
- };
-
- useEffect(() => {
- const closeMenu = () => {
- toggleMenu(false);
- };
-
- window.addEventListener('resize', closeMenu);
-
- return () => window.removeEventListener('resize', closeMenu);
- }, []);
+export default function NavBar() {
+ const [scrollDir, setScrollDir] = useState<'top' | 'up' | 'down'>('top');
useEffect(() => {
- toggleMenu(false);
const threshold = 5;
- const topThreshHold = 90;
-
+ const topThreshold = 90;
let lastYPos = window.pageYOffset;
let ticking = false;
const updateScrollDir = () => {
const currYPos = window.pageYOffset;
- if (currYPos > topThreshHold) {
+ if (currYPos > topThreshold) {
if (Math.abs(currYPos - lastYPos) < threshold) {
ticking = false;
return;
@@ -53,30 +35,16 @@ function NavBar(props) {
};
window.addEventListener('scroll', onScroll);
-
return () => window.removeEventListener('scroll', onScroll);
- }, [scrollDir]);
+ }, []);
return (
-
+
);
}
-
-export default NavBar;
diff --git a/src/components/Navbar/NavHeader.tsx b/src/components/Navbar/NavHeader.tsx
new file mode 100644
index 00000000..7100cb15
--- /dev/null
+++ b/src/components/Navbar/NavHeader.tsx
@@ -0,0 +1,80 @@
+import React, { useState } from 'react';
+import { AppBar, Toolbar, Box, Menu, List, IconButton } from '@mui/material';
+import MenuIcon from '@mui/icons-material/Menu';
+import CloseIcon from '@mui/icons-material/Close';
+import NavLinks from './NavLinks';
+
+export default function NavHeader() {
+ const [anchorEl, setAnchorEl] = useState
(null);
+ const menuOpen = Boolean(anchorEl);
+
+ const handleOpen = (event: React.MouseEvent) => setAnchorEl(event.currentTarget);
+ const handleClose = () => setAnchorEl(null);
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+ {menuOpen ? : }
+
+
+
+
+
+ >
+ );
+}
+
+const appBarSx = {
+ backgroundColor: 'transparent',
+ zIndex: 3
+};
+
+const toolbarSx = {
+ justifyContent: 'space-between',
+ alignItems: 'center',
+ px: { xs: '1.5em', md: '2em' },
+ height: '90px',
+ minHeight: '90px !important'
+};
+
+const desktopNavSx = { display: { xs: 'none', md: 'flex' } };
+
+const menuButtonSx = { display: { xs: 'flex', md: 'none' }, color: 'white' };
+
+const menuSlotProps = {
+ paper: {
+ sx: {
+ backgroundColor: 'black',
+ width: '100vw',
+ maxWidth: '100vw',
+ left: '0 !important'
+ }
+ }
+};
+
+const menuListSx = { backgroundColor: 'black', width: '100%' };
diff --git a/src/components/Navbar/NavLinks.tsx b/src/components/Navbar/NavLinks.tsx
new file mode 100644
index 00000000..29f1134b
--- /dev/null
+++ b/src/components/Navbar/NavLinks.tsx
@@ -0,0 +1,53 @@
+import React from 'react';
+import Link from 'next/link';
+import useTranslation from 'next-translate/useTranslation';
+import { Box, Button, ListItem } from '@mui/material';
+import { NAV_LINKS } from '@/src/shared/consts/navLinks.const';
+
+interface NavLinksProps {
+ mobile?: boolean;
+ onNavigate?: () => void;
+ sx?: object;
+}
+
+export default function NavLinks({ mobile, onNavigate, sx }: NavLinksProps) {
+ const { t } = useTranslation();
+
+ const buttonSx = {
+ color: 'white',
+ fontWeight: 300,
+ fontSize: '18px',
+ textTransform: 'none',
+ '&:hover': { color: 'lightgray', backgroundColor: 'transparent' }
+ };
+
+ const mobileItemSx = {
+ borderBottom: '1px solid rgba(169, 169, 169, 0.3)',
+ py: '1.2em',
+ px: '1.5em'
+ };
+
+ if (mobile) {
+ return (
+ <>
+ {NAV_LINKS.map((link) => (
+
+
+ {t(link.labelKey)}
+
+
+ ))}
+ >
+ );
+ }
+
+ return (
+
+ {NAV_LINKS.map((link) => (
+
+ {t(link.labelKey)}
+
+ ))}
+
+ );
+}
diff --git a/src/shared/consts/locales.const.ts b/src/shared/consts/locales.const.ts
new file mode 100644
index 00000000..b6e72d80
--- /dev/null
+++ b/src/shared/consts/locales.const.ts
@@ -0,0 +1,14 @@
+export const LAUNCHES = {
+ META_TAGS: {
+ PAGE_NAME: 'allLaunches:metaTags.pageName',
+ LANG: 'allLaunches:metaTags.lang',
+ PAGE_TITLE: 'allLaunches:metaTags.pageTitle',
+ TITLE: 'allLaunches:metaTags.title',
+ DESCRIPTION: 'allLaunches:metaTags.description',
+ SUBTITLE: 'allLaunches:metaTags.subtitle'
+ }
+} as const;
+
+export const LOCALE = {
+ LAUNCHES
+};
diff --git a/src/shared/consts/navLinks.const.ts b/src/shared/consts/navLinks.const.ts
new file mode 100644
index 00000000..62d415ee
--- /dev/null
+++ b/src/shared/consts/navLinks.const.ts
@@ -0,0 +1,14 @@
+type NavLinkType = {
+ href: string;
+ labelKey: string;
+ external?: boolean;
+};
+
+export const NAV_LINKS: readonly NavLinkType[] = [
+ { href: '/zenith', labelKey: 'common:NAVBAR.ABOUT_US' },
+ { href: '/projetos', labelKey: 'common:NAVBAR.PROJECTS' },
+ { href: '/kurumim', labelKey: 'common:NAVBAR.KURUMIM' },
+ { href: '/processo-seletivo', labelKey: 'common:NAVBAR.RECRUITMENT_PROCESS' },
+ { href: '/launches', labelKey: 'common:NAVBAR.LAUNCHES' }
+ // { href: 'https://ob-site.vercel.app/', labelKey: 'common:NAVBAR.OBSAT', external: true }
+] as const;
diff --git a/styles/projects/ProjectHeroSection.module.css b/styles/projects/ProjectHeroSection.module.css
index 8255e0a1..e39978c4 100644
--- a/styles/projects/ProjectHeroSection.module.css
+++ b/styles/projects/ProjectHeroSection.module.css
@@ -71,7 +71,7 @@
flex-direction: column-reverse;
align-items: center;
justify-content: center;
-
+ background-position: center;
}
.imgContainer {