From 3c9071be33c18a836cc63007ae43c0649a396541 Mon Sep 17 00:00:00 2001 From: Tom Butcher Date: Mon, 17 Nov 2025 18:49:00 +0000 Subject: [PATCH] Add printer control actions for firmware and queue management --- .../Production/Printers/ControlPrinter.jsx | 380 ++++++++++-------- 1 file changed, 209 insertions(+), 171 deletions(-) diff --git a/src/components/Dashboard/Production/Printers/ControlPrinter.jsx b/src/components/Dashboard/Production/Printers/ControlPrinter.jsx index 40b0846..08c18fb 100644 --- a/src/components/Dashboard/Production/Printers/ControlPrinter.jsx +++ b/src/components/Dashboard/Production/Printers/ControlPrinter.jsx @@ -1,4 +1,4 @@ -import { useState, useRef, useEffect } from 'react' +import { useState, useRef, useEffect, useContext } from 'react' import { useLocation } from 'react-router-dom' import { Space, Flex, Card, Splitter, Divider } from 'antd' import loglevel from 'loglevel' @@ -26,6 +26,7 @@ import FilamentStockIcon from '../../../Icons/FilamentStockIcon.jsx' import MissingPlaceholder from '../../common/MissingPlaceholder.jsx' import { useMediaQuery } from 'react-responsive' import AlertsDisplay from '../../common/AlertsDisplay.jsx' +import { ApiServerContext } from '../../context/ApiServerContext.jsx' const log = loglevel.getLogger('ControlPrinter') log.setLevel(config.logLevel) @@ -49,6 +50,7 @@ const ControlPrinter = () => { } ) + const { connected, sendObjectAction } = useContext(ApiServerContext) const [sideBarVisible, setSideBarVisible] = useState( collapseState.temperature || collapseState.position || @@ -88,6 +90,38 @@ const ControlPrinter = () => { finishEdit: () => { objectFormRef?.current.handleUpdate() return true + }, + restartFirmware: () => { + if (connected == true) { + sendObjectAction(printerId, 'printer', { + type: 'restartPrinterFirmware' + }) + } + return true + }, + restartMoonraker: () => { + if (connected == true) { + sendObjectAction(printerId, 'printer', { + type: 'restartMoonraker' + }) + } + return true + }, + restart: () => { + if (connected == true) { + sendObjectAction(printerId, 'printer', { + type: 'restartPrinter' + }) + } + return true + }, + startQueue: () => { + if (connected == true) { + sendObjectAction(printerId, 'printer', { + type: 'startQueue' + }) + } + return true } } @@ -128,6 +162,7 @@ const ControlPrinter = () => { id={printerId} disabled={objectFormState.loading} visibleActions={{ edit: false }} + objectData={objectFormState.objectData} /> { loading={objectFormState.loading} ref={actionHandlerRef} > - { - console.log('Got edit form state change', state) - setEditFormState((prev) => ({ ...prev, ...state })) - }} - > - {({ - loading: printerObjectLoading, - objectData: printerObjectData - }) => { - return ( - - - - - } - collapseKey='printer' - active={collapseState.printer} - onToggle={(expanded) => - updateCollapseState('printer', expanded) - } - > + + + + + } + collapseKey='printer' + active={collapseState.printer} + onToggle={(expanded) => + updateCollapseState('printer', expanded) + } + > + { + console.log('Got edit form state change', state) + setEditFormState((prev) => ({ ...prev, ...state })) + }} + > + {({ + loading: printerObjectLoading, + objectData: printerObjectData + }) => { + return ( { 'moonraker.protocol': false, 'moonraker.host': false, tags: false, - firmware: false + firmware: false, + alerts: false }} objectData={printerObjectData} type='printer' /> - - } - collapseKey='job' - active={collapseState.job} - onToggle={(expanded) => - updateCollapseState('job', expanded) - } - > - {printerObjectData?.currentJob?._id ? ( - {}} - > - {({ - loading: jobObjectLoading, - objectData: jobObjectData - }) => { - return ( - - ) - }} - - ) : ( - - )} - - } - collapseKey='subJob' - active={collapseState.subJob} - onToggle={(expanded) => - updateCollapseState('subJob', expanded) - } - > - {printerObjectData?.currentSubJob?._id ? ( - {}} - > - {({ - loading: subJobObjectLoading, - objectData: subJobObjectData - }) => { - return ( - - ) - }} - - ) : ( - - )} - - } - collapseKey='filamentStock' - active={collapseState.filamentStock} - onToggle={(expanded) => - updateCollapseState('filamentStock', expanded) - } - > - {printerObjectData?.currentFilamentStock?._id ? ( - {}} - > - {({ - loading: filamentStockObjectLoading, - objectData: filamentStockObjectData - }) => { - return ( - - ) - }} - - ) : ( - - )} - - - - {sideBarVisible && !isMobile ? ( - + + } + collapseKey='job' + active={collapseState.job} + onToggle={(expanded) => + updateCollapseState('job', expanded) + } + > + {objectFormState.objectData?.currentJob?._id ? ( + {}} > - {sideBarItems} - - ) : null} - - {isMobile ? ( - <> - - {sideBarItems} - - ) : null} + {({ + loading: jobObjectLoading, + objectData: jobObjectData + }) => { + return ( + + ) + }} + + ) : ( + + )} + + } + collapseKey='subJob' + active={collapseState.subJob} + onToggle={(expanded) => + updateCollapseState('subJob', expanded) + } + > + {objectFormState.objectData?.currentSubJob?._id ? ( + {}} + > + {({ + loading: subJobObjectLoading, + objectData: subJobObjectData + }) => { + return ( + + ) + }} + + ) : ( + + )} + + } + collapseKey='filamentStock' + active={collapseState.filamentStock} + onToggle={(expanded) => + updateCollapseState('filamentStock', expanded) + } + > + {objectFormState.objectData?.currentFilamentStock?._id ? ( + {}} + > + {({ + loading: filamentStockObjectLoading, + objectData: filamentStockObjectData + }) => { + return ( + + ) + }} + + ) : ( + + )} + - ) - }} - + + {sideBarVisible && !isMobile ? ( + + {sideBarItems} + + ) : null} + + {isMobile ? ( + <> + + {sideBarItems} + + ) : null} +