1
0

Member.tsx 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import React from "react";
  2. import { Council, Member, Post, ProposalDetail, Thread } from "../../types";
  3. import { domain } from "../../config";
  4. import Summary from "./Summary";
  5. import Posts from "./MemberPosts";
  6. import Proposals from "./MemberProposals";
  7. import NotFound from "./NotFound";
  8. const MemberBox = (props: {
  9. match: { params: { handle: string } };
  10. members: Member[];
  11. councils: Council[];
  12. proposals: ProposalDetail[];
  13. posts: Post[];
  14. threads: Thread[];
  15. validators: string[];
  16. history: any;
  17. status: { startTime: number };
  18. }) => {
  19. const { councils, members, posts, proposals, status } = props;
  20. const h = props.match.params.handle;
  21. const member = members.find(
  22. (m) => m.handle === h || String(m.account) === h || m.id === Number(h)
  23. );
  24. if (!member) return <NotFound history={props.history} />;
  25. const council = status.council;
  26. const isCouncilMember = council?.consuls.find(
  27. (c) => c.member.handle === member.handle
  28. );
  29. const threadTitle = (id: number) => {
  30. const thread = props.threads.find((t) => t.id === id);
  31. return thread ? thread.title : String(id);
  32. };
  33. return (
  34. <div>
  35. <div className="box">
  36. {isCouncilMember && <div>council member</div>}
  37. <a href={`${domain}/#/members/${member.handle}`}>
  38. <h1>{member.handle}</h1>
  39. <span>{member.account}</span>
  40. </a>
  41. <Summary
  42. councils={councils}
  43. member={member}
  44. posts={posts}
  45. proposals={proposals}
  46. startTime={status.startTime}
  47. validators={props.validators}
  48. />
  49. </div>
  50. <Proposals
  51. proposals={proposals.filter((p) => p && p.authorId === member.id)}
  52. startTime={status.startTime}
  53. />
  54. <Posts
  55. posts={posts.filter((p) => p.authorId === member.account)}
  56. threadTitle={threadTitle}
  57. startTime={status.startTime}
  58. />
  59. </div>
  60. );
  61. };
  62. export default MemberBox;