OverviewTable.tsx 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import React from 'react';
  2. import { Table, Popup, Icon } from 'semantic-ui-react';
  3. import styled from 'styled-components';
  4. import { TokenomicsData, StatusServerData } from '@polkadot/joy-utils/src/types/tokenomics';
  5. const StyledTableRow = styled(Table.Row)`
  6. .help-icon{
  7. position: absolute !important;
  8. right: 0rem !important;
  9. top: 0 !important;
  10. @media (max-width: 767px){
  11. right: 1rem !important;
  12. top:0.8rem !important;
  13. }
  14. }
  15. `;
  16. const OverviewTableRow: React.FC<{item: string; value: string; help?: string}> = ({ item, value, help }) => {
  17. return (
  18. <StyledTableRow>
  19. <Table.Cell>
  20. <div style={{ position: 'relative' }}>
  21. {item}
  22. {help &&
  23. <Popup
  24. trigger={<Icon className='help-icon' name='help circle' color='grey'/>}
  25. content={help}
  26. position='right center'
  27. />}
  28. </div>
  29. </Table.Cell>
  30. <Table.Cell>{value}</Table.Cell>
  31. </StyledTableRow>
  32. );
  33. };
  34. const OverviewTable: React.FC<{data?: TokenomicsData; statusData?: StatusServerData | null}> = ({ data, statusData }) => {
  35. const displayStatusData = (val: string, unit: string): string => (
  36. statusData === null ? 'Data currently unavailable...' : statusData ? `${val} ${unit}` : 'Loading...'
  37. );
  38. return (
  39. <Table style={{ marginBottom: '1.5rem' }} celled>
  40. <Table.Header>
  41. <Table.Row>
  42. <Table.HeaderCell width={10}>Item</Table.HeaderCell>
  43. <Table.HeaderCell width={2}>Value</Table.HeaderCell>
  44. </Table.Row>
  45. </Table.Header>
  46. <Table.Body>
  47. <OverviewTableRow
  48. item='Total Issuance'
  49. help='The current supply of tokens.'
  50. value={data ? `${data.totalIssuance} JOY` : 'Loading...'}
  51. />
  52. <OverviewTableRow
  53. item='Fiat Pool'
  54. help='The current value of the Fiat Pool.'
  55. value={displayStatusData(statusData?.dollarPool.size.toFixed(2) || '', 'USD')}
  56. />
  57. <OverviewTableRow
  58. item='Currently Staked Tokens'
  59. value={data ? `${data.currentlyStakedTokens} JOY` : 'Loading...'}
  60. help='All tokens currently staked for active roles.'
  61. />
  62. <OverviewTableRow
  63. item='Currently Staked Value'
  64. value={ data ? displayStatusData(`${(data.currentlyStakedTokens * Number(statusData?.price)).toFixed(2)}`, 'USD') : 'Loading...' }
  65. help='The value of all tokens currently staked for active roles.'
  66. />
  67. <OverviewTableRow
  68. item='Exchange Rate'
  69. value={displayStatusData(`${(Number(statusData?.price) * 1000000).toFixed(2)}`, 'USD/1MJOY')}
  70. help='The current exchange rate.'
  71. />
  72. {/* <OverviewTableRow help='Sum of all tokens burned through exchanges' item='Total Tokens Burned/Exchanged' value={statusData ? `${statusData.burned} JOY` : 'Loading...'}/> */}
  73. <OverviewTableRow
  74. item='Projected Weekly Token Mint Rate'
  75. value={data ? `${Math.round(data.totalWeeklySpending)} JOY` : 'Loading...'}
  76. help='Projection of tokens minted over the next week, based on current rewards for all roles.'
  77. />
  78. <OverviewTableRow
  79. item='Projected Weekly Token Inflation Rate'
  80. value={data ? `${((data.totalWeeklySpending / data.totalIssuance) * 100).toFixed(2)} %` : 'Loading...'}
  81. help={'Based on \'Projected Weekly Token Mint Rate\'. Does not include any deflationary forces (fees, slashes, burns, etc.)'}
  82. />
  83. <OverviewTableRow
  84. item='Projected Weekly Value Of Mint'
  85. value={ data ? displayStatusData(`${(data.totalWeeklySpending * Number(statusData?.price)).toFixed(2)}`, 'USD') : 'Loading...'}
  86. help={'Based on \'Projected Weekly Token Mint Rate\', and current \'Exchange Rate\'.'}
  87. />
  88. <OverviewTableRow
  89. item='Weekly Top Ups'
  90. value={displayStatusData(Number(statusData?.dollarPool.replenishAmount).toFixed(2) || '', 'USD')}
  91. help={'The current weekly \'Fiat Pool\' replenishment amount. Does not include KPIs, or other potential top ups.'}
  92. />
  93. </Table.Body>
  94. </Table>
  95. );
  96. };
  97. export default OverviewTable;