linkmore-design
Version:
π πlmη»δ»ΆεΊγπ
79 lines (77 loc) β’ 3.27 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _LoadingOutlined = _interopRequireDefault(require("@ant-design/icons/LoadingOutlined"));
var _classnames = _interopRequireDefault(require("classnames"));
var React = _interopRequireWildcard(require("react"));
var _configProvider = require("../config-provider");
var _reactNode = require("../_util/reactNode");
var _TimelineItem = _interopRequireDefault(require("./TimelineItem"));
const Timeline = props => {
const {
getPrefixCls,
direction
} = React.useContext(_configProvider.ConfigContext);
const {
prefixCls: customizePrefixCls,
pending = null,
pendingDot,
children,
className,
reverse = false,
mode = '',
...restProps
} = props;
const prefixCls = getPrefixCls('timeline', customizePrefixCls);
const pendingNode = typeof pending === 'boolean' ? null : pending;
const pendingItem = pending ? /*#__PURE__*/React.createElement(_TimelineItem.default, {
pending: !!pending,
dot: pendingDot || /*#__PURE__*/React.createElement(_LoadingOutlined.default, null)
}, pendingNode) : null;
const timeLineItems = React.Children.toArray(children);
timeLineItems.push(pendingItem);
if (reverse) {
timeLineItems.reverse();
}
const getPositionCls = (ele, idx) => {
if (mode === 'alternate') {
if (ele.props.position === 'right') return `${prefixCls}-item-right`;
if (ele.props.position === 'left') return `${prefixCls}-item-left`;
return idx % 2 === 0 ? `${prefixCls}-item-left` : `${prefixCls}-item-right`;
}
if (mode === 'left') return `${prefixCls}-item-left`;
if (mode === 'right') return `${prefixCls}-item-right`;
if (ele.props.position === 'right') return `${prefixCls}-item-right`;
return '';
};
// Remove falsy items
const truthyItems = timeLineItems.filter(item => !!item);
const itemsCount = React.Children.count(truthyItems);
const lastCls = `${prefixCls}-item-last`;
const items = React.Children.map(truthyItems, (ele, idx) => {
const pendingClass = idx === itemsCount - 2 ? lastCls : '';
const readyClass = idx === itemsCount - 1 ? lastCls : '';
return (0, _reactNode.cloneElement)(ele, {
className: (0, _classnames.default)([ele.props.className, !reverse && !!pending ? pendingClass : readyClass, getPositionCls(ele, idx)])
});
});
const hasLabelItem = timeLineItems.some(item => !!item?.props?.label);
const classString = (0, _classnames.default)(prefixCls, {
[`${prefixCls}-pending`]: !!pending,
[`${prefixCls}-reverse`]: !!reverse,
[`${prefixCls}-${mode}`]: !!mode && !hasLabelItem,
[`${prefixCls}-label`]: hasLabelItem,
[`${prefixCls}-rtl`]: direction === 'rtl'
}, className);
return /*#__PURE__*/React.createElement("ul", (0, _extends2.default)({}, restProps, {
className: classString
}), items);
};
Timeline.Item = _TimelineItem.default;
var _default = Timeline;
exports.default = _default;