feat: update auto-complete && avatar
							parent
							
								
									08821561ab
								
							
						
					
					
						commit
						9051cd3822
					
				| 
						 | 
				
			
			@ -3,6 +3,7 @@ import Select, { AbstractSelectProps, SelectValue } from '../select';
 | 
			
		|||
import Input from '../input';
 | 
			
		||||
import InputElement from './InputElement';
 | 
			
		||||
import PropTypes from '../_util/vue-types';
 | 
			
		||||
import { ConfigConsumerProps } from '../config-provider';
 | 
			
		||||
import {
 | 
			
		||||
  getComponentFromProp,
 | 
			
		||||
  getOptionProps,
 | 
			
		||||
| 
						 | 
				
			
			@ -55,6 +56,9 @@ const AutoComplete = {
 | 
			
		|||
    prop: 'value',
 | 
			
		||||
    event: 'change',
 | 
			
		||||
  },
 | 
			
		||||
  inject: {
 | 
			
		||||
    configProvider: { default: () => ({}) },
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getInputElement() {
 | 
			
		||||
      const { $slots } = this;
 | 
			
		||||
| 
						 | 
				
			
			@ -77,7 +81,10 @@ const AutoComplete = {
 | 
			
		|||
  },
 | 
			
		||||
 | 
			
		||||
  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 = {
 | 
			
		||||
      [`${prefixCls}-lg`]: size === 'large',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
import { ConfigConsumerProps } from '../config-provider';
 | 
			
		||||
import Icon from '../icon';
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
| 
						 | 
				
			
			@ -24,6 +25,9 @@ export default {
 | 
			
		|||
    alt: String,
 | 
			
		||||
    loadError: Function,
 | 
			
		||||
  },
 | 
			
		||||
  inject: {
 | 
			
		||||
    configProvider: { default: () => ({}) },
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      isImgExist: true,
 | 
			
		||||
| 
						 | 
				
			
			@ -73,7 +77,10 @@ export default {
 | 
			
		|||
    },
 | 
			
		||||
  },
 | 
			
		||||
  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;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -76,4 +76,40 @@ describe('Avatar Render', () => {
 | 
			
		|||
    expect(wrapper.find({ name: 'AAvatar' }).vm.isImgExist).toBe(true);
 | 
			
		||||
    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 | - |
 | 
			
		||||
| srcSet | a list of sources to use for different screen resolutions | 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