diff --git a/README.md b/README.md index 09392b4..7db6c33 100644 --- a/README.md +++ b/README.md @@ -285,6 +285,7 @@ render(){ | circleColor | string | same as circleColor of 'Timeline' | event circle color | | dotColor | string | same as dotColor of 'Timeline' | event dot color (innerCircle = 'dot') | | icon | obj(image source) | same as icon of 'Timeline' | event icon (innerCircle = 'color') | +| position | string | null | event side in 'two-column' layout : 'left', 'right' | #### Timeline: | Property | Type | Default | Description | diff --git a/lib/index.js b/lib/index.js index 5867792..7bf5042 100644 --- a/lib/index.js +++ b/lib/index.js @@ -3,18 +3,13 @@ import React, { Component } from "react"; import { StyleSheet, - ListView, + FlatList, Image, View, Text, TouchableOpacity } from "react-native"; -const ds = new ListView.DataSource({ - rowHasChanged: (r1, r2) => r1 !== r2, - sectionHeaderHasChanged: (s1, s2) => s1 !== s2 -}); - const defaultCircleSize = 16; const defaultCircleColor = "#007AFF"; const defaultLineWidth = 2; @@ -27,7 +22,7 @@ export default class Timeline extends Component { constructor(props, context) { super(props, context); - this._renderRow = this._renderRow.bind(this); + this._renderItem = this._renderItem.bind(this); this.renderTime = (this.props.renderTime ? this.props.renderTime : this._renderTime @@ -44,7 +39,7 @@ export default class Timeline extends Component { this.state = { data: this.props.data, - dataSource: ds.cloneWithRows(this.props.data), + //dataSource: ds.cloneWithRows(this.props.data), x: 0, width: 0 }; @@ -53,68 +48,66 @@ export default class Timeline extends Component { componentWillReceiveProps(nextProps) { this.setState({ data: nextProps.data, - dataSource: ds.cloneWithRows(nextProps.data) + //dataSource: ds.cloneWithRows(nextProps.data) }); } render() { return ( - index + ""} {...this.props.options} /> ); } - _renderRow(rowData, sectionID, rowID) { + _renderItem({item, index}) { let content = null; - switch (this.props.columnFormat) { case "single-column-left": content = ( - {this.renderTime(rowData, sectionID, rowID)} - {this.renderEvent(rowData, sectionID, rowID)} - {this.renderCircle(rowData, sectionID, rowID)} + {this.renderTime(item, index)} + {this.renderEvent(item, index)} + {this.renderCircle(item, index)} ); break; case "single-column-right": content = ( - {this.renderEvent(rowData, sectionID, rowID)} - {this.renderTime(rowData, sectionID, rowID)} - {this.renderCircle(rowData, sectionID, rowID)} + {this.renderEvent(item, index)} + {this.renderTime(item, index)} + {this.renderCircle(item, index)} ); break; case "two-column": content = - rowID % 2 == 0 ? ( + (item.position && item.position=="right") || (!item.position && index % 2 == 0) ? ( - {this.renderTime(rowData, sectionID, rowID)} - {this.renderEvent(rowData, sectionID, rowID)} - {this.renderCircle(rowData, sectionID, rowID)} + {this.renderTime(item, index)} + {this.renderEvent(item, index)} + {this.renderCircle(item, index)} ) : ( - {this.renderEvent(rowData, sectionID, rowID)} - {this.renderTime(rowData, sectionID, rowID)} - {this.renderCircle(rowData, sectionID, rowID)} + {this.renderEvent(item, index)} + {this.renderTime(item, index)} + {this.renderCircle(item, index)} ); break; } - return {content}; + return {content}; } - _renderTime(rowData, sectionID, rowID) { + _renderTime(rowData, rowID) { if (!this.props.showTime) { return null; } @@ -133,7 +126,7 @@ export default class Timeline extends Component { case "two-column": timeWrapper = { flex: 1, - alignItems: rowID % 2 == 0 ? "flex-end" : "flex-start" + alignItems: (rowData.position && rowData.position=="right") || (!rowData.position && rowID % 2 == 0) ? "flex-end" : "flex-start" }; break; } @@ -148,7 +141,7 @@ export default class Timeline extends Component { ); } - _renderEvent(rowData, sectionID, rowID) { + _renderEvent(rowData, rowID) { const lineWidth = rowData.lineWidth ? rowData.lineWidth : this.props.lineWidth; @@ -181,7 +174,7 @@ export default class Timeline extends Component { break; case "two-column": opStyle = - rowID % 2 == 0 + (rowData.position && rowData.position=="right") || (!rowData.position && rowID % 2 == 0) ? { borderColor: lineColor, borderLeftWidth: lineWidth, @@ -217,7 +210,7 @@ export default class Timeline extends Component { } > - {this.renderDetail(rowData, sectionID, rowID)} + {this.renderDetail(rowData, rowID)} {this._renderSeparator()} @@ -225,7 +218,7 @@ export default class Timeline extends Component { ); } - _renderDetail(rowData, sectionID, rowID) { + _renderDetail(rowData, rowID) { let title = rowData.description ? ( @@ -241,7 +234,7 @@ export default class Timeline extends Component { return {title}; } - _renderCircle(rowData, sectionID, rowID) { + _renderCircle(rowData, rowID) { var circleSize = rowData.circleSize ? rowData.circleSize : this.props.circleSize ? this.props.circleSize : defaultCircleSize;