Skip to content

Commit

Permalink
feat: new contracts, charts, and theming
Browse files Browse the repository at this point in the history
  • Loading branch information
epiqueras committed Dec 20, 2018
1 parent a1bc04e commit 8426251
Show file tree
Hide file tree
Showing 11 changed files with 35,151 additions and 27,717 deletions.
2 changes: 1 addition & 1 deletion .env
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
REACT_APP_KLEROS_LIQUID_KOVAN_ADDRESS=0xB05bcE120Cda1D2E07129115556902468f10A0A4
REACT_APP_KLEROS_LIQUID_KOVAN_ADDRESS=0xa80116b49125f8a7466e995d46a4abdb0d98a199
REACT_APP_PINAKION_KOVAN_ADDRESS=0x35c3F474d9d1B72D918b556F92ba934EA30E559D
REACT_APP_POLICY_REGISTRY_KOVAN_ADDRESS=0x55aa06760990a6418a89d2177de367fe1cb5c3cb
REACT_APP_WEB3_FALLBACK_URL=wss://mainnet.infura.io/ws
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
"react-blockies": "^1.4.0",
"react-dom": "16.7.0-alpha.2",
"react-helmet": "^5.2.0",
"react-minimal-pie-chart": "^3.3.0",
"react-router-dom": "^4.3.1",
"react-scripts": "2.1.1",
"react-time-ago": "^3.0.3",
Expand Down
62,637 changes: 34,926 additions & 27,711 deletions src/assets/contracts/kleros-liquid.json

Large diffs are not rendered by default.

10 changes: 7 additions & 3 deletions src/components/courts-list-card.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,14 @@ const StyledListItem = styled(List.Item)`
const CourtsListCard = () => {
const { cacheCall, drizzleState } = useDrizzle()
const load = useDataloader()
const juror = cacheCall('KlerosLiquid', 'getJuror', drizzleState.accounts[0])
const subcourtIDs = cacheCall(
'KlerosLiquid',
'getJuror',
drizzleState.accounts[0]
)
const names =
juror &&
juror.subcourtIDs.map(ID => {
subcourtIDs &&
subcourtIDs.map(ID => {
const policy = cacheCall('PolicyRegistry', 'policies', ID)
if (policy) {
const policyJSON = load(policy.fileURI)
Expand Down
67 changes: 67 additions & 0 deletions src/components/pie-chart.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import React, { useCallback, useState } from 'react'
import PropTypes from 'prop-types'
import ReactMinimalPieChart from 'react-minimal-pie-chart'
import styled from 'styled-components/macro'

const StyledDiv = styled.div`
position: relative;
`
const StyledTooltipDiv = styled.div.attrs(({ x, y }) => ({
style: { left: `${x}px`, top: `${y - 60}px` }
}))`
background: white;
border: 1px solid black;
border-radius: 3px;
padding: 10px 8px;
position: absolute;
white-space: nowrap;
`
const PieChart = ({ data }) => {
const [state, setState] = useState({ dataIndex: null, x: null, y: null })
const onMouseMove = useCallback(event => {
const bounds = event.currentTarget.getBoundingClientRect()
const x = event.clientX - bounds.left
const y = event.clientY - bounds.top
setState(state => ({ ...state, x, y }))
}, [])
const onMouseOut = useCallback(
() => setState(state => ({ ...state, dataIndex: null })),
[]
)
const onMouseOver = useCallback(
(_, __, dataIndex) => setState(state => ({ ...state, dataIndex })),
[]
)
const inPie = state.dataIndex !== null
return (
<StyledDiv onMouseMove={inPie ? onMouseMove : undefined}>
<ReactMinimalPieChart
className="ReactMinimalPieChart"
data={data}
onMouseOut={onMouseOut}
onMouseOver={onMouseOver}
>
{inPie && (
<StyledTooltipDiv
className="ternary-border-color theme-border-color ternary-color theme-color"
x={state.x}
y={state.y}
>
{data[state.dataIndex].tooltip}
</StyledTooltipDiv>
)}
</ReactMinimalPieChart>
</StyledDiv>
)
}

PieChart.propTypes = {
data: PropTypes.arrayOf(
PropTypes.shape({
tooltip: PropTypes.node.isRequired,
value: PropTypes.number.isRequired
}).isRequired
).isRequired
}

export default PieChart
2 changes: 1 addition & 1 deletion src/components/pnk-balance-card.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ const StyledSectionArrowBackground = styled(SectionArrowBackground)`
`
const PNKBalanceCard = () => {
const { cacheCall, drizzleState } = useDrizzle()
const juror = cacheCall('KlerosLiquid', 'getJuror', drizzleState.accounts[0])
const juror = cacheCall('KlerosLiquid', 'jurors', drizzleState.accounts[0])
return (
<StyledCard hoverable>
<Spin
Expand Down
67 changes: 67 additions & 0 deletions src/components/pnk-stats-list-card.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import React, { useMemo } from 'react'
import ETHAmount from './eth-amount'
import PieChart from './pie-chart'
import { Spin } from 'antd'
import TitledListCard from './titled-list-card'
import styled from 'styled-components/macro'
import { useDataloader } from '../bootstrap/dataloader'
import { useDrizzle } from '../temp/drizzle-react-hooks'

const StyledAmountSpan = styled.span`
font-weight: bold;
`
const StyledTitleSpan = styled.span`
font-style: italic;
`
const PNKStatsListCard = () => {
const { cacheCall, drizzleState } = useDrizzle()
const load = useDataloader()
const subcourtIDs = cacheCall(
'KlerosLiquid',
'getJuror',
drizzleState.accounts[0]
)
const subcourts =
subcourtIDs &&
subcourtIDs.map(ID => {
const subcourt = {}
subcourt.stake = cacheCall(
'KlerosLiquid',
'stakeOf',
drizzleState.accounts[0],
ID
)
const policy = cacheCall('PolicyRegistry', 'policies', ID)
if (policy) {
const policyJSON = load(policy.fileURI)
if (policyJSON) subcourt.name = policyJSON.name
}
return subcourt
})
const loading = !subcourts || subcourts.some(s => s.stake === undefined)
return (
<TitledListCard loading={loading} prefix="PNK" title="Stats">
{!loading && (
<PieChart
data={useMemo(
() =>
subcourts.map(s => ({
tooltip: (
<Spin spinning={s.name === undefined}>
<StyledAmountSpan>
<ETHAmount amount={s.stake} /> PNK
</StyledAmountSpan>
<StyledTitleSpan> - {s.name || '...'}</StyledTitleSpan>
</Spin>
),
value: Number(s.stake)
})),
[...subcourts.map(s => s.stake), ...subcourts.map(s => s.name)]
)}
/>
)}
</TitledListCard>
)
}

export default PNKStatsListCard
49 changes: 49 additions & 0 deletions src/components/theme.css
Original file line number Diff line number Diff line change
Expand Up @@ -18605,6 +18605,10 @@ li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper:hov
.normal-background .ant-card-head {
background: #d9d9d9;
}
.normal-border-color.theme-border-color,
.normal-border-color .theme-border-color {
border-color: #d9d9d9;
}
.normal-color.theme-color,
.normal-color .theme-color,
.normal-color .ant-list-item-extra,
Expand All @@ -18624,6 +18628,10 @@ li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper:hov
.warning-background .ant-card-head {
background: #faad14;
}
.warning-border-color.theme-border-color,
.warning-border-color .theme-border-color {
border-color: #faad14;
}
.warning-color.theme-color,
.warning-color .theme-color,
.warning-color .ant-list-item-extra,
Expand All @@ -18643,6 +18651,10 @@ li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper:hov
.highlight-background .ant-card-head {
background: #f5222d;
}
.highlight-border-color.theme-border-color,
.highlight-border-color .theme-border-color {
border-color: #f5222d;
}
.highlight-color.theme-color,
.highlight-color .theme-color,
.highlight-color .ant-list-item-extra,
Expand All @@ -18662,6 +18674,10 @@ li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper:hov
.error-background .ant-card-head {
background: #f5222d;
}
.error-border-color.theme-border-color,
.error-border-color .theme-border-color {
border-color: #f5222d;
}
.error-color.theme-color,
.error-color .theme-color,
.error-color .ant-list-item-extra,
Expand All @@ -18681,6 +18697,10 @@ li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper:hov
.processing-background .ant-card-head {
background: #009aff;
}
.processing-border-color.theme-border-color,
.processing-border-color .theme-border-color {
border-color: #009aff;
}
.processing-color.theme-color,
.processing-color .theme-color,
.processing-color .ant-list-item-extra,
Expand All @@ -18700,6 +18720,10 @@ li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper:hov
.success-background .ant-card-head {
background: #52c41a;
}
.success-border-color.theme-border-color,
.success-border-color .theme-border-color {
border-color: #52c41a;
}
.success-color.theme-color,
.success-color .theme-color,
.success-color .ant-list-item-extra,
Expand All @@ -18719,6 +18743,10 @@ li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper:hov
.info-background .ant-card-head {
background: #009aff;
}
.info-border-color.theme-border-color,
.info-border-color .theme-border-color {
border-color: #009aff;
}
.info-color.theme-color,
.info-color .theme-color,
.info-color .ant-list-item-extra,
Expand All @@ -18738,6 +18766,10 @@ li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper:hov
.ternary-background .ant-card-head {
background: #4004a3;
}
.ternary-border-color.theme-border-color,
.ternary-border-color .theme-border-color {
border-color: #4004a3;
}
.ternary-color.theme-color,
.ternary-color .theme-color,
.ternary-color .ant-list-item-extra,
Expand All @@ -18757,6 +18789,10 @@ li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper:hov
.secondary-background .ant-card-head {
background: #1e075f;
}
.secondary-border-color.theme-border-color,
.secondary-border-color .theme-border-color {
border-color: #1e075f;
}
.secondary-color.theme-color,
.secondary-color .theme-color,
.secondary-color .ant-list-item-extra,
Expand All @@ -18776,6 +18812,10 @@ li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper:hov
.primary-background .ant-card-head {
background: #009aff;
}
.primary-border-color.theme-border-color,
.primary-border-color .theme-border-color {
border-color: #009aff;
}
.primary-color.theme-color,
.primary-color .theme-color,
.primary-color .ant-list-item-extra,
Expand All @@ -18789,3 +18829,12 @@ li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper:hov
.rrui__tooltip {
z-index: 2000;
}
.ReactMinimalPieChart path:nth-child(3n) {
stroke: #009aff;
}
.ReactMinimalPieChart path:nth-child(3n + 1) {
stroke: #1e075f;
}
.ReactMinimalPieChart path:nth-child(3n + 2) {
stroke: #4004a3;
}
23 changes: 23 additions & 0 deletions src/components/theme.less
Original file line number Diff line number Diff line change
Expand Up @@ -568,6 +568,12 @@
background: @theme-color;
}
}
&-border-color {
&.theme-border-color,
& .theme-border-color {
border-color: @theme-color;
}
}
&-color {
&.theme-color,
& .theme-color,
Expand All @@ -593,3 +599,20 @@
.rrui__tooltip {
z-index: 2000;
}

// React Minimal Pie Chart
.ReactMinimalPieChart {
path {
&:nth-child(3n) {
stroke: @primary-color;
}

&:nth-child(3n + 1) {
stroke: @secondary-color;
}

&:nth-child(3n + 2) {
stroke: @ternary-color;
}
}
}
3 changes: 2 additions & 1 deletion src/containers/home.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import CasesListCard from '../components/cases-list-card'
import CourtsListCard from '../components/courts-list-card'
import { ReactComponent as DarkLogo } from '../assets/images/dark-logo.svg'
import PNKBalanceCard from '../components/pnk-balance-card'
import PNKStatsListCard from '../components/pnk-stats-list-card'
import React from 'react'
import TopBanner from '../components/top-banner'
import WelcomeCard from '../components/welcome-card'
Expand Down Expand Up @@ -33,7 +34,7 @@ export default () => (
<CasesListCard />
</Col>
<Col span={12}>
<CourtsListCard />
<PNKStatsListCard />
</Col>
</Row>
</>
Expand Down
7 changes: 7 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -11660,6 +11660,13 @@ react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.2, react-lifecycles
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==

react-minimal-pie-chart@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/react-minimal-pie-chart/-/react-minimal-pie-chart-3.3.0.tgz#408b94206ca4c880534205572e0dc075beb7e5a1"
integrity sha512-rD94w1R5yyAsvVdLd9TkV7DzAtacDnZLV73uU4JRJTe3BfCFXDOEU5AvHlj3wRfJca61uLa51r02lbo5ZHrjBg==
dependencies:
prop-types "^15.5.7"

react-modal@^3.4.4:
version "3.6.1"
resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.6.1.tgz#54d27a1ec2b493bbc451c7efaa3557b6af82332d"
Expand Down

0 comments on commit 8426251

Please sign in to comment.