import PropTypes from 'prop-types' import { Progress, Flex, Typography, Space } from 'antd' import React, { useState, useContext, useEffect } from 'react' import { PrintServerContext } from '../context/PrintServerContext' import IdDisplay from './IdDisplay' import StateTag from './StateTag' const JobState = ({ job, showProgress = true, showStatus = true, showId = true, showQuantity = true }) => { const { printServer } = useContext(PrintServerContext) const [currentState, setCurrentState] = useState( job?.state || { type: 'unknown', progress: 0 } ) const [initialized, setInitialized] = useState(false) const { Text } = Typography useEffect(() => { if (printServer && !initialized && job?._id) { setInitialized(true) printServer.on('notify_job_update', (statusUpdate) => { if (statusUpdate?._id === job._id && statusUpdate?.state) { setCurrentState(statusUpdate.state) } }) } return () => { if (printServer && initialized) { printServer.off('notify_job_update') } } }, [printServer, initialized, job?._id]) return ( {showId && ( )} {showQuantity && ({job.quantity})} {showStatus && ( )} {showProgress && (currentState.type === 'printing' || currentState.type === 'processing') ? ( ) : null} ) } JobState.propTypes = { job: PropTypes.shape({ _id: PropTypes.string, quantity: PropTypes.number, state: PropTypes.shape({ type: PropTypes.string, progress: PropTypes.number }) }), showProgress: PropTypes.bool, showQuantity: PropTypes.bool, showId: PropTypes.bool, showStatus: PropTypes.bool } export default JobState