@@ -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