1
- import React , { useEffect , useState , useRef } from 'react' ;
2
- import PropTypes from 'prop-types' ;
3
- import classNames from 'classnames' ;
1
+ import React , { useEffect , useState } from 'react'
2
+ import PropTypes from 'prop-types'
3
+ import classNames from 'classnames'
4
4
5
5
//component - CoreUI / CSwitch
6
6
7
- const CSwitch = props => {
7
+ const CSwitch = props => {
8
8
9
9
let {
10
10
className,
11
11
//
12
12
innerRef,
13
- type,
14
13
size,
15
- disabled,
16
14
color,
17
15
labelOn,
18
16
labelOff,
19
17
variant,
20
18
shape,
21
-
22
- name,
23
- required,
24
- value,
19
+ checked,
20
+ onCheckedUpdate,
25
21
...attributes
26
- //label,
27
- //outline,
28
- } = props ;
29
-
30
- const fields = useRef ( { firstRender : true } ) . current ;
31
- const [ checked , setChecked ] = useState ( props . defaultChecked || props . checked ) ;
32
- //const [selected, setSelected] = useState([]);
33
-
34
- //effect - update
35
- useEffect ( ( ) => {
36
- if ( fields . firstRender ) return ;
37
- setChecked ( props . checked ) ;
38
- } ,
39
- [ props . checked ] ) ;
22
+ } = props
40
23
41
- useEffect ( ( ) => {
42
- fields . firstRender = false ;
43
- } ,
44
- [ ] ) ;
24
+ const [ isChecked , setIsChecked ] = useState ( checked )
25
+ useEffect ( ( ) => setIsChecked ( checked ) , [ checked ] )
45
26
46
- //events
47
- const onChange = e => {
48
- const target = e . target ;
49
- setChecked ( target . checked ) ;
50
- if ( props . onChange ) {
51
- props . onChange ( e ) ;
52
- }
27
+ const change = e => {
28
+ setIsChecked ( e . target . checked )
29
+ onCheckedUpdate && onCheckedUpdate ( e . target . checked )
53
30
}
54
31
55
32
//render
56
-
57
- delete attributes . checked ;
58
- delete attributes . defaultChecked ;
59
- delete attributes . onChange ;
60
-
61
- /*
62
- const outlineString = this.outline ? '-outline' : ''
63
- const outlinedAltString = this.outline === 'alt' ? '-alt' : ''
64
- return [
65
- 'c-switch form-check-label',
66
- `c-switch${outlineString}-${this.color}${outlinedAltString}`,
67
- {
68
- [`c-switch-${this.size}`]: this.size,
69
- [`c-switch-${this.shape}`]: this.shape,
70
- 'c-switch-label': this.labelOn || this.labelOff
71
- }
72
- ]
73
- */
74
- /*
75
- let outline='';
76
- switch (variant) {
77
- case '3d':
78
-
79
- break;
80
- case 'opposite':
81
- variant="alt";
82
- break;
83
- case '3d-opposite':
84
-
85
- break;
86
- }
87
- */
88
-
89
- //console.log(variant);
90
-
91
- const variant2 = [ 'opposite' , 'outline' ] . indexOf ( variant ) > - 1 ? `-${ variant } ` : ''
92
- let classes = classNames (
93
- className ,
33
+ const classes = classNames (
94
34
'c-switch form-check-label' ,
95
- labelOn || labelOff ? 'c-switch-label' : false ,
96
- size ? `c-switch-${ size } ` : '' ,
97
- shape ? `c-switch-${ shape } ` : '' ,
98
- color ? `c-switch${ variant2 } -${ color } ` : '' ,
99
- variant == '3d' ? 'c-switch-3d' : ''
100
- ) ;
35
+ ( labelOn || labelOff ) && 'c-switch-label' ,
36
+ size && `c-switch-${ size } ` ,
37
+ shape && `c-switch-${ shape } ` ,
38
+ color && `c-switch${ variant ? ` -${ variant } ` : '' } - ${ color } ` ,
39
+ className
40
+ )
101
41
102
42
const inputClasses = classNames (
103
43
'c-switch-input' ,
104
- 'c-form-check-input' ,
105
- ) ;
106
-
107
- const sliderClasses = classNames (
108
- 'c-switch-slider'
109
- ) ;
110
-
111
- //classes = "c-switch form-check-label c-switch-label c-switch-opposite c-switch-primary c-switch-lg"
44
+ 'c-form-check-input'
45
+ )
112
46
113
47
return (
114
- < label { ...attributes } className = { classes } ref = { innerRef } >
115
- < input className = { inputClasses } type = { type } onChange = { onChange } checked = { checked } name = { name } required = { required } disabled = { disabled } value = { value } />
116
- < span className = { sliderClasses } data-checked = { labelOn } data-unchecked = { labelOff } > </ span >
48
+ < label className = { classes } >
49
+ < input
50
+ className = { inputClasses }
51
+ type = "checkbox"
52
+ onChange = { change }
53
+ checked = { isChecked }
54
+ { ...attributes }
55
+ ref = { innerRef }
56
+ />
57
+ < span
58
+ className = "c-switch-slider"
59
+ data-checked = { labelOn }
60
+ data-unchecked = { labelOff }
61
+ > </ span >
117
62
</ label >
118
- ) ;
119
-
63
+ )
120
64
}
121
65
122
66
CSwitch . propTypes = {
@@ -126,45 +70,12 @@ CSwitch.propTypes = {
126
70
innerRef : PropTypes . oneOfType ( [ PropTypes . object , PropTypes . func , PropTypes . string ] ) ,
127
71
size : PropTypes . oneOf ( [ '' , 'lg' , 'sm' ] ) ,
128
72
shape : PropTypes . oneOf ( [ '' , 'pill' , 'square' ] ) ,
129
- variant : PropTypes . oneOf ( [ '' , '3d' , '3d-opposite' , ' opposite', 'outline' ] ) ,
73
+ variant : PropTypes . oneOf ( [ '' , '3d' , 'opposite' , 'outline' ] ) ,
130
74
color : PropTypes . string ,
131
75
checked : PropTypes . bool ,
132
76
labelOn : PropTypes . string ,
133
77
labelOff : PropTypes . string ,
134
- type : PropTypes . oneOf ( [ 'checkbox' , 'radio' ] ) ,
135
-
136
- value : PropTypes . string ,
137
- defaultChecked : PropTypes . bool ,
138
- name : PropTypes . string ,
139
- disabled : PropTypes . bool ,
140
- form : PropTypes . any , //?
141
- required : PropTypes . bool ,
142
- onChange : PropTypes . func
143
-
144
- //label: PropTypes.bool,
145
- /*
146
- outline: PropTypes.oneOfType([
147
- PropTypes.bool,
148
- PropTypes.string,
149
- PropTypes.oneOf(['', 'alt'])
150
- ]),
151
- */
152
-
153
- } ;
154
-
155
- CSwitch . defaultProps = {
156
- size : '' ,
157
- checked : false ,
158
- type : 'checkbox' ,
159
- variant : '' ,
160
-
161
- defaultChecked : false ,
162
- disabled : false ,
163
- required : false ,
164
- //labelOn: 'On',
165
- //labelOff: 'Off',
166
- //label: false,
167
- //outline: false,
78
+ onCheckedUpdate : PropTypes . func
168
79
} ;
169
80
170
- export default CSwitch ;
81
+ export default CSwitch
0 commit comments