diff --git a/src/components/Dashboard/Production/Jobs/DeployJob.jsx b/src/components/Dashboard/Production/Jobs/DeployJob.jsx new file mode 100644 index 0000000..2555a63 --- /dev/null +++ b/src/components/Dashboard/Production/Jobs/DeployJob.jsx @@ -0,0 +1,117 @@ +import { useState, useContext, useEffect } from 'react' +import PropTypes from 'prop-types' +import WizardView from '../../common/WizardView' +import { ApiServerContext } from '../../context/ApiServerContext' +import { Flex, Typography } from 'antd' +import ObjectTable from '../../common/ObjectTable' +import ObjectSelect from '../../common/ObjectSelect' + +const { Text } = Typography + +const DeployJob = ({ onOk, objectData = undefined }) => { + const [deployLoading, setDeployLoading] = useState(false) + const [job, setJob] = useState(objectData) + const [deployedSubJobsCount, setDeployedSubJobsCount] = useState(0) + const [subJobsCount, setSubJobsCount] = useState(999) + const { sendObjectAction, fetchObjects } = useContext(ApiServerContext) + + const handleDeploy = async () => { + setDeployLoading(true) + var hasMore = true + var currentPage = 1 + var subJobs = [] + while (hasMore == true) { + const subJobsPage = await fetchObjects('subJob', { + page: currentPage, + filter: { 'job._id': job._id } + }) + subJobs = [...subJobs, ...subJobsPage.data] + if (subJobsPage.data.length >= 25) { + currentPage = currentPage + 1 + } else { + hasMore = false + } + } + setSubJobsCount(subJobs.length) + subJobs.forEach((subJob) => { + console.log( + 'Deploying subjob:', + subJob._id, + 'to printer:', + subJob.printer._id + ) + sendObjectAction( + subJob.printer._id, + 'printer', + { type: 'deploy', data: subJob }, + (result) => { + console.log('result', result) + setDeployedSubJobsCount((prev) => prev + 1) + } + ) + }) + } + + useEffect(() => { + if (deployedSubJobsCount == subJobsCount && deployLoading == true) { + onOk() + } + }, [deployedSubJobsCount, subJobsCount, deployLoading]) + + const steps = [ + { + title: 'Confirm', + key: 'confirm', + content: ( + + + Job: + { + setJob(newJob) + }} + /> + + + + + ) + } + ] + + return ( + { + handleDeploy() + }} + /> + ) +} + +DeployJob.propTypes = { + onOk: PropTypes.func.isRequired, + objectData: PropTypes.object, + reset: PropTypes.bool +} + +export default DeployJob diff --git a/src/components/Dashboard/Production/Jobs/JobInfo.jsx b/src/components/Dashboard/Production/Jobs/JobInfo.jsx index 567cc35..1f20c7d 100644 --- a/src/components/Dashboard/Production/Jobs/JobInfo.jsx +++ b/src/components/Dashboard/Production/Jobs/JobInfo.jsx @@ -1,6 +1,6 @@ import { useRef, useState } from 'react' import { useLocation } from 'react-router-dom' -import { Space, Flex, Card } from 'antd' +import { Space, Flex, Card, Modal } from 'antd' import { LoadingOutlined } from '@ant-design/icons' import loglevel from 'loglevel' import config from '../../../../config.js' @@ -21,6 +21,7 @@ import ObjectTable from '../../common/ObjectTable.jsx' import InfoCollapsePlaceholder from '../../common/InfoCollapsePlaceholder.jsx' import JobIcon from '../../../Icons/JobIcon.jsx' import DocumentPrintButton from '../../common/DocumentPrintButton.jsx' +import DeployJob from './DeployJob.jsx' const log = loglevel.getLogger('JobInfo') log.setLevel(config.logLevel) @@ -30,6 +31,8 @@ const JobInfo = () => { const objectFormRef = useRef(null) const actionHandlerRef = useRef(null) const jobId = new URLSearchParams(location.search).get('jobId') + + const [deployJobOpen, setDeployJobOpen] = useState(false) const [collapseState, updateCollapseState] = useCollapseState('JobInfo', { info: true, subJobs: true, @@ -43,7 +46,9 @@ const JobInfo = () => { formValid: false, locked: false, loading: false, - objectData: {} + objectData: { + _id: jobId + } }) const actions = { @@ -62,6 +67,10 @@ const JobInfo = () => { finishEdit: () => { objectFormRef?.current.handleUpdate() return true + }, + deploy: () => { + setDeployJobOpen(true) + return false } } @@ -207,6 +216,24 @@ const JobInfo = () => { + { + actionHandlerRef.current.clearAction() + setDeployJobOpen(false) + }} + > + { + actionHandlerRef.current.clearAction() + setDeployJobOpen(false) + }} + /> + ) }