@@ -7,6 +7,7 @@ const MDBInput: React.FC<InputProps> = ({
77 size,
88 contrast,
99 value,
10+ defaultValue,
1011 id,
1112 labelId,
1213 labelClass,
@@ -27,6 +28,8 @@ const MDBInput: React.FC<InputProps> = ({
2728 btnOnClick,
2829 btnRef,
2930 btnChildren,
31+ onBlur,
32+ readonly,
3033 btn,
3134 ...props
3235} ) => {
@@ -41,7 +44,9 @@ const MDBInput: React.FC<InputProps> = ({
4144
4245 const [ oldValue , setNewValue ] = useState ( value ) ;
4346 const [ labelWidth , setLabelWidth ] = useState ( 0 ) ;
44- const [ active , setActive ] = useState ( value !== undefined && value . length > 0 ? true : false ) ;
47+ const [ active , setActive ] = useState (
48+ ( value !== undefined && value . length > 0 ) || ( defaultValue !== undefined && defaultValue . length ) > 0 ? true : false
49+ ) ;
4550
4651 const wrapperClasses = clsx ( 'form-outline' , contrast && 'form-white' , wrapperClass ) ;
4752 const inputClasses = clsx ( 'form-control' , active && 'active' , size && `form-control-${ size } ` , className ) ;
@@ -70,39 +75,55 @@ const MDBInput: React.FC<InputProps> = ({
7075 value . length > 0 ? setActive ( true ) : setActive ( false ) ;
7176 } , [ value ] ) ;
7277
78+ useEffect ( ( ) => {
79+ if ( defaultValue === undefined ) return ;
80+ defaultValue . length > 0 ? setActive ( true ) : setActive ( false ) ;
81+ } , [ defaultValue ] ) ;
82+
7383 const handleChange = ( e : React . ChangeEvent < HTMLInputElement | HTMLTextAreaElement > ) => {
7484 setNewValue ( e . currentTarget . value ) ;
7585 onChange && onChange ( e ) ;
7686 } ;
7787
78- const handleBlur = useCallback ( ( ) => {
79- if ( ( oldValue !== undefined && oldValue . length > 0 ) || ( value !== undefined && value . length > 0 ) ) {
80- setActive ( true ) ;
81- } else {
82- setActive ( false ) ;
83- }
84- } , [ oldValue , value ] ) ;
88+ const handleBlur = useCallback (
89+ ( e ) => {
90+ if (
91+ ( oldValue !== undefined && oldValue . length > 0 ) ||
92+ ( value !== undefined && value . length > 0 && defaultValue !== undefined && defaultValue . length > 0 )
93+ ) {
94+ setActive ( true ) ;
95+ } else {
96+ setActive ( false ) ;
97+ }
98+ onBlur && onBlur ( e ) ;
99+ } ,
100+ [ oldValue , value , defaultValue , onBlur ]
101+ ) ;
85102
86103 return (
87104 < WrapperTag className = { wrapperClasses } style = { { ...wrapperStyle } } >
88105 { textarea ? (
89106 < textarea
107+ readOnly = { readonly }
90108 className = { inputClasses }
91109 onBlur = { handleBlur }
92110 onChange = { handleChange }
93111 onFocus = { setWidth }
112+ defaultValue = { defaultValue }
94113 value = { value }
95114 id = { id }
96115 ref = { inputReference }
97116 { ...props }
98117 />
99118 ) : (
100119 < input
120+ readOnly = { readonly }
101121 className = { inputClasses }
102122 onBlur = { handleBlur }
103123 onChange = { handleChange }
104124 onFocus = { setWidth }
105125 value = { value }
126+ defaultValue = { defaultValue }
106127 id = { id }
107128 ref = { inputReference }
108129 { ...props }
@@ -129,6 +150,6 @@ const MDBInput: React.FC<InputProps> = ({
129150 ) ;
130151} ;
131152
132- MDBInput . defaultProps = { wrapperTag : 'div' } ;
153+ MDBInput . defaultProps = { wrapperTag : 'div' , readonly : false } ;
133154
134155export default MDBInput ;
0 commit comments