import React, { useState, useEffect, useReducer } from 'react'; import { BrowserRouter as Router, Switch, Route, Link, useParams, useLocation } 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 { AdminMemberTransactions } from './AdminTransactions.js'; const memberSorts = { recently_vetted: 'Recently Vetted', newest_active: 'Newest Active', newest_overall: 'Newest Overall', best_looking: 'Best Looking', oldest_active: 'Oldest Active', oldest_overall: 'Oldest Overall', recently_inactive: 'Recently Inactive', }; export function MembersDropdown(props) { const { token, name, onChange, value, initial } = props; const [response, setResponse] = useState({ results: [] }); 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); }); }, [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' }, })); return ( setSearch({seq: parseInt(e.timeStamp), q: v.searchQuery})} /> ); }; let searchCache = ''; let numShowCache = 20; export function Members(props) { const qs = useLocation().search; const params = new URLSearchParams(qs); const sort = params.get('sort') || 'recently_vetted'; const [response, setResponse] = useState(false); const [numShow, setNumShow] = useState(numShowCache); const searchDefault = {seq: 0, q: searchCache}; const [search, setSearch] = useState(searchDefault); const { token } = props; console.log(sort); useEffect(() => { setResponse(false); searchCache = search.q; search.sort = sort; requester('/search/', 'POST', token, search) .then(res => { if (!search.seq || res.seq > response.seq) { setResponse(res); } }) .catch(err => { console.log(err); }); }, [search, sort]); useEffect(() => { setSearch({seq: 0, q: ''}); }, [sort]); return (
Member List

Search by name, email, or member ID:

setSearch({seq: parseInt(e.timeStamp), q: v.value})} aria-label='search products' style={{ marginRight: '0.5rem' }} /> {search.q.length ?