feat: update auto-complete && avatar
parent
08821561ab
commit
9051cd3822
|
@ -3,6 +3,7 @@ import Select, { AbstractSelectProps, SelectValue } from '../select';
|
||||||
import Input from '../input';
|
import Input from '../input';
|
||||||
import InputElement from './InputElement';
|
import InputElement from './InputElement';
|
||||||
import PropTypes from '../_util/vue-types';
|
import PropTypes from '../_util/vue-types';
|
||||||
|
import { ConfigConsumerProps } from '../config-provider';
|
||||||
import {
|
import {
|
||||||
getComponentFromProp,
|
getComponentFromProp,
|
||||||
getOptionProps,
|
getOptionProps,
|
||||||
|
@ -55,6 +56,9 @@ const AutoComplete = {
|
||||||
prop: 'value',
|
prop: 'value',
|
||||||
event: 'change',
|
event: 'change',
|
||||||
},
|
},
|
||||||
|
inject: {
|
||||||
|
configProvider: { default: () => ({}) },
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getInputElement() {
|
getInputElement() {
|
||||||
const { $slots } = this;
|
const { $slots } = this;
|
||||||
|
@ -77,7 +81,10 @@ const AutoComplete = {
|
||||||
},
|
},
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { size, prefixCls, optionLabelProp, dataSource, $slots, $listeners } = this;
|
const { size, prefixCls: customizePrefixCls, optionLabelProp, dataSource, $slots, $listeners } = this;
|
||||||
|
|
||||||
|
const getPrefixCls = this.configProvider.getPrefixCls || ConfigConsumerProps.getPrefixCls;
|
||||||
|
const prefixCls = getPrefixCls('select', customizePrefixCls);
|
||||||
|
|
||||||
const cls = {
|
const cls = {
|
||||||
[`${prefixCls}-lg`]: size === 'large',
|
[`${prefixCls}-lg`]: size === 'large',
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { ConfigConsumerProps } from '../config-provider';
|
||||||
import Icon from '../icon';
|
import Icon from '../icon';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
@ -24,6 +25,9 @@ export default {
|
||||||
alt: String,
|
alt: String,
|
||||||
loadError: Function,
|
loadError: Function,
|
||||||
},
|
},
|
||||||
|
inject: {
|
||||||
|
configProvider: { default: () => ({}) },
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
isImgExist: true,
|
isImgExist: true,
|
||||||
|
@ -73,7 +77,10 @@ export default {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
render() {
|
render() {
|
||||||
const { prefixCls, shape, size, src, icon, alt, srcSet } = this.$props;
|
const { prefixCls: customizePrefixCls, shape, size, src, icon, alt, srcSet } = this.$props;
|
||||||
|
|
||||||
|
const getPrefixCls = this.configProvider.getPrefixCls || ConfigConsumerProps.getPrefixCls;
|
||||||
|
const prefixCls = getPrefixCls('avatar', customizePrefixCls);
|
||||||
|
|
||||||
const { isImgExist, scale } = this.$data;
|
const { isImgExist, scale } = this.$data;
|
||||||
|
|
||||||
|
|
|
@ -76,4 +76,40 @@ describe('Avatar Render', () => {
|
||||||
expect(wrapper.find({ name: 'AAvatar' }).vm.isImgExist).toBe(true);
|
expect(wrapper.find({ name: 'AAvatar' }).vm.isImgExist).toBe(true);
|
||||||
expect(global.document.body.querySelector('img').getAttribute('src')).toBe(LOAD_SUCCESS_SRC);
|
expect(global.document.body.querySelector('img').getAttribute('src')).toBe(LOAD_SUCCESS_SRC);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should show image on success after a failure state', () => {
|
||||||
|
global.document.body.innerHTML = '';
|
||||||
|
const LOAD_FAILURE_SRC = 'http://error.url';
|
||||||
|
const LOAD_SUCCESS_SRC = 'https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png';
|
||||||
|
|
||||||
|
const Foo = {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
src: LOAD_FAILURE_SRC,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleImgError() {
|
||||||
|
this.src = LOAD_SUCCESS_SRC;
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
render() {
|
||||||
|
const { src } = this;
|
||||||
|
return <Avatar src={src} loadError={this.handleImgError}>Fallback</Avatar>;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const wrapper = mount(Foo, { attachToDocument: true });
|
||||||
|
wrapper.find('img').trigger('error');
|
||||||
|
|
||||||
|
expect(wrapper.find({ name: 'AAvatar' }).vm.isImgExist).toBe(false);
|
||||||
|
expect(wrapper.find('.ant-avatar-string').length).toBe(1);
|
||||||
|
|
||||||
|
wrapper.setProps({ src: LOAD_SUCCESS_SRC });
|
||||||
|
|
||||||
|
expect(wrapper.find({ name: 'AAvatar' }).vm.isImgExist).toBe(true);
|
||||||
|
expect(wrapper.find('.ant-avatar-image').length).toBe(1);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -8,5 +8,5 @@
|
||||||
| src | the address of the image for an image avatar | string | - |
|
| src | the address of the image for an image avatar | string | - |
|
||||||
| srcSet | a list of sources to use for different screen resolutions | string | - |
|
| srcSet | a list of sources to use for different screen resolutions | string | - |
|
||||||
| alt | This attribute defines the alternative text describing the image | string | - |
|
| alt | This attribute defines the alternative text describing the image | string | - |
|
||||||
| loadError | handler when img load error,return false to prevent default fallback behavior | () => boolean | - |
|
| loadError | handler when img load error, return false to prevent default fallback behavior | () => boolean | - |
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue