percentChange.tsx 635 B

12345678910111213141516171819202122232425262728293031
  1. import styled from '@emotion/styled';
  2. type Props = {
  3. current: number;
  4. prev: number;
  5. };
  6. function PercentChange({current, prev}: Props) {
  7. if (!current || !prev) {
  8. return null;
  9. }
  10. const pct = current / prev - 1;
  11. if (Math.round(pct * 100) === 0) {
  12. return null;
  13. }
  14. const formattedNumber = new Intl.NumberFormat('en-US', {
  15. style: 'percent',
  16. signDisplay: 'exceptZero',
  17. }).format(pct);
  18. return <Indicator value={pct}>{formattedNumber}</Indicator>;
  19. }
  20. const Indicator = styled('span')<{value: number}>`
  21. color: ${p => (p.value < 0 ? p.theme.red300 : p.theme.green300)};
  22. `;
  23. export default PercentChange;