@@ -2,6 +2,7 @@ import classNames from 'classnames';
22import PropTypes from '../_util/vue-types' ;
33import {
44 getOptionProps ,
5+ getPropsData ,
56 initDefaultProps ,
67 filterEmpty ,
78 getComponentFromProp ,
@@ -25,6 +26,7 @@ export default {
2526 name : 'ATimeline' ,
2627 props : initDefaultProps ( TimelineProps , {
2728 reverse : false ,
29+ mode : '' ,
2830 } ) ,
2931 inject : {
3032 configProvider : { default : ( ) => ConfigConsumerProps } ,
@@ -52,41 +54,44 @@ export default {
5254 // },
5355 // })
5456 // })
55- const pendingItem = ! ! pending ? (
57+ const pendingItem = pending ? (
5658 < TimelineItem pending = { ! ! pending } >
5759 < template slot = "dot" > { pendingDot || < Icon type = "loading" /> } </ template >
5860 { pendingNode }
5961 </ TimelineItem >
6062 ) : null ;
6163
62- const timeLineItems = ! ! reverse
64+ const timeLineItems = reverse
6365 ? [ pendingItem , ...children . reverse ( ) ]
6466 : [ ...children , pendingItem ] ;
6567
68+ const getPositionCls = ( ele , idx ) => {
69+ const eleProps = getPropsData ( ele ) ;
70+ if ( mode === 'alternate' ) {
71+ if ( eleProps . position === 'right' ) return `${ prefixCls } -item-right` ;
72+ if ( eleProps . position === 'left' ) return `${ prefixCls } -item-left` ;
73+ return idx % 2 === 0 ? `${ prefixCls } -item-left` : `${ prefixCls } -item-right` ;
74+ }
75+ if ( mode === 'left' ) return `${ prefixCls } -item-left` ;
76+ if ( mode === 'right' ) return `${ prefixCls } -item-right` ;
77+ if ( eleProps . position === 'right' ) return `${ prefixCls } -item-right` ;
78+ return '' ;
79+ } ;
80+
6681 // Remove falsy items
6782 const truthyItems = timeLineItems . filter ( item => ! ! item ) ;
6883 const itemsCount = truthyItems . length ;
6984 const lastCls = `${ prefixCls } -item-last` ;
70- const items = truthyItems . map ( ( ele , idx ) =>
71- cloneElement ( ele , {
85+ const items = truthyItems . map ( ( ele , idx ) => {
86+ const pendingClass = idx === itemsCount - 2 ? lastCls : '' ;
87+ const readyClass = idx === itemsCount - 1 ? lastCls : '' ;
88+ return cloneElement ( ele , {
7289 class : classNames ( [
73- ! reverse && ! ! pending
74- ? idx === itemsCount - 2
75- ? lastCls
76- : ''
77- : idx === itemsCount - 1
78- ? lastCls
79- : '' ,
80- mode === 'alternate'
81- ? idx % 2 === 0
82- ? `${ prefixCls } -item-left`
83- : `${ prefixCls } -item-right`
84- : mode === 'right'
85- ? `${ prefixCls } -item-right`
86- : '' ,
90+ ! reverse && ! ! pending ? pendingClass : readyClass ,
91+ getPositionCls ( ele , idx ) ,
8792 ] ) ,
88- } ) ,
89- ) ;
93+ } ) ;
94+ } ) ;
9095
9196 const timelineProps = {
9297 props : {
0 commit comments