1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-10-23 20:05:27 +02:00
metamask-extension/ui/components/app/edit-gas-fee-popover/network-statistics/status-slider/status-slider.js
Elliot Winkler a820bce99a
Wire up network stability slider in new gas modal (#13029)
Use the new `networkCongestion` property available when we fetch gas fee
estimates.
2021-12-09 14:34:38 -07:00

91 lines
2.2 KiB
JavaScript

import React from 'react';
import { useGasFeeContext } from '../../../../../contexts/gasFee';
import I18nValue from '../../../../ui/i18n-value';
import { NetworkStabilityTooltip } from '../tooltips';
const GRADIENT_COLORS = [
'#037DD6',
'#1876C8',
'#2D70BA',
'#4369AB',
'#57629E',
'#6A5D92',
'#805683',
'#9A4D71',
'#B44561',
'#C54055',
'#D73A49',
];
const determineStatusInfo = (givenNetworkCongestion) => {
const networkCongestion = givenNetworkCongestion ?? 0.5;
const colorIndex = Math.round(networkCongestion * 10);
const color = GRADIENT_COLORS[colorIndex];
const sliderTickValue = colorIndex * 10;
if (networkCongestion <= 0.33) {
return {
statusLabel: 'notBusy',
tooltipLabel: 'lowLowercase',
color,
sliderTickValue,
};
} else if (networkCongestion > 0.66) {
return {
statusLabel: 'busy',
tooltipLabel: 'highLowercase',
color,
sliderTickValue,
};
}
return {
statusLabel: 'stable',
tooltipLabel: 'stableLowercase',
color,
sliderTickValue,
};
};
const StatusSlider = () => {
const { gasFeeEstimates } = useGasFeeContext();
const statusInfo = determineStatusInfo(gasFeeEstimates.networkCongestion);
return (
<NetworkStabilityTooltip
color={statusInfo.color}
tooltipLabel={statusInfo.tooltipLabel}
>
<div className="status-slider">
<div className="status-slider__arrow-container">
<div
className="status-slider__arrow-border"
style={{
marginLeft: `${statusInfo.sliderTickValue}%`,
}}
data-testid="status-slider-arrow-border"
>
<div
className="status-slider__arrow"
style={{
borderTopColor: statusInfo.color,
}}
data-testid="status-slider-arrow"
/>
</div>
</div>
<div className="status-slider__line" />
<div
className="status-slider__label"
style={{ color: statusInfo.color }}
data-testid="status-slider-label"
>
<I18nValue messageKey={statusInfo.statusLabel} />
</div>
</div>
</NetworkStabilityTooltip>
);
};
export default StatusSlider;