feat: update list & pagination
							parent
							
								
									1713581576
								
							
						
					
					
						commit
						69f5487fd1
					
				|  | @ -69,3 +69,4 @@ package-lock.json | |||
| 
 | ||||
| # 备份文件 | ||||
| /components/test/* | ||||
| list.txt | ||||
|  |  | |||
|  | @ -0,0 +1,12 @@ | |||
| // Jest Snapshot v1, https://goo.gl/fbAQLP | ||||
| 
 | ||||
| exports[`Collapse should support remove expandIcon 1`] = ` | ||||
| <div class="ant-collapse"> | ||||
|   <div role="tablist" class="ant-collapse-item"> | ||||
|     <div role="button" tabindex="0" class="ant-collapse-header"><i class="anticon anticon-right ant-collapse-arrow"><svg viewBox="64 64 896 896" data-icon="right" width="1em" height="1em" fill="currentColor" aria-hidden="true" class=""> | ||||
|           <path d="M765.7 486.8L314.9 134.7A7.97 7.97 0 0 0 302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 0 0 0-50.4z"></path> | ||||
|         </svg></i>header</div> | ||||
|     <!----> | ||||
|   </div> | ||||
| </div> | ||||
| `; | ||||
|  | @ -2,8 +2,10 @@ import PropTypes from '../_util/vue-types'; | |||
| import classNames from 'classnames'; | ||||
| import { getSlotOptions, getComponentFromProp, isEmptyElement } from '../_util/props-util'; | ||||
| import { Col } from '../grid'; | ||||
| import { ConfigConsumerProps } from '../config-provider'; | ||||
| import { ListGridType } from './index'; | ||||
| 
 | ||||
| 
 | ||||
| export const ListItemProps = { | ||||
|   prefixCls: PropTypes.string, | ||||
|   extra: PropTypes.any, | ||||
|  | @ -22,10 +24,16 @@ export const Meta = { | |||
|   functional: true, | ||||
|   name: 'AListItemMeta', | ||||
|   __ANT_LIST_ITEM_META: true, | ||||
|   inject: { | ||||
|     configProvider: { default: () => ({}) }, | ||||
|   }, | ||||
|   render(h, context) { | ||||
|     const { props, slots, listeners } = context; | ||||
|     const { props, slots, listeners, injections } = context; | ||||
|     const slotsMap = slots(); | ||||
|     const { prefixCls = 'ant-list' } = props; | ||||
|     const getPrefixCls = injections.configProvider.getPrefixCls || ConfigConsumerProps.getPrefixCls; | ||||
|     const { prefixCls: customizePrefixCls } = props; | ||||
|     const prefixCls = getPrefixCls('list', customizePrefixCls); | ||||
| 
 | ||||
|     const avatar = props.avatar || slotsMap.avatar; | ||||
|     const title = props.title || slotsMap.title; | ||||
|     const description = props.description || slotsMap.description; | ||||
|  | @ -54,11 +62,14 @@ export default { | |||
|   props: ListItemProps, | ||||
|   inject: { | ||||
|     listContext: { default: () => ({}) }, | ||||
|     configProvider: { default: () =>({}) }, | ||||
|   }, | ||||
| 
 | ||||
|   render() { | ||||
|     const { grid } = this.listContext; | ||||
|     const { prefixCls = 'ant-list', $slots, $listeners } = this; | ||||
|     const { prefixCls: customizePrefixCls, $slots, $listeners } = this; | ||||
|     const getPrefixCls = this.configProvider.getPrefixCls || ConfigConsumerProps.getPrefixCls; | ||||
|     const prefixCls = getPrefixCls('list', customizePrefixCls); | ||||
| 
 | ||||
|     const classString = `${prefixCls}-item`; | ||||
|     const extra = getComponentFromProp(this, 'extra'); | ||||
|     const actions = getComponentFromProp(this, 'actions'); | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ import classNames from 'classnames'; | |||
| import omit from 'omit.js'; | ||||
| import LocaleReceiver from '../locale-provider/LocaleReceiver'; | ||||
| import defaultLocale from '../locale-provider/default'; | ||||
| import { ConfigConsumerProps } from '../config-provider'; | ||||
| 
 | ||||
| import Spin from '../spin'; | ||||
| import Pagination, { PaginationConfig } from '../pagination'; | ||||
|  | @ -55,7 +56,6 @@ const List = { | |||
|   name: 'AList', | ||||
|   props: initDefaultProps(ListProps(), { | ||||
|     dataSource: [], | ||||
|     prefixCls: 'ant-list', | ||||
|     bordered: false, | ||||
|     split: true, | ||||
|     loading: false, | ||||
|  | @ -66,6 +66,9 @@ const List = { | |||
|       listContext: this, | ||||
|     }; | ||||
|   }, | ||||
|   inject: { | ||||
|     configProvider: { default: () => ({}) }, | ||||
|   }, | ||||
|   data() { | ||||
|     this.keys = []; | ||||
|     this.defaultPaginationProps = { | ||||
|  | @ -86,15 +89,15 @@ const List = { | |||
|   }, | ||||
|   methods: { | ||||
|     renderItem2(item, index) { | ||||
|       const { dataSource, $scopedSlots, rowKey } = this; | ||||
|       const { $scopedSlots, rowKey } = this; | ||||
|       let key; | ||||
|       const renderItem = this.renderItem || $scopedSlots.renderItem; | ||||
|       if (typeof rowKey === 'function') { | ||||
|         key = rowKey(dataSource[index]); | ||||
|         key = rowKey(item); | ||||
|       } else if (typeof rowKey === 'string') { | ||||
|         key = dataSource[rowKey]; | ||||
|         key = item[rowKey]; | ||||
|       } else { | ||||
|         key = dataSource.key; | ||||
|         key = item.key; | ||||
|       } | ||||
| 
 | ||||
|       if (!key) { | ||||
|  | @ -113,19 +116,23 @@ const List = { | |||
|       return !!(loadMore || pagination || footer); | ||||
|     }, | ||||
| 
 | ||||
|     renderEmpty(contextLocale) { | ||||
|       const locale = { ...contextLocale, ...this.locale }; | ||||
|       return <div class={`${this.prefixCls}-empty-text`}>{locale.emptyText}</div>; | ||||
|     renderEmpty(prefixCls, renderEmpty) { | ||||
|       const locale = this; | ||||
|       return ( | ||||
|         <div class={`${prefixCls}-empty-text`}> | ||||
|         {(locale && locale.emptyText) || renderEmpty(h, 'List')} | ||||
|         </div> | ||||
|       ); | ||||
|     }, | ||||
|   }, | ||||
| 
 | ||||
|   render() { | ||||
|     const { | ||||
|       prefixCls: customizePrefixCls, | ||||
|       bordered, | ||||
|       split, | ||||
|       itemLayout, | ||||
|       pagination, | ||||
|       prefixCls, | ||||
|       grid, | ||||
|       dataSource, | ||||
|       size, | ||||
|  | @ -134,6 +141,9 @@ const List = { | |||
|       $slots, | ||||
|       paginationCurrent, | ||||
|     } = this; | ||||
|     const getPrefixCls = this.configProvider.getPrefixCls || ConfigConsumerProps.getPrefixCls; | ||||
|     const prefixCls = getPrefixCls('list', customizePrefixCls); | ||||
| 
 | ||||
|     const loadMore = getComponentFromProp(this, 'loadMore'); | ||||
|     const footer = getComponentFromProp(this, 'footer'); | ||||
|     const header = getComponentFromProp(this, 'header'); | ||||
|  | @ -214,13 +224,11 @@ const List = { | |||
| 
 | ||||
|       childrenContent = grid ? <Row gutter={grid.gutter}>{childrenList}</Row> : childrenList; | ||||
|     } else if (!children.length && !isLoading) { | ||||
|       childrenContent = ( | ||||
|         <LocaleReceiver | ||||
|           componentName="Table" | ||||
|           defaultLocale={defaultLocale.Table} | ||||
|           scopedSlots={{ default: this.renderEmpty }} | ||||
|         /> | ||||
|       ); | ||||
|       const renderEmpty = ( | ||||
|         this.configProvider.renderEmpty && | ||||
|         this.configProvider.renderEmpty() | ||||
|       ) || ConfigConsumerProps.renderEmpty; | ||||
|       childrenContent = this.renderEmpty(prefixCls, renderEmpty); | ||||
|     } | ||||
|     const paginationPosition = paginationProps.position || 'bottom'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ import '../../style/index.less'; | |||
| import './index.less'; | ||||
| 
 | ||||
| // style dependencies
 | ||||
| import '../../empty/style'; | ||||
| import '../../spin/style'; | ||||
| import '../../pagination/style'; | ||||
| import '../../grid/style'; | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ import LocaleReceiver from '../locale-provider/LocaleReceiver'; | |||
| import { getOptionProps } from '../_util/props-util'; | ||||
| import VcPagination from '../vc-pagination'; | ||||
| import Icon from '../icon'; | ||||
| import { ConfigConsumerProps } from '../config-provider'; | ||||
| 
 | ||||
| export const PaginationProps = () => ({ | ||||
|   total: PropTypes.number, | ||||
|  | @ -41,12 +42,12 @@ export default { | |||
|   }, | ||||
|   props: { | ||||
|     ...PaginationProps(), | ||||
|     prefixCls: PropTypes.string.def('ant-pagination'), | ||||
|     selectPrefixCls: PropTypes.string.def('ant-select'), | ||||
|   }, | ||||
|   inject: { | ||||
|     configProvider: { default: () => ({}) }, | ||||
|   }, | ||||
|   methods: { | ||||
|     getIconsProps() { | ||||
|       const { prefixCls } = this.$props; | ||||
|     getIconsProps(prefixCls) { | ||||
|       const prevIcon = ( | ||||
|         <a class={`${prefixCls}-item-link`}> | ||||
|           <Icon type="left" /> | ||||
|  | @ -83,12 +84,25 @@ export default { | |||
|       }; | ||||
|     }, | ||||
|     renderPagination(contextLocale) { | ||||
|       const { buildOptionText, size, locale: customLocale, ...restProps } = getOptionProps(this); | ||||
|       const { | ||||
|         prefixCls: customizePrefixCls, | ||||
|         selectPrefixCls: customizeSelectPrefixCls, | ||||
|         buildOptionText, | ||||
|         size, | ||||
|         locale: customLocale, | ||||
|         ...restProps | ||||
|       } = getOptionProps(this); | ||||
|       const getPrefixCls = this.configProvider.getPrefixCls || ConfigConsumerProps.getPrefixCls; | ||||
|       const prefixCls = getPrefixCls('pagination', customizePrefixCls); | ||||
|       const selectPrefixCls = getPrefixCls('select', customizeSelectPrefixCls); | ||||
| 
 | ||||
|       const isSmall = size === 'small'; | ||||
|       const paginationProps = { | ||||
|         props: { | ||||
|           prefixCls, | ||||
|           selectPrefixCls, | ||||
|           ...restProps, | ||||
|           ...this.getIconsProps(), | ||||
|           ...this.getIconsProps(prefixCls), | ||||
|           selectComponentClass: isSmall ? MiniSelect : VcSelect, | ||||
|           locale: { ...contextLocale, ...customLocale }, | ||||
|           buildOptionText: buildOptionText || this.$scopedSlots.buildOptionText, | ||||
|  |  | |||
|  | @ -12,7 +12,7 @@ | |||
| | hideOnSinglePage | Whether to hide pager on single page | boolean | false | | ||||
| | itemRender | to customize item innerHTML | (page, type: 'page' \| 'prev' \| 'next', originalElement) => vNode | - | | ||||
| | pageSize(.sync) | number of data items per page | number | - | | ||||
| | pageSizeOptions | specify the sizeChanger options | string\[] | ['10', '20', '30', '40'] | | ||||
| | pageSizeOptions | specify the sizeChanger options | string\[] | \['10', '20', '30', '40'] | | ||||
| | showQuickJumper | determine whether you can jump to pages directly | boolean | false | | ||||
| | showSizeChanger | determine whether `pageSize` can be changed | boolean | false | | ||||
| | showTotal | to display the total number and range | Function(total, range) | - | | ||||
|  |  | |||
|  | @ -12,7 +12,7 @@ | |||
| | hideOnSinglePage | 只有一页时是否隐藏分页器 | boolean | false | | ||||
| | itemRender | 用于自定义页码的结构,可用于优化 SEO | (page, type: 'page' \| 'prev' \| 'next', originalElement) => vNode | - | | ||||
| | pageSize(.sync) | 每页条数 | number | - | | ||||
| | pageSizeOptions | 指定每页可以显示多少条 | string\[] | ['10', '20', '30', '40'] | | ||||
| | pageSizeOptions | 指定每页可以显示多少条 | string\[] | \['10', '20', '30', '40'] | | ||||
| | showQuickJumper | 是否可以快速跳转至某页 | boolean | false | | ||||
| | showSizeChanger | 是否可以改变 pageSize | boolean | false | | ||||
| | showTotal | 用于显示数据总量和当前数据顺序 | Function(total, range) | - | | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 wangxueliang
						wangxueliang