@@ -14,6 +14,12 @@ const CFormCheck = defineComponent({
1414 * @see http://coreui.io/vue/docs/components/button.html
1515 */
1616 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 ,
1723 /**
1824 * Provide valuable, actionable feedback.
1925 *
@@ -66,7 +72,7 @@ const CFormCheck = defineComponent({
6672 * The default name for a value passed using v-model.
6773 */
6874 modelValue : {
69- type : [ Boolean , String ] ,
75+ type : [ Array , Boolean , String ] ,
7076 value : undefined ,
7177 } ,
7278 /**
@@ -81,6 +87,12 @@ const CFormCheck = defineComponent({
8187 * @since 4.3.0
8288 */
8389 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 ,
8496 /**
8597 * Specifies the type of component.
8698 *
@@ -111,8 +123,35 @@ const CFormCheck = defineComponent({
111123 ] ,
112124 setup ( props , { attrs, emit, slots } ) {
113125 const handleChange = ( event : InputEvent ) => {
126+ const target = event . target as HTMLInputElement
114127 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+ }
116155 }
117156
118157 const className = [
@@ -135,12 +174,22 @@ const CFormCheck = defineComponent({
135174 } ,
136175 ]
137176
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+ } )
139188
140189 const formControl = ( ) => {
141190 return h ( 'input' , {
142191 ...attrs ,
143- ...( props . modelValue && { checked : isChecked . value } ) ,
192+ ...( props . modelValue && props . value && { checked : isChecked . value } ) ,
144193 class : inputClassName ,
145194 id : props . id ,
146195 indeterminate : props . indeterminate ,
0 commit comments