import Checkbox from '../checkbox' import Radio from '../radio' import { SelectionBoxProps } from './interface' import BaseMixin from '../_util/BaseMixin' import { getOptionProps } from '../_util/props-util' export default { mixins: [BaseMixin], name: 'SelectionBox', props: SelectionBoxProps, data () { return { checked: this.getCheckState(this.$props), } }, mounted () { this.subscribe() }, beforeDestroy () { if (this.unsubscribe) { this.unsubscribe() } }, methods: { subscribe () { const { store } = this this.unsubscribe = store.subscribe(() => { const checked = this.getCheckState(this.$props) this.setState({ checked }) }) }, getCheckState (props) { const { store, defaultSelection, rowIndex } = props let checked = false if (store.getState().selectionDirty) { checked = store.getState().selectedRowKeys.indexOf(rowIndex) >= 0 } else { checked = (store.getState().selectedRowKeys.indexOf(rowIndex) >= 0 || defaultSelection.indexOf(rowIndex) >= 0) } return checked }, }, render () { const { type, rowIndex, ...rest } = getOptionProps(this) const { checked, $attrs, $listeners } = this const checkboxProps = { props: { checked, ...rest, }, attrs: $attrs, on: $listeners, } if (type === 'radio') { checkboxProps.props.value = rowIndex return ( ) } else { return ( ) } }, }