React = require 'react' _ = require 'underscore' Rx = require 'rx-lite' {RetinaImg, Flexbox} = require 'nylas-component-kit' {CategoryStore, Actions, Utils} = require 'nylas-exports' {Comparator, Template} = require './scenario-editor-models' SOURCE_SELECT_NULL = 'NULL' class SourceSelect extends React.Component @displayName: 'SourceSelect' @propTypes: value: React.PropTypes.string onChange: React.PropTypes.func.isRequired options: React.PropTypes.oneOfType([ React.PropTypes.object React.PropTypes.array ]).isRequired constructor: (@props) -> @state = options: [] componentDidMount: => @_setupValuesSubscription() componentWillReceiveProps: (nextProps) => @_setupValuesSubscription(nextProps) componentWillUnmount: => @_subscription?.dispose() @_subscription = null _setupValuesSubscription: (props = @props) => @_subscription?.dispose() @_subscription = null if props.options instanceof Rx.Observable @_subscription = props.options.subscribe (options) => @setState({options}) else @setState(options: props.options) render: => options = @state.options # The React { @state.options.map ({value, name}) => } _onChange: (event) => value = event.target.value value = null if value is SOURCE_SELECT_NULL @props.onChange(target: {value}) class ScenarioEditorRow extends React.Component @displayName: 'ScenarioEditorRow' @propTypes: instance: React.PropTypes.object.isRequired removable: React.PropTypes.bool templates: React.PropTypes.array.isRequired onChange: React.PropTypes.func onInsert: React.PropTypes.func onRemove: React.PropTypes.func constructor: (@props) -> render: => template = _.findWhere(@props.templates, {key: @props.instance.templateKey}) unless template return Could not find template for instance key: {@props.instance.templateKey} {@_renderTemplateSelect(template)} {@_renderComparator(template)} {template.valueLabel} {@_renderValue(template)}
{@_renderActions()}
_renderTemplateSelect: (template) => options = @props.templates.map ({key, name}) => _renderComparator: (template) => options = _.map template.comparators, ({name}, key) => return false unless options.length > 0 _renderValue: (template) => if template.type is Template.Type.Enum else if template.type is Template.Type.String else false _renderActions: =>
{ if @props.removable then
}
+
_onChangeValue: (event) => instance = _.clone(@props.instance) instance.value = event.target.value @props.onChange(instance) _onChangeComparator: (event) => instance = _.clone(@props.instance) instance.comparatorKey = event.target.value @props.onChange(instance) _onChangeTemplate: (event) => instance = _.clone(@props.instance) existingTemplate = _.findWhere(@props.templates, key: instance.key) newTemplate = _.findWhere(@props.templates, key: event.target.value) instance = newTemplate.coerceInstance(instance) @props.onChange(instance) module.exports = ScenarioEditorRow