Skip to content

Commit cf8dce7

Browse files
committed
feat: show info on currencies unavailable
1 parent c54a987 commit cf8dce7

File tree

6 files changed

+42
-5
lines changed

6 files changed

+42
-5
lines changed

src/composables/connectionStatus.ts

+14
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
useConnection,
88
useAeSdk,
99
useMultisigAccounts,
10+
useCurrencies,
1011
} from '@/composables';
1112
import { StatusIconType } from '@/types';
1213
import { ROUTE_ACCOUNT } from '@/popup/router/routeNames';
@@ -19,6 +20,7 @@ interface StatusType {
1920
title?: TranslateResult;
2021
description?: TranslateResult;
2122
icon?: StatusIconType;
23+
option?: any;
2224
}
2325

2426
const CONNECTED_DISPLAY_TIME = 2000;
@@ -32,6 +34,7 @@ export function useConnectionStatus() {
3234
const { middlewareStatus, isMiddlewareUnavailable } = useAeMiddleware();
3335
const { isMultisigBackendUnavailable } = useMultisigAccounts({ pollingDisabled: true });
3436
const { isBackendUnavailable } = useAeTippingBackend();
37+
const { isCurrenciesUnavailable } = useCurrencies({ pollingDisabled: true });
3538
const route = useRoute();
3639

3740
const justBeenConnected = ref(false);
@@ -77,6 +80,17 @@ export function useConnectionStatus() {
7780
description: t('connectionStatus.node.error.description'),
7881
icon: 'critical',
7982
};
83+
case isCurrenciesUnavailable.value:
84+
return {
85+
statusMessage: t('connectionStatus.currencies.statusMessage'),
86+
title: t('connectionStatus.currencies.title'),
87+
description: t('connectionStatus.currencies.description'),
88+
icon: 'critical',
89+
option: {
90+
href: 'https://www.coingecko.com/',
91+
target: '_blank',
92+
},
93+
};
8094
case isMiddlewareUnavailable.value:
8195
return {
8296
statusMessage: t('connectionStatus.middleware.error.title'),

src/composables/currencies.ts

+17-1
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,19 @@ const currentCurrencyCode = useStorageRef<CurrencyCode>(
5252

5353
const initPollingWatcher = createPollingBasedOnMountedComponents(POLLING_INTERVAL);
5454

55+
const isCurrenciesUnavailable = ref(false);
56+
5557
export function useCurrencies({
5658
pollingDisabled = false,
5759
}: UseCurrenciesOptions = {}) {
5860
const { protocolsInUse, isLoggedIn } = useAccounts();
61+
5962
const currentCurrencyInfo = computed(
6063
(): ICurrency => CURRENCIES.find(({ code }) => code === currentCurrencyCode.value)!,
6164
);
6265

66+
const noCurrencyRateFiat = computed(() => `${currentCurrencyCode.value.toUpperCase()} —`);
67+
6368
function getCurrentCurrencyRate(protocol: Protocol): number {
6469
return currencyRates.value?.[protocol]?.[currentCurrencyCode.value] || 0;
6570
}
@@ -106,6 +111,9 @@ export function useCurrencies({
106111
if (fetchedCurrencyRates) {
107112
currencyRates.value = fetchedCurrencyRates;
108113
}
114+
isCurrenciesUnavailable.value = (
115+
!Object.keys(currencyRates.value).length && !Object.keys(fetchedCurrencyRates ?? {}).length
116+
);
109117
isLoadingCurrencies.value = false;
110118
}
111119

@@ -136,6 +144,9 @@ export function useCurrencies({
136144
* according to the user's browser settings
137145
*/
138146
function getFormattedFiat(value: number, protocol: Protocol) {
147+
if (getCurrentCurrencyRate(protocol) === 0) {
148+
return noCurrencyRateFiat.value;
149+
}
139150
return formatCurrency(getFiat(value, protocol));
140151
}
141152

@@ -146,7 +157,10 @@ export function useCurrencies({
146157
* @param protocol used protocol
147158
*/
148159
function getFormattedAndRoundedFiat(value: number, protocol: Protocol): string {
149-
if (!getCurrentCurrencyRate(protocol) || value === 0) {
160+
if (getCurrentCurrencyRate(protocol) === 0) {
161+
return noCurrencyRateFiat.value;
162+
}
163+
if (value === 0) {
150164
return formatCurrency(0);
151165
}
152166
const converted = getFiat(value, protocol);
@@ -178,6 +192,8 @@ export function useCurrencies({
178192
currencyRates,
179193
currentCurrencyCode,
180194
currentCurrencyInfo,
195+
isCurrenciesUnavailable,
196+
noCurrencyRateFiat,
181197
getCurrentCurrencyRate,
182198
loadCoinsData,
183199
loadCurrencyRates,

src/popup/components/ConnectionStatus.vue

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
:title="status.title"
1818
:msg="status.description"
1919
:icon="status.icon"
20+
:option="status.option"
2021
warning
2122
class="btn-help"
2223
/>
@@ -141,6 +142,7 @@ export default defineComponent({
141142
width: unset;
142143
animation-name: shrink;
143144
animation-duration: 0.3s;
145+
border-radius: 10px;
144146
145147
&::before {
146148
border-radius: 10px;

src/popup/components/InputAmount.vue

-2
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@ export default defineComponent({
9595
const {
9696
getFormattedAndRoundedFiat,
9797
marketData,
98-
formatCurrency,
9998
} = useCurrencies();
10099
const { balance } = useBalances();
101100
@@ -128,7 +127,6 @@ export default defineComponent({
128127
totalAmountFormatted,
129128
currentAssetFiatPriceFormatted,
130129
currentAsset,
131-
formatCurrency,
132130
handleAssetSelected,
133131
};
134132
},

src/popup/components/TotalWalletAmount.vue

+4-2
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@ export default defineComponent({
2020
isMultisig: Boolean,
2121
},
2222
setup(props) {
23-
const { formatCurrency } = useCurrencies();
23+
const { isCurrenciesUnavailable, noCurrencyRateFiat, formatCurrency } = useCurrencies();
2424
2525
const totalAmount = computed(
26-
() => formatCurrency(+props.totalBalance),
26+
() => isCurrenciesUnavailable.value
27+
? noCurrencyRateFiat.value
28+
: formatCurrency(+props.totalBalance),
2729
);
2830
2931
return {

src/popup/locales/en.json

+5
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,11 @@
120120
"statusMessage": "Temporary aeternity backend failure.",
121121
"title": "aeternity backend failure",
122122
"description": "Some features such as setting default name and tipping related functionality may not be accessible at the moment due to temporary aeternity backend failure. <p> Transaction history is still accessible except the claim tip transactions that cannot be currently fetched and displayed. </p>"
123+
},
124+
"currencies": {
125+
"statusMessage": "Unable to update assets fiat value.",
126+
"title": "Unable to fetch assets fiat value",
127+
"description": "Superhero Wallet is temporarily unable to properly fetch and display the updated fiat value of assets due to exceeding third party API calls limit. <p></p>Check real-time prices at <a> CoinGecko </a>"
123128
}
124129
},
125130
"dashboard": {

0 commit comments

Comments
 (0)