Skip to content

Commit

Permalink
Update _app.tsx
Browse files Browse the repository at this point in the history
fix
  • Loading branch information
farisashai committed Jan 2, 2024
1 parent 214b7d3 commit 3865e17
Show file tree
Hide file tree
Showing 8 changed files with 34 additions and 64 deletions.
10 changes: 5 additions & 5 deletions src/components/layout/Navbar/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import ThemeToggle from '@/components/common/ThemeToggle';
import { config } from '@/lib';
import { useWindowSize } from '@/lib/hooks/useWindowSize';
import { PermissionService } from '@/lib/services';
import type { PrivateProfile } from '@/lib/types/apiResponses';
import { UserAccessType } from '@/lib/types/enums';
import LightModeLogo from '@/public/assets/acm-logos/general/light-mode.png';
import ACMIcon from '@/public/assets/icons/acm-icon.svg';
import CalendarIcon from '@/public/assets/icons/calendar-icon.svg';
Expand All @@ -17,9 +17,9 @@ import { memo, useCallback, useEffect, useRef, useState } from 'react';
import styles from './style.module.scss';

interface NavbarProps {
user?: PrivateProfile;
accessType?: UserAccessType;
}
const Navbar = ({ user }: NavbarProps) => {
const Navbar = ({ accessType }: NavbarProps) => {
const size = useWindowSize();
const headerRef = useRef<HTMLHeadElement>(null);

Expand Down Expand Up @@ -48,7 +48,7 @@ const Navbar = ({ user }: NavbarProps) => {
if (!isMobile) setMenuOpen(false);
}, [isMobile]);

if (!user) {
if (!accessType) {
return (
<header className={styles.header}>
<div className={styles.content}>
Expand All @@ -63,7 +63,7 @@ const Navbar = ({ user }: NavbarProps) => {
);
}

const isAdmin = PermissionService.canViewAdminPage().includes(user.accessType);
const isAdmin = PermissionService.canViewAdminPage().includes(accessType);

return (
<header className={styles.header} ref={headerRef}>
Expand Down
8 changes: 4 additions & 4 deletions src/components/layout/PageLayout/index.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import Navbar from '@/components/layout/Navbar';
import type { PrivateProfile } from '@/lib/types/apiResponses';
import { UserAccessType } from '@/lib/types/enums';
import { PropsWithChildren } from 'react';
import styles from './style.module.scss';

interface LayoutProps {
user?: PrivateProfile;
accessType?: UserAccessType;
}

const PageLayout = ({ user, children }: PropsWithChildren<LayoutProps>) => (
const PageLayout = ({ accessType, children }: PropsWithChildren<LayoutProps>) => (
<>
<Navbar user={user} />
<Navbar accessType={accessType} />
<main className={styles.content}>{children}</main>
</>
);
Expand Down
5 changes: 5 additions & 0 deletions src/lib/services/CookieService.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { CookieType } from '@/lib/types/enums';
import { deleteCookie, getCookie, setCookie } from 'cookies-next';
import type { OptionsType } from 'cookies-next/lib/types';

Expand Down Expand Up @@ -33,3 +34,7 @@ export const deleteClientCookie = (key: string): void => {
export const deleteServerCookie = (key: string, options: OptionsType): void => {
deleteCookie(key, options);
};

export const clearServerCookies = (options: OptionsType): void => {
Object.keys(CookieType).forEach(key => deleteServerCookie(key, options));
};
45 changes: 3 additions & 42 deletions src/pages/_app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,37 +6,14 @@ import 'react-toastify/dist/ReactToastify.css';

import { SEO } from '@/components/common';
import { PageLayout } from '@/components/layout';
import { CookieService } from '@/lib/services';
import type { PrivateProfile } from '@/lib/types/apiResponses';
import { CookieType } from '@/lib/types/enums';
import { NextPageContext } from 'next';
import { ThemeProvider } from 'next-themes';
import type { AppProps } from 'next/app';
import { DM_Sans as DMSans } from 'next/font/google';
import { useEffect, useState } from 'react';
import { ToastContainer } from 'react-toastify';

interface InitialPropInterface {
user?: PrivateProfile;
}
const dmSans = DMSans({ subsets: ['latin'], weight: ['400', '500', '700'] });

export default function MyApp({ Component, pageProps }: AppProps<InitialPropInterface>) {
const [user, setUser] = useState(pageProps?.user);

// For 404 page: Try getting user from cookie on client side (because 404
// pages in Next.js must be a static page)
useEffect(() => {
if (pageProps?.user) {
setUser(pageProps?.user);
return;
}
const userCookie = CookieService.getClientCookie(CookieType.USER);
if (userCookie) {
setUser(JSON.parse(userCookie));
}
}, [pageProps?.user]);

export default function MyApp({ Component, pageProps }: AppProps) {
return (
<>
<style jsx global>{`
Expand All @@ -47,26 +24,10 @@ export default function MyApp({ Component, pageProps }: AppProps<InitialPropInte
<SEO />
<ThemeProvider>
<ToastContainer />
<PageLayout user={user}>
<Component user={user} {...pageProps} />
<PageLayout accessType={pageProps?.user?.accessType}>
<Component {...pageProps} />
</PageLayout>
</ThemeProvider>
</>
);
}

MyApp.getInitialProps = ({ req, res }: NextPageContext) => {
const userCookie = CookieService.getServerCookie(CookieType.USER, { req, res });

if (!userCookie) {
return {
user: null,
};
}

const user: PrivateProfile = JSON.parse(userCookie);

return {
user,
};
};
6 changes: 4 additions & 2 deletions src/pages/events.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,10 @@ export default EventsPage;

const getServerSidePropsFunc: GetServerSideProps = async ({ req, res }) => {
const authToken = CookieService.getServerCookie(CookieType.ACCESS_TOKEN, { req, res });
const events = await EventAPI.getAllEvents();
const attendances = await EventAPI.getAttendancesForUser(authToken);
const getEvents = EventAPI.getAllEvents();
const getAttendances = EventAPI.getAttendancesForUser(authToken);

const [events, attendances] = await Promise.all([getEvents, getAttendances]);

return { props: { events, attendances } };
};
Expand Down
6 changes: 4 additions & 2 deletions src/pages/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,10 @@ export default PortalHomePage;

const getServerSidePropsFunc: GetServerSideProps = async ({ req, res }) => {
const authToken = CookieService.getServerCookie(CookieType.ACCESS_TOKEN, { req, res });
const events = await EventAPI.getAllEvents();
const attendances = await EventAPI.getAttendancesForUser(authToken);
const getEvents = EventAPI.getAllEvents();
const getAttendances = EventAPI.getAttendancesForUser(authToken);

const [events, attendances] = await Promise.all([getEvents, getAttendances]);

const now = new Date();
const pastEvents: PublicEvent[] = [];
Expand Down
10 changes: 7 additions & 3 deletions src/pages/leaderboard.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Dropdown, PaginationControls } from '@/components/common';
import { LeaderboardRow, TopThreeCard } from '@/components/leaderboard';
import { config } from '@/lib';
import { LeaderboardAPI } from '@/lib/api';
import { LeaderboardAPI, UserAPI } from '@/lib/api';
import withAccessType from '@/lib/hoc/withAccessType';
import { CookieService, PermissionService } from '@/lib/services';
import { SlidingLeaderboardQueryParams } from '@/lib/types/apiRequests';
Expand Down Expand Up @@ -173,10 +173,14 @@ const getServerSidePropsFunc: GetServerSideProps = async ({ req, res, query }) =
const AUTH_TOKEN = CookieService.getServerCookie(CookieType.ACCESS_TOKEN, { req, res });

const sort = typeof query.sort === 'string' ? query.sort : getEndYear() - 1;
const leaderboard = await LeaderboardAPI.getLeaderboard(AUTH_TOKEN, getLeaderboardRange(sort));

const getLeaderboard = LeaderboardAPI.getLeaderboard(AUTH_TOKEN, getLeaderboardRange(sort));
const getUser = UserAPI.getCurrentUser(AUTH_TOKEN);

const [leaderboard, user] = await Promise.all([getLeaderboard, getUser]);

return {
props: { sort, leaderboard },
props: { sort, leaderboard, user },
};
};

Expand Down
8 changes: 2 additions & 6 deletions src/pages/logout.tsx
Original file line number Diff line number Diff line change
@@ -1,20 +1,16 @@
import { config } from '@/lib';
import { CookieService } from '@/lib/services';
import { CookieType } from '@/lib/types/enums';
import type { GetServerSideProps } from 'next';

/**
* `/logout` route to handle logout by ensuring user cookie is cleared and redirecting to login screen without rendering a page
*/
const LogoutPage = () => {
return null;
};
const LogoutPage = () => null;

export default LogoutPage;

export const getServerSideProps: GetServerSideProps = async ({ req, res }) => {
CookieService.deleteServerCookie(CookieType.USER, { req, res });
CookieService.deleteServerCookie(CookieType.ACCESS_TOKEN, { req, res });
CookieService.clearServerCookies({ req, res });

return {
redirect: {
Expand Down

0 comments on commit 3865e17

Please sign in to comment.