import Checkbox from './Checkbox' import hasProp from '../_util/props-util' export default { name: 'ACheckboxGroup', props: { prefixCls: { default: 'ant-checkbox', type: String, }, defaultValue: { default: undefined, type: Array, }, value: { default: undefined, type: Array, }, options: { default: () => [], type: Array, }, disabled: Boolean, }, model: { prop: 'value', }, provide () { return { checkboxGroupContext: this, } }, data () { const { value, defaultValue } = this return { sValue: value || defaultValue || [], } }, watch: { value (val) { this.sValue = val }, }, methods: { getOptions () { const { options } = this.$props return options.map(option => { if (typeof option === 'string') { return { label: option, value: option, } } return option }) }, toggleOption (option) { const optionIndex = this.sValue.indexOf(option.value) const value = [...this.sValue] if (optionIndex === -1) { value.push(option.value) } else { value.splice(optionIndex, 1) } if (!hasProp(this, 'value')) { this.sValue = value } this.$emit('input', value) this.$emit('change', value) }, }, render () { const { $props: props, $data: state, $slots } = this const { prefixCls, options } = props let children = $slots.default const groupPrefixCls = `${prefixCls}-group` if (options && options.length > 0) { children = this.getOptions().map(option => ( this.toggleOption(option)} class={`${groupPrefixCls}-item`} > {option.label} )) } return (
{children}
) }, }