From e93c9369676fae70dc2d3808deadd36fe88a079f Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Sun, 12 Jul 2020 03:10:23 +0000 Subject: [PATCH] Display and vet members ready to be vetted --- webclient/src/Admin.js | 104 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 103 insertions(+), 1 deletion(-) diff --git a/webclient/src/Admin.js b/webclient/src/Admin.js index 32f64d3..5828818 100644 --- a/webclient/src/Admin.js +++ b/webclient/src/Admin.js @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react'; +import React, { useState, useEffect, useReducer } from 'react'; import { BrowserRouter as Router, Switch, Route, Link, useParams, useHistory } from 'react-router-dom'; import './light.css'; import { Button, Container, Checkbox, Dimmer, Divider, Dropdown, Form, Grid, Header, Icon, Image, Menu, Message, Segment, Table } from 'semantic-ui-react'; @@ -6,10 +6,108 @@ import moment from 'moment-timezone'; import { apiUrl, statusColor, BasicTable, staticUrl, requester } from './utils.js'; import { NotFound } from './Misc.js'; +let vettingCache = false; let historyCache = false; let excludeSystemCache = true; let focusCache = false; + +export function AdminVet(props) { + const { token, user, member, refreshVetting } = props; + const [loading, setLoading] = useState(false); + const [yousure, setYousure] = useState(false); + + const handleVet = (e) => { + e.preventDefault(); + + if (yousure) { + setLoading(true); + const data = {vetted_date: moment.utc().tz('America/Edmonton').format('YYYY-MM-DD')} + requester('/members/' + member.id + '/', 'PATCH', token, data) + .then(res => { + refreshVetting(); + }) + .catch(err => { + console.log(err); + }); + } else { + setYousure(true); + } + }; + + return ( + + ); +} + +export function AdminVetting(props) { + const { token, user } = props; + const [vetting, setVetting] = useState(vettingCache); + const [refreshCount, refreshVetting] = useReducer(x => x + 1, 0); + const [error, setError] = useState(false); + + useEffect(() => { + requester('/vetting/', 'GET', token) + .then(res => { + setVetting(res.results); + vettingCache = res.results; + }) + .catch(err => { + console.log(err); + }); + }, [refreshCount]); + + return ( +
+ {!error ? + vetting ? + <> + + + + Name + + Status + Start Date + + + + + + {vetting.map(x => + + {x.first_name} {x.last_name} + Email + + + {x.status || 'Unknown'} + + {x.current_start_date} + + + )} + +
+ +

+ ↳ x.email).join(',')}>Email All +

+ + : +

Loading...

+ : +

Error loading.

+ } +
+ ); +} + export function AdminHistory(props) { const { token, user } = props; const [history, setHistory] = useState(historyCache); @@ -166,6 +264,10 @@ export function Admin(props) {
Portal Admin
+
Ready to Vet
+

Members who are Current or Due, and past their probationary period.

+ +
Member Data Backup

Spaceport backups are created daily. 14 days are kept on the server.