Browse Source

fix: config-provider bug

pull/666/head
wangxueliang 6 years ago
parent
commit
64b3ab1a55
  1. 13
      components/cascader/index.jsx
  2. 19
      components/config-provider/empty.svg
  3. 12
      components/config-provider/index.jsx
  4. 18
      components/config-provider/renderEmpty.jsx
  5. 4
      components/empty/demo/config-provider.md
  6. 5
      components/empty/empty.svg

13
components/cascader/index.jsx

@ -287,6 +287,7 @@ const Cascader = {
},
generateFilteredOptions(prefixCls, renderEmpty) {
const h = this.$createElement;
const { showSearch, notFoundContent, $scopedSlots } = this;
const names = getFilledFieldNames(this.$props);
const {
@ -337,7 +338,7 @@ const Cascader = {
}
return [
{
[names.label]: notFoundContent || renderEmpty('Cascader'),
[names.label]: notFoundContent || renderEmpty(h, 'Cascader'),
[names.value]: 'ANT_CASCADER_NOT_FOUND',
disabled: true,
},
@ -378,9 +379,11 @@ const Cascader = {
showSearch = false,
...otherProps
} = props;
const getPrefixCls = this.configProvider.getPrefixCls || ConfigConsumerProps.getPrefixCls;
const renderEmpty = this.configProvider.renderEmpty || ((componentName) => ConfigConsumerProps.renderEmpty(componentName));
const renderEmpty = (
this.configProvider.renderEmptyComponent &&
this.configProvider.renderEmptyComponent()
) || ConfigConsumerProps.renderEmpty;
const prefixCls = getPrefixCls('cascader', customizePrefixCls);
const inputPrefixCls = getPrefixCls('input', customizeInputPrefixCls);
@ -450,8 +453,8 @@ const Cascader = {
}
// The default value of `matchInputWidth` is `true`
const resultListMatchInputWidth = showSearch.matchInputWidth !== false;
if (resultListMatchInputWidth && inputValue && this.input) {
dropdownMenuColumnStyle.width = this.input.input.offsetWidth;
if (resultListMatchInputWidth && inputValue && this.$refs.input) {
dropdownMenuColumnStyle.width = this.$refs.input.$el.offsetWidth + 'px';
}
// showSearchfocusblurinputref='picker'
const inputProps = {

19
components/config-provider/empty.svg

@ -1,16 +1,9 @@
<svg width="184" height="152" xmlns="http://www.w3.org/2000/svg">
<g fill="none" fill-rule="evenodd">
<g transform="translate(24 31.67)">
<ellipse fill-opacity=".8" fill="#F5F5F7" cx="67.797" cy="106.89" rx="67.797" ry="12.668"/>
<path d="M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z" fill="#AEB8C2"/>
<path d="M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z" fill="url(#linearGradient-1)" transform="translate(13.56)"/>
<path d="M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z" fill="#F5F5F7"/>
<path d="M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z" fill="#DCE0E6"/>
</g>
<path d="M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z" fill="#DCE0E6"/>
<g transform="translate(149.65 15.383)" fill="#FFF">
<ellipse cx="20.654" cy="3.167" rx="2.849" ry="2.815"/>
<path d="M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z"/>
<svg width="64" height="41" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(0 1)" fill="none" fill-rule="evenodd">
<ellipse fill="#F5F5F5" cx="32" cy="33" rx="32" ry="7"/>
<g fill-rule="nonzero" stroke="#D9D9D9">
<path d="M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z"/>
<path d="M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z" fill="#FAFAFA"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 657 B

12
components/config-provider/index.jsx

@ -13,20 +13,14 @@ const ConfigProvider = {
},
provide() {
return {
configProvider: {
...this.$props,
renderEmpty: this.renderEmptySlots,
getPrefixCls: this.getPrefixCls,
},
configProvider: this,
};
},
computed: {
renderEmptySlots() {
methods: {
renderEmptyComponent() {
const customRender = (this.$scopedSlots && this.$scopedSlots['renderEmpty']) || this.$slots['renderEmpty'];
return this.$props.renderEmpty || customRender || defaultRenderEmpty;
},
},
methods: {
getPrefixCls(suffixCls, customizePrefixCls) {
const { prefixCls = 'ant' } = this.$props;
if (customizePrefixCls) return customizePrefixCls;

18
components/config-provider/renderEmpty.jsx

@ -1,27 +1,31 @@
import PropTypes from '../_util/vue-types';
import Empty from '../empty';
import emptyImg from './empty.svg';
import { ConfigConsumerProps } from '.';
const renderEmpty = {
const RenderEmpty = {
functional: true,
inject: ['configProvider'],
inject: {
configProvider: { default: () => ({}) },
},
props: {
componentName: PropTypes.string,
},
render(createElement, context) {
const { props, injections } = context;
function renderHtml(componentName) {
const prefix = injections.configProvider.getPrefixCls('empty');
const getPrefixCls = injections.configProvider.getPrefixCls || ConfigConsumerProps.getPrefixCls;
const prefix = getPrefixCls('empty');
switch (componentName) {
case 'Table':
case 'List':
return <Empty image={emptyImg} className={`${prefix}-normal`} />;
return <Empty image={emptyImg} class={`${prefix}-normal`} />;
case 'Select':
case 'TreeSelect':
case 'Cascader':
case 'Transfer':
return <Empty image={emptyImg} className={`${prefix}-small`} />;
return <Empty image={emptyImg} class={`${prefix}-small`} />;
default:
return <Empty />;
@ -31,4 +35,8 @@ const renderEmpty = {
},
};
function renderEmpty(h, componentName) {
return <RenderEmpty componentName={componentName} />;
}
export default renderEmpty;

4
components/empty/demo/config-provider.md

@ -20,7 +20,7 @@ Use ConfigProvider set global Empty style.
<a-divider />
<a-config-provider>
<template v-slot:renderEmpty>
<template v-if="customize" v-slot:renderEmpty>
<div style="textAlign: center">
<a-icon type="smile" style="fontSize: 20px" />
<p>Data Not Found</p>
@ -54,7 +54,7 @@ Use ConfigProvider set global Empty style.
export default {
data() {
return {
customize: true,
customize: false,
style: {width: '200px'},
columns: [
{

5
components/empty/empty.svg

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="184px" height="152px" xmlns="http://www.w3.org/2000/svg">
<g id="Vue" fill="none" fill-rule="evenodd">
<svg width="184" height="152" xmlns="http://www.w3.org/2000/svg">
<g fill="none" fill-rule="evenodd">
<g transform="translate(24 31.67)">
<ellipse fill-opacity=".8" fill="#F5F5F7" cx="67.797" cy="106.89" rx="67.797" ry="12.668"/>
<path d="M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z" fill="#AEB8C2"/>

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Loading…
Cancel
Save