Radio.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import _mergeJSXProps from 'babel-helper-vue-jsx-merge-props';
  2. import _defineProperty from 'babel-runtime/helpers/defineProperty';
  3. import _extends from 'babel-runtime/helpers/extends';
  4. import _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';
  5. import PropTypes from '../_util/vue-types';
  6. import VcCheckbox from '../vc-checkbox';
  7. import classNames from 'classnames';
  8. import { getOptionProps, getAttrs, getListeners } from '../_util/props-util';
  9. import { ConfigConsumerProps } from '../config-provider/configConsumerProps';
  10. function noop() {}
  11. export default {
  12. name: 'ARadio',
  13. model: {
  14. prop: 'checked'
  15. },
  16. props: {
  17. prefixCls: PropTypes.string,
  18. defaultChecked: Boolean,
  19. checked: { type: Boolean, 'default': undefined },
  20. disabled: Boolean,
  21. isGroup: Boolean,
  22. value: PropTypes.any,
  23. name: String,
  24. id: String,
  25. autoFocus: Boolean,
  26. type: PropTypes.string.def('radio')
  27. },
  28. inject: {
  29. radioGroupContext: { 'default': undefined },
  30. configProvider: { 'default': function _default() {
  31. return ConfigConsumerProps;
  32. } }
  33. },
  34. methods: {
  35. focus: function focus() {
  36. this.$refs.vcCheckbox.focus();
  37. },
  38. blur: function blur() {
  39. this.$refs.vcCheckbox.blur();
  40. },
  41. handleChange: function handleChange(event) {
  42. var targetChecked = event.target.checked;
  43. this.$emit('input', targetChecked);
  44. this.$emit('change', event);
  45. },
  46. onChange: function onChange(e) {
  47. this.$emit('change', e);
  48. if (this.radioGroupContext && this.radioGroupContext.onRadioChange) {
  49. this.radioGroupContext.onRadioChange(e);
  50. }
  51. }
  52. },
  53. render: function render() {
  54. var _classNames;
  55. var h = arguments[0];
  56. var $slots = this.$slots,
  57. radioGroup = this.radioGroupContext;
  58. var props = getOptionProps(this);
  59. var children = $slots['default'];
  60. var _getListeners = getListeners(this),
  61. _getListeners$mouseen = _getListeners.mouseenter,
  62. mouseenter = _getListeners$mouseen === undefined ? noop : _getListeners$mouseen,
  63. _getListeners$mousele = _getListeners.mouseleave,
  64. mouseleave = _getListeners$mousele === undefined ? noop : _getListeners$mousele,
  65. restListeners = _objectWithoutProperties(_getListeners, ['mouseenter', 'mouseleave']);
  66. var customizePrefixCls = props.prefixCls,
  67. restProps = _objectWithoutProperties(props, ['prefixCls']);
  68. var getPrefixCls = this.configProvider.getPrefixCls;
  69. var prefixCls = getPrefixCls('radio', customizePrefixCls);
  70. var radioProps = {
  71. props: _extends({}, restProps, { prefixCls: prefixCls }),
  72. on: restListeners,
  73. attrs: getAttrs(this)
  74. };
  75. if (radioGroup) {
  76. radioProps.props.name = radioGroup.name;
  77. radioProps.on.change = this.onChange;
  78. radioProps.props.checked = props.value === radioGroup.stateValue;
  79. radioProps.props.disabled = props.disabled || radioGroup.disabled;
  80. } else {
  81. radioProps.on.change = this.handleChange;
  82. }
  83. var wrapperClassString = classNames((_classNames = {}, _defineProperty(_classNames, prefixCls + '-wrapper', true), _defineProperty(_classNames, prefixCls + '-wrapper-checked', radioProps.props.checked), _defineProperty(_classNames, prefixCls + '-wrapper-disabled', radioProps.props.disabled), _classNames));
  84. return h(
  85. 'label',
  86. { 'class': wrapperClassString, on: {
  87. 'mouseenter': mouseenter,
  88. 'mouseleave': mouseleave
  89. }
  90. },
  91. [h(VcCheckbox, _mergeJSXProps([radioProps, { ref: 'vcCheckbox' }])), children !== undefined ? h('span', [children]) : null]
  92. );
  93. }
  94. };