@@ -10,18 +10,98 @@ import React, {Component} from 'react';
1010import { Platform , StyleSheet , Text , View , TouchableOpacity } from 'react-native' ;
1111import style from './style'
1212
13- type Props = { } ;
14- export default class NumberView extends Component < Props > {
15- render ( ) {
13+ function ScrollMonthCalender ( { history, enableDefaultStyles , onMonthChange} ) {
14+ const scrollViewRef = useRef ( ) ;
15+ const [ monthNumber , setMonthNumber ] = useState ( 0 )
16+ const [ heightArray , setArray ] = useState ( [ ] ) ;
17+ let offset = 0
18+ useEffect ( ( ) => {
19+ if ( monthNumber > 11 )
20+ setMonthNumber ( 0 )
21+ scrollViewRef . current . scrollTo ( {
22+ x : heightArray [ monthNumber ] - 100 ,
23+ y :0 ,
24+ animated : true ,
25+ } ) ;
26+ onMonthChange ( )
27+ } , [ monthNumber ] )
28+
1629 return (
17-
30+ < View style = { styles . mainView } >
31+ < View style = { styles . flexRow } >
32+ < ScrollView
33+ horizontal
34+ showsHorizontalScrollIndicator = { false }
35+ scrollEventThrottle = { 0 }
36+ ref = { scrollViewRef }
37+ onMomentumScrollBegin = {
38+ ( e ) => {
39+ var currentOffset = e . nativeEvent . contentOffset . x ;
40+ var direction = currentOffset > offset ? 'left' : 'right' ;
41+ offset = currentOffset ;
42+ if ( direction === "left" ) {
43+ setMonthNumber ( monthNumber + 1 )
44+ }
45+ }
46+ }
47+ >
48+ {
49+ history . map ( ( item , i ) => {
50+ if ( i === 0 ) {
51+ return ( < View key = { i }
52+ style = { styles . monthView }
53+ onLayout = { event => {
54+ const layout = event . nativeEvent . layout ;
55+ heightArray [ i ] = layout . x
56+ } } >
57+ < Text style = { [ styles . monthText , { marginLeft :100 , opacity :i == monthNumber ?1 :0.5 } ] } > { item . month } </ Text >
58+ </ View > )
59+ }
60+ if ( i === history . length - 1 ) {
61+ return ( < View key = { i }
62+ style = { styles . monthView }
63+ onLayout = { event => {
64+ const layout = event . nativeEvent . layout ;
65+ heightArray [ i ] = layout . x
66+ } } >
67+ < Text style = { [ styles . monthText , { marginRight :100 , opacity :i == monthNumber ?1 :0.5 } ] } > { item . month } </ Text >
68+ </ View > )
69+ }
70+ else
71+ return ( < View key = { i }
72+ style = { styles . monthView }
73+ onLayout = { event => {
74+ const layout = event . nativeEvent . layout ;
75+ heightArray [ i ] = layout . x
76+ } } >
77+ < Text style = { [ styles . monthText , { opacity :i == monthNumber ?1 :0.5 } ] } > { item . month } </ Text >
78+ </ View > )
79+ } )
80+ }
81+ </ ScrollView >
82+ </ View >
83+ < View style = { { flex :1 , alignSelf :"center" } } >
84+ < Text style = { styles . task } > { history [ monthNumber ] ?history [ monthNumber ] . task :0 } Tasks Completed </ Text >
85+ </ View >
86+ </ View >
1887 ) ;
19- }
2088}
2189
22- NumberView . defaultProps = {
23- initialValue :0 ,
90+ ScrollMonthCalender . defaultProps = {
91+ history :[ { month :"January" , task : 10 } ,
92+ { month :"February" , task :20 } ,
93+ { month :"March" , task :1 } ,
94+ { month :"April" , task :44 } ,
95+ { month :"May" , task :77 } ,
96+ { month :"June" , task :9 } ,
97+ { month :"July" , task :27 } ,
98+ { month :"August" , task :0 } ,
99+ { month :"September" , task :8 } ,
100+ { month :"October" , task :2 } ,
101+ { month :"November" , task :7 } ,
102+ { month :"December" , task :26 } ] ,
24103 enableDefaultStyles :true ,
25- themeColor :false ,
26- maxLimit :false
27- }
104+ }
105+
106+
107+ export default ScrollMonthCalender
0 commit comments