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.

152 lines
3.9 KiB

"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.CheckboxMixin = void 0;
var _icon = _interopRequireDefault(require("../icon"));
var _field = require("./field");
var _relation = require("./relation");
var _utils = require("../utils");
/**
* Common part of Checkbox & Radio
*/
var CheckboxMixin = function CheckboxMixin(_ref) {
var parent = _ref.parent,
bem = _ref.bem,
role = _ref.role;
return {
mixins: [(0, _relation.ChildrenMixin)(parent), _field.FieldMixin],
props: {
name: null,
value: null,
disabled: Boolean,
iconSize: [Number, String],
checkedColor: String,
labelPosition: String,
labelDisabled: Boolean,
shape: {
type: String,
default: 'round'
},
bindGroup: {
type: Boolean,
default: true
}
},
computed: {
disableBindRelation: function disableBindRelation() {
return !this.bindGroup;
},
isDisabled: function isDisabled() {
return this.parent && this.parent.disabled || this.disabled;
},
direction: function direction() {
return this.parent && this.parent.direction || null;
},
iconStyle: function iconStyle() {
var checkedColor = this.checkedColor || this.parent && this.parent.checkedColor;
if (checkedColor && this.checked && !this.isDisabled) {
return {
borderColor: checkedColor,
backgroundColor: checkedColor
};
}
},
tabindex: function tabindex() {
if (this.isDisabled || role === 'radio' && !this.checked) {
return -1;
}
return 0;
}
},
methods: {
onClick: function onClick(event) {
var _this = this;
var target = event.target;
var icon = this.$refs.icon;
var iconClicked = icon === target || icon.contains(target);
if (!this.isDisabled && (iconClicked || !this.labelDisabled)) {
this.toggle(); // wait for toggle method to complete
// so we can get the changed value in the click event listener
setTimeout(function () {
_this.$emit('click', event);
});
} else {
this.$emit('click', event);
}
},
genIcon: function genIcon() {
var h = this.$createElement;
var checked = this.checked;
var iconSize = this.iconSize || this.parent && this.parent.iconSize;
return h("div", {
"ref": "icon",
"class": bem('icon', [this.shape, {
disabled: this.isDisabled,
checked: checked
}]),
"style": {
fontSize: (0, _utils.addUnit)(iconSize)
}
}, [this.slots('icon', {
checked: checked
}) || h(_icon.default, {
"attrs": {
"name": "success"
},
"style": this.iconStyle
})]);
},
genLabel: function genLabel() {
var h = this.$createElement;
var slot = this.slots();
if (slot) {
return h("span", {
"class": bem('label', [this.labelPosition, {
disabled: this.isDisabled
}])
}, [slot]);
}
}
},
render: function render() {
var h = arguments[0];
var Children = [this.genIcon()];
if (this.labelPosition === 'left') {
Children.unshift(this.genLabel());
} else {
Children.push(this.genLabel());
}
return h("div", {
"attrs": {
"role": role,
"tabindex": this.tabindex,
"aria-checked": String(this.checked)
},
"class": bem([{
disabled: this.isDisabled,
'label-disabled': this.labelDisabled
}, this.direction]),
"on": {
"click": this.onClick
}
}, [Children]);
}
};
};
exports.CheckboxMixin = CheckboxMixin;