import React, { useState, useEffect } 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'; import moment from 'moment'; import { statusColor, BasicTable, staticUrl, requester } from './utils.js'; import { NotFound } from './Misc.js'; function AdminCardDetail(props) { const { token, result, card } = props; const [input, setInput] = useState({ ...card }); const [error, setError] = useState(false); const [loading, setLoading] = useState(false); const [success, setSuccess] = useState(false); const id = card.id; 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 handleSubmit = (e) => { if (loading) return; setLoading(true); setSuccess(false); const data = { ...input, member_id: result.member.id }; requester('/cards/'+id+'/', 'PUT', token, data) .then(res => { setLoading(false); setSuccess(true); setError(false); setInput(res); }) .catch(err => { setLoading(false); console.log(err); setError(err.data); }); }; const handleDelete = (e) => { e.preventDefault(); requester('/cards/'+id+'/', 'DELETE', token) .then(res => { setInput(false); }) .catch(err => { console.log(err); }); }; const makeProps = (name) => ({ name: name, onChange: handleChange, value: input[name] || '', error: error[name], }); const statusOptions = [ { key: '0', text: 'Card Active', value: 'card_active' }, { key: '1', text: 'Card Blocked', value: 'card_blocked' }, { key: '2', text: 'Card Inactive', value: 'card_inactive' }, { key: '3', text: 'Card Member Blocked', value: 'card_member_blocked' }, ]; return ( input ?
{success ? 'Saved.' : 'Save'} Delete Notes: {input.notes || 'None'}, Last Seen: {input.last_seen_at || 'Unknown'}
: Deleted card: {card.card_number} ); }; export function AdminMemberCards(props) { const { token, result, refreshResult } = props; const cards = result.cards; const startDimmed = Boolean(result.member.paused_date && cards.length); const [dimmed, setDimmed] = useState(startDimmed); const [input, setInput] = useState({ active_status: 'card_active' }); const [error, setError] = useState(false); const [loading, setLoading] = useState(false); const [success, setSuccess] = useState(false); const { id } = useParams(); useEffect(() => { const startDimmed = Boolean(result.member.paused_date && cards.length); setDimmed(startDimmed); }, [result.member]); 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 handleSubmit = (e) => { if (loading) return; setLoading(true); setSuccess(false); const data = { ...input, member_id: result.member.id }; requester('/cards/', 'POST', token, data) .then(res => { setLoading(false); setSuccess(true); setError(false); refreshResult(); }) .catch(err => { setLoading(false); console.log(err); setError(err.data); }); }; const makeProps = (name) => ({ name: name, onChange: handleChange, value: input[name] || '', error: error[name], }); const statusOptions = [ { key: '0', text: 'Card Active', value: 'card_active' }, { key: '1', text: 'Card Blocked', value: 'card_blocked' }, { key: '2', text: 'Card Inactive', value: 'card_inactive' }, { key: '3', text: 'Card Member Blocked', value: 'card_member_blocked' }, ]; return (
Edit Member Cards
Add a Card
Submit {success &&
Success!
}
Current Cards
{cards.length ? cards.map(x => ) :

None

}

Member paused, {cards.length} card{cards.length === 1 ? '' : 's'} ignored anyway.

); }; export function AdminMemberPause(props) { const { token, result, refreshResult } = props; const [error, setError] = useState(false); const [loading, setLoading] = useState(false); const [success, setSuccess] = useState(false); const [yousure, setYousure] = useState(false); const { id } = useParams(); useEffect(() => { setLoading(false); }, [result.member]); const handlePause = (e) => { if (yousure) { if (loading) return; setLoading(true); setSuccess(false); requester('/members/' + id + '/pause/', 'POST', token, {}) .then(res => { setYousure(false); setSuccess(true); setError(false); refreshResult(); }) .catch(err => { setLoading(false); console.log(err); setError(true); }); } else { setYousure(true); } }; const handleUnpause = (e) => { if (loading) return; setLoading(true); setSuccess(false); requester('/members/' + id + '/unpause/', 'POST', token, {}) .then(res => { setSuccess(true); setError(false); refreshResult(); }) .catch(err => { setLoading(false); console.log(err); setError(true); }); }; return (
Pause / Unpause Membership

Pause members who are inactive, former, or on vacation.

{result.member.paused_date ? : }

{success &&
Success!
} {error &&

Error, something went wrong.

}
); }; export function AdminMemberForm(props) { const { token, result, refreshResult } = props; const [input, setInput] = useState(result.member); const [error, setError] = useState(false); const [loading, setLoading] = useState(false); const [success, setSuccess] = useState(false); const { id } = useParams(); useEffect(() => { setInput(result.member); }, [result.member]); 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 handleSubmit = (e) => { if (loading) return; setLoading(true); setSuccess(false); const data = { ...input, email: input.email.toLowerCase() }; requester('/members/' + id + '/', 'PATCH', token, data) .then(res => { setLoading(false); setSuccess(true); setError(false); refreshResult(); }) .catch(err => { setLoading(false); console.log(err); setError(err.data); }); }; const makeProps = (name) => ({ name: name, onChange: handleChange, value: input[name] || '', error: error[name], }); return (
Edit Member Details
Submit {success &&
Success!
}
); }; export function AdminMemberInfo(props) { const member = props.result.member; return (
Admin Details
Name: {member.first_name} {member.last_name} Status: {member.status || 'Unknown'} Expire Date: {member.expire_date} {member.paused_date && Paused Date: {member.paused_date} } Phone: {member.phone} Address: {member.street_address} City: {member.city} Postal: {member.postal_code} Minor: {member.is_minor ? 'Yes' : 'No'} {member.is_minor && Birthdate: {member.birthdate} } {member.is_minor && Guardian: {member.guardian_name} } Emergency Contact Name: {member.emergency_contact_name || 'None'} Emergency Contact Phone: {member.emergency_contact_phone || 'None'} {member.member_forms &&

View application forms

}
); };