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 ( <>