feat: update comment、divider、grid

pull/666/head
wangxueliang 2019-03-15 15:12:28 +08:00
parent 52b3883cf2
commit 16409c6ed1
6 changed files with 73 additions and 24 deletions

View File

@ -381,8 +381,8 @@ const Cascader = {
} = props; } = props;
const getPrefixCls = this.configProvider.getPrefixCls || ConfigConsumerProps.getPrefixCls; const getPrefixCls = this.configProvider.getPrefixCls || ConfigConsumerProps.getPrefixCls;
const renderEmpty = ( const renderEmpty = (
this.configProvider.renderEmptyComponent && this.configProvider.renderEmpty &&
this.configProvider.renderEmptyComponent() this.configProvider.renderEmpty()
) || ConfigConsumerProps.renderEmpty; ) || ConfigConsumerProps.renderEmpty;
const prefixCls = getPrefixCls('cascader', customizePrefixCls); const prefixCls = getPrefixCls('cascader', customizePrefixCls);
const inputPrefixCls = getPrefixCls('input', customizeInputPrefixCls); const inputPrefixCls = getPrefixCls('input', customizeInputPrefixCls);

View File

@ -1,5 +1,6 @@
import PropsTypes from '../_util/vue-types'; import PropsTypes from '../_util/vue-types';
import { initDefaultProps, getComponentFromProp } from '../_util/props-util'; import { initDefaultProps, getComponentFromProp } from '../_util/props-util';
import { ConfigConsumerProps } from '../config-provider';
export const CommentProps = { export const CommentProps = {
actions: PropsTypes.array, actions: PropsTypes.array,
@ -17,9 +18,10 @@ export const CommentProps = {
const Comment = { const Comment = {
name: 'AComment', name: 'AComment',
props: initDefaultProps(CommentProps, { props: CommentProps,
prefixCls: 'ant-comment', inject: {
}), configProvider: { default: () => ({}) },
},
methods: { methods: {
getAction(actions) { getAction(actions) {
if (!actions || !actions.length) { if (!actions || !actions.length) {
@ -36,7 +38,10 @@ const Comment = {
}, },
render() { render() {
const { prefixCls } = this.$props; const { prefixCls: customizePrefixCls } = this.$props;
const getPrefixCls = this.configProvider.getPrefixCls || ConfigConsumerProps.getPrefixCls;
const prefixCls = getPrefixCls('comment', customizePrefixCls);
const actions = getComponentFromProp(this, 'actions'); const actions = getComponentFromProp(this, 'actions');
const author = getComponentFromProp(this, 'author'); const author = getComponentFromProp(this, 'author');

View File

@ -1,7 +1,18 @@
import Vue from 'vue';
import PropTypes from '../_util/vue-types'; import PropTypes from '../_util/vue-types';
import { filterEmpty } from '../_util/props-util'; import { filterEmpty } from '../_util/props-util';
import defaultRenderEmpty from './renderEmpty'; import defaultRenderEmpty from './renderEmpty';
function getWatch(keys = []) {
const watch = {};
keys.forEach(k => {
watch[k] = function() {
this._proxyVm._data[k] = value;
};
});
return watch;
}
const ConfigProvider = { const ConfigProvider = {
name: 'AConfigProvider', name: 'AConfigProvider',
props: { props: {
@ -12,10 +23,27 @@ const ConfigProvider = {
autoInsertSpaceInButton: PropTypes.bool, autoInsertSpaceInButton: PropTypes.bool,
}, },
provide() { provide() {
const _self = this;
this._proxyVm = new Vue({
data() {
return { return {
configProvider: this, ..._self.$props,
getPrefixCls: _self.getPrefixCls,
renderEmpty: _self.renderEmptyComponent,
}; };
}, },
});
return {
configProvider: this._proxyVm._data,
};
},
watch: {
...getWatch([
'prefixCls',
'csp',
'autoInsertSpaceInButton',
]),
},
methods: { methods: {
renderEmptyComponent() { renderEmptyComponent() {
const customRender = (this.$scopedSlots && this.$scopedSlots['renderEmpty']) || this.$slots['renderEmpty']; const customRender = (this.$scopedSlots && this.$scopedSlots['renderEmpty']) || this.$slots['renderEmpty'];

View File

@ -1,30 +1,33 @@
import PropTypes from '../_util/vue-types'; import PropTypes from '../_util/vue-types';
import { ConfigConsumerProps } from '../config-provider';
const Divider = { const Divider = {
name: 'ADivider', name: 'ADivider',
props: { props: {
prefixCls: PropTypes.string.def('ant'), prefixCls: PropTypes.string,
type: PropTypes.oneOf(['horizontal', 'vertical', '']).def('horizontal'), type: PropTypes.oneOf(['horizontal', 'vertical', '']).def('horizontal'),
dashed: PropTypes.bool, dashed: PropTypes.bool,
orientation: PropTypes.oneOf(['left', 'right']), orientation: PropTypes.oneOf(['left', 'right']),
}, },
computed: { inject: {
classString() { configProvider: { default: () => ({}) },
const { prefixCls, type, $slots, dashed, orientation = '' } = this;
const orientationPrefix = orientation.length > 0 ? '-' + orientation : orientation;
return {
[`${prefixCls}-divider`]: true,
[`${prefixCls}-divider-${type}`]: true,
[`${prefixCls}-divider-with-text${orientationPrefix}`]: $slots.default,
[`${prefixCls}-divider-dashed`]: !!dashed,
};
},
}, },
render() { render() {
const { classString, prefixCls, $slots } = this; const { prefixCls: customizePrefixCls, type, $slots, dashed, orientation = '' } = this;
const getPrefixCls = this.configProvider.getPrefixCls || ConfigConsumerProps.getPrefixCls;
const prefixCls = getPrefixCls('divider', customizePrefixCls);
const orientationPrefix = orientation.length > 0 ? '-' + orientation : orientation;
const classString = {
[prefixCls]: true,
[`${prefixCls}-${type}`]: true,
[`${prefixCls}-with-text${orientationPrefix}`]: $slots.default,
[`${prefixCls}-dashed`]: !!dashed,
};
return ( return (
<div class={classString}> <div class={classString}>
{$slots.default && <span class={`${prefixCls}-divider-inner-text`}>{$slots.default}</span>} {$slots.default && <span class={`${prefixCls}-inner-text`}>{$slots.default}</span>}
</div> </div>
); );
}, },

View File

@ -1,4 +1,5 @@
import PropTypes from '../_util/vue-types'; import PropTypes from '../_util/vue-types';
import { ConfigConsumerProps } from '../config-provider';
const stringOrNumber = PropTypes.oneOfType([PropTypes.string, PropTypes.number]); const stringOrNumber = PropTypes.oneOfType([PropTypes.string, PropTypes.number]);
@ -31,6 +32,7 @@ export default {
name: 'ACol', name: 'ACol',
props: ColProps, props: ColProps,
inject: { inject: {
configProvider: { default: () => ({}) },
rowContext: { rowContext: {
default: () => null, default: () => null,
}, },
@ -42,12 +44,15 @@ export default {
offset, offset,
push, push,
pull, pull,
prefixCls = 'ant-col', prefixCls: customizePrefixCls,
$slots, $slots,
$attrs, $attrs,
$listeners, $listeners,
rowContext, rowContext,
} = this; } = this;
const getPrefixCls = this.configProvider.getPrefixCls || ConfigConsumerProps.getPrefixCls;
const prefixCls = getPrefixCls('col', customizePrefixCls);
let sizeClassObj = {}; let sizeClassObj = {};
['xs', 'sm', 'md', 'lg', 'xl', 'xxl'].forEach(size => { ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'].forEach(size => {
let sizeProps = {}; let sizeProps = {};

View File

@ -1,5 +1,7 @@
import PropTypes from '../_util/vue-types'; import PropTypes from '../_util/vue-types';
import BaseMixin from '../_util/BaseMixin'; import BaseMixin from '../_util/BaseMixin';
import { ConfigConsumerProps } from '../config-provider';
// matchMedia polyfill for // matchMedia polyfill for
// https://github.com/WickyNilliams/enquire.js/issues/82 // https://github.com/WickyNilliams/enquire.js/issues/82
let enquire = null; let enquire = null;
@ -56,6 +58,9 @@ export default {
rowContext: this, rowContext: this,
}; };
}, },
inject: {
configProvider: { default: () => ({}) },
},
data() { data() {
return { return {
screens: {}, screens: {},
@ -113,7 +118,10 @@ export default {
}, },
render() { render() {
const { type, justify, align, prefixCls = 'ant-row', $slots } = this; const { type, justify, align, prefixCls: customizePrefixCls, $slots } = this;
const getPrefixCls = this.configProvider.getPrefixCls || ConfigConsumerProps.getPrefixCls;
const prefixCls = getPrefixCls('row', customizePrefixCls);
const gutter = this.getGutter(); const gutter = this.getGutter();
const classes = { const classes = {
[prefixCls]: !type, [prefixCls]: !type,