- {open || clazz.instructor === user.id ?
+ {open || clazz.instructor === user.id ? (
);
-};
+}
function InstructorClassEditor(props) {
const { input, setInput, error, editing } = props;
const handleValues = (e, v) => setInput({ ...input, [v.name]: v.value });
- const handleUpload = (e, v) => setInput({ ...input, [v.name]: e.target.files[0] });
const handleChange = (e) => handleValues(e, e.currentTarget);
const handleCheck = (e, v) => setInput({ ...input, [v.name]: v.checked });
- const handleDatetime = (v) => setInput({ ...input, datetime: v.utc().format() });
+ const handleDatetime = (v) =>
+ setInput({ ...input, datetime: v.utc().format() });
const makeProps = (name) => ({
name: name,
@@ -240,14 +271,11 @@ function InstructorClassEditor(props) {
});
return (
-
-
+
+
@@ -255,26 +283,31 @@ function InstructorClassEditor(props) {
- {error.datetime &&
+ {error.datetime && (
- }
+ )}
- {editing &&
-
-
- }
-
+ {editing && (
+
+
+
+
+ )}
);
}
@@ -292,45 +325,51 @@ export function InstructorClassDetail(props) {
if (loading) return;
setLoading(true);
setSuccess(false);
- requester('/sessions/'+id+'/', 'PUT', token, input)
- .then(res => {
- setSuccess(true);
- setLoading(false);
- setError(false);
- setOpen(false);
- setClass(res);
- })
- .catch(err => {
- setLoading(false);
- console.log(err);
- setError(err.data);
- });
+ requester('/sessions/' + id + '/', 'PUT', token, input)
+ .then((res) => {
+ setSuccess(true);
+ setLoading(false);
+ setError(false);
+ setOpen(false);
+ setClass(res);
+ })
+ .catch((err) => {
+ setLoading(false);
+ console.log(err);
+ setError(err.data);
+ });
};
return (
-
+
{!open && success &&
Saved!
}
- {open ?
+ {open ? (
+
+
+
+
+
Submit
- :
-
- }
+ ) : (
+
+ )}
);
-};
+}
export function InstructorClassList(props) {
const { course, setCourse, token } = props;
@@ -348,79 +387,102 @@ export function InstructorClassList(props) {
setSuccess(false);
const data = { ...input, course: course.id };
requester('/sessions/', 'POST', token, data)
- .then(res => {
- setSuccess(res.id);
- setInput({});
- setLoading(false);
- setError(false);
- setOpen(false);
- setCourse({ ...course, sessions: [ res, ...course.sessions ] });
- })
- .catch(err => {
- setLoading(false);
- console.log(err);
- setError(err.data);
- });
+ .then((res) => {
+ setSuccess(res.id);
+ setInput({});
+ setLoading(false);
+ setError(false);
+ setOpen(false);
+ setCourse({ ...course, sessions: [res, ...course.sessions] });
+ })
+ .catch((err) => {
+ setLoading(false);
+ console.log(err);
+ setError(err.data);
+ });
};
useEffect(() => {
requester('/sessions/', 'GET', token)
- .then(res => {
- setClasses(res.results.filter(x => !x.is_cancelled));
- })
- .catch(err => {
- console.log(err);
- });
+ .then((res) => {
+ setClasses(res.results.filter((x) => !x.is_cancelled));
+ })
+ .catch((err) => {
+ console.log(err);
+ });
}, []);
useEffect(() => {
- setSameClasses(classes.filter(x =>
- moment.utc(x.datetime).tz('America/Edmonton').isSame(input.datetime, 'day')
- ).sort((a, b) => a.datetime > b.datetime ? 1 : -1));
+ setSameClasses(
+ classes
+ .filter((x) =>
+ moment
+ .utc(x.datetime)
+ .tz('America/Edmonton')
+ .isSame(input.datetime, 'day')
+ )
+ .sort((a, b) => (a.datetime > b.datetime ? 1 : -1))
+ );
}, [input.datetime]);
return (
-
+
- {!open && success &&
Added! View the class.
}
+ {!open && success && (
+
+ Added!{' '}
+ View the class.
+
+ )}
- {open ?
+ {open ? (
+
Submit
- {!!input.datetime &&
+ {!!input.datetime && (
-
Upcoming Classes That Day
+
+ Upcoming Classes That Day
+
- {sameClasses.length ?
- sameClasses.map(x =>
+ {sameClasses.length ? (
+ sameClasses.map((x) => (
- {moment.utc(x.datetime).tz('America/Edmonton').format('LT')} — {x.course_name}
+ {moment
+ .utc(x.datetime)
+ .tz('America/Edmonton')
+ .format('LT')}{' '}
+ — {x.course_name}
- )
- :
+ ))
+ ) : (
None
- }
+ )}
- }
+ )}
- :
-
- }
+ ) : (
+
+ )}
);
-};
+}
diff --git a/webclient/src/InstructorCourses.js b/webclient/src/InstructorCourses.js
index 24d0fe1e..853d0c11 100644
--- a/webclient/src/InstructorCourses.js
+++ b/webclient/src/InstructorCourses.js
@@ -1,22 +1,22 @@
-import React, { useState, useEffect } from 'react';
-import { BrowserRouter as Router, Switch, Route, Link, useParams, useHistory } from 'react-router-dom';
+import React, { useState } from 'react';
+import { Link, useParams } from 'react-router-dom';
import ReactQuill from 'react-quill';
import 'react-quill/dist/quill.snow.css';
import './light.css';
-import { Button, Container, Checkbox, Divider, Dropdown, Form, Grid, Header, Icon, Image, Label, Menu, Message, Segment, Table } from 'semantic-ui-react';
-import { BasicTable, staticUrl, requester } from './utils.js';
+import { Button, Form, Header, Label } from 'semantic-ui-react';
+import { requester } from './utils.js';
function InstructorCourseEditor(props) {
const { input, setInput, error } = props;
const handleValues = (e, v) => setInput({ ...input, [v.name]: v.value });
- const handleUpload = (e, v) => setInput({ ...input, [v.name]: e.target.files[0] });
const handleChange = (e) => handleValues(e, e.currentTarget);
- const handleCheck = (e, v) => setInput({ ...input, [v.name]: v.checked });
- const handleQuill = (v, d, s, e) => s === 'user' && setInput({
- ...input,
- description: v === '
' ? '' : v,
- });
+ const handleQuill = (v, d, s, e) =>
+ s === 'user' &&
+ setInput({
+ ...input,
+ description: v === '
' ? '' : v,
+ });
const makeProps = (name) => ({
name: name,
@@ -27,39 +27,35 @@ function InstructorCourseEditor(props) {
const modules = {
toolbar: [
- [{ 'header': [3, false] }],
+ [{ header: [3, false] }],
['bold', 'italic', 'underline', 'code'],
- [{'list': 'ordered'}, {'list': 'bullet'}],
+ [{ list: 'ordered' }, { list: 'bullet' }],
['link'],
- ['clean']
+ ['clean'],
],
};
return (
-
-
+
+
- {error.description &&
+ {error.description && (
- }
+ )}
);
@@ -68,10 +64,16 @@ function InstructorCourseEditor(props) {
export function InstructorCourseDetail(props) {
const { course, setCourse, token } = props;
const [open, setOpen] = useState(false);
- const convertNewlineToPara = (t) => t.split('\n').map(x => '
'+x+'
').join('')
+ const convertNewlineToPara = (t) =>
+ t
+ .split('\n')
+ .map((x) => '
' + x + '
')
+ .join('');
const [input, setInput] = useState({
...course,
- description: course.is_old ? convertNewlineToPara(course.description) : course.description,
+ description: course.is_old
+ ? convertNewlineToPara(course.description)
+ : course.description,
});
const [error, setError] = useState(false);
const [loading, setLoading] = useState(false);
@@ -83,45 +85,50 @@ export function InstructorCourseDetail(props) {
setLoading(true);
setSuccess(false);
const data = { ...input, is_old: false };
- requester('/courses/'+id+'/', 'PUT', token, data)
- .then(res => {
- setSuccess(true);
- setLoading(false);
- setError(false);
- setOpen(false);
- setCourse({...course, ...res});
- })
- .catch(err => {
- setLoading(false);
- console.log(err);
- setError(err.data);
- });
+ requester('/courses/' + id + '/', 'PUT', token, data)
+ .then((res) => {
+ setSuccess(true);
+ setLoading(false);
+ setError(false);
+ setOpen(false);
+ setCourse({ ...course, ...res });
+ })
+ .catch((err) => {
+ setLoading(false);
+ console.log(err);
+ setError(err.data);
+ });
};
return (
-
+
{!open && success &&
Saved!
}
- {open ?
+ {open ? (
+
+
+
+
+
Submit
- :
-
- }
+ ) : (
+
+ )}
);
-};
+}
export function InstructorCourseList(props) {
const { courses, setCourses, token } = props;
@@ -137,42 +144,52 @@ export function InstructorCourseList(props) {
setSuccess(false);
const data = { ...input, is_old: false };
requester('/courses/', 'POST', token, data)
- .then(res => {
- setSuccess(res.id);
- setInput({});
- setLoading(false);
- setError(false);
- setOpen(false);
- setCourses([ ...courses, res ]);
- })
- .catch(err => {
- setLoading(false);
- console.log(err);
- setError(err.data);
- });
+ .then((res) => {
+ setSuccess(res.id);
+ setInput({});
+ setLoading(false);
+ setError(false);
+ setOpen(false);
+ setCourses([...courses, res]);
+ })
+ .catch((err) => {
+ setLoading(false);
+ console.log(err);
+ setError(err.data);
+ });
};
return (
-
+
- {!open && success &&
Added to bottom of course list! View the course.
}
+ {!open && success && (
+
+ Added to bottom of course list!{' '}
+ View the course.
+
+ )}
- {open ?
+ {open ? (
+
+
+
+
+
Submit
- :
-
- }
+ ) : (
+
+ )}
);
-};
+}
diff --git a/webclient/src/LoginSignup.js b/webclient/src/LoginSignup.js
index ec8634dc..3caa46dd 100644
--- a/webclient/src/LoginSignup.js
+++ b/webclient/src/LoginSignup.js
@@ -1,7 +1,7 @@
-import React, { useState, useEffect } from 'react';
-import { BrowserRouter as Router, Switch, Route, Link, useParams, useLocation } from 'react-router-dom';
+import React, { useState } from 'react';
+import { Link, useLocation } from 'react-router-dom';
import './light.css';
-import { Container, Divider, Dropdown, Form, Grid, Header, Icon, Image, Menu, Message, Segment, Table } from 'semantic-ui-react';
+import { Form, Header, Message } from 'semantic-ui-react';
import { requester } from './utils.js';
export function LoginForm(props) {
@@ -20,25 +20,29 @@ export function LoginForm(props) {
setLoading(true);
const data = { ...input, username: input.username.toLowerCase() };
requester('/rest-auth/login/', 'POST', '', data)
- .then(res => {
- setError({});
- props.setTokenCache(res.key);
- window.scrollTo(0, 0);
- })
- .catch(err => {
- setLoading(false);
- console.log(err);
- setError(err.data);
- });
+ .then((res) => {
+ setError({});
+ props.setTokenCache(res.key);
+ window.scrollTo(0, 0);
+ })
+ .catch((err) => {
+ setLoading(false);
+ console.log(err);
+ setError(err.data);
+ });
}
};
return (
@@ -66,11 +70,13 @@ export function LoginForm(props) {
Forgot your password?
- Click here to reset it.
+
+ Click here to reset it.
+
);
-};
+}
export function SignupForm(props) {
const [input, setInput] = useState({ email: '' });
@@ -83,46 +89,50 @@ export function SignupForm(props) {
const handleValues = (e, v) => setInput({ ...input, [v.name]: v.value });
const handleChange = (e) => handleValues(e, e.currentTarget);
- const genUsername = () => (
- input.first_name && input.last_name ?
- (input.first_name + '.' + input.last_name).toLowerCase().replace(/ /g, '.')
- :
- ''
- );
+ const genUsername = () =>
+ input.first_name && input.last_name
+ ? (input.first_name + '.' + input.last_name)
+ .toLowerCase()
+ .replace(/ /g, '.')
+ : '';
const handleSubmit = (e) => {
if (loading) return;
setLoading(true);
input.username = genUsername();
- const data = { ...input, email: input.email.toLowerCase(), bypass_code: bypass_code };
+ const data = {
+ ...input,
+ email: input.email.toLowerCase(),
+ bypass_code: bypass_code,
+ };
requester('/registration/', 'POST', '', data)
- .then(res => {
- setError({});
- props.setTokenCache(res.key);
- window.scrollTo(0, 0);
- })
- .catch(err => {
- setLoading(false);
- console.log(err);
- setError(err.data);
- });
+ .then((res) => {
+ setError({});
+ props.setTokenCache(res.key);
+ window.scrollTo(0, 0);
+ })
+ .catch((err) => {
+ setLoading(false);
+ console.log(err);
+ setError(err.data);
+ });
};
return (
+
@@ -182,4 +192,4 @@ export function SignupForm(props) {
);
-};
+}
diff --git a/webclient/src/ManageScroll.js b/webclient/src/ManageScroll.js
index ded7bec9..1f8af349 100644
--- a/webclient/src/ManageScroll.js
+++ b/webclient/src/ManageScroll.js
@@ -1,5 +1,5 @@
-import React, { useState, useEffect, useReducer, useContext } from 'react';
-import { BrowserRouter as Router, Switch, Route, Link, useParams, useHistory } from 'react-router-dom';
+import { useEffect } from 'react';
+import { useHistory } from 'react-router-dom';
let scrollPositions = {};
let timeout = null;
@@ -24,7 +24,7 @@ export function ManageScroll() {
window.addEventListener('scroll', scrollListener);
return () => {
window.removeEventListener('scroll', scrollListener);
- }
+ };
}, []);
useEffect(() => {
@@ -38,7 +38,5 @@ export function ManageScroll() {
}
}, [history.location]);
- return (
- null
- );
-};
+ return null;
+}
diff --git a/webclient/src/Members.js b/webclient/src/Members.js
index 79698a2f..d596ad64 100644
--- a/webclient/src/Members.js
+++ b/webclient/src/Members.js
@@ -1,35 +1,66 @@
import React, { useState, useEffect, useReducer } from 'react';
-import { BrowserRouter as Router, Switch, Route, Link, useParams } from 'react-router-dom';
+import { Link, useParams } from 'react-router-dom';
import './light.css';
-import { Button, Container, Divider, Dropdown, Form, Grid, Header, Icon, Image, Input, Item, Menu, Message, Segment, Table } from 'semantic-ui-react';
-import { statusColor, isAdmin, isInstructor, BasicTable, staticUrl, requester } from './utils.js';
-import { NotFound, PleaseLogin } from './Misc.js';
-import { AdminMemberInfo, AdminMemberPause, AdminMemberForm, AdminMemberCards, AdminMemberTraining, AdminMemberCertifications } from './AdminMembers.js';
+import {
+ Button,
+ Container,
+ Dropdown,
+ Grid,
+ Header,
+ Icon,
+ Image,
+ Input,
+ Item,
+ Segment,
+ Table,
+} from 'semantic-ui-react';
+import {
+ statusColor,
+ isAdmin,
+ isInstructor,
+ BasicTable,
+ staticUrl,
+ requester,
+} from './utils.js';
+import { NotFound } from './Misc.js';
+import {
+ AdminMemberInfo,
+ AdminMemberPause,
+ AdminMemberForm,
+ AdminMemberCards,
+ AdminMemberTraining,
+ AdminMemberCertifications,
+} from './AdminMembers.js';
import { AdminMemberTransactions } from './AdminTransactions.js';
export function MembersDropdown(props) {
const { token, name, onChange, value, initial } = props;
const [response, setResponse] = useState({ results: [] });
- const searchDefault = {seq: 0, q: initial || ''};
+ const searchDefault = { seq: 0, q: initial || '' };
const [search, setSearch] = useState(searchDefault);
useEffect(() => {
requester('/search/', 'POST', token, search)
- .then(res => {
- if (!search.seq || res.seq > response.seq) {
- setResponse(res);
- }
- })
- .catch(err => {
- console.log(err);
- });
+ .then((res) => {
+ if (!search.seq || res.seq > response.seq) {
+ setResponse(res);
+ }
+ })
+ .catch((err) => {
+ console.log(err);
+ });
}, [search]);
const options = response.results.map((x, i) => ({
key: x.member.id,
value: x.member.id,
text: x.member.preferred_name + ' ' + x.member.last_name,
- image: { avatar: true, src: x.member.photo_small ? staticUrl + '/' + x.member.photo_small : '/nophoto.png' },
+ image: {
+ avatar: true,
+ src: x.member.photo_small
+ ? staticUrl + '/' + x.member.photo_small
+ : '/nophoto.png',
+ },
}));
return (
@@ -41,192 +72,296 @@ export function MembersDropdown(props) {
name={name}
options={options}
value={value}
- placeholder='Search for Member'
+ placeholder="Search for Member"
onChange={onChange}
- onSearchChange={(e, v) => setSearch({seq: parseInt(e.timeStamp), q: v.searchQuery})}
+ onSearchChange={(e, v) =>
+ setSearch({ seq: parseInt(e.timeStamp), q: v.searchQuery })
+ }
/>
-
);
-};
+}
let searchCache = '';
export function Members(props) {
const [response, setResponse] = useState(false);
- const searchDefault = {seq: 0, q: searchCache};
+ const searchDefault = { seq: 0, q: searchCache };
const [search, setSearch] = useState(searchDefault);
const { token } = props;
useEffect(() => {
searchCache = search.q;
requester('/search/', 'POST', token, search)
- .then(res => {
- if (!search.seq || res.seq > response.seq) {
- setResponse(res);
- }
- })
- .catch(err => {
- console.log(err);
- });
+ .then((res) => {
+ if (!search.seq || res.seq > response.seq) {
+ setResponse(res);
+ }
+ })
+ .catch((err) => {
+ console.log(err);
+ });
}, [search]);
return (
-
+
Search by name, email, or member ID:
- setSearch({seq: parseInt(e.timeStamp), q: v.value})}
- aria-label='search products'
+ onChange={(e, v) =>
+ setSearch({ seq: parseInt(e.timeStamp), q: v.value })
+ }
+ aria-label="search products"
style={{ marginRight: '0.5rem' }}
/>
- {search.q.length ?
+ {search.q.length ? (
);
-};
+}
let resultCache = {};
export function MemberDetail(props) {
const { id } = useParams();
const [result, setResult] = useState(resultCache[id] || false);
- const [refreshCount, refreshResult] = useReducer(x => x + 1, 0);
+ const [refreshCount, refreshResult] = useReducer((x) => x + 1, 0);
const [error, setError] = useState(false);
const { token, user } = props;
useEffect(() => {
- requester('/search/'+id+'/', 'GET', token)
- .then(res => {
- setResult(res);
- resultCache[id] = res;
- })
- .catch(err => {
- console.log(err);
- setError(true);
- });
+ requester('/search/' + id + '/', 'GET', token)
+ .then((res) => {
+ setResult(res);
+ resultCache[id] = res;
+ })
+ .catch((err) => {
+ console.log(err);
+ setError(true);
+ });
}, [refreshCount]);
const member = result.member || false;
return (
- {!error ?
- member ?
+ {!error ? (
+ member ? (
-
{member.preferred_name} {member.last_name}
+
+ {member.preferred_name} {member.last_name}
+
-
+
- {isAdmin(user) ?
-
- :
+ {isAdmin(user) ? (
+
+ ) : (
- Status:
-
- {member.status || 'Unknown'}
+ Status:
+
+
+
+ {member.status ||
+ 'Unknown'}
- Joined:
- {member.application_date || 'Unknown'}
+
+ Joined:
+
+
+ {member.application_date ||
+ 'Unknown'}
+
- Public Bio:
+
+ Public Bio:
+
-
+
{member.public_bio || 'None yet.'}
- }
+ )}
- {isInstructor(user) && !isAdmin(user) &&
-
- }
-
- {isAdmin(user) &&
-
- }
-
- {isAdmin(user) &&
-
- }
+ {isInstructor(user) && !isAdmin(user) && (
+
+
+
+ )}
+
+ {isAdmin(user) && (
+
+
+
+ )}
+
+ {isAdmin(user) && (
+
+
+
+ )}
- {isAdmin(user) &&
-
- }
-
- {isAdmin(user) &&
-
- }
-
- {isAdmin(user) &&
-
- }
-
- {isAdmin(user) &&
-
- }
-
+ {isAdmin(user) && (
+
+
+
+ )}
+
+ {isAdmin(user) && (
+
+
+
+ )}
+
+ {isAdmin(user) && (
+
+
+
+ )}
+
+ {isAdmin(user) && (
+
+
+
+ )}
- :
+ ) : (
Loading...
- :
+ )
+ ) : (
- }
+ )}
);
-};
-
+}
diff --git a/webclient/src/Misc.js b/webclient/src/Misc.js
index cf1a4f70..e5678f99 100644
--- a/webclient/src/Misc.js
+++ b/webclient/src/Misc.js
@@ -1,37 +1,48 @@
-import React, { useState, useEffect } from 'react';
-import { BrowserRouter as Router, Switch, Route, Link, useParams } from 'react-router-dom';
+import React from 'react';
+import { Link } from 'react-router-dom';
import './light.css';
-import { Container, Divider, Dropdown, Form, Grid, Header, Icon, Image, Menu, Message, Segment, Table } from 'semantic-ui-react';
+import { Container, Message } from 'semantic-ui-react';
export function PleaseLogin() {
return (
- You must login before you can do that!
- Visit our login page, then try again.
+
+ You must login before you can do that!
+
+
+ Visit our login page, then try again.
+
-
+
Space shuttle Endeavour, NASA (2011)
);
-};
+}
export function NotFound() {
return (
- The page you requested can't be found!
- Visit our home page if you are lost.
+
+ The page you requested can't be found!
+
+
+ Visit our home page if you are lost.
+
-
+
Space shuttle Endeavour, NASA (2011)
);
-};
-
+}
diff --git a/webclient/src/PasswordReset.js b/webclient/src/PasswordReset.js
index 5f8e76ad..063ad7bc 100644
--- a/webclient/src/PasswordReset.js
+++ b/webclient/src/PasswordReset.js
@@ -1,8 +1,7 @@
-import React, { useState, useEffect, useReducer, useContext } from 'react';
-import { BrowserRouter as Router, Switch, Route, Link, useParams, useHistory } from 'react-router-dom';
-import { Button, Container, Checkbox, Dimmer, Divider, Dropdown, Form, Grid, Header, Icon, Image, Menu, Message, Segment, Table } from 'semantic-ui-react';
-import { apiUrl, statusColor, BasicTable, staticUrl, requester } from './utils.js';
-import { NotFound } from './Misc.js';
+import React, { useState } from 'react';
+import { useParams, useHistory } from 'react-router-dom';
+import { Container, Form, Grid, Header, Message } from 'semantic-ui-react';
+import { requester } from './utils.js';
function ResetForm() {
const [input, setInput] = useState({});
@@ -17,38 +16,31 @@ function ResetForm() {
if (loading) return;
setLoading(true);
requester('/password/reset/', 'POST', '', input)
- .then(res => {
- setLoading(false);
- setSuccess(true);
- setError({});
- })
- .catch(err => {
- setLoading(false);
- console.log(err);
- setError(err.data);
- });
+ .then((res) => {
+ setLoading(false);
+ setSuccess(true);
+ setError({});
+ })
+ .catch((err) => {
+ setLoading(false);
+ console.log(err);
+ setError(err.data);
+ });
};
- const makeProps = (name) => ({
- name: name,
- onChange: handleChange,
- value: input[name] || '',
- error: error[name],
- });
-
return (
-
@@ -57,7 +49,7 @@ function ResetForm() {
{success && Success! Be sure to check your spam folder.
}
);
-};
+}
function ConfirmForm() {
const { uid, token } = useParams();
@@ -74,18 +66,18 @@ function ConfirmForm() {
if (loading) return;
setLoading(true);
requester('/password/reset/confirm/', 'POST', '', input)
- .then(res => {
- setLoading(false);
- setSuccess(true);
- setError({});
- history.push('/');
- window.scrollTo(0, 0);
- })
- .catch(err => {
- setLoading(false);
- console.log(err);
- setError(err.data);
- });
+ .then((res) => {
+ setLoading(false);
+ setSuccess(true);
+ setError({});
+ history.push('/');
+ window.scrollTo(0, 0);
+ })
+ .catch((err) => {
+ setLoading(false);
+ console.log(err);
+ setError(err.data);
+ });
};
const makeProps = (name) => ({
@@ -98,17 +90,21 @@ function ConfirmForm() {
return (
- {(error.token || error.uid) && Error: Invalid password reset URL! Try doing another reset.
}
+ {(error.token || error.uid) && (
+
+ Error: Invalid password reset URL! Try doing another reset.
+
+ )}
Submit
@@ -116,17 +112,17 @@ function ConfirmForm() {
{success && Success!
}
);
-};
-
+}
export function PasswordReset() {
return (
-
+
- Enter your email and we will send you a password reset link.
+ Enter your email and we will send you a password reset
+ link.
@@ -134,21 +130,19 @@ export function PasswordReset() {
);
-};
+}
export function ConfirmReset() {
return (
-
+
-
- Choose a new password.
-
+ Choose a new password.
);
-};
+}
diff --git a/webclient/src/Paste.js b/webclient/src/Paste.js
index f8ba1180..8dbd2785 100644
--- a/webclient/src/Paste.js
+++ b/webclient/src/Paste.js
@@ -1,8 +1,6 @@
-import React, { useState, useEffect, useReducer, useContext } from 'react';
-import { BrowserRouter as Router, Switch, Route, Link, useParams, useHistory } from 'react-router-dom';
-import { Button, Container, Checkbox, Dimmer, Divider, Dropdown, Form, Grid, Header, Icon, Image, Menu, Message, Segment, Table } from 'semantic-ui-react';
-import { apiUrl, statusColor, BasicTable, staticUrl, requester } from './utils.js';
-import { NotFound } from './Misc.js';
+import React, { useState, useEffect, useReducer } from 'react';
+import { Button, Container, Form, Header } from 'semantic-ui-react';
+import { requester } from './utils.js';
function PasteForm(props) {
const { token, input, setInput } = props;
@@ -17,17 +15,17 @@ function PasteForm(props) {
if (loading) return;
setLoading(true);
requester('/paste/', 'POST', token, input)
- .then(res => {
- setLoading(false);
- setSuccess(true);
- setError({});
- setInput(res);
- })
- .catch(err => {
- setLoading(false);
- console.log(err);
- setError(err.data);
- });
+ .then((res) => {
+ setLoading(false);
+ setSuccess(true);
+ setError({});
+ setInput(res);
+ })
+ .catch((err) => {
+ setLoading(false);
+ console.log(err);
+ setError(err.data);
+ });
};
const makeProps = (name) => ({
@@ -45,53 +43,54 @@ function PasteForm(props) {
{...makeProps('paste')}
/>
- {!!token &&
- Submit
- }
+ {!!token && (
+
+ Submit
+
+ )}
{success && Success!
}
);
-};
+}
let pasteCache = 'Loading...';
export function Paste(props) {
const { token } = props;
const [input, setInput] = useState({ paste: pasteCache });
- const [refreshCount, refreshPaste] = useReducer(x => x + 1, 0);
+ const [refreshCount, refreshPaste] = useReducer((x) => x + 1, 0);
useEffect(() => {
requester('/paste/', 'GET', token)
- .then(res => {
- setInput({ paste: res.paste });
- pasteCache = res.paste;
- })
- .catch(err => {
- console.log(err);
- });
+ .then((res) => {
+ setInput({ paste: res.paste });
+ pasteCache = res.paste;
+ })
+ .catch((err) => {
+ console.log(err);
+ });
}, [refreshCount]);
return (
-
+
- Use this to quickly share info with people across devices.
- For example: your LAN party server IP address, a config file,
- a public key, an Arduino sketch, or a URL.
+ Use this to quickly share info with people across devices. For
+ example: your LAN party server IP address, a config file, a
+ public key, an Arduino sketch, or a URL.
- Members can write, anyone can read. Everyone shares what's below.
+ Members can write, anyone can read. Everyone shares what's
+ below.
-
+
);
-};
+}
diff --git a/webclient/src/PayPal.js b/webclient/src/PayPal.js
index db58e448..5ea9cf2f 100644
--- a/webclient/src/PayPal.js
+++ b/webclient/src/PayPal.js
@@ -1,25 +1,49 @@
-import React, { useState, useEffect, useReducer } from 'react';
+import React from 'react';
export function PayPalPayNow(props) {
const { amount, custom, name } = props;
return (
-