UNPKG

linkmore-design

Version:

🌈 πŸš€lmη»„δ»ΆεΊ“γ€‚πŸš€

79 lines (77 loc) β€’ 3.27 kB
"use strict"; 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;