index.tsx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import React from "react";
  2. import { Link } from "react-router-dom";
  3. import { Council } from "..";
  4. import Proposals from "../Proposals/ProposalTable";
  5. import Post from "../Forum/LatestPost";
  6. import Footer from "./Footer";
  7. import Validators from "../Validators";
  8. import { IState } from "../../types";
  9. interface IProps extends IState {
  10. toggleStar: (a: string) => void;
  11. toggleFooter: () => void;
  12. }
  13. const Dashboard = (props: IProps) => {
  14. const {
  15. connecting,
  16. block,
  17. now,
  18. domain,
  19. handles,
  20. members,
  21. posts,
  22. proposals,
  23. threads,
  24. tokenomics,
  25. } = props;
  26. const userLink = `${domain}/#/members/joystreamstats`;
  27. return (
  28. <div className="w-100 flex-grow-1 d-flex align-items-center justify-content-center d-flex flex-column">
  29. <div
  30. className="box position-fixed bg-warning d-flex flex-column"
  31. style={{ top: "0px", right: "0px" }}
  32. >
  33. <Link to={`/calendar`}>Calendar</Link>
  34. <Link to={`/timeline`}>Timeline</Link>
  35. <Link to={`/tokenomics`}>Reports</Link>
  36. <Link to={`/validators`}>Validators</Link>
  37. <Link to="/mint">Toolbox</Link>
  38. </div>
  39. <h1 className="title">
  40. <a href={domain}>Joystream</a>
  41. </h1>
  42. <Council
  43. councils={props.councils}
  44. members={members}
  45. councilElection={props.councilElection}
  46. block={block}
  47. now={now}
  48. round={props.round}
  49. handles={props.handles}
  50. termEndsAt={props.termEndsAt}
  51. stage={props.stage}
  52. posts={props.posts}
  53. proposals={props.proposals}
  54. validators={props.validators}
  55. />
  56. <div className="w-100 p-3 m-3">
  57. <div className="d-flex flex-row">
  58. <h3 className="ml-1 text-light">Active Proposals</h3>
  59. <Link className="m-3 text-light" to={"/proposals"}>
  60. All
  61. </Link>
  62. <Link className="m-3 text-light" to={"/councils"}>
  63. Votes
  64. </Link>
  65. </div>
  66. <Proposals
  67. hideNav={true}
  68. startTime={now - block * 6000}
  69. block={block}
  70. proposals={proposals.filter((p) => p && p.result === "Pending")}
  71. proposalPosts={props.proposalPosts}
  72. members={members}
  73. councils={props.councils}
  74. posts={posts}
  75. validators={props.validators}
  76. />
  77. </div>
  78. <div className="w-100 p-3 m-3 d-flex flex-column">
  79. <h3>
  80. <Link className="text-light" to={"/forum"}>
  81. Forum
  82. </Link>
  83. </h3>
  84. {posts
  85. .sort((a, b) => b.id - a.id)
  86. .slice(0, 10)
  87. .map((post) => (
  88. <Post
  89. key={post.id}
  90. selectThread={() => {}}
  91. handles={handles}
  92. post={post}
  93. thread={threads.find((t) => t.id === post.threadId)}
  94. startTime={now - block * 6000}
  95. />
  96. ))}
  97. </div>
  98. <div className="w-100 p-3 m-3">
  99. <Validators
  100. block={block}
  101. era={props.era}
  102. now={now}
  103. lastReward={props.lastReward}
  104. councils={props.councils}
  105. handles={handles}
  106. members={members}
  107. posts={props.posts}
  108. proposals={props.proposals}
  109. nominators={props.nominators}
  110. validators={props.validators}
  111. stashes={props.stashes}
  112. stars={props.stars}
  113. stakes={props.stakes}
  114. toggleStar={props.toggleStar}
  115. rewardPoints={props.rewardPoints}
  116. tokenomics={tokenomics}
  117. hideBackButton={true}
  118. />
  119. </div>
  120. <Footer
  121. toggleHide={props.toggleFooter}
  122. show={!props.hideFooter}
  123. connecting={connecting}
  124. link={userLink}
  125. />
  126. {connecting ? <div className="connecting">Connecting ..</div> : ""}
  127. </div>
  128. );
  129. };
  130. export default Dashboard;