Commit ea5b1aae authored by tom's avatar tom

use dataUpdatedAt as a reference

parent a4139059
...@@ -14,6 +14,11 @@ interface Props { ...@@ -14,6 +14,11 @@ interface Props {
const BlocksTabSlot = ({ pagination }: Props) => { const BlocksTabSlot = ({ pagination }: Props) => {
const statsQuery = useApiQuery('homepage_stats', { const statsQuery = useApiQuery('homepage_stats', {
fetchParams: {
headers: {
'updated-gas-oracle': 'true',
},
},
queryOptions: { queryOptions: {
placeholderData: HOMEPAGE_STATS, placeholderData: HOMEPAGE_STATS,
}, },
......
...@@ -16,7 +16,7 @@ const hasGasTracker = config.UI.homepage.showGasTracker; ...@@ -16,7 +16,7 @@ const hasGasTracker = config.UI.homepage.showGasTracker;
const hasAvgBlockTime = config.UI.homepage.showAvgBlockTime; const hasAvgBlockTime = config.UI.homepage.showAvgBlockTime;
const Stats = () => { const Stats = () => {
const { data, isPlaceholderData, isError } = useApiQuery('homepage_stats', { const { data, isPlaceholderData, isError, dataUpdatedAt } = useApiQuery('homepage_stats', {
fetchParams: { fetchParams: {
headers: { headers: {
'updated-gas-oracle': 'true', 'updated-gas-oracle': 'true',
...@@ -51,7 +51,7 @@ const Stats = () => { ...@@ -51,7 +51,7 @@ const Stats = () => {
!data.gas_prices && itemsCount--; !data.gas_prices && itemsCount--;
data.rootstock_locked_btc && itemsCount++; data.rootstock_locked_btc && itemsCount++;
const isOdd = Boolean(itemsCount % 2); const isOdd = Boolean(itemsCount % 2);
const gasLabel = hasGasTracker && data.gas_prices ? <GasInfoTooltipContent data={ data }/> : null; const gasLabel = hasGasTracker && data.gas_prices ? <GasInfoTooltipContent data={ data } dataUpdatedAt={ dataUpdatedAt }/> : null;
const gasPriceText = (() => { const gasPriceText = (() => {
if (data.gas_prices?.average?.fiat_price) { if (data.gas_prices?.average?.fiat_price) {
......
...@@ -10,9 +10,10 @@ import GasInfoUpdateTimer from './GasInfoUpdateTimer'; ...@@ -10,9 +10,10 @@ import GasInfoUpdateTimer from './GasInfoUpdateTimer';
interface Props { interface Props {
data: HomeStats; data: HomeStats;
dataUpdatedAt: number;
} }
const GasInfoTooltipContent = ({ data }: Props) => { const GasInfoTooltipContent = ({ data, dataUpdatedAt }: Props) => {
if (!data.gas_prices) { if (!data.gas_prices) {
return null; return null;
...@@ -26,7 +27,7 @@ const GasInfoTooltipContent = ({ data }: Props) => { ...@@ -26,7 +27,7 @@ const GasInfoTooltipContent = ({ data }: Props) => {
<GridItem color="text_secondary" display="flex" justifyContent="flex-end" columnGap={ 2 }> <GridItem color="text_secondary" display="flex" justifyContent="flex-end" columnGap={ 2 }>
{ dayjs(data.gas_price_updated_at).format('MMM DD, HH:mm:ss') } { dayjs(data.gas_price_updated_at).format('MMM DD, HH:mm:ss') }
{ data.gas_prices_update_in !== 0 && { data.gas_prices_update_in !== 0 &&
<GasInfoUpdateTimer startTime={ data.gas_price_updated_at } duration={ data.gas_prices_update_in }/> } <GasInfoUpdateTimer startTime={ dataUpdatedAt } duration={ data.gas_prices_update_in }/> }
</GridItem> </GridItem>
</> </>
) } ) }
......
...@@ -5,7 +5,7 @@ import { SECOND } from 'lib/consts'; ...@@ -5,7 +5,7 @@ import { SECOND } from 'lib/consts';
import dayjs from 'lib/date/dayjs'; import dayjs from 'lib/date/dayjs';
interface Props { interface Props {
startTime: string; startTime: number;
duration: number; duration: number;
} }
...@@ -14,8 +14,8 @@ const getValue = (startDate: dayjs.Dayjs, duration: number) => { ...@@ -14,8 +14,8 @@ const getValue = (startDate: dayjs.Dayjs, duration: number) => {
const diff = now.diff(startDate, 'ms'); const diff = now.diff(startDate, 'ms');
const value = diff / duration * 100; const value = diff / duration * 100;
if (value >= 99) { if (value >= 95) {
return 99; return 95;
} }
return value; return value;
...@@ -30,7 +30,7 @@ const GasInfoUpdateTimer = ({ startTime, duration }: Props) => { ...@@ -30,7 +30,7 @@ const GasInfoUpdateTimer = ({ startTime, duration }: Props) => {
const intervalId = window.setInterval(() => { const intervalId = window.setInterval(() => {
const nextValue = getValue(startDate, duration); const nextValue = getValue(startDate, duration);
setValue(nextValue); setValue(nextValue);
if (nextValue === 99) { if (nextValue === 95) {
window.clearInterval(intervalId); window.clearInterval(intervalId);
} }
}, SECOND); }, SECOND);
......
...@@ -3,7 +3,6 @@ import React from 'react'; ...@@ -3,7 +3,6 @@ import React from 'react';
import config from 'configs/app'; import config from 'configs/app';
import useApiQuery from 'lib/api/useApiQuery'; import useApiQuery from 'lib/api/useApiQuery';
import { SECOND } from 'lib/consts';
import dayjs from 'lib/date/dayjs'; import dayjs from 'lib/date/dayjs';
import { HOMEPAGE_STATS } from 'stubs/stats'; import { HOMEPAGE_STATS } from 'stubs/stats';
import GasInfoTooltipContent from 'ui/shared/GasInfoTooltipContent/GasInfoTooltipContent'; import GasInfoTooltipContent from 'ui/shared/GasInfoTooltipContent/GasInfoTooltipContent';
...@@ -18,7 +17,7 @@ const TopBarStats = () => { ...@@ -18,7 +17,7 @@ const TopBarStats = () => {
onToggle(); onToggle();
}, [ onToggle ]); }, [ onToggle ]);
const { data, isPlaceholderData, isError, refetch } = useApiQuery('homepage_stats', { const { data, isPlaceholderData, isError, refetch, dataUpdatedAt } = useApiQuery('homepage_stats', {
fetchParams: { fetchParams: {
headers: { headers: {
'updated-gas-oracle': 'true', 'updated-gas-oracle': 'true',
...@@ -35,7 +34,7 @@ const TopBarStats = () => { ...@@ -35,7 +34,7 @@ const TopBarStats = () => {
return; return;
} }
const endDate = dayjs(data.gas_price_updated_at).add(data.gas_prices_update_in, 'ms'); const endDate = dayjs(dataUpdatedAt).add(data.gas_prices_update_in, 'ms');
const timeout = endDate.diff(dayjs(), 'ms'); const timeout = endDate.diff(dayjs(), 'ms');
if (timeout <= 0) { if (timeout <= 0) {
...@@ -44,12 +43,12 @@ const TopBarStats = () => { ...@@ -44,12 +43,12 @@ const TopBarStats = () => {
const timeoutId = window.setTimeout(() => { const timeoutId = window.setTimeout(() => {
refetch(); refetch();
}, timeout + SECOND); }, timeout);
return () => { return () => {
window.clearTimeout(timeoutId); window.clearTimeout(timeoutId);
}; };
}, [ isPlaceholderData, data?.gas_price_updated_at, data?.gas_prices_update_in, refetch ]); }, [ isPlaceholderData, data?.gas_price_updated_at, dataUpdatedAt, data?.gas_prices_update_in, refetch ]);
if (isError) { if (isError) {
return <div/>; return <div/>;
...@@ -82,7 +81,7 @@ const TopBarStats = () => { ...@@ -82,7 +81,7 @@ const TopBarStats = () => {
<chakra.span color="text_secondary">Gas </chakra.span> <chakra.span color="text_secondary">Gas </chakra.span>
<LightMode> <LightMode>
<Tooltip <Tooltip
label={ <GasInfoTooltipContent data={ data }/> } label={ <GasInfoTooltipContent data={ data } dataUpdatedAt={ dataUpdatedAt }/> }
hasArrow={ false } hasArrow={ false }
borderRadius="md" borderRadius="md"
offset={ [ 0, 16 ] } offset={ [ 0, 16 ] }
......
import type { TooltipProps } from '@chakra-ui/react'; import type { TooltipProps } from '@chakra-ui/react';
import { Box, Grid, Heading, List, ListItem, Skeleton } from '@chakra-ui/react'; import { Box, Grid, Heading, List, ListItem, Skeleton } from '@chakra-ui/react';
import { useQueryClient } from '@tanstack/react-query';
import React, { useCallback, useState } from 'react'; import React, { useCallback, useState } from 'react';
import type { HomeStats, StatsChartsSection } from 'types/api/stats'; import type { StatsChartsSection } from 'types/api/stats';
import type { StatsIntervalIds } from 'types/client/stats'; import type { StatsIntervalIds } from 'types/client/stats';
import { getResourceKey } from 'lib/api/useApiQuery'; import useApiQuery from 'lib/api/useApiQuery';
import { apos } from 'lib/html-entities'; import { apos } from 'lib/html-entities';
import EmptySearchResult from 'ui/shared/EmptySearchResult'; import EmptySearchResult from 'ui/shared/EmptySearchResult';
import GasInfoTooltipContent from 'ui/shared/GasInfoTooltipContent/GasInfoTooltipContent'; import GasInfoTooltipContent from 'ui/shared/GasInfoTooltipContent/GasInfoTooltipContent';
...@@ -34,8 +33,16 @@ const ChartsWidgetsList = ({ filterQuery, isError, isPlaceholderData, charts, in ...@@ -34,8 +33,16 @@ const ChartsWidgetsList = ({ filterQuery, isError, isPlaceholderData, charts, in
const isAnyChartDisplayed = charts?.some((section) => section.charts.length > 0); const isAnyChartDisplayed = charts?.some((section) => section.charts.length > 0);
const isEmptyChartList = Boolean(filterQuery) && !isAnyChartDisplayed; const isEmptyChartList = Boolean(filterQuery) && !isAnyChartDisplayed;
const queryClient = useQueryClient(); const homeStatsQuery = useApiQuery('homepage_stats', {
const homeStatsData = queryClient.getQueryData<HomeStats>(getResourceKey('homepage_stats')); fetchParams: {
headers: {
'updated-gas-oracle': 'true',
},
},
queryOptions: {
refetchOnMount: false,
},
});
const handleChartLoadingError = useCallback( const handleChartLoadingError = useCallback(
() => setIsSomeChartLoadingError(true), () => setIsSomeChartLoadingError(true),
...@@ -69,8 +76,12 @@ const ChartsWidgetsList = ({ filterQuery, isError, isPlaceholderData, charts, in ...@@ -69,8 +76,12 @@ const ChartsWidgetsList = ({ filterQuery, isError, isPlaceholderData, charts, in
<Heading size="md" > <Heading size="md" >
{ section.title } { section.title }
</Heading> </Heading>
{ section.id === 'gas' && homeStatsData && homeStatsData.gas_prices && { section.id === 'gas' && homeStatsQuery.data && homeStatsQuery.data.gas_prices && (
<Hint label={ <GasInfoTooltipContent data={ homeStatsData }/> } tooltipProps={ GAS_TOOLTIP_PROPS }/> } <Hint
label={ <GasInfoTooltipContent data={ homeStatsQuery.data } dataUpdatedAt={ homeStatsQuery.dataUpdatedAt }/> }
tooltipProps={ GAS_TOOLTIP_PROPS }
/>
) }
</Skeleton> </Skeleton>
<Grid <Grid
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment