react-native-simple-timeline
Version:
React Native Simple Timeline
110 lines (99 loc) • 3.42 kB
Flow
/**
* Simple React Native Timeline
* https://github.com/kabitacode/react-native-simple-timeline
*
* @format
*/
import React from 'react'
import { View, Text, FlatList, ScrollView } from 'react-native'
import { styles } from "./style";
type Props = {
data: Array<{ id: number, status: string, date: string }>,
direction?: 'horizontal' | 'vertical',
customStyle?: {
container?: object,
leftColumn?: object,
rightColumn?: object,
dotContainer?: object,
dot?: object,
connector?: object,
dotConnectorHorizontalWrapper?: object,
containerHorizontal?: object,
dotContainerHorizontal?: object,
dotHorizontal?: object,
connectorHorizontal?: object,
containerHorizontalText?: object,
textStyle?: {
txtStatus?: object,
txtDate?: object
}
}
}
function Timeline({ data, direction, customStyle = {} }: Props) {
const {
container = {},
leftColumn = {},
rightColumn = {},
dotContainer = {},
dot = {},
connector = {},
dotConnectorHorizontalWrapper = {},
containerHorizontal = {},
dotContainerHorizontal = {},
dotHorizontal = {},
connectorHorizontal = {},
textStyle = {}
} = customStyle;
const renderItem = ({ item, index }: any) => {
let lastIndex = index === data.length - 1
return (
<View key={index} style={[styles.container, container]}>
<View style={[styles.leftColumn, leftColumn]}>
<View style={[styles.dotContainer, dotContainer]}>
<View style={[styles.dot, dot]} />
</View>
{!lastIndex && <View style={[styles.connector, connector]} />}
</View>
<View style={[styles.rightColumn, rightColumn]}>
<Text style={[styles.txtStatus, textStyle.txtStatus]}>{item?.status}</Text>
<Text style={[styles.txtDate, textStyle.txtDate]}>{item?.date}</Text>
</View>
</View>
)
}
if (direction == 'horizontal') {
return (
<ScrollView horizontal showsHorizontalScrollIndicator={false}>
<View style={{ flexDirection: 'row', justifyContent: 'space-around', height: 100 }}>
{
data.map((item, index) => {
let lastIndex = index === data.length - 1
return (
<View key={index} style={[styles.containerHorizontal, containerHorizontal]}>
<View style={[styles.dotConnectorHorizontalWrapper, dotConnectorHorizontalWrapper]}>
<View style={[styles.dotContainerHorizontal, dotContainerHorizontal]}>
<View style={[styles.dotHorizontal, dotHorizontal]} />
</View>
{!lastIndex && <View style={[styles.connectorHorizontal, connectorHorizontal]} />}
</View>
<View style={customStyle.containerHorizontalText}>
<Text style={[styles.txtStatus, textStyle.txtStatus]}>{item?.status}</Text>
<Text style={[styles.txtDate, textStyle.txtDate]}>{item?.date}</Text>
</View>
</View>
)
})
}
</View>
</ScrollView>
)
} else {
return (
<FlatList
data={data}
renderItem={renderItem}
/>
)
}
}
export default Timeline