index.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import _extends from 'babel-runtime/helpers/extends';
  2. import Vue from 'vue';
  3. import PropTypes from '../_util/vue-types';
  4. import { filterEmpty, getComponentFromProp } from '../_util/props-util';
  5. import defaultRenderEmpty from './renderEmpty';
  6. import Base from '../base';
  7. import LocaleProvider, { ANT_MARK } from '../locale-provider';
  8. import LocaleReceiver from '../locale-provider/LocaleReceiver';
  9. function getWatch() {
  10. var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
  11. var watch = {};
  12. keys.forEach(function (k) {
  13. watch[k] = function (value) {
  14. this._proxyVm._data[k] = value;
  15. };
  16. });
  17. return watch;
  18. }
  19. var ConfigProvider = {
  20. name: 'AConfigProvider',
  21. props: {
  22. getPopupContainer: PropTypes.func,
  23. prefixCls: PropTypes.string,
  24. renderEmpty: PropTypes.func,
  25. csp: PropTypes.object,
  26. autoInsertSpaceInButton: PropTypes.bool,
  27. locale: PropTypes.object,
  28. pageHeader: PropTypes.object,
  29. transformCellText: PropTypes.func
  30. },
  31. provide: function provide() {
  32. var _self = this;
  33. this._proxyVm = new Vue({
  34. data: function data() {
  35. return _extends({}, _self.$props, {
  36. getPrefixCls: _self.getPrefixCls,
  37. renderEmpty: _self.renderEmptyComponent
  38. });
  39. }
  40. });
  41. return {
  42. configProvider: this._proxyVm._data
  43. };
  44. },
  45. watch: _extends({}, getWatch(['prefixCls', 'csp', 'autoInsertSpaceInButton', 'locale', 'pageHeader', 'transformCellText'])),
  46. methods: {
  47. renderEmptyComponent: function renderEmptyComponent(h, name) {
  48. var renderEmpty = getComponentFromProp(this, 'renderEmpty', {}, false) || defaultRenderEmpty;
  49. return renderEmpty(h, name);
  50. },
  51. getPrefixCls: function getPrefixCls(suffixCls, customizePrefixCls) {
  52. var _$props$prefixCls = this.$props.prefixCls,
  53. prefixCls = _$props$prefixCls === undefined ? 'ant' : _$props$prefixCls;
  54. if (customizePrefixCls) return customizePrefixCls;
  55. return suffixCls ? prefixCls + '-' + suffixCls : prefixCls;
  56. },
  57. renderProvider: function renderProvider(legacyLocale) {
  58. var h = this.$createElement;
  59. return h(
  60. LocaleProvider,
  61. {
  62. attrs: { locale: this.locale || legacyLocale, _ANT_MARK__: ANT_MARK }
  63. },
  64. [this.$slots['default'] ? filterEmpty(this.$slots['default'])[0] : null]
  65. );
  66. }
  67. },
  68. render: function render() {
  69. var _this = this;
  70. var h = arguments[0];
  71. return h(LocaleReceiver, {
  72. scopedSlots: { 'default': function _default(_, __, legacyLocale) {
  73. return _this.renderProvider(legacyLocale);
  74. } }
  75. });
  76. }
  77. };
  78. /* istanbul ignore next */
  79. ConfigProvider.install = function (Vue) {
  80. Vue.use(Base);
  81. Vue.component(ConfigProvider.name, ConfigProvider);
  82. };
  83. export default ConfigProvider;