Skip to content

Commit afcfff3

Browse files
Add formatTimeElapsed function prop to LoadingBar for custom formatting of time elapsed message
1 parent c3c427c commit afcfff3

1 file changed

Lines changed: 29 additions & 8 deletions

File tree

  • examples/nextjs-import-airbyte-github-export-seafowl/components

examples/nextjs-import-airbyte-github-export-seafowl/components/LoadingBar.tsx

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,31 @@
11
import styles from "./LoadingBar.module.css";
2-
import { useState, useEffect } from "react";
2+
import { useState, useEffect, ComponentProps } from "react";
33

44
export 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

3444
export 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 ? <>&nbsp;</> : <>Time elapsed: {seconds} seconds...</>}
86+
{seconds < 2 ? <>&nbsp;</> : <>{formatTimeElapsed(seconds)}</>}
6687
</div>
6788
);
6889
};

0 commit comments

Comments
 (0)