11import styles from "./LoadingBar.module.css" ;
2- import { useState , useEffect } from "react" ;
2+ import { useState , useEffect , ComponentProps } from "react" ;
33
44export const LoadingBar = ( {
55 children,
66 title,
7+ formatTimeElapsed,
78} : {
89 children ?: React . ReactNode ;
910 title ?: React . ReactNode ;
11+ formatTimeElapsed ?: FormatTimeElapsed ;
1012} ) => {
1113 return children || title ? (
12- < LoadingBarWithText title = { title } > { children } </ LoadingBarWithText >
14+ < LoadingBarWithText formatTimeElapsed = { formatTimeElapsed } title = { title } >
15+ { children }
16+ </ LoadingBarWithText >
1317 ) : (
14- < JustLoadingBar inBox = { false } />
18+ < JustLoadingBar formatTimeElapsed = { formatTimeElapsed } inBox = { false } />
1519 ) ;
1620} ;
1721
18- export const JustLoadingBar = ( { inBox } : { inBox : boolean } ) => {
22+ export const JustLoadingBar = ( {
23+ inBox,
24+ formatTimeElapsed,
25+ } : {
26+ inBox : boolean ;
27+ formatTimeElapsed ?: FormatTimeElapsed ;
28+ } ) => {
1929 return (
2030 < div
2131 className = { [
@@ -26,28 +36,39 @@ export const JustLoadingBar = ({ inBox }: { inBox: boolean }) => {
2636 < div className = { styles . loader } >
2737 < div className = { styles . loaderBar } > </ div >
2838 </ div >
29- < TimeElapsed />
39+ < TimeElapsed formatTimeElapsed = { formatTimeElapsed } />
3040 </ div >
3141 ) ;
3242} ;
3343
3444export const LoadingBarWithText = ( {
3545 children,
3646 title,
47+ formatTimeElapsed,
3748} : {
3849 children ?: React . ReactNode ;
3950 title ?: React . ReactNode ;
51+ formatTimeElapsed ?: FormatTimeElapsed ;
4052} ) => {
4153 return (
4254 < div className = { styles . loadingBox } >
4355 { title ? < h2 className = { styles . loadingTitle } > { title } </ h2 > : null }
44- < JustLoadingBar inBox = { true } />
56+ < JustLoadingBar inBox = { true } formatTimeElapsed = { formatTimeElapsed } />
4557 { children }
4658 </ div >
4759 ) ;
4860} ;
4961
50- const TimeElapsed = ( ) => {
62+ type FormatTimeElapsed = ( seconds : number ) => React . ReactNode ;
63+
64+ const defaultFormatTimeElapsed : FormatTimeElapsed = ( seconds ) =>
65+ `Time elapsed: ${ seconds } seconds...` ;
66+
67+ const TimeElapsed = ( {
68+ formatTimeElapsed = defaultFormatTimeElapsed ,
69+ } : {
70+ formatTimeElapsed ?: FormatTimeElapsed ;
71+ } ) => {
5172 const [ seconds , setSeconds ] = useState < number > ( 0 ) ;
5273
5374 useEffect ( ( ) => {
@@ -62,7 +83,7 @@ const TimeElapsed = () => {
6283
6384 return (
6485 < div className = { styles . timeElapsed } >
65- { seconds < 2 ? < > </ > : < > Time elapsed: { seconds } seconds... </ > }
86+ { seconds < 2 ? < > </ > : < > { formatTimeElapsed ( seconds ) } </ > }
6687 </ div >
6788 ) ;
6889} ;
0 commit comments