You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
1.9 KiB

import { createNamespace } from '../utils';
import { CheckboxMixin } from '../mixins/checkbox';
var _createNamespace = createNamespace('checkbox'),
createComponent = _createNamespace[0],
bem = _createNamespace[1];
export default createComponent({
mixins: [CheckboxMixin({
bem: bem,
role: 'checkbox',
parent: 'vanCheckbox'
})],
computed: {
checked: {
get: function get() {
if (this.parent) {
return this.parent.value.indexOf(this.name) !== -1;
}
return this.value;
},
set: function set(val) {
if (this.parent) {
this.setParentValue(val);
} else {
this.$emit('input', val);
}
}
}
},
watch: {
value: function value(val) {
this.$emit('change', val);
}
},
methods: {
// @exposed-api
toggle: function toggle(checked) {
var _this = this;
if (checked === void 0) {
checked = !this.checked;
}
// When toggle method is called multiple times at the same time,
// only the last call is valid.
// This is a hack for usage inside Cell.
clearTimeout(this.toggleTask);
this.toggleTask = setTimeout(function () {
_this.checked = checked;
});
},
setParentValue: function setParentValue(val) {
var parent = this.parent;
var value = parent.value.slice();
if (val) {
if (parent.max && value.length >= parent.max) {
return;
}
/* istanbul ignore else */
if (value.indexOf(this.name) === -1) {
value.push(this.name);
parent.$emit('input', value);
}
} else {
var index = value.indexOf(this.name);
/* istanbul ignore else */
if (index !== -1) {
value.splice(index, 1);
parent.$emit('input', value);
}
}
}
}
});