on 651379a help sign in
bridge/src/components/Textarea.js
74 lines 2.0 kB history raw
1import React from 'react';
2import PropTypes from 'prop-types';
3import ProtoTextarea from './ProtoTextarea';
5const Textarea = props => {
7 const _disabled = props.disabled === true ? 'br-gray-30' : '';
9 // This enables all children of this component to share the state of this
10 // component.
11 const childrenWithProps = React.Children.map(props.children, child => {
12 const propsToPass = {
13 displayPass: props.displayPass,
14 displayFailure: props.displayFailure,
15 focussed: props.focussed,
16 beenFocussed: props.beenFocussed,
17 error: props.error,
18 }
19 return React.cloneElement(child, propsToPass)
20 });
22 const className = props.advanced
23 ? `${props.valClassname} ${props.className}`
24 : `br-gray-50 f-br-blue outline-blue ${props.className}`
29 return (
30 <div className={'relative'}>
31 <ProtoTextarea
32 {...props}
33 // prop-focussed={props.focussed.toString()}
34 className={`p-3 b-2 b-solid flex ${_disabled} ${className}`}
35 onChange={e => props.onChange(e.target.value)} />
36 {
37 props.displayFailure === true && props.advanced === true
38 ? <div className={'yellow text-600 h-6 mt-1 fs-3 abs'}>{props.error}</div>
39 : <div/>
40 }
41 {
42 childrenWithProps
43 }
44 </div>
45 );
48Textarea.propTypes = {
49 focussed: PropTypes.bool,
50 beenFocussed: PropTypes.bool,
51 hasSubmitted: PropTypes.bool,
52 displayPass: PropTypes.bool,
53 displayFailure: PropTypes.bool,
54 advanced: PropTypes.bool,
55 error: PropTypes.string,
56 valClassname: PropTypes.string,
57 size: PropTypes.oneOf(['s', 'm', 'l', 'xl']),
58};
61Textarea.defaultProps = {
62 focussed: false,
63 beenFocussed: false,
64 hasSubmitted: false,
65 displayPass: false,
66 displayFailure: false,
67 advanced: false,
68 error: '',
69 size: 'm',
70 format: 'normal',
71};
74export default Textarea;