awv3
Version:
⚡ AWV3 embedded CAD
75 lines (66 loc) • 2.49 kB
JavaScript
import { actions as connectionActions } from '../../session/store/connections'
import Plugin from '../../session/plugin'
import { buildFeaturePath } from '../../session/helpers'
import { Spacer, Group, Button, Input, Label, Selection, Checkbox, Dropdown } from '../../session/elements'
import React, { Component, connect } from '../../session/renderer'
const resources = ['isometric'].reduce(
(prev, item) => ({ ...prev, [item]: require('!!url-loader!awv3-icons/32x32/' + item + '.png') }),
{},
)
class Member extends Component {
constructor(props) {
super(props)
const item = props.items[props.key]
this.state = { value: undefined }
}
update = event => {
if (event.key === 'Enter') {
this.plugin.connection.execute(
`_C.CADApplication.SetExpressions(${this.props.id}, ["${this.props.key}"], [${this.state.value}], 1);`,
)
}
}
render({ id, items, key }, { value }, set) {
const item = items[key]
return (
<Input
name={key}
format={Input.Format.Number}
value={value === undefined ? item.expression || item.value : value}
onValue={value => set({ value })}
onLastEvent={this.update}
/>
)
}
}
((state, { id, connection }) => ({
members: state.connections[connection] ? state.connections[connection].tree[id].members : [],
}))
class Members extends Component {
render({ id, members, filter }) {
let keys = Object.keys(members).filter(member => !filter.length || filter.indexOf(member) != -1)
return keys.map(key => <Member key={id} id={id} items={members} key={key} />)
}
}
((state, props) => {
const plugin = state.plugins[props.id] || {}
const connection = plugin.connection || state.globals.activeConnection
return { connection, feature: plugin.feature }
})
class Root extends Component {
render({ connection, filter, feature }) {
return feature
? <Group format={Group.Format.Table}>
<Members id={feature} connection={connection} filter={filter} />
</Group>
: null
}
}
export default class extends Plugin {
constructor(session, args) {
super(session, { type: 'Members', icon: 'feature', filter: [], resources, ...args })
}
render() {
return <Root id={this.id} filter={this.filter} />
}
}