@@ -7,6 +7,7 @@ const MDBInput: React.FC<InputProps> = ({
7
7
size,
8
8
contrast,
9
9
value,
10
+ defaultValue,
10
11
id,
11
12
labelId,
12
13
labelClass,
@@ -27,6 +28,8 @@ const MDBInput: React.FC<InputProps> = ({
27
28
btnOnClick,
28
29
btnRef,
29
30
btnChildren,
31
+ onBlur,
32
+ readonly,
30
33
btn,
31
34
...props
32
35
} ) => {
@@ -41,7 +44,9 @@ const MDBInput: React.FC<InputProps> = ({
41
44
42
45
const [ oldValue , setNewValue ] = useState ( value ) ;
43
46
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
+ ) ;
45
50
46
51
const wrapperClasses = clsx ( 'form-outline' , contrast && 'form-white' , wrapperClass ) ;
47
52
const inputClasses = clsx ( 'form-control' , active && 'active' , size && `form-control-${ size } ` , className ) ;
@@ -70,39 +75,55 @@ const MDBInput: React.FC<InputProps> = ({
70
75
value . length > 0 ? setActive ( true ) : setActive ( false ) ;
71
76
} , [ value ] ) ;
72
77
78
+ useEffect ( ( ) => {
79
+ if ( defaultValue === undefined ) return ;
80
+ defaultValue . length > 0 ? setActive ( true ) : setActive ( false ) ;
81
+ } , [ defaultValue ] ) ;
82
+
73
83
const handleChange = ( e : React . ChangeEvent < HTMLInputElement | HTMLTextAreaElement > ) => {
74
84
setNewValue ( e . currentTarget . value ) ;
75
85
onChange && onChange ( e ) ;
76
86
} ;
77
87
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
+ ) ;
85
102
86
103
return (
87
104
< WrapperTag className = { wrapperClasses } style = { { ...wrapperStyle } } >
88
105
{ textarea ? (
89
106
< textarea
107
+ readOnly = { readonly }
90
108
className = { inputClasses }
91
109
onBlur = { handleBlur }
92
110
onChange = { handleChange }
93
111
onFocus = { setWidth }
112
+ defaultValue = { defaultValue }
94
113
value = { value }
95
114
id = { id }
96
115
ref = { inputReference }
97
116
{ ...props }
98
117
/>
99
118
) : (
100
119
< input
120
+ readOnly = { readonly }
101
121
className = { inputClasses }
102
122
onBlur = { handleBlur }
103
123
onChange = { handleChange }
104
124
onFocus = { setWidth }
105
125
value = { value }
126
+ defaultValue = { defaultValue }
106
127
id = { id }
107
128
ref = { inputReference }
108
129
{ ...props }
@@ -129,6 +150,6 @@ const MDBInput: React.FC<InputProps> = ({
129
150
) ;
130
151
} ;
131
152
132
- MDBInput . defaultProps = { wrapperTag : 'div' } ;
153
+ MDBInput . defaultProps = { wrapperTag : 'div' , readonly : false } ;
133
154
134
155
export default MDBInput ;
0 commit comments