mirror of
https://github.com/myfatemi04/wheelshare-frontend.git
synced 2025-04-21 03:10:17 -04:00
91 lines
2.0 KiB
TypeScript
91 lines
2.0 KiB
TypeScript
import { CSSProperties, lazy, Suspense, useEffect, useState } from 'react';
|
|
import { BrowserRouter, Route, Switch } from 'react-router-dom';
|
|
import { getReceivedInvitationsAndRequests } from './api';
|
|
import { useMe } from './hooks';
|
|
import Notifications from './Notifications/Notifications';
|
|
import { IInvitation } from './types';
|
|
import WheelShare from './WheelShare';
|
|
import WheelShareLoggedOut from './WheelShareLoggedOut';
|
|
|
|
const Authenticator = lazy(() => import('./Authentication/Authenticator'));
|
|
const Group = lazy(() => import('./Group'));
|
|
|
|
const dummyNotificationData: IInvitation[] = [
|
|
{
|
|
user: {
|
|
id: 0,
|
|
name: 'Michael Fatemi',
|
|
},
|
|
carpool: {
|
|
id: 0,
|
|
name: 'Cross Country',
|
|
},
|
|
isRequest: true,
|
|
sentTime: new Date().toISOString(),
|
|
},
|
|
{
|
|
user: {
|
|
id: 1,
|
|
name: 'Joshua Hsueh',
|
|
},
|
|
carpool: {
|
|
id: 0,
|
|
name: 'TJ Lax',
|
|
},
|
|
isRequest: false,
|
|
sentTime: new Date().toISOString(),
|
|
},
|
|
];
|
|
|
|
const style: CSSProperties = {
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
alignItems: 'center',
|
|
width: '30rem',
|
|
maxWidth: '100%',
|
|
marginLeft: 'auto',
|
|
marginRight: 'auto',
|
|
};
|
|
|
|
function useNotifications() {
|
|
const [notifications, setNotifications] = useState(dummyNotificationData);
|
|
|
|
useEffect(() => {
|
|
getReceivedInvitationsAndRequests().then(setNotifications);
|
|
}, []);
|
|
|
|
return notifications;
|
|
}
|
|
|
|
export default function App() {
|
|
const user = useMe();
|
|
const notifications = useNotifications();
|
|
return (
|
|
<div style={{ padding: '1rem', maxWidth: '100vw' }}>
|
|
<div style={style}>
|
|
{notifications.length > 0 ? (
|
|
<Notifications notifications={notifications} />
|
|
) : (
|
|
<span>No notifications</span>
|
|
)}
|
|
<BrowserRouter>
|
|
<Switch>
|
|
<Route
|
|
path="/"
|
|
exact
|
|
component={user ? WheelShare : WheelShareLoggedOut}
|
|
/>
|
|
<Suspense fallback={null}>
|
|
<Route path="/groups/:id" component={Group} />
|
|
<Route
|
|
component={Authenticator}
|
|
path="/auth/:provider/callback"
|
|
/>
|
|
</Suspense>
|
|
</Switch>
|
|
</BrowserRouter>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|