|
@@ -2,6 +2,7 @@ import React from "react";
|
|
import { Link } from "react-router-dom";
|
|
import { Link } from "react-router-dom";
|
|
import { Member, Post, ProposalDetail } from "../../types";
|
|
import { Member, Post, ProposalDetail } from "../../types";
|
|
import { domain } from "../../config";
|
|
import { domain } from "../../config";
|
|
|
|
+import moment from "moment";
|
|
|
|
|
|
interface Vote {
|
|
interface Vote {
|
|
proposal: ProposalDetail;
|
|
proposal: ProposalDetail;
|
|
@@ -24,6 +25,7 @@ const MemberBox = (props: {
|
|
councils: number[][];
|
|
councils: number[][];
|
|
proposals: ProposalDetail[];
|
|
proposals: ProposalDetail[];
|
|
posts: Post[];
|
|
posts: Post[];
|
|
|
|
+ startTime: number;
|
|
}) => {
|
|
}) => {
|
|
const { councils, members, proposals } = props;
|
|
const { councils, members, proposals } = props;
|
|
const handle = props.handle
|
|
const handle = props.handle
|
|
@@ -35,7 +37,9 @@ const MemberBox = (props: {
|
|
if (!member) return <NotFound />;
|
|
if (!member) return <NotFound />;
|
|
|
|
|
|
const id = Number(member.id);
|
|
const id = Number(member.id);
|
|
- const isCouncilMember = councils[councils.length - 1].includes(id);
|
|
|
|
|
|
+ const council = councils[councils.length - 1];
|
|
|
|
+ if (!council) return <div>Loading..</div>;
|
|
|
|
+ const isCouncilMember = council.includes(id);
|
|
const onCouncil = councils.filter((c) => c.includes(Number(member.id)));
|
|
const onCouncil = councils.filter((c) => c.includes(Number(member.id)));
|
|
|
|
|
|
let votes: Vote[] = [];
|
|
let votes: Vote[] = [];
|
|
@@ -50,6 +54,12 @@ const MemberBox = (props: {
|
|
(p) => p.authorId === String(member.account)
|
|
(p) => p.authorId === String(member.account)
|
|
);
|
|
);
|
|
|
|
|
|
|
|
+ const time = props.startTime + member.registeredAt * 6000;
|
|
|
|
+ const date = moment(time);
|
|
|
|
+ const created = date.isValid()
|
|
|
|
+ ? date.format("DD/MM/YYYY HH:mm")
|
|
|
|
+ : member.registeredAt;
|
|
|
|
+
|
|
return (
|
|
return (
|
|
<div className="box">
|
|
<div className="box">
|
|
{props.match && (
|
|
{props.match && (
|
|
@@ -63,17 +73,12 @@ const MemberBox = (props: {
|
|
</a>
|
|
</a>
|
|
|
|
|
|
<div className="text-left">
|
|
<div className="text-left">
|
|
- <div>Id: {member.id}</div>
|
|
|
|
-
|
|
|
|
- <div>Registered at block: {member.registeredAt}</div>
|
|
|
|
- <OnCouncil onCouncil={onCouncil.length} votes={votes.length} />
|
|
|
|
- <div>
|
|
|
|
- Proposals authored:{" "}
|
|
|
|
- <Link to={`/proposals`}>{createdProposals.length}</Link>
|
|
|
|
- </div>
|
|
|
|
<div>
|
|
<div>
|
|
- Posts: <Link to={`/forum`}>{posts.length}</Link>
|
|
|
|
|
|
+ Registered on {created} (id {member.id})
|
|
</div>
|
|
</div>
|
|
|
|
+ <OnCouncil onCouncil={onCouncil.length} votes={votes.length} />
|
|
|
|
+ <Proposals proposals={createdProposals.length} />
|
|
|
|
+ <Posts posts={posts.length} />
|
|
|
|
|
|
<About about={member.about} />
|
|
<About about={member.about} />
|
|
</div>
|
|
</div>
|
|
@@ -90,6 +95,27 @@ const About = (props: { about: string }) => {
|
|
);
|
|
);
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+const Proposals = (props: { proposals: number }) => {
|
|
|
|
+ const { proposals } = props;
|
|
|
|
+ if (!proposals) return <div />;
|
|
|
|
+ const count = proposals > 1 ? `proposals` : `proposal`;
|
|
|
|
+ return (
|
|
|
|
+ <div>
|
|
|
|
+ Authored <Link to={`/proposals`}>{proposals}</Link> {count}.
|
|
|
|
+ </div>
|
|
|
|
+ );
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const Posts = (props: { posts: number }) => {
|
|
|
|
+ if (!props.posts) return <div />;
|
|
|
|
+ const count = props.posts > 1 ? `posts` : `post`;
|
|
|
|
+ return (
|
|
|
|
+ <div>
|
|
|
|
+ Wrote <Link to={`/forum`}>{props.posts}</Link> forum {count}.
|
|
|
|
+ </div>
|
|
|
|
+ );
|
|
|
|
+};
|
|
|
|
+
|
|
const OnCouncil = (props: { onCouncil: number; votes: number }) => {
|
|
const OnCouncil = (props: { onCouncil: number; votes: number }) => {
|
|
const { onCouncil, votes } = props;
|
|
const { onCouncil, votes } = props;
|
|
if (!onCouncil) return <div />;
|
|
if (!onCouncil) return <div />;
|
|
@@ -102,7 +128,8 @@ const OnCouncil = (props: { onCouncil: number; votes: number }) => {
|
|
</Link>
|
|
</Link>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div>
|
|
- Proposal votes: <Link to={`/councils`}>{votes}</Link>
|
|
|
|
|
|
+ Voted on proposals:{" "}
|
|
|
|
+ <Link to={`/councils`}>{votes > 1 ? `${votes} times` : "once"}</Link>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
);
|