mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2026-03-02 15:27:18 +00:00
163 lines
4.8 KiB
JavaScript
163 lines
4.8 KiB
JavaScript
import _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';
|
|
import _extends from 'babel-runtime/helpers/extends';
|
|
import _classCallCheck from 'babel-runtime/helpers/classCallCheck';
|
|
import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';
|
|
import _inherits from 'babel-runtime/helpers/inherits';
|
|
|
|
var _class, _temp;
|
|
|
|
import React, { Component, Children } from 'react';
|
|
import PropTypes from 'prop-types';
|
|
import classNames from 'classnames';
|
|
import { polyfill } from 'react-lifecycles-compat';
|
|
|
|
import { obj } from '../../util';
|
|
import ConfigProvider from '../../config-provider';
|
|
import nextLocale from '../../locale/zh-cn';
|
|
|
|
/** Timeline */
|
|
var Timeline = (_temp = _class = function (_Component) {
|
|
_inherits(Timeline, _Component);
|
|
|
|
function Timeline(props, context) {
|
|
_classCallCheck(this, Timeline);
|
|
|
|
var _this = _possibleConstructorReturn(this, _Component.call(this, props, context));
|
|
|
|
_this.state = {
|
|
fold: props.fold
|
|
};
|
|
return _this;
|
|
}
|
|
|
|
Timeline.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {
|
|
var innerUpdate = prevState.innerUpdate,
|
|
fold = prevState.fold;
|
|
|
|
|
|
if (innerUpdate) {
|
|
return {
|
|
fold: fold,
|
|
innerUpdate: false
|
|
};
|
|
}
|
|
|
|
if ('fold' in nextProps) {
|
|
return {
|
|
fold: nextProps.fold
|
|
};
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
Timeline.prototype.toggleFold = function toggleFold(folderIndex, total) {
|
|
var fold = this.state.fold.map(function (item) {
|
|
return _extends({}, item);
|
|
});
|
|
|
|
if (folderIndex) {
|
|
for (var i = 0; i < fold.length; i++) {
|
|
var _fold$i = fold[i],
|
|
foldArea = _fold$i.foldArea,
|
|
foldShow = _fold$i.foldShow;
|
|
|
|
|
|
if (foldArea[1] && folderIndex === foldArea[1] || !foldArea[1] && folderIndex === total - 1) {
|
|
fold[i].foldShow = !foldShow;
|
|
}
|
|
}
|
|
|
|
this.setState({ fold: fold, innerUpdate: true });
|
|
}
|
|
};
|
|
|
|
Timeline.prototype.render = function render() {
|
|
var _this2 = this,
|
|
_classNames;
|
|
|
|
var _props = this.props,
|
|
prefix = _props.prefix,
|
|
rtl = _props.rtl,
|
|
className = _props.className,
|
|
children = _props.children,
|
|
locale = _props.locale,
|
|
animation = _props.animation,
|
|
others = _objectWithoutProperties(_props, ['prefix', 'rtl', 'className', 'children', 'locale', 'animation']);
|
|
|
|
var fold = this.state.fold;
|
|
|
|
// 修改子节点属性
|
|
|
|
var childrenCount = React.Children.count(children);
|
|
var cloneChildren = Children.map(children, function (child, i) {
|
|
var folderIndex = null;
|
|
var foldNodeShow = false;
|
|
|
|
fold.forEach(function (item) {
|
|
var foldArea = item.foldArea,
|
|
foldShow = item.foldShow;
|
|
|
|
|
|
if (foldArea[0] && i >= foldArea[0] && (i <= foldArea[1] || !foldArea[1])) {
|
|
folderIndex = foldArea[1] || childrenCount - 1;
|
|
foldNodeShow = foldShow;
|
|
}
|
|
});
|
|
|
|
return React.cloneElement(child, {
|
|
prefix: prefix,
|
|
locale: locale,
|
|
total: childrenCount,
|
|
index: i,
|
|
folderIndex: folderIndex,
|
|
foldShow: foldNodeShow,
|
|
toggleFold: folderIndex === i ? _this2.toggleFold.bind(_this2, folderIndex, childrenCount) : function () {},
|
|
animation: animation
|
|
});
|
|
});
|
|
|
|
var timelineCls = classNames((_classNames = {}, _classNames[prefix + 'timeline'] = true, _classNames), className);
|
|
|
|
if (rtl) {
|
|
others.dir = 'rtl';
|
|
}
|
|
|
|
return React.createElement(
|
|
'ul',
|
|
_extends({}, obj.pickOthers(Timeline.propTypes, others), {
|
|
className: timelineCls
|
|
}),
|
|
cloneChildren
|
|
);
|
|
};
|
|
|
|
return Timeline;
|
|
}(Component), _class.propTypes = _extends({}, ConfigProvider.propTypes, {
|
|
/**
|
|
* 样式的品牌前缀
|
|
*/
|
|
prefix: PropTypes.string,
|
|
rtl: PropTypes.bool,
|
|
/**
|
|
* 自定义折叠选项 示例`[{foldArea: [startIndex, endIndex], foldShow: boolean}]`
|
|
*/
|
|
fold: PropTypes.array,
|
|
/**
|
|
* 自定义类名
|
|
*/
|
|
className: PropTypes.string,
|
|
children: PropTypes.any,
|
|
locale: PropTypes.object,
|
|
animation: PropTypes.bool
|
|
}), _class.defaultProps = {
|
|
prefix: 'next-',
|
|
rtl: false,
|
|
fold: [],
|
|
locale: nextLocale.Timeline,
|
|
animation: true
|
|
}, _temp);
|
|
Timeline.displayName = 'Timeline';
|
|
|
|
|
|
export default ConfigProvider.config(polyfill(Timeline)); |