import PropTypes from 'prop-types' import { Typography, Tag } from 'antd' // eslint-disable-line import { CheckCircleOutlined, PauseCircleOutlined, QuestionCircleOutlined, PlayCircleOutlined, CloseCircleOutlined } from '@ant-design/icons' // eslint-disable-line import React, { useState, useContext, useEffect } from 'react' import { SocketContext } from '../context/SocketContext' const SubJobCounter = ({ job, showIcon = true, state = { type: 'complete' } }) => { const { socket } = useContext(SocketContext) const [initialized, setInitialized] = useState(false) var badgeStatus = 'unknown' var badgeIcon = const [subJobs, setSubJobs] = useState(job.subJobs) const [count, setCount] = useState(0) useEffect(() => { if (socket && !initialized && job?.id) { setInitialized(true) console.log('on notify_subjob_update') socket.on('notify_subjob_update', (statusUpdate) => { for (const subJob of job.subJobs) { if (statusUpdate?._id === subJob.id && statusUpdate?.state) { console.log('statusUpdate', statusUpdate) setSubJobs((prev) => [...prev, statusUpdate]) } } }) } return () => { if (socket && initialized) { console.log('off notify_subjob_update') socket.off('notify_subjob_update') } } }, [socket, initialized, job?.subJobs, job?.id]) switch (state.type) { case 'draft': badgeStatus = 'default' badgeIcon = break case 'printing': badgeStatus = 'processing' badgeIcon = break case 'complete': badgeStatus = 'success' badgeIcon = break case 'failed': badgeStatus = 'error' badgeIcon = break case 'queued': badgeStatus = 'warning' badgeIcon = break case 'paused': badgeStatus = 'warning' badgeIcon = break case 'cancelled': badgeIcon = break default: badgeStatus = 'default' } useEffect(() => { setCount(0) for (let subJob of subJobs) { if (subJob.state.type === state.type) { setCount((prevCount) => prevCount + 1) } } }, [subJobs, state.type]) return ( {count.toString()} ) } SubJobCounter.propTypes = { state: PropTypes.shape({ type: PropTypes.string }), job: PropTypes.shape({ id: PropTypes.string, subJobs: PropTypes.arrayOf( PropTypes.shape({ id: PropTypes.string, subJobId: PropTypes.string, state: PropTypes.shape({ type: PropTypes.string, progress: PropTypes.number }) }) ) }), showIcon: PropTypes.bool } export default SubJobCounter