@@ -14,6 +14,12 @@ const CFormCheck = defineComponent({
14
14
* @see http://coreui.io/vue/docs/components/button.html
15
15
*/
16
16
button : Object ,
17
+ /**
18
+ * Use in conjunction with the v-model directive to specify the value that should be assigned to the bound variable when the checkbox is in the `false` state.
19
+ *
20
+ * @since 4.9.0-beta.2
21
+ */
22
+ falseValue : String ,
17
23
/**
18
24
* Provide valuable, actionable feedback.
19
25
*
@@ -66,7 +72,7 @@ const CFormCheck = defineComponent({
66
72
* The default name for a value passed using v-model.
67
73
*/
68
74
modelValue : {
69
- type : [ Boolean , String ] ,
75
+ type : [ Array , Boolean , String ] ,
70
76
value : undefined ,
71
77
} ,
72
78
/**
@@ -81,6 +87,12 @@ const CFormCheck = defineComponent({
81
87
* @since 4.3.0
82
88
*/
83
89
tooltipFeedback : Boolean ,
90
+ /**
91
+ * Use in conjunction with the v-model directive to specify the value that should be assigned to the bound variable when the checkbox is in the `true` state.
92
+ *
93
+ * @since 4.9.0-beta.2
94
+ */
95
+ trueValue : String ,
84
96
/**
85
97
* Specifies the type of component.
86
98
*
@@ -111,8 +123,35 @@ const CFormCheck = defineComponent({
111
123
] ,
112
124
setup ( props , { attrs, emit, slots } ) {
113
125
const handleChange = ( event : InputEvent ) => {
126
+ const target = event . target as HTMLInputElement
114
127
emit ( 'change' , event )
115
- emit ( 'update:modelValue' , ( event . target as HTMLInputElement ) . value )
128
+
129
+ if ( props . falseValue && props . trueValue ) {
130
+ emit ( 'update:modelValue' , target . checked ? props . trueValue : props . falseValue )
131
+ return
132
+ }
133
+
134
+ if ( props . value && Array . isArray ( props . modelValue ) ) {
135
+ if ( props . modelValue . includes ( props . value ) ) {
136
+ emit (
137
+ 'update:modelValue' ,
138
+ props . modelValue . filter ( ( value ) => value !== props . value ) ,
139
+ )
140
+ } else {
141
+ emit ( 'update:modelValue' , [ ...props . modelValue , props . value ] )
142
+ }
143
+
144
+ return
145
+ }
146
+
147
+ if ( props . value === undefined ) {
148
+ emit ( 'update:modelValue' , target . checked )
149
+ return
150
+ }
151
+
152
+ if ( props . value && ( props . modelValue === undefined || typeof props . modelValue === 'string' ) ) {
153
+ emit ( 'update:modelValue' , target . checked ? props . value : undefined )
154
+ }
116
155
}
117
156
118
157
const className = [
@@ -135,12 +174,22 @@ const CFormCheck = defineComponent({
135
174
} ,
136
175
]
137
176
138
- const isChecked = computed ( ( ) => props . modelValue == props . value )
177
+ const isChecked = computed ( ( ) => {
178
+ if ( Array . isArray ( props . modelValue ) ) {
179
+ return props . modelValue . includes ( props . value )
180
+ }
181
+
182
+ if ( typeof props . modelValue === 'string' ) {
183
+ return props . modelValue === props . value
184
+ }
185
+
186
+ return props . modelValue
187
+ } )
139
188
140
189
const formControl = ( ) => {
141
190
return h ( 'input' , {
142
191
...attrs ,
143
- ...( props . modelValue && { checked : isChecked . value } ) ,
192
+ ...( props . modelValue && props . value && { checked : isChecked . value } ) ,
144
193
class : inputClassName ,
145
194
id : props . id ,
146
195
indeterminate : props . indeterminate ,
0 commit comments