import React, { useRef } from 'react'; import superagent from 'superagent'; import { Message, Segment, Grid, Header, Icon, Button, Table, Form, Divider, Label, Transition } from 'semantic-ui-react' import * as ApiUtils from '../CloudApi/ApiUtils.js'; import BigApiErrorMessage from '../CloudApi/BigApiErrorMessage.jsx'; import HandScannerInput from '../Util/HandScannerInput.jsx'; import InventoryWrapper from './InventoryWrapper.jsx'; import InventoryItemComponent from './InventoryItemComponent.jsx'; export default class InventoryScanIngest extends React.Component { constructor(props) { super(props); this.state = { savedQueries: [], newItemSerialNumber: "", scannedSerialNumber: "", shiftKeyPressed: false, autoCreateItems: true, error: null }; } async componentDidMount() { this.setState({ menuLoading: true }); let schemas = await ApiUtils.getFabricatorSchemas(); this.setState({ schemas }); } async onScannedSerialNumberFinished(scannedSerialNumber) { if (scannedSerialNumber.startsWith("bs")) { scannedSerialNumber = scannedSerialNumber.toUpperCase(); } this.setState({ loading: true, scannedSerialNumber: "", error: null }); try { this.setState({ message: null, loading: true, newItemSerialNumber: "", scannedSerialNumber: "", items: [], createdInventoryItem: null }); const res = await superagent.get(`/api/admin/inventory/items?serialNumber=${scannedSerialNumber}`); this.setState({ items: res.body.items, menuLoading: false }); if (res.body.items.length === 0) { const res2 = await superagent.get(`/api/admin/inventory/hint?serialNumber=${scannedSerialNumber}`); console.log(res2.body); if (res2.body.hint === "Unknown") { this.setState({ error: "Unrecognised serial number: " + scannedSerialNumber }); const audio = new Audio("/misc/Error1.wav"); audio.play(); } else { this.setState({ hint: res2.body.hint, newItemSerialNumber: scannedSerialNumber, loading: false }); if (this.state.autoCreateItems) { setTimeout(this.onCreateBigInventoryItem.bind(this), 1000); } } } else { const audio = new Audio("/misc/Alert1.wav"); audio.play(); } } catch (ex) { this.setState({ error: ex }); console.error(ex); } this.setState({ loading: false }); } async onCreateBigInventoryItem() { try { const res = await superagent.post(`/api/admin/inventory/item`).send({ serialNumber: this.state.newItemSerialNumber }); this.setState({ createdInventoryItem: res.body }); setTimeout(this.onDismissMessage.bind(this), 4000); const audio = new Audio("/misc/Notification3_2.wav"); audio.play(); } catch (e) { console.log(e); this.setState({ error: ex.response }); } this.setState({ loading: false, newItemSerialNumber: "" }); } onChange(e, { name, value }) { this.setState({ [name]: value }) } onIngestInventoryItem(e) { e.preventDefault(); } onDismissMessage(e) { this.setState({ message: null }); } renderInventoryItems(inventoryItems) { return (