// PrinterTemperaturePanel.js
import { useContext, useState, useEffect } from 'react'
import {
Progress,
Typography,
Spin,
Flex,
Space,
Collapse,
InputNumber,
Button
} from 'antd'
import { LoadingOutlined, CaretRightOutlined } from '@ant-design/icons'
import styled from 'styled-components'
import PropTypes from 'prop-types'
import { ApiServerContext } from '../context/ApiServerContext'
import merge from 'lodash/merge'
const { Text } = Typography
const { Panel } = Collapse
const CustomCollapse = styled(Collapse)`
.ant-collapse-header {
padding: 0 !important;
}
.ant-collapse-content-box {
padding-left: 0 !important;
padding-right: 0 !important;
padding-bottom: 0 !important;
}
`
const PrinterTemperaturePanel = ({
id,
showExtruderControls = true,
showBedControls = true,
showExtruder = true,
showBed = true,
showMoreInfo = true
}) => {
const [temperatureData, setTemperatureData] = useState({
extruder: {
current: 0,
target: 0,
power: 0
},
bed: {
current: 0,
target: 0,
power: 0
},
pinda: 0,
ambiant: 0
})
const { subscribeToObjectEvent, connected, sendObjectAction } =
useContext(ApiServerContext)
// Sync input values with actual temperature targets
useEffect(() => {
if (temperatureData.extruder?.target !== undefined) {
setExtruderTarget(temperatureData.extruder.target)
}
}, [temperatureData.extruder?.target])
useEffect(() => {
if (temperatureData.bed?.target !== undefined) {
setBedTarget(temperatureData.bed.target)
}
}, [temperatureData.bed?.target])
useEffect(() => {
if (id && connected) {
const temperatureEventUnsubscribe = subscribeToObjectEvent(
id,
'printer',
'temperature',
(event) => {
setTemperatureData((prev) => {
const merged = merge({}, prev, event.data)
return merged
})
}
)
return () => {
if (temperatureEventUnsubscribe) temperatureEventUnsubscribe()
}
}
}, [id, connected])
const [extruderTarget, setExtruderTarget] = useState(0)
const [bedTarget, setBedTarget] = useState(0)
const handleSetTemperature = async (data) => {
if (id && connected == true) {
await sendObjectAction(
id,
'printer',
{
type: 'setTemperature',
data
},
(result) => {
console.log('setTemperatureResult', result)
}
)
}
}
const moreInfoItems = [
{
key: '1',
label: 'More Temperature Data',
children: (
<>