UNPKG

8.77 kBJavaScriptView Raw
1import _extends from 'babel-runtime/helpers/extends';
2import _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';
3import _classCallCheck from 'babel-runtime/helpers/classCallCheck';
4import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';
5import _inherits from 'babel-runtime/helpers/inherits';
6
7var _class, _temp2;
8
9import React, { Component } from 'react';
10import PropTypes from 'prop-types';
11import classNames from 'classnames';
12import ConfigProvider from '../../config-provider';
13import Animate from '../../animate';
14import Icon from '../../icon';
15import Button from '../../button';
16import { obj } from '../../util';
17
18var Expand = Animate.Expand;
19/** Timeline.Item */
20
21var TimelineItem = (_temp2 = _class = function (_Component) {
22 _inherits(TimelineItem, _Component);
23
24 function TimelineItem() {
25 var _temp, _this, _ret;
26
27 _classCallCheck(this, TimelineItem);
28
29 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
30 args[_key] = arguments[_key];
31 }
32
33 return _ret = (_temp = (_this = _possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.beforeEnter = function () {
34 _this['timeline-item'].style['min-height'] = 'auto';
35 }, _this.beforeLeave = function () {
36 _this['timeline-item'].style['min-height'] = '48px'; // timeleft 节点最小高度
37 }, _temp), _possibleConstructorReturn(_this, _ret);
38 }
39
40 TimelineItem.prototype.toggleFold = function toggleFold(folderIndex) {
41 this.props.toggleFold(folderIndex);
42 };
43
44 TimelineItem.prototype.render = function render() {
45 var _classNames,
46 _classNames2,
47 _classNames3,
48 _classNames4,
49 _this2 = this;
50
51 var _props = this.props,
52 prefix = _props.prefix,
53 className = _props.className,
54 state = _props.state,
55 icon = _props.icon,
56 dot = _props.dot,
57 time = _props.time,
58 title = _props.title,
59 timeLeft = _props.timeLeft,
60 content = _props.content,
61 index = _props.index,
62 total = _props.total,
63 folderIndex = _props.folderIndex,
64 foldShow = _props.foldShow,
65 locale = _props.locale,
66 animation = _props.animation,
67 others = _objectWithoutProperties(_props, ['prefix', 'className', 'state', 'icon', 'dot', 'time', 'title', 'timeLeft', 'content', 'index', 'total', 'folderIndex', 'foldShow', 'locale', 'animation']);
68
69 var finalItemNode = dot ? dot : icon ? React.createElement(
70 'span',
71 { className: prefix + 'timeline-item-icon' },
72 React.createElement(Icon, { type: icon, size: 'xs' })
73 ) : React.createElement('span', { className: prefix + 'timeline-item-dot' });
74 var itemCls = classNames((_classNames = {}, _classNames[prefix + 'timeline-item'] = true, _classNames[prefix + 'timeline-item-first'] = index === 0, _classNames[prefix + 'timeline-item-last'] = index === total - 1, _classNames[prefix + 'timeline-item-' + state] = state, _classNames[prefix + 'timeline-item-folded'] = folderIndex, _classNames[prefix + 'timeline-item-unfolded'] = foldShow, _classNames[prefix + 'timeline-item-has-left-content'] = timeLeft, _classNames[className] = className, _classNames));
75 var folderCls = classNames((_classNames2 = {}, _classNames2[prefix + 'timeline-item-folder'] = true, _classNames2[prefix + 'timeline-item-has-left-content'] = timeLeft, _classNames2));
76 var itemNodeCls = classNames((_classNames3 = {}, _classNames3[prefix + 'timeline-item-node'] = true, _classNames3[prefix + 'timeline-item-node-custom'] = dot, _classNames3));
77 var dotTailCls = classNames((_classNames4 = {}, _classNames4[prefix + 'timeline-item-dot-tail'] = true, _classNames4[prefix + 'timeline-item-dot-tail-solid'] = foldShow, _classNames4[prefix + 'timeline-hide'] = index === total - 1 && foldShow, _classNames4));
78
79 var renderTimeLineItemContent = function renderTimeLineItemContent(isLeft) {
80 if (isLeft) return React.createElement(
81 'p',
82 { className: prefix + 'timeline-item-body' },
83 timeLeft
84 );
85 return React.createElement(
86 React.Fragment,
87 null,
88 React.createElement(
89 'div',
90 { className: prefix + 'timeline-item-title' },
91 title
92 ),
93 React.createElement(
94 'div',
95 { className: prefix + 'timeline-item-body' },
96 content
97 ),
98 React.createElement(
99 'div',
100 { className: prefix + 'timeline-item-time' },
101 time
102 )
103 );
104 };
105
106 var buttonProps = {
107 text: true,
108 size: 'small',
109 type: 'primary',
110 onClick: this.toggleFold.bind(this, folderIndex, total)
111 };
112 var timelineNode = folderIndex && foldShow || !folderIndex ? React.createElement(
113 'div',
114 _extends({}, obj.pickOthers(TimelineItem.propTypes, others), {
115 className: itemCls,
116 ref: function ref(e) {
117 _this2['timeline-item'] = e;
118 }
119 }),
120 React.createElement(
121 'div',
122 { className: prefix + 'timeline-item-left-content' },
123 renderTimeLineItemContent(className.includes(prefix + 'timeline-item-left'))
124 ),
125 React.createElement(
126 'div',
127 { className: prefix + 'timeline-item-timeline' },
128 React.createElement(
129 'div',
130 { className: prefix + 'timeline-item-tail' },
131 React.createElement('i', null)
132 ),
133 React.createElement(
134 'div',
135 { className: itemNodeCls },
136 finalItemNode
137 )
138 ),
139 React.createElement(
140 'div',
141 { className: prefix + 'timeline-item-content' },
142 renderTimeLineItemContent(!className.includes(prefix + 'timeline-item-left'))
143 )
144 ) : null;
145 return React.createElement(
146 'li',
147 { tabIndex: '0' },
148 animation && folderIndex ? React.createElement(
149 Expand,
150 {
151 animationAppear: false,
152 beforeEnter: this.beforeEnter,
153 beforeLeave: this.beforeEnter,
154 afterEnter: this.beforeLeave
155 },
156 timelineNode
157 ) : timelineNode,
158 folderIndex === index ? React.createElement(
159 'div',
160 { className: folderCls },
161 React.createElement('div', { className: dotTailCls }),
162 foldShow ? React.createElement(
163 Button,
164 buttonProps,
165 locale.fold,
166 React.createElement(Icon, { type: 'arrow-up' })
167 ) : React.createElement(
168 Button,
169 buttonProps,
170 locale.expand,
171 React.createElement(Icon, { type: 'arrow-down' })
172 )
173 ) : null
174 );
175 };
176
177 return TimelineItem;
178}(Component), _class.propTypes = _extends({}, ConfigProvider.propTypes, {
179 prefix: PropTypes.string,
180 index: PropTypes.number,
181 total: PropTypes.number,
182 folderIndex: PropTypes.number,
183 foldShow: PropTypes.bool,
184 /**
185 * 节点状态
186 */
187 state: PropTypes.oneOf(['done', 'process', 'error', 'success']),
188 /**
189 * 图标
190 */
191 icon: PropTypes.string,
192 /**
193 * 自定义时间轴节点
194 */
195 dot: PropTypes.node,
196 /**
197 * 格式化后的时间
198 */
199 time: PropTypes.node,
200 /**
201 * 标题
202 */
203 title: PropTypes.node,
204 /**
205 * 左侧时间
206 */
207 timeLeft: PropTypes.node,
208 /**
209 * 右侧内容
210 */
211 content: PropTypes.node,
212 toggleFold: PropTypes.func,
213 className: PropTypes.string,
214 locale: PropTypes.object,
215 /**
216 * 动画
217 */
218 animation: PropTypes.bool
219}), _class.defaultProps = {
220 prefix: 'next-',
221 state: 'done',
222 toggleFold: function toggleFold() {},
223 animation: true
224}, _temp2);
225TimelineItem.displayName = 'TimelineItem';
226
227export default TimelineItem;
\No newline at end of file