import PropTypes from 'prop-types' import { Badge, Progress, Flex, Button, Space, Tag } from 'antd' // eslint-disable-line import { CloseOutlined, DeleteOutlined, PauseOutlined, CaretRightOutlined } from '@ant-design/icons' // eslint-disable-line import React, { useState, useContext, useEffect } from 'react' import { SocketContext } from '../context/SocketContext' import IdText from './IdText' const SubJobState = ({ subJob, showStatus = true, showId = true, showProgress = true, showControls = true //eslint-disable-line }) => { const { socket } = useContext(SocketContext) const [badgeStatus, setBadgeStatus] = useState('unknown') const [badgeText, setBadgeText] = useState('Unknown') const [currentState, setCurrentState] = useState( subJob?.state || { type: 'unknown', progress: 0 } ) const [initialized, setInitialized] = useState(false) useEffect(() => { if (socket && !initialized && subJob?.id) { setInitialized(true) console.log('on notify_subjob_update') socket.on('notify_subjob_update', (statusUpdate) => { if (statusUpdate?.id === subJob.id && statusUpdate?.state) { console.log('statusUpdate', statusUpdate) setCurrentState(statusUpdate.state) } }) } return () => { if (socket && initialized) { console.log('off notify_subjob_update') socket.off('notify_subjob_update') } } }, [socket, initialized, subJob?.id]) useEffect(() => { switch (currentState.type) { case 'draft': setBadgeStatus('default') setBadgeText('Draft') break case 'printing': setBadgeStatus('processing') setBadgeText('Printing') break case 'complete': setBadgeStatus('success') setBadgeText('Complete') break case 'failed': setBadgeStatus('error') setBadgeText('Failed') break case 'queued': setBadgeStatus('warning') setBadgeText('Queued') break case 'paused': setBadgeStatus('warning') setBadgeText('Paused') break case 'cancelled': setBadgeStatus('error') setBadgeText('Cancelled') break default: setBadgeStatus('default') setBadgeText('Unknown') } }, [currentState]) return ( {showId && ( <> {'Sub Job '} )} {showStatus && ( {badgeText} )} {showProgress && (currentState.type === 'printing' || currentState.type === 'processing') ? ( ) : null} {showControls && (currentState.type === 'printing' || currentState.type === 'paused') ? (