Skip to content

Commit

Permalink
#2709 used global event listener for sidebar and hompepage
Browse files Browse the repository at this point in the history
  • Loading branch information
Aaryan1203 committed Jul 29, 2024
1 parent 9b900f4 commit cc1059c
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 19 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
"@types/react-dom": "17.0.1"
},
"dependencies": {
"mitt": "^3.0.1",
"react-hook-form-persist": "^3.0.0",
"typescript": "^4.1.5"
},
Expand Down
31 changes: 22 additions & 9 deletions src/frontend/src/app/AppAuthenticated.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@ import { Container, IconButton, useTheme } from '@mui/material';
import ErrorPage from '../pages/ErrorPage';
import { Role, isGuest } from 'shared';
import Calendar from '../pages/CalendarPage/Calendar';
import { useState } from 'react';
import { useState, useEffect } from 'react';
import ArrowCircleRightTwoToneIcon from '@mui/icons-material/ArrowCircleRightTwoTone';
import HiddenContentMargin from '../components/HiddenContentMargin';
import emitter from './EventBus';

interface AppAuthenticatedProps {
userId: string;
Expand All @@ -42,7 +43,23 @@ const AppAuthenticated: React.FC<AppAuthenticatedProps> = ({ userId, userRole })
const theme = useTheme();
const [drawerOpen, setDrawerOpen] = useState(false);
const [moveContent, setMoveContent] = useState(false);
const [onMemberHomepage, setOnMemberHomePage] = useState(false);
const [onMemberHomePage, setOnMemberHomePage] = useState(() => {
const savedState = localStorage.getItem('memberHomePage');
return savedState ? JSON.parse(savedState) : false;
});

useEffect(() => {
const handleMemberHomePage = (value: boolean) => {
setOnMemberHomePage(value);
localStorage.setItem('memberHomePage', JSON.stringify(value));
};

emitter.on('memberHomePage', handleMemberHomePage as (event: unknown) => void);

return () => {
emitter.off('memberHomePage', handleMemberHomePage as (event: unknown) => void);
};
}, []);

if (isLoading || !userSettingsData) return <LoadingIndicator />;

Expand All @@ -63,11 +80,11 @@ const AppAuthenticated: React.FC<AppAuthenticatedProps> = ({ userId, userRole })
height: '100vh',
position: 'fixed',
width: 15,
borderRight: onMemberHomepage ? 2 : 0,
borderRight: onMemberHomePage ? 2 : 0,
borderRightColor: theme.palette.background.paper
}}
/>
{onMemberHomepage && (
{onMemberHomePage && (
<>
<IconButton
onClick={() => {
Expand Down Expand Up @@ -108,11 +125,7 @@ const AppAuthenticated: React.FC<AppAuthenticatedProps> = ({ userId, userRole })
<Route path={routes.CREDITS} component={Credits} />
<Route path={routes.FINANCE} component={Finance} />
<Route path={routes.CALENDAR} component={Calendar} />
<Route
exact
path={routes.HOME}
render={() => <Home onMemberHomePage={onMemberHomepage} setOnMemberHomePage={setOnMemberHomePage} />}
/>
<Route exact path={routes.HOME} component={Home} />
<Route path="*" component={PageNotFound} />
</Switch>
</Container>
Expand Down
4 changes: 4 additions & 0 deletions src/frontend/src/app/EventBus.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// eventBus.js
import mitt from 'mitt';
const emitter = mitt();
export default emitter;
10 changes: 7 additions & 3 deletions src/frontend/src/pages/HomePage/GuestHomePage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,19 @@ import PageLayout from '../../components/PageLayout';
import { AuthenticatedUser } from 'shared';
import ImageWithButton from './components/ImageWithButton';
import React from 'react';
import emitter from '../../app/EventBus';

interface GuestHomePageProps {
user: AuthenticatedUser;
setOnMemberHomePage: (e: boolean) => void;
}

const GuestHomePage = ({ user, setOnMemberHomePage }: GuestHomePageProps) => {
const handleClick = () => {
emitter.emit('memberHomePage', true);
setOnMemberHomePage(true);
};

return (
<PageLayout title="Home" hidePageTitle>
<Typography variant="h3" textAlign="center" sx={{ mt: 2, pt: 3 }}>
Expand All @@ -27,9 +33,7 @@ const GuestHomePage = ({ user, setOnMemberHomePage }: GuestHomePageProps) => {
title="Explore Our Work as a Guest"
imageSrc={`/Guest.png`}
buttonText="FinishLine"
onClick={() => {
setOnMemberHomePage(true);
}}
onClick={handleClick}
/>
</Box>
</Box>
Expand Down
9 changes: 3 additions & 6 deletions src/frontend/src/pages/HomePage/Home.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,11 @@ import { useCurrentUser } from '../../hooks/users.hooks';
import { isGuest } from 'shared';
import GuestHomePage from './GuestHomePage';
import MemberHomePage from './MemberHomePage';
import { useHistoryState } from '../../hooks/misc.hooks';

interface HomeProps {
onMemberHomePage: boolean;
setOnMemberHomePage: (value: boolean) => void;
}

const Home = ({ onMemberHomePage, setOnMemberHomePage }: HomeProps) => {
const Home = () => {
const user = useCurrentUser();
const [onMemberHomePage, setOnMemberHomePage] = useHistoryState('', false);

return isGuest(user.role) && !onMemberHomePage ? (
<GuestHomePage user={user} setOnMemberHomePage={setOnMemberHomePage} />
Expand Down
2 changes: 1 addition & 1 deletion src/frontend/src/utils/routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*/

/**************** General Section ****************/
const HOME = `/`;
const HOME = `/home`;
const LOGIN = `/login`;
const INFO = `/info`;
const GANTT = `/gantt`;
Expand Down
8 changes: 8 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -10224,6 +10224,7 @@ __metadata:
eslint-config-prettier: ^8.5.0
eslint-config-react-app: ^7.0.1
eslint-plugin-prettier: ^4.2.1
mitt: ^3.0.1
prettier: ^2.0.5
react-hook-form-persist: ^3.0.0
rimraf: ^3.0.2
Expand Down Expand Up @@ -14377,6 +14378,13 @@ __metadata:
languageName: node
linkType: hard

"mitt@npm:^3.0.1":
version: 3.0.1
resolution: "mitt@npm:3.0.1"
checksum: b55a489ac9c2949ab166b7f060601d3b6d893a852515ae9eca4e11df01c013876df777ea109317622b5c1c60e8aae252558e33c8c94e14124db38f64a39614b1
languageName: node
linkType: hard

"mixin-deep@npm:^1.2.0":
version: 1.3.2
resolution: "mixin-deep@npm:1.3.2"
Expand Down

0 comments on commit cc1059c

Please sign in to comment.