UNPKG

ldx-widgets

Version:

widgets

235 lines (194 loc) 6.75 kB
React = require 'react' Spinner = React.createFactory(require './spinner') InputMixin = require '../mixins/input_mixin' {div, button, label, textarea} = React.DOM ### Textarea Props @props.value - REQUIRED - String The value of the textarea w/ out this props, the textarea will not work @props.onChange - REQUIRED method that will change the value of the textarea prop gets passed a single param that is the new value of the textarea w/ out this method, the textarea will not update @props.className - OPTIONAL - string - default 'text-textarea' optional class to be added the textarea element itself @props.inputTextClass - OPTIONAL - string optional class to be added the input element itself when using the gridInputForm @props.id - OPTIONAL - string - default null optional id to be added the textarea element itself @props.placeholder - OPTIONAL - string - default null optional placeholder text for the textarea @props.wrapperClass - OPTIONAL - string default null class to be added to the wrapper div @props.wrapperLabel - OPTIONAL - default null text for wrapping label element @props.loading - OPTIONAL - Boolean indicator to determine that the textarea is loading a value from the server @props.showClear - OPTIONAL - Boolean indicator to determine whether or not to show the clear "X" button @props.tabIndex - OPTIONAL - int - default null tab index for the textarea @props.maxLength - OPTIONAL - int - default null max characters that can be entered in the textarea @props.onKeyDown/onKeyPress/onKeyUp/onEnterKey/onBlur/onFocus optional handlers for various events @props.disabled - OPTIONAL - Boolean - default no disabled state of the textarea @props.validation - OPTIONAL - Function a method that takes the value and returns an arry of validation objects always return an empty array for a valid value see the validation store for more documentation on validation objects @props.isInPopover - OPTIONAL - default no set this to yes if the form is inside a popover or modal, forces the validation to display above the popover/modal layer Inconsequential if validation is not being used @props.delayedActionOnChange - OPTIONAL - Object Takes action and interval parameters, will fire the action after the set interval everytime the data changes @props.textTransform - OPTIONAL - Function runs the value through a transform method that will change the textarea before returning via getValue() @props.focusOnMount - OPTIONAL - Boolean Focuses the textarea once mounted @props.rows - OPTIONAL - Number string - default 4 Height of textarea @props.cols - OPTIONAL - Number string - default 50 Width of textarea ### Textarea = React.createClass displayName: 'Textarea' mixins: [InputMixin] contextTypes: clearValidationError: React.PropTypes.func addValidationError: React.PropTypes.func getValidationStatus: React.PropTypes.func toggleValidationError: React.PropTypes.func propTypes: className: React.PropTypes.string textTransform: React.PropTypes.func focusOnMount: React.PropTypes.bool delayedActionOnChange: React.PropTypes.object tabIndex: React.PropTypes.number maxLength: React.PropTypes.number disabled: React.PropTypes.bool onChange: React.PropTypes.func onKeyDown: React.PropTypes.func onKeyUp: React.PropTypes.func onKeyPress: React.PropTypes.func style: React.PropTypes.object rows: React.PropTypes.string cols: React.PropTypes.string autoComplete: React.PropTypes.oneOfType [ React.PropTypes.string React.PropTypes.bool ] placeholder: React.PropTypes.oneOfType [ React.PropTypes.string React.PropTypes.number ] value: React.PropTypes.oneOfType([ React.PropTypes.string React.PropTypes.number ]).isRequired id: React.PropTypes.oneOfType [ React.PropTypes.string React.PropTypes.number ] getDefaultProps: -> className: 'textarea' id: null placeholder: '' wrapperClass: null wrapperLabel: null loading: no showClear: no tabIndex: null maxLength: null onKeyDown: null onKeyPress: null onFocus: null onBlur: null onKeyUp: null onEnterKey: null onChange: null disabled: no autoComplete: no validation: off isInPopover: no delayedActionOnChange: null spellCheck: false style: null focusOnMount: false rows: "4" cols: "50" render: -> {value, placeholder, tabIndex, className, maxLength, loading, showClear, onKeyDown, onKeyPress, onBlur, onFocus, wrapperClass, wrapperLabel, id, disabled, validation, autoComplete, spellCheck, style, focusOnMount, rows, cols} = @props {error, forceShowAllErrors} = @context.getValidationStatus(@inputId) {valueHasChanged} = @state isValid = not error? outerClass = 'field-wrap' outerClass += " #{wrapperClass}" if wrapperClass? outerClass += ' invalid' if not isValid and (valueHasChanged or forceShowAllErrors) textareaClass = className if className? textareaClass += ' loading-spinner' if loading errorButtonClass = 'field-errors-show' errorButtonClass += ' is-hidden' if loading # Autocomplete autoComplete = switch typeof autoComplete when 'string' then autoComplete when 'boolean' if autoComplete then 'on' else 'off' textArea = textarea { key: 'textArea' ref: 'textarea' id: id className: textareaClass value: value placeholder: placeholder maxLength: maxLength disabled: disabled tabIndex: tabIndex onChange: @handleChange onKeyUp: @handleKeyUp onKeyDown: onKeyDown onKeyPress: onKeyPress onBlur: onBlur onFocus: onFocus autoComplete: autoComplete spellCheck: spellCheck rows cols } # Add a wrapper label element if label prop is present if wrapperLabel textArea = label { key: 'textAreaLabel' }, [wrapperLabel, textArea] div { className: "#{outerClass}" style: style }, [ textArea div({ key: 'input-spinner' className: 'input-spinner' }, Spinner { length: 3 } ) if loading button { className: 'search-clear' title: 'Clear Search' key: 'searchClearBtn' onClick: @clear tabIndex: -1 } if value?.length > 0 and showClear div { className: errorButtonClass key: 'textAreaErrorsShow' ref: 'errorAnchor' onMouseOver: @handleErrorMouseOver onMouseOut: @handleErrorMouseOut } ] module.exports = Textarea