import React, { Component } from "react"; import PropTypes from "prop-types"; import { connect } from "react-redux"; import withWidth from "@material-ui/core/withWidth"; import { withStyles } from "@material-ui/core/styles"; import MuiAccordion from "@material-ui/core/Accordion"; import MuiAccordionSummary from "@material-ui/core/AccordionSummary"; import MuiAccordionDetails from "@material-ui/core/AccordionDetails"; import { Card } from "@material-ui/core"; import * as Blockly from "blockly"; import { default as MonacoEditor } from "@monaco-editor/react"; const Accordion = withStyles((theme) => ({ root: { border: `1px solid ${theme.palette.secondary.main}`, boxShadow: "none", "&:before": { display: "none", }, "&$expanded": { margin: "auto", }, }, expanded: {}, }))(MuiAccordion); const AccordionSummary = withStyles((theme) => ({ root: { backgroundColor: theme.palette.secondary.main, borderBottom: `1px solid white`, marginBottom: "-1px", minHeight: "50px", "&$expanded": { minHeight: "50px", }, }, content: { "&$expanded": { margin: "12px 0", }, }, expanded: {}, }))(MuiAccordionSummary); const AccordionDetails = withStyles((theme) => ({ root: { padding: theme.spacing(2), }, }))(MuiAccordionDetails); class CodeViewer extends Component { constructor(props) { super(props); this.state = { code: this.props.arduino, changed: false, expanded: true, componentHeight: null, }; this.myDiv = React.createRef(); } componentDidMount() { this.setState({ componentHeight: this.myDiv.current.offsetHeight + "px" }); } componentDidUpdate(prevProps, prevState) { // if (this.props.arduino !== prevProps.arduino) { // this.setState({ changed: true }); // console.log(`code changed: ${this.state.changed}`); // if (this.state.changed && prevState.code !== this.props.arduino) { // this.setState({ code: this.props.arduino }); // this.setState({ changed: false }); // } // if (this.state.code !== prevState.code && this.state.changed) { // this.setState({ changed: false }); // } // if (this.props.arduino !== this.state.code) { // this.setState({ changed: true }); // //this.setState({ code: this.props.arduino }); // } if ( this.myDiv.current && this.myDiv.current.offsetHeight + "px" !== this.state.componentHeight ) { this.setState({ componentHeight: this.myDiv.current.offsetHeight + "px", }); } } onChange = () => { this.setState({ expanded: !this.state.expanded }); }; render() { var curlyBrackets = "{ }"; var unequal = "<>"; return ( {curlyBrackets}
{Blockly.Msg.codeviewer_arduino}
{unequal}
{Blockly.Msg.codeviewer_xml}
); } } CodeViewer.propTypes = { arduino: PropTypes.string.isRequired, xml: PropTypes.string.isRequired, tooltip: PropTypes.string.isRequired, }; const mapStateToProps = (state) => ({ arduino: state.workspace.code.arduino, xml: state.workspace.code.xml, tooltip: state.workspace.code.tooltip, }); export default connect(mapStateToProps, null)(withWidth()(CodeViewer));