Skip to content

Commit 3aa99b2

Browse files
committed
Make displaying fallback components more configurable
1 parent 14ee3a9 commit 3aa99b2

File tree

3 files changed

+12
-10
lines changed

3 files changed

+12
-10
lines changed

src/components/content/home-page/blocks/block-reward.tsx

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,6 @@ export default function BlockReward(props: {
1818
args: [getBlockRewardUrl(props.network, props.blockNumber)],
1919
});
2020

21-
let errorFallback = <ErrorIndicator refetch={blockRewardData.fetch} />;
22-
// Latest Block often doesn't have a reward yet:
23-
if (props.id === 0 && blockRewardData.error && blockRewardData.error instanceof FetchError) {
24-
errorFallback = <ValueWithRefetch refetch={blockRewardData.fetch} value='TBD'/>;
25-
}
26-
2721
return (
2822
<span className='pl-2 md:pl-4'>
2923
<blockRewardData.Render
@@ -33,7 +27,8 @@ export default function BlockReward(props: {
3327
&nbsp;&nbsp;
3428
<blockRewardData.Render
3529
valueCallback={ (data) => ${getEtherValueFromWei(data.blockReward, 4)}` }
36-
errorFallback={errorFallback}
30+
showErrorFallback={props.id === 0 && blockRewardData.error && blockRewardData.error instanceof FetchError}
31+
errorFallback={<ValueWithRefetch refetch={blockRewardData.fetch} value='TBD'/>}
3732
jointClass='w-[4rem] text-(--grey-fg-color)'
3833
/>
3934
</span>

src/lib/data-state/constructors/index.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,13 @@ export const useConfig: DataStateConstructor = <T, A extends any[], R>(config: F
7777

7878
const Render = <K extends keyof T>(conf: RenderConfig<T, K> = {}): ReactNode => {
7979
const { valueCallback, field, staticContent, error, loadingMessage, loadingPulseColor,
80-
showFallback = true, loadingFallback, errorFallback, jointClass } = conf;
80+
showFallback = true, showLoadingFallback = true, showErrorFallback = true,
81+
loadingFallback, errorFallback, jointClass } = conf;
8182

8283
switch (dataRoot.status) {
8384
case 'loading':
8485
if (showFallback) {
85-
if (loadingFallback) return loadingFallback;
86+
if (showLoadingFallback && loadingFallback) return loadingFallback;
8687
else if (loadingMessage) return <LoadingIndicator message={loadingMessage} className={jointClass} />;
8788
else return <LoadingPulse loadingPulseColor={loadingPulseColor} className={jointClass} content={staticContent} />;
8889
} return;
@@ -116,7 +117,8 @@ export const useConfig: DataStateConstructor = <T, A extends any[], R>(config: F
116117
return <span className={jointClass}>{ staticContent }</span>;
117118
}
118119
else if (showFallback) {
119-
return errorFallback ?? <ErrorIndicator refetch={fetch} error={error} className={jointClass} />;
120+
if (showErrorFallback && errorFallback) return errorFallback;
121+
else return <ErrorIndicator refetch={fetch} error={error} className={jointClass} />;
120122
} return;
121123
}
122124
}

src/lib/data-state/types/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,14 @@ export type RenderConfig<T, K extends keyof T> = {
8686
// loadingMessage is NOT set, otherwise only the message will appear)
8787
loadingPulseColor?: string;
8888
// Optionally don't display fallback components like Loading- or ErrorIndicators:
89+
// showFallback takes precedence over both showLoading and showError!
8990
showFallback?: boolean;
91+
// Optionally display a loadingFallback (true by default):
92+
showLoadingFallback?: boolean;
9093
// Optionally display another component instead of the default LoadingIndicator:
9194
loadingFallback?: ReactNode;
95+
// Optionally display an errorFallback (true by default):
96+
showErrorFallback?: boolean;
9297
// Optionally display another component instead of the default ErrorIndicator:
9398
errorFallback?: ReactNode;
9499
// Optional shared className for displayed components:

0 commit comments

Comments
 (0)