mirror of https://github.com/lukechilds/polar.git
jamaljsr
5 years ago
7 changed files with 215 additions and 78 deletions
@ -0,0 +1,23 @@ |
|||
import React from 'react'; |
|||
import { BitcoinNode, Status } from 'shared/types'; |
|||
import { OpenTerminalButton } from 'components/terminal'; |
|||
import MineBlocksInput from './MineBlocksInput'; |
|||
|
|||
interface Props { |
|||
node: BitcoinNode; |
|||
} |
|||
|
|||
const ActionsTab: React.FC<Props> = ({ node }) => { |
|||
return ( |
|||
<> |
|||
{node.status === Status.Started && ( |
|||
<> |
|||
<MineBlocksInput node={node} /> |
|||
<OpenTerminalButton node={node} /> |
|||
</> |
|||
)} |
|||
</> |
|||
); |
|||
}; |
|||
|
|||
export default ActionsTab; |
@ -0,0 +1,66 @@ |
|||
import React from 'react'; |
|||
import styled from '@emotion/styled'; |
|||
import { Icon, Tooltip } from 'antd'; |
|||
import { usePrefixedTranslation } from 'hooks'; |
|||
import { BitcoinNode, Status } from 'shared/types'; |
|||
import { useStoreActions } from 'store'; |
|||
import { CopyIcon, DetailsList } from 'components/common'; |
|||
import { DetailValues } from 'components/common/DetailsList'; |
|||
|
|||
const Styled = { |
|||
Link: styled.a` |
|||
margin-left: 10px; |
|||
color: inherit; |
|||
&:hover { |
|||
opacity: 1; |
|||
} |
|||
`,
|
|||
Icon: styled(Icon)` |
|||
margin-left: 5px; |
|||
color: #aaa; |
|||
`,
|
|||
}; |
|||
|
|||
interface Props { |
|||
node: BitcoinNode; |
|||
} |
|||
|
|||
const ConnectTab: React.FC<Props> = ({ node }) => { |
|||
const { l } = usePrefixedTranslation('cmps.designer.bitcoind.ConnectTab'); |
|||
const { openInBrowser } = useStoreActions(s => s.app); |
|||
|
|||
if (node.status !== Status.Started) { |
|||
return <>{l('notStarted')}</>; |
|||
} |
|||
|
|||
const details: DetailValues = [ |
|||
{ label: l('rpcHost'), value: `http://127.0.0.1:${node.ports.rpc}` }, |
|||
{ label: l('rpcUser'), value: 'polaruser' }, |
|||
{ label: l('rpcPass'), value: 'polarpass' }, |
|||
].map(({ label, value }) => ({ |
|||
label, |
|||
value: <CopyIcon label={label} value={value} text={value} />, |
|||
})); |
|||
|
|||
const restDocsUrl = |
|||
'https://bitcoin.org/en/developer-reference#remote-procedure-calls-rpcs'; |
|||
details.push({ |
|||
label: l('apiDocs'), |
|||
value: ( |
|||
<> |
|||
<Tooltip title={restDocsUrl}> |
|||
<Styled.Link onClick={() => openInBrowser(restDocsUrl)}>REST</Styled.Link> |
|||
</Tooltip> |
|||
<Styled.Icon type="book" /> |
|||
</> |
|||
), |
|||
}); |
|||
|
|||
return ( |
|||
<> |
|||
<DetailsList details={details} /> |
|||
</> |
|||
); |
|||
}; |
|||
|
|||
export default ConnectTab; |
@ -0,0 +1,66 @@ |
|||
import React from 'react'; |
|||
import { Alert } from 'antd'; |
|||
import { usePrefixedTranslation } from 'hooks'; |
|||
import { BitcoinNode, Status } from 'shared/types'; |
|||
import { useStoreState } from 'store'; |
|||
import { ellipseInner } from 'utils/strings'; |
|||
import { CopyIcon, DetailsList, StatusBadge } from 'components/common'; |
|||
import { DetailValues } from 'components/common/DetailsList'; |
|||
|
|||
interface Props { |
|||
node: BitcoinNode; |
|||
} |
|||
|
|||
const InfoTab: React.FC<Props> = ({ node }) => { |
|||
const { l } = usePrefixedTranslation('cmps.designer.bitcoind.InfoTab'); |
|||
const { chainInfo, walletInfo } = useStoreState(s => s.bitcoind); |
|||
const details: DetailValues = [ |
|||
{ label: l('nodeType'), value: node.type }, |
|||
{ label: l('implementation'), value: node.implementation }, |
|||
{ label: l('version'), value: `v${node.version}` }, |
|||
{ |
|||
label: l('status'), |
|||
value: ( |
|||
<StatusBadge |
|||
status={node.status} |
|||
text={l(`enums.status.${Status[node.status]}`)} |
|||
/> |
|||
), |
|||
}, |
|||
]; |
|||
|
|||
if (node.status === Status.Started && chainInfo && walletInfo) { |
|||
details.push( |
|||
{ label: l('spendableBalance'), value: `${walletInfo.balance} BTC` }, |
|||
{ label: l('immatureBalance'), value: `${walletInfo.immature_balance} BTC` }, |
|||
{ label: l('blockHeight'), value: chainInfo.blocks }, |
|||
{ |
|||
label: l('blockHash'), |
|||
value: ( |
|||
<CopyIcon |
|||
label={l('blockHash')} |
|||
value={chainInfo.bestblockhash} |
|||
text={ellipseInner(chainInfo.bestblockhash)} |
|||
/> |
|||
), |
|||
}, |
|||
); |
|||
} |
|||
|
|||
return ( |
|||
<> |
|||
{node.status === Status.Error && node.errorMsg && ( |
|||
<Alert |
|||
type="error" |
|||
message={l('startError')} |
|||
description={node.errorMsg} |
|||
closable={false} |
|||
showIcon |
|||
/> |
|||
)} |
|||
<DetailsList details={details} /> |
|||
</> |
|||
); |
|||
}; |
|||
|
|||
export default InfoTab; |
Loading…
Reference in new issue