taro-material
Version:
Mini Program components that implement Google's Material Design.
71 lines (61 loc) • 2.09 kB
JavaScript
import Nerv from "nervjs";
import PropTypes from 'prop-types';
import Taro from "@tarojs/taro-h5";
import { View, Text } from '@tarojs/components';
import classNames from 'classnames';
import AtComponent from "../../common/component";
export default class AtTimeline extends AtComponent {
render() {
const {
pending,
items,
customStyle
} = this.props;
const rootClassName = ['at-timeline'];
if (pending) rootClassName.push('at-timeline--pending');
const rootClassObject = {
'at-timeline--pending': pending
};
const itemElems = items.map((item, index) => {
const {
title = '',
color,
icon,
content = []
} = item;
const iconClass = classNames({
'at-icon': true,
[`at-icon-${icon}`]: icon
});
const itemRootClassName = ['at-timeline-item'];
if (color) itemRootClassName.push(`at-timeline-item--${color}`);
const dotClass = ['at-timeline-item__dot'];
if (icon) dotClass.push('at-timeline-item__icon');
return <View className={classNames(itemRootClassName)} key={index}>
<View className="at-timeline-item__tail"></View>
<View className={classNames(dotClass)}>
{icon && <Text className={iconClass}></Text>}
</View>
<View className="at-timeline-item__content">
<View className="at-timeline-item__content-item">{title}</View>
{content.map((sub, subIndex) => <View className="at-timeline-item__content-item at-timeline-item__content--sub" key={subIndex}>
{sub}
</View>)}
</View>
</View>;
});
return <View className={classNames(rootClassName, rootClassObject, this.props.className)} style={customStyle}>
{itemElems}
</View>;
}
}
AtTimeline.defaultProps = {
pending: false,
items: [],
customStyle: {}
};
AtTimeline.propTypes = {
pending: PropTypes.bool,
items: PropTypes.arrayOf(PropTypes.object),
customStyle: PropTypes.oneOfType([PropTypes.object, PropTypes.string])
};