Skip to content

Commit

Permalink
Merge pull request #89 from Capstone-Projects-2024-Spring/BP-215-Add-…
Browse files Browse the repository at this point in the history
…WiFi-Menu-to-Settings-Page

Added Wifi Menu to New JS GUI and Page Switching
  • Loading branch information
tuk05348 committed Apr 8, 2024
2 parents b1ca2bb + 1306fdd commit e234b79
Show file tree
Hide file tree
Showing 11 changed files with 448 additions and 34 deletions.
24 changes: 18 additions & 6 deletions home/webapp/src/App.jsx
@@ -1,27 +1,39 @@
import React, { useState, useEffect } from "react";
import React, { useState } from "react";
import { GlobalStyles } from "./components/styles/Global";
import NavBar from "./components/NavBar.jsx";

import { ThemeProvider } from "styled-components";
import { dark } from "./components/styles/Theme.styled.jsx";

import HomePage from "./components/HomePage.jsx";
import CommunityPage from "./components/CommunityPage.jsx";
import ClassroomPage from "./components/ClassroomPage.jsx";
import SettingsPage from "./components/SettingsPage.jsx"; // Import SettingsPage component

import { Layout } from './components/styles/Layout.styled.jsx'

function App() {
const [selectedTheme, setSelectedTheme] = useState(dark);
const [currentPage, setCurrentPage] = useState('home');

const handleNavButtonClick = (page) => {
setCurrentPage(page);
};

return (
<ThemeProvider theme={selectedTheme}>
<div className="App">
<GlobalStyles />

<Layout>
<NavBar></NavBar>
<HomePage></HomePage>
<NavBar onPageChange={handleNavButtonClick} />
{currentPage === 'home' && <HomePage />}
{currentPage === 'community' && <CommunityPage />}
{currentPage === 'classroom' && <ClassroomPage />}
{currentPage === 'settings' && <SettingsPage />}
</Layout>
</div>
</ThemeProvider>
)
);
}

export default App
export default App;
9 changes: 9 additions & 0 deletions home/webapp/src/components/ClassroomPage.jsx
@@ -0,0 +1,9 @@
import { HomePageContainer } from "./styles/HomePage.styled"

export default function HomePage() {
return (
<HomePageContainer>
Classroom Page
</HomePageContainer>
)
}
9 changes: 9 additions & 0 deletions home/webapp/src/components/CommunityPage.jsx
@@ -0,0 +1,9 @@
import { HomePageContainer } from "./styles/HomePage.styled"

export default function HomePage() {
return (
<HomePageContainer>
Community Page
</HomePageContainer>
)
}
47 changes: 45 additions & 2 deletions home/webapp/src/components/HomePage.jsx
@@ -1,9 +1,52 @@
import { HomePageContainer } from "./styles/HomePage.styled"
import { NewGameIcon, PlayIcon } from "./Icons"
import { GalleryContainer, GameIcon, GameInfoContainer, HomePageContainer, GameMetaData, GameActionButtonsContainer, GameActionButton, GameActionButtonBackground, GameActionButtonForeground ,MetaDataText, MetaDataTitle} from "./styles/HomePage.styled"

export default function HomePage() {

let gameNames = ["Mario Kart", "Legend of Zelda", "PacMan", "Tetris", "Pokemon"];

return (
<HomePageContainer>
Hello

<GalleryContainer>

<GameIcon tabIndex={2}>
<NewGameIcon />
</GameIcon>

{gameNames.map((game, index)=>{
return(
<GameIcon tabIndex={2}>{game}</GameIcon>
)

})}



</GalleryContainer>

<GameInfoContainer>
<GameMetaData>
<MetaDataTitle><span>Super Mario</span></MetaDataTitle>
<MetaDataText> Author: </MetaDataText>
<MetaDataText> Last Updated: </MetaDataText>

</GameMetaData>

<GameActionButtonsContainer>
<GameActionButton>
<GameActionButtonForeground>
<PlayIcon/>
</GameActionButtonForeground>

<GameActionButtonBackground></GameActionButtonBackground>

</GameActionButton>

</GameActionButtonsContainer>

</GameInfoContainer>

</HomePageContainer>
)
}
15 changes: 15 additions & 0 deletions home/webapp/src/components/Icons.jsx
Expand Up @@ -21,4 +21,19 @@ export function SettingsIcon() {
return (<svg width="50" height="51" viewBox="0 0 50 51" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M43.9766 27.7877C44.081 27.0044 44.1332 26.1949 44.1332 25.3333C44.1332 24.4977 44.081 23.6622 43.9505 22.8788L49.251 18.7533C49.721 18.3877 49.8516 17.6827 49.5644 17.1605L44.551 8.4916C44.2377 7.91716 43.5849 7.73438 43.0105 7.91716L36.7699 10.4238C35.4643 9.4316 34.0805 8.59605 32.5399 7.96938L31.5999 1.33716C31.4955 0.71049 30.9732 0.266602 30.3466 0.266602H20.3199C19.6932 0.266602 19.1971 0.71049 19.0927 1.33716L18.1527 7.96938C16.6121 8.59605 15.2021 9.45771 13.9227 10.4238L7.68213 7.91716C7.10768 7.70827 6.45491 7.91716 6.14157 8.4916L1.15435 17.1605C0.841018 17.7088 0.945462 18.3877 1.46768 18.7533L6.76824 22.8788C6.63768 23.6622 6.53324 24.5238 6.53324 25.3333C6.53324 26.1427 6.58546 27.0044 6.71602 27.7877L1.41546 31.9133C0.945462 32.2788 0.814907 32.9838 1.10213 33.506L6.11546 42.1749C6.42879 42.7494 7.08157 42.9322 7.65602 42.7494L13.8966 40.2427C15.2021 41.2349 16.586 42.0705 18.1266 42.6972L19.0666 49.3294C19.1971 49.9561 19.6932 50.3999 20.3199 50.3999H30.3466C30.9732 50.3999 31.4955 49.9561 31.5738 49.3294L32.5138 42.6972C34.0543 42.0705 35.4644 41.2349 36.7438 40.2427L42.9844 42.7494C43.5588 42.9583 44.2116 42.7494 44.5249 42.1749L49.5382 33.506C49.8516 32.9316 49.721 32.2788 49.2249 31.9133L43.9766 27.7877ZM25.3332 34.7333C20.1632 34.7333 15.9332 30.5033 15.9332 25.3333C15.9332 20.1633 20.1632 15.9333 25.3332 15.9333C30.5032 15.9333 34.7332 20.1633 34.7332 25.3333C34.7332 30.5033 30.5032 34.7333 25.3332 34.7333Z" fill="white"/>
</svg>)
}

export function NewGameIcon() {
return (<svg width="73" height="73" viewBox="0 0 73 73" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M72.0832 38.625C72.0832 40.2819 70.74 41.625 69.0832 41.625H44.5832C42.9263 41.625 41.5832 42.9681 41.5832 44.625V69.375C41.5832 71.0319 40.24 72.375 38.5832 72.375H34.4165C32.7596 72.375 31.4165 71.0319 31.4165 69.375V44.625C31.4165 42.9681 30.0734 41.625 28.4165 41.625H3.9165C2.25965 41.625 0.916504 40.2819 0.916504 38.625V34.375C0.916504 32.7181 2.25965 31.375 3.9165 31.375H28.4165C30.0734 31.375 31.4165 30.0319 31.4165 28.375V3.625C31.4165 1.96815 32.7596 0.625 34.4165 0.625H38.5832C40.24 0.625 41.5832 1.96815 41.5832 3.625V28.375C41.5832 30.0319 42.9263 31.375 44.5832 31.375H69.0832C70.74 31.375 72.0832 32.7181 72.0832 34.375V38.625Z" fill="white"/>
</svg>
)
}

export function PlayIcon() {
return(<svg width="36" height="46" viewBox="0 0 36 46" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0.833496 0.541748V45.4584L35.6668 23.0001L0.833496 0.541748Z" fill="white"/>
</svg>
)

}
56 changes: 36 additions & 20 deletions home/webapp/src/components/NavBar.jsx
@@ -1,26 +1,42 @@
import {ClassroomIcon, CommunityIcon, HomeIcon, SettingsIcon} from "./Icons";
import { NavButtonsContainer, NavBarContainer, NavButton, StatusIconsContainer } from "./styles/NavBar.styled";
import React, { useState } from 'react';
import { NavButtonsContainer, NavBarContainer, NavButton } from "./styles/NavBar.styled";
import { ClassroomIcon, CommunityIcon, HomeIcon, SettingsIcon } from "./Icons";

const navIcons = {
home: HomeIcon,
community: CommunityIcon,
classroom: ClassroomIcon,
settings: SettingsIcon,
};

const NavBar = ({ onPageChange }) => {
const [activePage, setActivePage] = useState('home');

const handleButtonClick = (page) => {
setActivePage(page);
onPageChange(page);
};

export default function NavBar() {
return (
<NavBarContainer>
<NavButtonsContainer>
<NavButton tabIndex={1}>
<HomeIcon/>
</NavButton>
<NavButton tabIndex={2}>
<CommunityIcon/>
</NavButton>
<NavButton tabIndex={3}>
<ClassroomIcon/>
</NavButton>
<NavButton tabIndex={4}>
<SettingsIcon/>
</NavButton>
{Object.keys(navIcons).map((page) => {
const Icon = navIcons[page];
return (
<NavButton
key={page}
active={activePage === page}
onClick={() => handleButtonClick(page)}
tabIndex={1}
>
<Icon />
</NavButton>
);
})}
</NavButtonsContainer>
<StatusIconsContainer>

</StatusIconsContainer>
{/* StatusIconsContainer can be added here */}
</NavBarContainer>
)
}
);
};

export default NavBar;
40 changes: 40 additions & 0 deletions home/webapp/src/components/Settings/NetworkSettingsPage.jsx
@@ -0,0 +1,40 @@
import React, { useState } from "react";
import * as Styled from "../styles/Settings.styled";

export default function NetworkSettingsPage() {
let currentNetwork = "Applebaum's Network";
let networksList = ["tusecurewireless", "eduroam", "Stacy's iPhone", "xfinitywifi"];
const [connectedNetwork, setConnectedNetwork] = useState("✔ "+currentNetwork);
const [wifiNetworks, setWifiNetworks] = useState(networksList);

const handleDisconnectButtonClick = () => {
// Implement connect/disconnect logic here
};

const handleRefreshButtonClick = () => {
// Implement refresh logic here
};

const renderWifiContent = () => {
return (
<Styled.NetworksList>
{wifiNetworks.map((network, index) => (
<Styled.NetworkButton>{network}</Styled.NetworkButton>
))}
</Styled.NetworksList>
);
};

return (<Styled.NetworkSettingsPageContainer>
<Styled.NetworkActionBar>
<Styled.ConnectedNetwork>{connectedNetwork}</Styled.ConnectedNetwork>
<Styled.DisconnectButton onClick={handleDisconnectButtonClick}>
Disconnect
</Styled.DisconnectButton>
<Styled.RefreshButton onClick={handleRefreshButtonClick}>
</Styled.RefreshButton>
</Styled.NetworkActionBar>
{renderWifiContent()}
</Styled.NetworkSettingsPageContainer>)
}
49 changes: 49 additions & 0 deletions home/webapp/src/components/SettingsPage.jsx
@@ -0,0 +1,49 @@
import React, { useState } from "react";
import * as Styled from "./styles/Settings.styled";
import NetworkSettingsPage from "./Settings/NetworkSettingsPage";

const SettingsPage = () => {
const [activeButton, setActiveButton] = useState("WiFi");

return (
<Styled.SettingsPageContainer>
<Styled.SideMenu>
<Styled.Button
active={activeButton === "WiFi"}
onClick={() => {setActiveButton("WiFi")}}
tabIndex="2"
>
Wi-Fi
</Styled.Button>
{/* Add more buttons as needed */}
<Styled.Button
active={activeButton === "Sound"}
onClick={() => setActiveButton("Sound")}
tabIndex="2"
>
Sound
</Styled.Button>
<Styled.Button
active={activeButton === "Profile"}
onClick={() => setActiveButton("Profile")}
tabIndex="2"
>
Profile
</Styled.Button>
<Styled.Button
active={activeButton === "Class"}
onClick={() => setActiveButton("Class")}
tabIndex="2"
>
Class
</Styled.Button>
</Styled.SideMenu>

{activeButton === "WiFi" && (<NetworkSettingsPage/>)}


</Styled.SettingsPageContainer>
);
};

export default SettingsPage;

0 comments on commit e234b79

Please sign in to comment.