UNPKG

awv3

Version:
72 lines (65 loc) 2.83 kB
import Plugin from '../../session/plugin' import { Button, Input, Label, Checkbox, Group } from '../../session/elements' const resources = ['isometric'].reduce( (prev, item) => ({ ...prev, [item]: require('!!url-loader!awv3-icons/32x32/' + item + '.png') }), {}, ) function setResults(label, results) { label.value = results.reduce((text, result) => { text = result.errors.reduce((t, e) => t + e.errorMessage + '\n', text) return result.results.reduce((t, r) => t + r.result + '\n', text) }, '') } export default class Interpreter extends Plugin { constructor(session, args) { super(session, { type: 'Interpreter', icon: 'isometric', resources, text: '', ...args }) this.chunks = true this.sequence = new Checkbox(this, { name: 'Sequence', value: this.chunks }) this.addElement(new Group(this, { format: Group.Format.Table, children: [this.sequence] })) this.input = new Input(this, { name: 'Command', value: this.text, format: Input.Format.MultiLine, style: { fontSize: '0.8em', fontFamily: 'monospace' }, }) this.addElement(this.input) this.label = new Label(this, { name: 'Result', value: '' }) this.addElement(this.label) this.okButton = new Button(this, { name: 'Execute' }) this.clearButton = new Button(this, { name: 'Clear' }) this.addElement(new Group(this, { format: Group.Format.Buttons, children: [this.clearButton, this.okButton] })) } onEnabled() { this.resetElements() this.clearButton.observe( state => state.lastEvent, event => { this.session.activeConnectionClass.execute('_O.ToolBuilder.Clear();') }, ) this.okButton.observe( state => state.lastEvent, async event => { console.time('INTERPRETER') let results if (this.chunks) { results = await Promise.all( this.input.value .split(';') .filter(e => e) .map( command => command.length && this.session.activeConnectionClass.execute(command + ';'), ), ) } else { results = [await this.session.activeConnectionClass.execute(this.input.value)] } this.connection.updateView() this.view.controls.focus().zoom() console.timeEnd('INTERPRETER') setResults(this.label, results) }, ) this.sequence.observe(state => state.value, value => (this.chunks = value)) } }