Skip to content

Commit bb14097

Browse files
Merge pull request #22 from Aksh-Bansal-dev/patch-4
Latest
2 parents dd40fb3 + 00adeb6 commit bb14097

69 files changed

Lines changed: 2450 additions & 161 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CONTRIBUTING.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ commit messages are standardized:
3636
- Run `npm install` to install all dependencies
3737
- Make a `.env` file with all secrets. You also need to generate google client id and secret key. You may refer [to this](https://developers.google.com/identity/protocols/oauth2https://developers.google.com/adwords/api/docs/guides/authentication#create_a_client_id_and_client_secret) for the steps.
3838
> Note: Put `<server_url>/api/auth/google/redirect` in redirect url when generating google client id and secret.
39+
- You also need to generate access token and refresh token for sending emails. Follow [this guide](https://www.freecodecamp.org/news/use-nodemailer-to-send-emails-from-your-node-js-server/) to generate you own.
3940
- Run `npm run dev` to start server
4041

4142
### Frontend setup

frontend/package.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,25 @@
22
"name": "frontend",
33
"version": "0.1.0",
44
"private": true,
5+
"homepage": ".",
56
"dependencies": {
7+
"@date-io/date-fns": "1.x",
68
"@material-ui/core": "^4.11.4",
79
"@material-ui/icons": "^4.11.2",
810
"@material-ui/lab": "^4.0.0-alpha.58",
11+
"@material-ui/pickers": "^3.3.10",
912
"@testing-library/jest-dom": "^5.11.4",
1013
"@testing-library/react": "^11.1.0",
1114
"@testing-library/user-event": "^12.1.10",
15+
"date-fns": "^2.22.1",
1216
"formik": "^2.2.6",
17+
"jwt-decode": "^3.1.2",
1318
"query-string": "^7.0.0",
1419
"react": "^17.0.1",
1520
"react-dom": "^17.0.1",
1621
"react-router-dom": "^5.2.0",
1722
"react-scripts": "^4.0.3",
23+
"react-swipeable-views": "^0.13.9",
1824
"swr": "^0.5.6",
1925
"web-vitals": "^0.2.4",
2026
"yup": "^0.32.9",
@@ -48,10 +54,12 @@
4854
]
4955
},
5056
"devDependencies": {
57+
"@types/jwt-decode": "^3.1.0",
5158
"@types/node": "^15.0.2",
5259
"@types/react": "^17.0.5",
5360
"@types/react-dom": "^17.0.3",
5461
"@types/react-router-dom": "^5.1.7",
62+
"@types/react-swipeable-views": "^0.13.0",
5563
"@typescript-eslint/eslint-plugin": "^4.23.0",
5664
"@typescript-eslint/parser": "^4.23.0",
5765
"eslint": "^7.26.0",

frontend/src/App.css

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
html,
22
body {
3+
width: 100vw;
34
margin: 0;
45
padding: 0;
56
overflow-x: hidden;
@@ -13,6 +14,7 @@ body {
1314
--background-gradient: linear-gradient(to bottom right, #3650c7, #42abdc);
1415
--golden: #ffac2f;
1516
--dark-golden: #ff9c08;
17+
--light-golden: #ffd166;
1618
}
1719

1820
body::-webkit-scrollbar {

frontend/src/App.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { updateAccessToken } from "./utils/updateAccessToken";
44
import Backdrop from "@material-ui/core/Backdrop";
55
import CircularProgress from "@material-ui/core/CircularProgress";
66
import { makeStyles, createStyles, Theme } from "@material-ui/core/styles";
7+
import useTokenStore from "./store/tokenStore";
78

89
const useStyles = makeStyles((theme: Theme) =>
910
createStyles({
@@ -17,9 +18,10 @@ const useStyles = makeStyles((theme: Theme) =>
1718
const App: React.FC = () => {
1819
const classes = useStyles();
1920
const [loading, setLoading] = React.useState(true);
21+
const setToken = useTokenStore((state) => state.setToken);
2022
React.useEffect(() => {
21-
updateAccessToken(setLoading);
22-
});
23+
updateAccessToken(setToken, setLoading);
24+
}, []);
2325
return (
2426
<>
2527
<Routes />

frontend/src/Routes.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,18 @@ import Registration from "./pages/Registration";
88
import GoogleRedirect from "./pages/GoogleRedirect";
99
import Meeting from "./pages/Meeting";
1010
import { updateAccessToken } from "./utils/updateAccessToken";
11+
import useTokenStore from "./store/tokenStore";
1112

13+
const REFRESH_TIME_MS = 50 * 60 * 1000;
1214
const Routes: React.FC = () => {
13-
const REFRESH_TIME_MS = 60 * 60 * 1000;
15+
const accessToken = useTokenStore((state) => state.token);
16+
const setToken = useTokenStore((state) => state.setToken);
1417
React.useEffect(() => {
1518
const interval = setInterval(() => {
16-
console.log("Refreshing token...");
17-
updateAccessToken();
19+
if (!!accessToken) {
20+
console.log("Refreshing token...");
21+
updateAccessToken(setToken);
22+
}
1823
}, REFRESH_TIME_MS);
1924

2025
// This represents the unmount function, in which you need to clear your interval to prevent memory leaks.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { IconButton, IconButtonProps } from "@material-ui/core";
2+
import { ArrowBack } from "@material-ui/icons";
3+
import React from "react";
4+
import { useHistory } from "react-router";
5+
6+
type BackButtonProps = {
7+
//
8+
} & IconButtonProps;
9+
const BackButton: React.FC<BackButtonProps> = ({ ...props }) => {
10+
const history = useHistory();
11+
const handleClick = () => {
12+
history.push("/");
13+
};
14+
return (
15+
<>
16+
<IconButton onClick={handleClick} {...props}>
17+
<ArrowBack />
18+
</IconButton>
19+
</>
20+
);
21+
};
22+
23+
export default BackButton;

frontend/src/components/Cards/DomainCard.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const useStyles = makeStyles(() =>
1515
margin: "1vh",
1616
height: "38vh",
1717
width: "30vh",
18-
background: "#FFD166",
18+
background: "#ffd166",
1919
},
2020
title: {
2121
fontSize: "1.2rem",
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import "date-fns";
2+
import DateFnsUtils from "@date-io/date-fns";
3+
import { Grid } from "@material-ui/core";
4+
import {
5+
MuiPickersUtilsProvider,
6+
KeyboardDatePicker,
7+
KeyboardTimePicker,
8+
} from "@material-ui/pickers";
9+
import { FieldHookConfig, useField, useFormikContext } from "formik";
10+
import React from "react";
11+
12+
type FormikDateTimeFieldProps = {
13+
// eslint-disable-next-line @typescript-eslint/ban-types
14+
} & FieldHookConfig<string>;
15+
16+
const FormikDateTimeField: React.FC<FormikDateTimeFieldProps> = ({
17+
...props
18+
}) => {
19+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
20+
const [field, meta] = useField<any>(props);
21+
const { setFieldValue } = useFormikContext();
22+
const errorText = meta.error && meta.touched ? meta.error : "";
23+
// const obj = {
24+
// label,
25+
// type,
26+
// };
27+
return (
28+
<MuiPickersUtilsProvider utils={DateFnsUtils}>
29+
<Grid container direction="column" justify="center">
30+
<KeyboardDatePicker
31+
{...field}
32+
margin="normal"
33+
id="date-picker-dialog"
34+
label="Date"
35+
format="MM/dd/yyyy"
36+
helperText={errorText}
37+
error={!!errorText}
38+
onChange={(val) => setFieldValue(field.name, val)}
39+
KeyboardButtonProps={{
40+
"aria-label": "change date",
41+
}}
42+
/>
43+
<KeyboardTimePicker
44+
{...field}
45+
margin="normal"
46+
id="time-picker"
47+
label="Time"
48+
helperText={errorText}
49+
onChange={(val) => setFieldValue(field.name, val)}
50+
error={!!errorText}
51+
KeyboardButtonProps={{
52+
"aria-label": "change time",
53+
}}
54+
/>
55+
</Grid>
56+
</MuiPickersUtilsProvider>
57+
);
58+
};
59+
60+
export default FormikDateTimeField;
File renamed without changes.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import { IconButton, IconButtonProps } from "@material-ui/core";
2+
import { Create } from "@material-ui/icons";
3+
import React from "react";
4+
import { createStyles, makeStyles } from "@material-ui/core/styles";
5+
import MeetingForm from "./meetingStuff/MeetingForm";
6+
import PollForm from "./pollStuff/PollForm";
7+
8+
const useStyles = makeStyles(() =>
9+
createStyles({
10+
root: {
11+
background: "rgba(255, 255, 255, 0.5)",
12+
position: "fixed",
13+
bottom: "20px",
14+
right: "20px",
15+
zIndex: 3,
16+
},
17+
})
18+
);
19+
20+
type CreateButtonProps = {
21+
formType: number;
22+
} & IconButtonProps;
23+
const CreateButton: React.FC<CreateButtonProps> = ({ formType, ...props }) => {
24+
const classes = useStyles();
25+
const [formOpen, setFormOpen] = React.useState(false);
26+
const forms = [
27+
<MeetingForm open={formOpen} close={() => setFormOpen(false)} />,
28+
<PollForm open={formOpen} close={() => setFormOpen(false)} />,
29+
];
30+
return (
31+
<>
32+
<IconButton
33+
color="inherit"
34+
className={classes.root}
35+
onClick={() => setFormOpen(true)}
36+
{...props}
37+
>
38+
<Create />
39+
</IconButton>
40+
{forms[formType]}
41+
</>
42+
);
43+
};
44+
45+
export default CreateButton;

0 commit comments

Comments
 (0)