@@ -6,6 +6,7 @@ import fromExponential from 'from-exponential';
66
77import * as Lens from "./Lens" ;
88import * as Utils from './Utils' ;
9+ import { ContractErrorMessage } from "./ErrorBoundary" ;
910
1011
1112export class GlobalContext {
@@ -26,38 +27,57 @@ export class GlobalContext {
2627 this . walletClient = walletClient ;
2728 this . queryClient = useQueryClient ( ) ;
2829
29- let { data : currChain } = Lens . useEulerChain ( ) ;
30- let { data : labels } = Lens . useLabels ( ) ;
31- let { data : prices } = Lens . usePrices ( ) ;
30+ let { data : currChain , error : currChainError , isError : currChainIsError } = Lens . useEulerChain ( ) ;
31+ let { data : labels , error : labelsError , isError : labelsIsError } = Lens . useLabels ( ) ;
32+ let { data : prices , error : pricesError , isError : pricesIsError } = Lens . usePrices ( ) ;
3233
3334 let vaultAddrsLabels = labels ? Object . keys ( labels . vaults ) : undefined ;
3435 let vaultAddrsExtra = Object . keys ( this . args . extraVaultAddrs [ currChain ?. chainId ] || { } ) ;
3536 let mySubaccountMask = ( 1n << BigInt ( this . args . numSubAccounts ) ) - 1n ;
3637
37- let { data : vaultsStaticLabels } = Lens . useVaultsStaticInfo ( vaultAddrsLabels ) ;
38- let { data : vaultsStaticExtra } = Lens . useVaultsStaticInfo ( vaultAddrsExtra ) ;
38+ let { data : vaultsStaticLabels , error : vaultsStaticLabelsError , isError : vaultsStaticLabelsIsError } = Lens . useVaultsStaticInfo ( vaultAddrsLabels ) ;
39+ let { data : vaultsStaticExtra , error : vaultsStaticExtraError , isError : vaultsStaticExtraIsError } = Lens . useVaultsStaticInfo ( vaultAddrsExtra ) ;
3940 if ( vaultsStaticLabels && vaultsStaticExtra ) this . vaultsStatic = { ...vaultsStaticLabels , ... vaultsStaticExtra , } ;
4041
41- let { data : vaultsGlobalLabels } = Lens . useVaultsGlobal ( vaultAddrsLabels ) ;
42- let { data : vaultsGlobalExtra } = Lens . useVaultsGlobal ( vaultAddrsExtra ) ;
42+ let { data : vaultsGlobalLabels , error : vaultsGlobalLabelsError , isError : vaultsGlobalLabelsIsError } = Lens . useVaultsGlobal ( vaultAddrsLabels ) ;
43+ let { data : vaultsGlobalExtra , error : vaultsGlobalExtraError , isError : vaultsGlobalExtraIsError } = Lens . useVaultsGlobal ( vaultAddrsExtra ) ;
4344 if ( vaultsGlobalLabels && vaultsGlobalExtra ) this . vaultsGlobal = { ...vaultsGlobalLabels , ...vaultsGlobalExtra , } ;
4445
45- let { data : vaultsPersonalLabels } = Lens . useVaultsPersonalInfoMulti ( this . myPrimaryAddr , mySubaccountMask , vaultAddrsLabels ) ;
46- let { data : vaultsPersonalExtra } = Lens . useVaultsPersonalInfoMulti ( this . myPrimaryAddr , mySubaccountMask , vaultAddrsExtra ) ;
46+ let { data : vaultsPersonalLabels , error : vaultsPersonalLabelsError , isError : vaultsPersonalLabelsIsError } = Lens . useVaultsPersonalInfoMulti ( this . myPrimaryAddr , mySubaccountMask , vaultAddrsLabels ) ;
47+ let { data : vaultsPersonalExtra , error : vaultsPersonalExtraError , isError : vaultsPersonalExtraIsError } = Lens . useVaultsPersonalInfoMulti ( this . myPrimaryAddr , mySubaccountMask , vaultAddrsExtra ) ;
4748 if ( vaultsPersonalLabels && vaultsPersonalExtra ) {
4849 this . vaultsPersonal = { } ;
4950 for ( let k of Object . keys ( vaultsPersonalLabels ) ) {
5051 this . vaultsPersonal [ k ] = { ...vaultsPersonalLabels [ k ] , ...vaultsPersonalExtra [ k ] , } ;
5152 }
5253 }
5354
55+ // Store error states for later use
56+ this . hasDataErrors = currChainIsError || labelsIsError || pricesIsError ||
57+ vaultsStaticLabelsIsError || vaultsStaticExtraIsError ||
58+ vaultsGlobalLabelsIsError || vaultsGlobalExtraIsError ||
59+ ( this . connected && ( vaultsPersonalLabelsIsError || vaultsPersonalExtraIsError ) ) ;
60+
61+ this . dataErrors = {
62+ currChain : currChainError ,
63+ labels : labelsError ,
64+ prices : pricesError ,
65+ vaultsStaticLabels : vaultsStaticLabelsError ,
66+ vaultsStaticExtra : vaultsStaticExtraError ,
67+ vaultsGlobalLabels : vaultsGlobalLabelsError ,
68+ vaultsGlobalExtra : vaultsGlobalExtraError ,
69+ vaultsPersonalLabels : vaultsPersonalLabelsError ,
70+ vaultsPersonalExtra : vaultsPersonalExtraError ,
71+ } ;
72+
5473 this . currChain = currChain ;
5574 this . labels = labels ;
5675 this . prices = prices ;
5776
5877 this . chainConfigs = { } ;
5978
6079 this . maglevSupportsChain = ! ! currChain ?. addresses . maglevAddrs ;
80+ this . eulerSwapSupportsChain = ! ! currChain ?. addresses . eulerSwapAddrs ;
6181
6282 //console.log(!!this.maglevSupportsChain, !!this.labels, !!this.prices, !!this.vaultsStatic, !!this.vaultsGlobal, !!this.vaultsPersonal);
6383 this . ready = this . maglevSupportsChain && this . labels && this . prices && this . vaultsStatic && this . vaultsGlobal && ( ! this . connected || this . vaultsPersonal ) ;
@@ -70,6 +90,15 @@ export class GlobalContext {
7090 }
7191
7292 loading ( ) {
93+ if ( this . hasDataErrors ) {
94+ // Find the first error to display
95+ for ( let [ key , error ] of Object . entries ( this . dataErrors ) ) {
96+ if ( error ) {
97+ return < ContractErrorMessage error = { error } componentName = { `GlobalContext-${ key } ` } /> ;
98+ }
99+ }
100+ }
101+
73102 if ( ! this . maglevSupportsChain ) return "Maglev not currently supported on this chain." ;
74103
75104 return "Loading..." ;
0 commit comments