awv3
Version:
⚡ AWV3 embedded CAD
72 lines (65 loc) • 2.83 kB
JavaScript
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))
}
}