UNPKG

ldx-widgets

Version:

widgets

66 lines (52 loc) 1.67 kB
React = require 'react' createClass = require 'create-react-class' {button, input, label, span} = React.DOM IOSToggleSwitch = createClass displayName: 'IOSToggleSwitch' getDefaultProps: -> tabIndex: -1 disabled: no # Transferring props to state is generally an anti-pattern in React # However, in most form controls, the native html input stores the value # Here, there is no native control, so using state as the temporary holder of the value getInitialState: -> checked: @props.checked # Since checked is tracked by state, update state if checked changes externally componentWillReceiveProps: (nextProps) -> {checked} = nextProps @setState {checked} if checked isnt @state.checked render: -> {tabIndex, disabled} = @props {checked} = @state className = 'ios-toggle-switch' className += ' is-checked' if checked button { key: 'ios-toggle-switch' className: className onClick: @handleChange # Need to put click event here because checkbox is hidden and does not get fired tabIndex: tabIndex disabled: disabled }, [ label { key: 'switch-label' className: 'ios-toggle-switch-label' htmlFor: 'myios-toggle-switch' }, [ span { key: 'switch-inner' className: 'ios-toggle-switch-inner' } span { key: 'switch-switch' className: 'ios-toggle-switch-switch' } ] ] handleChange: -> {checked} = @state {onChange} = @props @setState checked: not checked , onChange getValue: -> @state.checked module.exports = IOSToggleSwitch