UNPKG

ldx-widgets

Version:

widgets

98 lines (76 loc) 2.34 kB
React = require 'react' PropTypes = require 'prop-types' createClass = require 'create-react-class' _ = require 'lodash' {div, button} = React.DOM TOGGLE_BTN_HEIGHT = 28 TOGGLE_TAB_HEIGHT = 37 ToggleButton = createClass displayName: 'ToggleButton' propTypes: isInPopover: PropTypes.bool.isRequired option: PropTypes.shape( label: PropTypes.string.isRequired tabId: PropTypes.oneOfType([ PropTypes.string PropTypes.number ]).isRequired validationMsg: PropTypes.string title: PropTypes.string ).isRequired selected: PropTypes.bool.isRequired options: PropTypes.arrayOf(PropTypes.object) useTabs: PropTypes.bool.isRequired setFormData: PropTypes.func.isRequired contextTypes: toggleValidationError: PropTypes.func getValidationStatus: PropTypes.func render: -> {option, selected, options, useTabs} = @props {disabled, title, label, tabId} = option {getValidationStatus} = @context {error, forceShowAllErrors} = getValidationStatus(tabId) className = 'toggle-button-wrapper' className += ' invalid' if error? and forceShowAllErrors buttonClassName = if useTabs then 'toggle-tab' else 'toggle-button' buttonClassName += ' is-selected' if selected width = 'auto' height = TOGGLE_BTN_HEIGHT if useTabs width = "#{100 / options.length}%" height = TOGGLE_TAB_HEIGHT div { className: className style: {width, height} }, [ button { key: 'btn' className: buttonClassName onClick: @setFormData disabled: disabled title: title }, label div { className: 'field-errors-show' key: 'textInputErrorsShow' ref: 'errorAnchor' onMouseOver: @handleErrorMouseOver onMouseOut: @handleErrorMouseOut } ] setFormData: -> {option, setFormData} = @props setFormData option.tabId handleErrorMouseOver: -> {isInPopover, option} = @props @context.toggleValidationError groupId: option.tabId status: on isInPopover: isInPopover handleErrorMouseOut: -> {isInPopover, option} = @props @context.toggleValidationError groupId: option.tabId status: off isInPopover: isInPopover module.exports = ToggleButton