import { Meteor } from 'meteor/meteor'; import React, { useState, useEffect } from 'react'; import { useTracker } from 'meteor/react-meteor-data'; import { useTheme } from '@mui/material/styles'; import _ from 'lodash'; import SimpleTable from "/imports/ui/util/SimpleTable"; import TextField from "@mui/material/TextField"; import Button from "@mui/material/Button"; import Select from '@mui/material/Select'; import Chip from '@mui/material/Chip'; import MenuItem from '@mui/material/MenuItem'; import {InputLabel, List, ListItem, ListItemButton, ListItemText} from "@mui/material"; import Box from "@mui/material/Box"; import OutlinedInput from '@mui/material/OutlinedInput'; import FormControl from '@mui/material/FormControl'; import ToggleButton from '@mui/material/ToggleButton'; import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'; import {useNavigate} from "react-router-dom"; import {Students} from "/imports/api/students"; import {Staff} from "/imports/api/staff"; import {Assets} from "/imports/api/assets"; import Dialog from "@mui/material/Dialog"; import DialogTitle from "@mui/material/DialogTitle"; import DialogContent from "@mui/material/DialogContent"; import DialogActions from "@mui/material/DialogActions"; import Paper from "@mui/material/Paper"; import InputBase from "@mui/material/InputBase"; import IconButton from "@mui/material/IconButton"; import SearchIcon from "@mui/icons-material/Search"; export default () => { const navigate = useNavigate() const [searchType, setSearchType] = useState("email") const [value, setValue] = useState("") const search = async () => { if(searchType === 'email' || searchType === 'firstName' || searchType === 'lastName') { if (value && value.length > 1) { let query = searchType === 'email' ? {email: {$regex: value, $options: 'i'}} : searchType === 'firstName' ? {firstName: {$regex: value, $options: 'i'}} : {lastName: {$regex: value, $options: 'i'}} let students = await Students.find(query).fetchAsync() let staff = await Staff.find(query).fetchAsync() let all = [...staff, ...students] if (all.length > 1) { setPeopleToPickFrom(all) setOpenPickPersonDialog(true) } else if (all.length === 1) { navigate("/search?" + (students.length ? "studentId" : 'staffId') + "=" + encodeURIComponent(all[0]._id)); } } } else if(searchType === 'assetId' || searchType === 'serial') { let asset = await Assets.findOneAsync(searchType === 'assetId' ? {assetId: value.toUpperCase()} : {serial : value}); console.log(asset) if(asset) { if(searchType === 'assetId') navigate("/search?assetId=" + encodeURIComponent(asset.assetId.toUpperCase())) else navigate("/search?serial=" + encodeURIComponent(asset.serial)) } } } Meteor.subscribe('students'); Meteor.subscribe('staff'); Meteor.subscribe('assets'); const [openPickPersonDialog, setOpenPickPersonDialog] = useState(false) const [peopleToPickFrom, setPeopleToPickFrom] = useState([]) const pickPersonClosed = (cause, person) => { if(openPickPersonDialog) setOpenPickPersonDialog(false) if(person && person._id) { navigate("/search?" + (person.grade ? "studentId" : 'staffId') + "=" + encodeURIComponent(person._id)); } } const inputKeyPress = (e) => { if(e.key === 'Enter' && value.length > 0) { search() } } return ( <> Pick One {peopleToPickFrom.map((next, i) => { return ( {pickPersonClosed("selection", next)}}> ) })}
{/**/} {/*
*/} {/* setResultType(type)} aria-label="Result Type">*/} {/* Usage History*/} {/* Assignment History*/} {/* */} {/*
*/}
setSearchType(type)} aria-label="Search Type"> Email First Name Last Name Asset ID Serial
{setValue(e.target.value)}} sx={{ ml: 1, flex: 1 }} placeholder="Value" inputProps={{ 'aria-label': 'Search Value' }}/>
{/*
*/}
) }