From 6e1796aec43531c8a0af86d623aad6fa89e9131c Mon Sep 17 00:00:00 2001 From: tom Date: Mon, 20 May 2024 20:03:32 +0200 Subject: [PATCH 1/4] Alter gas tracker behaviour in case of null gas prices from backend --- ui/home/Stats.pw.tsx | 81 ++++++++++------------------------------- ui/home/Stats.tsx | 14 +++++-- ui/pages/GasTracker.tsx | 22 ++++++++--- 3 files changed, 47 insertions(+), 70 deletions(-) diff --git a/ui/home/Stats.pw.tsx b/ui/home/Stats.pw.tsx index b16da823e4..24cf50b012 100644 --- a/ui/home/Stats.pw.tsx +++ b/ui/home/Stats.pw.tsx @@ -1,31 +1,18 @@ -import { test, expect } from '@playwright/experimental-ct-react'; import type { Locator } from '@playwright/test'; import React from 'react'; import * as statsMock from 'mocks/stats/index'; -import contextWithEnvs from 'playwright/fixtures/contextWithEnvs'; -import TestApp from 'playwright/TestApp'; -import buildApiUrl from 'playwright/utils/buildApiUrl'; +import { test, expect } from 'playwright/lib'; import * as configs from 'playwright/utils/configs'; import Stats from './Stats'; -const API_URL = buildApiUrl('stats'); - test.describe('all items', () => { let component: Locator; - test.beforeEach(async({ page, mount }) => { - await page.route(API_URL, (route) => route.fulfill({ - status: 200, - body: JSON.stringify(statsMock.withBtcLocked), - })); - - component = await mount( - - - , - ); + test.beforeEach(async({ render, mockApiResponse }) => { + await mockApiResponse('stats', statsMock.withBtcLocked); + component = await render(); }); test('+@mobile +@dark-mode', async() => { @@ -41,51 +28,21 @@ test.describe('all items', () => { }); }); -test.describe('4 items', () => { - const extendedTest = test.extend({ - context: contextWithEnvs([ - { name: 'NEXT_PUBLIC_HOMEPAGE_SHOW_AVG_BLOCK_TIME', value: 'false' }, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ]) as any, - }); - - extendedTest('default view +@mobile -@default', async({ mount, page }) => { - await page.route(API_URL, (route) => route.fulfill({ - status: 200, - body: JSON.stringify(statsMock.base), - })); - - const component = await mount( - - - , - ); - - await expect(component).toHaveScreenshot(); - }); +test('4 items', async({ render, mockApiResponse, mockEnvs }) => { + await mockEnvs([ + [ 'NEXT_PUBLIC_HOMEPAGE_SHOW_AVG_BLOCK_TIME', 'false' ], + ]); + await mockApiResponse('stats', statsMock.base); + const component = await render(); + await expect(component).toHaveScreenshot(); }); -test.describe('3 items', () => { - const extendedTest = test.extend({ - context: contextWithEnvs([ - { name: 'NEXT_PUBLIC_HOMEPAGE_SHOW_AVG_BLOCK_TIME', value: 'false' }, - { name: 'NEXT_PUBLIC_GAS_TRACKER_ENABLED', value: 'false' }, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ]) as any, - }); - - extendedTest('default view +@mobile -@default', async({ mount, page }) => { - await page.route(API_URL, (route) => route.fulfill({ - status: 200, - body: JSON.stringify(statsMock.base), - })); - - const component = await mount( - - - , - ); - - await expect(component).toHaveScreenshot(); - }); +test('3 items', async({ render, mockApiResponse, mockEnvs }) => { + await mockEnvs([ + [ 'NEXT_PUBLIC_HOMEPAGE_SHOW_AVG_BLOCK_TIME', 'false' ], + [ 'NEXT_PUBLIC_GAS_TRACKER_ENABLED', 'false' ], + ]); + await mockApiResponse('stats', statsMock.base); + const component = await render(); + await expect(component).toHaveScreenshot(); }); diff --git a/ui/home/Stats.tsx b/ui/home/Stats.tsx index 4975083bf8..bcd80ac12d 100644 --- a/ui/home/Stats.tsx +++ b/ui/home/Stats.tsx @@ -14,11 +14,11 @@ import IconSvg from 'ui/shared/IconSvg'; import StatsItem from './StatsItem'; -const hasGasTracker = config.features.gasTracker.isEnabled; const hasAvgBlockTime = config.UI.homepage.showAvgBlockTime; const rollupFeature = config.features.rollup; const Stats = () => { + const [ hasGasTracker, setHasGasTracker ] = React.useState(config.features.gasTracker.isEnabled); const { data, isPlaceholderData, isError, dataUpdatedAt } = useApiQuery('stats', { queryOptions: { refetchOnMount: false, @@ -26,6 +26,14 @@ const Stats = () => { }, }); + React.useEffect(() => { + if (!isPlaceholderData && !data?.gas_prices?.average) { + setHasGasTracker(false); + } + // should run only after initial fetch + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [ isPlaceholderData ]); + const zkEvmLatestBatchQuery = useApiQuery('homepage_zkevm_latest_batch', { queryOptions: { placeholderData: 12345, @@ -61,7 +69,7 @@ const Stats = () => { data.rootstock_locked_btc && itemsCount++; rollupFeature.isEnabled && data.last_output_root_size && itemsCount++; const isOdd = Boolean(itemsCount % 2); - const gasInfoTooltip = hasGasTracker && data.gas_prices ? ( + const gasInfoTooltip = hasGasTracker && data.gas_prices && data.gas_prices.average ? ( { } + value={ data.gas_prices.average ? : 'N/A' } _last={ isOdd ? lastItemTouchStyle : undefined } tooltip={ gasInfoTooltip } isLoading={ isLoading } diff --git a/ui/pages/GasTracker.tsx b/ui/pages/GasTracker.tsx index b3212adce2..bb6669be57 100644 --- a/ui/pages/GasTracker.tsx +++ b/ui/pages/GasTracker.tsx @@ -1,4 +1,4 @@ -import { Box, Flex, Skeleton, chakra } from '@chakra-ui/react'; +import { Alert, Box, Flex, Skeleton, chakra } from '@chakra-ui/react'; import React from 'react'; import config from 'configs/app'; @@ -62,6 +62,21 @@ const GasTracker = () => { ); + const content = (() => { + if (!isPlaceholderData && data?.gas_prices?.slow === null && data?.gas_prices.average === null && data.gas_prices.fast === null) { + return No data available yet; + } + + return ( + <> + { data?.gas_prices && } + + + + + ); + })(); + return ( <> { secondRow={ titleSecondRow } withTextAd /> - { data?.gas_prices && } - - - + { content } ); }; From 1fd0846ec2ed258724d06a13ebb96a817e77f281 Mon Sep 17 00:00:00 2001 From: tom Date: Mon, 20 May 2024 20:14:03 +0200 Subject: [PATCH 2/4] display small amounts of gwei --- ui/gasTracker/GasTrackerPriceSnippet.pw.tsx | 19 ++++++++++++++++++ ...pet.pw.tsx_default_with-small-values-1.png | Bin 0 -> 10624 bytes ui/shared/gas/formatGasValue.ts | 5 +++++ 3 files changed, 24 insertions(+) create mode 100644 ui/gasTracker/__screenshots__/GasTrackerPriceSnippet.pw.tsx_default_with-small-values-1.png diff --git a/ui/gasTracker/GasTrackerPriceSnippet.pw.tsx b/ui/gasTracker/GasTrackerPriceSnippet.pw.tsx index 9700c43528..31ea84081c 100644 --- a/ui/gasTracker/GasTrackerPriceSnippet.pw.tsx +++ b/ui/gasTracker/GasTrackerPriceSnippet.pw.tsx @@ -65,3 +65,22 @@ test('with zero values', async({ render, page }) => { ); await expect(page).toHaveScreenshot({ clip }); }); + +test('with small values', async({ render, page }) => { + const data = { + fiat_price: '0.0042', + price: 0.042, + time: 0, + base_fee: 0, + priority_fee: 0, + }; + + await render( + , + ); + await expect(page).toHaveScreenshot({ clip }); +}); diff --git a/ui/gasTracker/__screenshots__/GasTrackerPriceSnippet.pw.tsx_default_with-small-values-1.png b/ui/gasTracker/__screenshots__/GasTrackerPriceSnippet.pw.tsx_default_with-small-values-1.png new file mode 100644 index 0000000000000000000000000000000000000000..73d69ebb5f21da22ed1f5d9f047f2d7233757e70 GIT binary patch literal 10624 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 literal 0 HcmV?d00001 diff --git a/ui/shared/gas/formatGasValue.ts b/ui/shared/gas/formatGasValue.ts index c55d75cd23..8c824ca742 100644 --- a/ui/shared/gas/formatGasValue.ts +++ b/ui/shared/gas/formatGasValue.ts @@ -9,6 +9,11 @@ export default function formatGasValue(data: GasPriceInfo, unit: GasUnit) { if (!data.price) { return `N/A ${ currencyUnits.gwei }`; } + + if (Number(data.price) < 0.1) { + return `< 0.1 ${ currencyUnits.gwei }`; + } + return `${ Number(data.price).toLocaleString(undefined, { maximumFractionDigits: 1 }) } ${ currencyUnits.gwei }`; } From 30eeb8a8b36c0ae30b7701d3c2ae9fd0175d7ba6 Mon Sep 17 00:00:00 2001 From: tom Date: Mon, 20 May 2024 20:25:39 +0200 Subject: [PATCH 3/4] remove links to stats if feature is not enabled --- ui/pages/GasTracker.tsx | 8 +++++--- ui/txs/TxsStats.tsx | 6 +++--- ui/verifiedContracts/VerifiedContractsCounters.tsx | 5 +++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/ui/pages/GasTracker.tsx b/ui/pages/GasTracker.tsx index bb6669be57..8286e8ab1c 100644 --- a/ui/pages/GasTracker.tsx +++ b/ui/pages/GasTracker.tsx @@ -70,9 +70,11 @@ const GasTracker = () => { return ( <> { data?.gas_prices && } - - - + { config.features.stats.isEnabled && ( + + + + ) } ); })(); diff --git a/ui/txs/TxsStats.tsx b/ui/txs/TxsStats.tsx index 256cdab6a2..50327362ab 100644 --- a/ui/txs/TxsStats.tsx +++ b/ui/txs/TxsStats.tsx @@ -46,7 +46,7 @@ const TxsStats = () => { value={ Number(txsStatsQuery.data?.transactions_count_24h).toLocaleString() } period="24h" isLoading={ txsStatsQuery.isPlaceholderData } - href={{ pathname: '/stats', query: { chartId: 'newTxns' } }} + href={ config.features.stats.isEnabled ? { pathname: '/stats', query: { chartId: 'newTxns' } } : undefined } /> { valuePostfix={ thinsp + config.chain.currency.symbol } period="24h" isLoading={ txsStatsQuery.isPlaceholderData } - href={{ pathname: '/stats', query: { chartId: 'txnsFee' } }} + href={ config.features.stats.isEnabled ? { pathname: '/stats', query: { chartId: 'txnsFee' } } : undefined } /> { valuePostfix={ txFeeAvg.usd ? undefined : thinsp + config.chain.currency.symbol } period="24h" isLoading={ txsStatsQuery.isPlaceholderData } - href={{ pathname: '/stats', query: { chartId: 'averageTxnFee' } }} + href={ config.features.stats.isEnabled ? { pathname: '/stats', query: { chartId: 'averageTxnFee' } } : undefined } /> ); diff --git a/ui/verifiedContracts/VerifiedContractsCounters.tsx b/ui/verifiedContracts/VerifiedContractsCounters.tsx index 71e10fbe79..708b29d823 100644 --- a/ui/verifiedContracts/VerifiedContractsCounters.tsx +++ b/ui/verifiedContracts/VerifiedContractsCounters.tsx @@ -1,6 +1,7 @@ import { Box } from '@chakra-ui/react'; import React from 'react'; +import config from 'configs/app'; import useApiQuery from 'lib/api/useApiQuery'; import { VERIFIED_CONTRACTS_COUNTERS } from 'stubs/contract'; import StatsWidget from 'ui/shared/stats/StatsWidget'; @@ -24,7 +25,7 @@ const VerifiedContractsCounters = () => { diff={ countersQuery.data.new_smart_contracts_24h } diffFormatted={ Number(countersQuery.data.new_smart_contracts_24h).toLocaleString() } isLoading={ countersQuery.isPlaceholderData } - href={{ pathname: '/stats', query: { chartId: 'contractsGrowth' } }} + href={ config.features.stats.isEnabled ? { pathname: '/stats', query: { chartId: 'contractsGrowth' } } : undefined } /> { diff={ countersQuery.data.new_verified_smart_contracts_24h } diffFormatted={ Number(countersQuery.data.new_verified_smart_contracts_24h).toLocaleString() } isLoading={ countersQuery.isPlaceholderData } - href={{ pathname: '/stats', query: { chartId: 'verifiedContractsGrowth' } }} + href={ config.features.stats.isEnabled ? { pathname: '/stats', query: { chartId: 'verifiedContractsGrowth' } } : undefined } /> ); From 0fc2f1a602e1a6c86466af36e77bad25f2c2d10d Mon Sep 17 00:00:00 2001 From: tom Date: Tue, 21 May 2024 12:15:36 +0200 Subject: [PATCH 4/4] fix test --- ui/home/Stats.pw.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/home/Stats.pw.tsx b/ui/home/Stats.pw.tsx index 24cf50b012..7c452f8bd3 100644 --- a/ui/home/Stats.pw.tsx +++ b/ui/home/Stats.pw.tsx @@ -28,7 +28,7 @@ test.describe('all items', () => { }); }); -test('4 items', async({ render, mockApiResponse, mockEnvs }) => { +test('4 items default view +@mobile -@default', async({ render, mockApiResponse, mockEnvs }) => { await mockEnvs([ [ 'NEXT_PUBLIC_HOMEPAGE_SHOW_AVG_BLOCK_TIME', 'false' ], ]); @@ -37,7 +37,7 @@ test('4 items', async({ render, mockApiResponse, mockEnvs }) => { await expect(component).toHaveScreenshot(); }); -test('3 items', async({ render, mockApiResponse, mockEnvs }) => { +test('3 items default view +@mobile -@default', async({ render, mockApiResponse, mockEnvs }) => { await mockEnvs([ [ 'NEXT_PUBLIC_HOMEPAGE_SHOW_AVG_BLOCK_TIME', 'false' ], [ 'NEXT_PUBLIC_GAS_TRACKER_ENABLED', 'false' ],