diff --git a/App/src/App.tsx b/App/src/App.tsx index a140dee..a37746f 100644 --- a/App/src/App.tsx +++ b/App/src/App.tsx @@ -1,7 +1,8 @@ import * as React from "react"; +import { GcodeSender } from "~GcodeSender"; export function AppComponent() { - return
Hello
; + return ; } export const App = AppComponent; diff --git a/App/src/GcodeSender.tsx b/App/src/GcodeSender.tsx new file mode 100644 index 0000000..6776e2e --- /dev/null +++ b/App/src/GcodeSender.tsx @@ -0,0 +1,106 @@ +import * as React from "react"; +import { IEggbotStatus, getStatus, putCommand } from "~api/eggbot"; + +interface IGcodeSenderComponentState { + eggbotStatus: IEggbotStatus | null; + gcodeSet: boolean; + gcodeInput: string; + + gcodeLinesSent: string[]; + gcodeLinesQueue: string[]; + + executing: boolean; +} + +const defaultState: IGcodeSenderComponentState = { + eggbotStatus: null, + gcodeSet: false, + gcodeInput: "", + executing: false, + gcodeLinesSent: [], + gcodeLinesQueue: [], +}; + +export class GcodeSenderComponent extends React.PureComponent< + {}, + IGcodeSenderComponentState +> { + constructor() { + super(null); + this.state = defaultState; + + this.handleInputChange = this.handleInputChange.bind(this); + this.handleSend = this.handleSend.bind(this); + this.update = this.update.bind(this); + + setInterval(this.update, 100); + } + + public handleInputChange( + event: + | React.FormEvent + | React.FormEvent, + ) { + const target = event.currentTarget; + const value = target.value; + const name = target.name; + + this.setState({ + [name]: value, + } as any); + } + + public handleSend() { + const lines = this.state.gcodeInput.split("\n"); + this.setState({ gcodeLinesQueue: lines, executing: true }); + } + + public async update() { + const status = await getStatus(); + console.log(status); + const gcodeLinesQueue = [...this.state.gcodeLinesQueue]; + const gcodeLinesSent = [...this.state.gcodeLinesSent]; + const { executing } = this.state; + if (executing && status.commandQueue < 5) { + if (gcodeLinesQueue && gcodeLinesQueue.length > 0) { + const command = gcodeLinesQueue.shift(); + putCommand(command.substr(0, 50)); + gcodeLinesSent.push(command); + } + } + + this.setState({ gcodeLinesQueue, gcodeLinesSent }); + } + + render() { + const queuedCommands = this.state.gcodeLinesQueue.map(el => ( +
{el}
+ )); + + const executedCommands = this.state.gcodeLinesSent.map(el => ( +
{el}
+ )); + + return ( +
+ {this.state.executing ? ( +
+
{executedCommands}
+
{queuedCommands}
+
+ ) : ( +
+