@meve/ui
Version:
Argon design system components library
184 lines (165 loc) • 6.09 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import Ripple from '../ripple';
import FormItem from '../form-item';
import { createNamespace } from '../utils/create';
import { props } from './props';
import { createChildrenMixin } from '../utils/mixins/relation';
var _createNamespace = createNamespace('radio'),
createComponent = _createNamespace.createComponent,
namespace = _createNamespace.namespace;
var RadioPlugin = createComponent({
props: props,
mixins: [createChildrenMixin('radioGroup', {
parentKey: 'radioGroup',
childrenKey: 'radios'
}), createChildrenMixin('form', {
parentKey: 'form',
childrenKey: 'formComponents'
})],
directives: {
Ripple: Ripple
},
data: function data() {
return {
localValue: false,
errorMessage: ''
};
},
computed: {
checked: function checked() {
return this.localValue === this.checkedValue;
}
},
watch: {
value: {
handler: function handler(newValue) {
this.localValue = newValue;
},
immediate: true
}
},
methods: {
// expose
reset: function reset() {
this.$emit('input', this.uncheckedValue);
this.resetValidation();
},
// expose
validate: function validate() {
this.$refs.formItem.validate();
},
// expose
resetValidation: function resetValidation() {
this.$refs.formItem.resetValidation();
},
// expose
toggle: function toggle(changedValue) {
var uncheckedValue = this.uncheckedValue,
checkedValue = this.checkedValue;
var shouldReverse = ![uncheckedValue, checkedValue].includes(changedValue);
if (shouldReverse) {
changedValue = this.checked ? uncheckedValue : checkedValue;
}
this.change(changedValue);
},
nextTickValidateWithTrigger: function nextTickValidateWithTrigger(trigger) {
var _this = this;
this.$nextTick(function () {
var _this$$refs$formItem;
(_this$$refs$formItem = _this.$refs.formItem) == null ? void 0 : _this$$refs$formItem.validateWithTrigger(_this.validateTrigger, trigger, _this.rules, _this.value);
});
},
change: function change(changedValue) {
var _this$radioGroup;
if (this.radioGroup && this.localValue === this.checkedValue) {
return;
}
this.localValue = changedValue;
this.$emit('input', changedValue);
this.$emit('change', changedValue);
(_this$radioGroup = this.radioGroup) == null ? void 0 : _this$radioGroup.onToggle(this.checkedValue);
this.nextTickValidateWithTrigger('onChange');
},
handleClick: function handleClick(event) {
var _this$form, _this$form2;
var disabled = this.disabled,
readonly = this.readonly,
uncheckedValue = this.uncheckedValue,
checkedValue = this.checkedValue;
if ((_this$form = this.form) != null && _this$form.disabled || disabled) {
return;
}
this.$emit('click', event);
this.nextTickValidateWithTrigger('onClick');
if ((_this$form2 = this.form) != null && _this$form2.readonly || readonly) {
return;
}
this.change(this.checked ? uncheckedValue : checkedValue);
},
sync: function sync(value) {
this.localValue = value === this.checkedValue ? this.checkedValue : this.uncheckedValue;
},
handleErrorMessageChange: function handleErrorMessageChange(errorMessage) {
this.errorMessage = errorMessage;
}
},
render: function render() {
var h = arguments[0];
var label = this.label,
value = this.value,
rules = this.rules,
checked = this.checked,
ripple = this.ripple,
size = this.size,
handleClick = this.handleClick,
disabled = this.disabled,
readonly = this.readonly,
form = this.form,
errorMessage = this.errorMessage,
radioGroup = this.radioGroup,
handleErrorMessageChange = this.handleErrorMessageChange;
return h(FormItem, {
"attrs": {
"radio-cover": true,
"label": label,
"value": value,
"rules": rules
},
"ref": "formItem",
"on": _extends({}, {
'error-message-change': handleErrorMessageChange
})
}, [h("label", {
"class": [namespace(), 'm--box', namespace("--" + size), form != null && form.disabled || disabled ? namespace('--text-disabled') : null, radioGroup != null && radioGroup.errorMessage || errorMessage ? namespace('--text-error') : null]
}, [h("input", {
"class": namespace('__input'),
"attrs": {
"type": "radio",
"disabled": (form == null ? void 0 : form.disabled) || disabled,
"readOnly": (form == null ? void 0 : form.readonly) || readonly
},
"on": _extends({}, {
"click": function click($event) {
for (var _len = arguments.length, attrs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
attrs[_key - 1] = arguments[_key];
}
handleClick.apply(void 0, [$event].concat(attrs));
}
})
}), h("div", {
"class": [namespace('__radio-container'), namespace("--" + size + "-radio-container")],
"directives": [{
name: "ripple",
value: {
disabled: !ripple || disabled || readonly || (form == null ? void 0 : form.disabled) || (form == null ? void 0 : form.readonly)
}
}]
}, [h("div", {
"class": [namespace('__radio'), namespace("--" + size + "-radio"), checked ? namespace("--" + size + "-svg") : null, checked ? null : namespace("--border-visible"), checked ? namespace('--checked') : null, radioGroup != null && radioGroup.errorMessage || errorMessage ? checked ? namespace('--background-error') : namespace('--border-error') : null, form != null && form.disabled || disabled ? namespace('--disabled') : null]
})]), h("div", {
"class": namespace('__label')
}, [this.slots()])])]);
}
});
export var _RadioComponent = RadioPlugin;
export default RadioPlugin;