Files
tom goriunovandGitHub fd52568916 Integrate cspell (#3279)
* add cspell config

* remove eslint plugin

* adjust pre-commit hook and add check to CI

* fixes
2026-02-13 07:48:43 +01:00

85 lines
2.7 KiB
TypeScript

import { chakra } from '@chakra-ui/react';
import React from 'react';
import type { GasPriceInfo } from 'types/api/stats';
import type { GasUnit } from 'types/client/gasTracker';
import config from 'configs/app';
import { useMultichainContext } from 'lib/contexts/multichain';
import formatGasValue from './formatGasValue';
const UNITS_TO_API_FIELD_MAP: Record<GasUnit, 'price' | 'fiat_price'> = {
gwei: 'price',
usd: 'fiat_price',
};
interface Props {
data: GasPriceInfo | null;
className?: string;
unitMode?: 'primary' | 'secondary';
prefix?: string;
}
const GasPrice = ({ data, prefix, className, unitMode = 'primary' }: Props) => {
const multichainContext = useMultichainContext();
const feature = multichainContext?.chain?.app_config.features.gasTracker || config.features.gasTracker;
if (!data || !feature.isEnabled) {
return null;
}
switch (unitMode) {
case 'secondary': {
const primaryUnits = feature.units[0];
const secondaryUnits = feature.units[1];
if (!secondaryUnits) {
return null;
}
const primaryUnitsValue = data[UNITS_TO_API_FIELD_MAP[primaryUnits]];
if (!primaryUnitsValue) {
// in this case we display values in secondary units in primary mode as fallback
return null;
}
const secondaryUnitsValue = data[UNITS_TO_API_FIELD_MAP[secondaryUnits]];
if (!secondaryUnitsValue) {
return null;
}
const formattedValue = formatGasValue(data, secondaryUnits);
return <span className={ className }>{ prefix }{ formattedValue }</span>;
}
case 'primary': {
const primaryUnits = feature.units[0];
const secondaryUnits = feature.units[1];
if (!primaryUnits) {
// this should never happen since feature will be disabled if there are no units at all
return null;
}
const value = data[UNITS_TO_API_FIELD_MAP[primaryUnits]];
if (!value) {
// in primary mode we want to fallback to secondary units if value in primary units are not available
// unless there are no secondary units
const valueInSecondaryUnits = data[UNITS_TO_API_FIELD_MAP[secondaryUnits]];
if (!secondaryUnits || !valueInSecondaryUnits) {
// in primary mode we always want to show something
// this will return "N/A <units>"
return <span className={ className }>{ formatGasValue(data, primaryUnits) }</span>;
} else {
return <span className={ className }>{ prefix }{ formatGasValue(data, secondaryUnits) }</span>;
}
}
return <span className={ className }>{ prefix }{ formatGasValue(data, primaryUnits) }</span>;
}
}
};
export default chakra(GasPrice);