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