@@ -5,9 +5,15 @@ import React, {
5
5
useImperativeHandle ,
6
6
forwardRef ,
7
7
} from "react" ;
8
- import { Text , StyleSheet , TextStyle , StyleProp } from "react-native" ;
9
-
10
- interface TimerProps {
8
+ import {
9
+ Text ,
10
+ StyleSheet ,
11
+ TextStyle ,
12
+ StyleProp ,
13
+ TextProps ,
14
+ } from "react-native" ;
15
+
16
+ interface TimerProps extends TextProps {
11
17
style ?: StyleProp < TextStyle > ;
12
18
initialTime ?: number ;
13
19
updateInterval ?: number ;
@@ -35,10 +41,11 @@ const Timer = forwardRef<TimerHandle, TimerProps>(
35
41
onTimerEnd,
36
42
countDirection = "up" ,
37
43
timerEndTime,
44
+ ...rest
38
45
} ,
39
46
ref
40
47
) => {
41
- const defaultInitialTime = countDirection === "up" ? 0 : 100000 ;
48
+ const defaultInitialTime = 0 ;
42
49
const [ time , setTime ] = useState ( initialTime ?? defaultInitialTime ) ;
43
50
const timerRef = useRef < NodeJS . Timeout | null > ( null ) ;
44
51
@@ -64,7 +71,10 @@ const Timer = forwardRef<TimerHandle, TimerProps>(
64
71
// Count down
65
72
if ( newTime <= 0 && countDirection === "down" ) {
66
73
clearTimer ( ) ;
67
- onTimerEnd ?.( ) ;
74
+ // Delay the onTimerEnd callback to ensure it triggers after the final time update
75
+ setTimeout ( ( ) => {
76
+ onTimerEnd ?.( ) ;
77
+ } , updateInterval ) ;
68
78
return 0 ;
69
79
}
70
80
// Count up
@@ -74,7 +84,10 @@ const Timer = forwardRef<TimerHandle, TimerProps>(
74
84
newTime >= timerEndTime
75
85
) {
76
86
clearTimer ( ) ;
77
- onTimerEnd ?.( ) ;
87
+ // Delay the onTimerEnd callback to ensure it triggers after the final time update
88
+ setTimeout ( ( ) => {
89
+ onTimerEnd ?.( ) ;
90
+ } , updateInterval ) ;
78
91
return timerEndTime ;
79
92
}
80
93
@@ -123,15 +136,17 @@ const Timer = forwardRef<TimerHandle, TimerProps>(
123
136
} ;
124
137
125
138
return (
126
- < Text style = { [ styles . defaultTimerStyle , style ] } > { formatTime ( time ) } </ Text >
139
+ < Text { ...rest } style = { [ styles . defaultTimerStyle , style ] } >
140
+ { formatTime ( time ) }
141
+ </ Text >
127
142
) ;
128
143
}
129
144
) ;
130
145
131
146
const styles = StyleSheet . create ( {
132
147
defaultTimerStyle : {
133
148
fontSize : 24 ,
134
- textAlign : "center " ,
149
+ textAlign : "left " ,
135
150
} ,
136
151
} ) ;
137
152
0 commit comments