ldx-widgets
Version:
widgets
98 lines (76 loc) • 2.34 kB
text/coffeescript
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