index.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import _extends from 'babel-runtime/helpers/extends';
  2. import _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';
  3. import omit from 'omit.js';
  4. import PropTypes from '../_util/vue-types';
  5. import { getOptionProps, getComponentFromProp, getListeners } from '../_util/props-util';
  6. import { ConfigConsumerProps } from '../config-provider/configConsumerProps';
  7. import VcRate from '../vc-rate';
  8. import Icon from '../icon';
  9. import Tooltip from '../tooltip';
  10. import Base from '../base';
  11. export var RateProps = {
  12. prefixCls: PropTypes.string,
  13. count: PropTypes.number,
  14. value: PropTypes.value,
  15. defaultValue: PropTypes.value,
  16. allowHalf: PropTypes.bool,
  17. allowClear: PropTypes.bool,
  18. tooltips: PropTypes.arrayOf(PropTypes.string),
  19. disabled: PropTypes.bool,
  20. character: PropTypes.any,
  21. autoFocus: PropTypes.bool
  22. };
  23. var Rate = {
  24. name: 'ARate',
  25. model: {
  26. prop: 'value',
  27. event: 'change'
  28. },
  29. props: RateProps,
  30. inject: {
  31. configProvider: { 'default': function _default() {
  32. return ConfigConsumerProps;
  33. } }
  34. },
  35. methods: {
  36. characterRender: function characterRender(node, _ref) {
  37. var index = _ref.index;
  38. var h = this.$createElement;
  39. var tooltips = this.$props.tooltips;
  40. if (!tooltips) return node;
  41. return h(
  42. Tooltip,
  43. {
  44. attrs: { title: tooltips[index] }
  45. },
  46. [node]
  47. );
  48. },
  49. focus: function focus() {
  50. this.$refs.refRate.focus();
  51. },
  52. blur: function blur() {
  53. this.$refs.refRate.blur();
  54. }
  55. },
  56. render: function render() {
  57. var h = arguments[0];
  58. var _getOptionProps = getOptionProps(this),
  59. customizePrefixCls = _getOptionProps.prefixCls,
  60. restProps = _objectWithoutProperties(_getOptionProps, ['prefixCls']);
  61. var getPrefixCls = this.configProvider.getPrefixCls;
  62. var prefixCls = getPrefixCls('rate', customizePrefixCls);
  63. var character = getComponentFromProp(this, 'character') || h(Icon, {
  64. attrs: { type: 'star', theme: 'filled' }
  65. });
  66. var rateProps = {
  67. props: _extends({
  68. character: character,
  69. characterRender: this.characterRender,
  70. prefixCls: prefixCls
  71. }, omit(restProps, ['tooltips'])),
  72. on: getListeners(this),
  73. ref: 'refRate'
  74. };
  75. return h(VcRate, rateProps);
  76. }
  77. };
  78. /* istanbul ignore next */
  79. Rate.install = function (Vue) {
  80. Vue.use(Base);
  81. Vue.component(Rate.name, Rate);
  82. };
  83. export default Rate;