@@ -10,18 +10,98 @@ import React, {Component} from 'react';
10
10
import { Platform , StyleSheet , Text , View , TouchableOpacity } from 'react-native' ;
11
11
import style from './style'
12
12
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
+
16
29
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 >
18
87
) ;
19
- }
20
88
}
21
89
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 } ] ,
24
103
enableDefaultStyles :true ,
25
- themeColor :false ,
26
- maxLimit :false
27
- }
104
+ }
105
+
106
+
107
+ export default ScrollMonthCalender
0 commit comments