slate/scenes/SceneWallet.js

225 lines
6.2 KiB
JavaScript
Raw Normal View History

2020-06-19 06:57:57 +03:00
import * as React from "react";
import * as Strings from "~/common/strings";
2020-11-26 02:53:25 +03:00
import * as Filecoin from "~/common/filecoin";
2020-06-19 06:57:57 +03:00
import * as Constants from "~/common/constants";
import * as SVG from "~/common/svg";
import * as Events from "~/common/custom-events";
2020-06-19 06:57:57 +03:00
import * as System from "~/components/system";
2020-11-30 08:24:22 +03:00
import { css } from "@emotion/react";
2020-09-09 20:56:35 +03:00
import { LoaderSpinner } from "~/components/system/components/Loaders";
2020-06-19 06:57:57 +03:00
import Section from "~/components/core/Section";
import ScenePage from "~/components/core/ScenePage";
2020-08-22 07:25:34 +03:00
import ScenePageHeader from "~/components/core/ScenePageHeader";
const STYLES_GROUP = css`
padding: 24px;
`;
2020-08-14 11:51:37 +03:00
const STYLES_ROW = css`
display: flex;
align-items: flex-start;
justify-content: space-between;
padding: 24px;
width: 100%;
`;
const STYLES_CIRCLE_BUTTON = css`
height: 48px;
width: 48px;
border-radius: 48px;
display: inline-flex;
align-items: center;
justify-content: center;
background: ${Constants.system.black};
color: ${Constants.system.white};
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.07);
cursor: pointer;
`;
const STYLES_TEXT = css`
min-width: 5%;
padding-top: 6px;
width: 100%;
2020-08-14 11:51:37 +03:00
overflow-wrap: break-word;
`;
const STYLES_FOCUS = css`
font-size: ${Constants.typescale.lvl1};
font-family: ${Constants.font.medium};
overflow-wrap: break-word;
width: 100%;
strong {
font-family: ${Constants.font.semiBold};
font-weight: 400;
}
`;
const STYLES_FOCUS_EMPAHSIS = css`
color: ${Constants.system.brand};
`;
const STYLES_SUBTEXT = css`
margin-top: 8px;
font-size: 12px;
2020-08-14 11:51:37 +03:00
overflow-wrap: break-word;
`;
const STYLES_ACTIONS = css`
flex-shrink: 0;
padding-left: 24px;
`;
const STYLES_ITEM = css`
margin-top: 24px;
display: inline-flex;
flex-direction: column;
max-width: 220px;
margin-right: 32px;
`;
const STYLES_ITEM_GROUP = css`
display: flex;
align-items: flex-start;
justify-content: flex-start;
`;
export default class SceneWallet extends React.Component {
state = { table_transaction: null, visible: false };
_handleChange = (e) => {
this.setState({ [e.target.name]: e.target.value });
};
_handleWalletChange = (e) => {
this.setState({ visible: false });
this.props.onSelectedChange(e);
};
_handleMakeAddressVisible = () => {
this.setState({ visible: !this.state.visible });
};
_handleCopy = (text) => {
Strings.copyText(text);
Events.dispatchMessage({ message: "Copied to clipboard!", status: "INFO" });
};
render() {
2020-11-16 00:54:14 +03:00
const { networkViewer } = this.props;
2020-09-09 20:56:35 +03:00
const addressMap = {};
const addresses = [];
2020-12-04 11:09:24 +03:00
let selected = { name: "default", addr: "hidden", balance: "0", type: "Textile" };
2020-09-09 20:56:35 +03:00
if (networkViewer) {
2020-12-04 11:09:24 +03:00
selected = {
name: networkViewer.address.name,
addr: networkViewer.address.address,
type: networkViewer.address.type,
};
}
return (
2020-11-16 00:54:14 +03:00
<React.Fragment>
<ScenePageHeader>
This is your receive only wallet address. You can deposit Filecoin to your address here.
2020-11-16 00:54:14 +03:00
You can not send Filecoin from this wallet to other people. Please read our{" "}
2020-10-30 12:51:33 +03:00
<a href="/terms" target="_blank">
terms of service
</a>{" "}
for more details.
2020-08-22 07:25:34 +03:00
</ScenePageHeader>
2020-09-09 20:56:35 +03:00
{networkViewer ? (
<Section
onAction={this.props.onAction}
title="Your Filecoin address"
style={{ maxWidth: `688px`, minWidth: "auto" }}
2020-09-09 20:56:35 +03:00
buttons={
[
/*
{
2020-06-19 06:57:57 +03:00
name: "Create a new address",
type: "SIDEBAR",
value: "SIDEBAR_CREATE_WALLET_ADDRESS",
},
2020-09-09 20:56:35 +03:00
*/
]
}
>
{/* <div css={STYLES_GROUP}>
<System.SelectMenu
label="Select your address"
name="address"
2020-09-09 20:56:35 +03:00
value={selected.addr}
category="address"
onChange={this._handleWalletChange}
2020-09-09 20:56:35 +03:00
options={addresses}
/>
2020-09-09 20:56:35 +03:00
</div> */}
2020-12-18 23:40:24 +03:00
<div css={STYLES_ROW} style={{ paddingTop: 24 }}>
2020-09-09 20:56:35 +03:00
<div css={STYLES_TEXT}>
<div>
<div css={STYLES_FOCUS}>
{this.state.visible ? (
selected.addr
) : (
<span css={STYLES_FOCUS_EMPAHSIS}>Hidden</span>
)}
</div>
<div css={STYLES_SUBTEXT}>Filecoin address</div>
</div>
2020-12-23 22:51:14 +03:00
<div>
2020-08-22 07:25:34 +03:00
<div css={STYLES_FOCUS}>
2020-09-09 20:56:35 +03:00
{selected.name}{" "}
{networkViewer.settings_cold_default_address === selected.addr ? (
2020-09-09 20:56:35 +03:00
<strong css={STYLES_FOCUS_EMPAHSIS}>(Primary)</strong>
) : null}
2020-08-22 07:25:34 +03:00
</div>
2020-09-09 20:56:35 +03:00
<div css={STYLES_SUBTEXT}>Filecoin address alias</div>
</div>
2020-09-09 20:56:35 +03:00
<div css={STYLES_ITEM_GROUP}>
2020-12-04 11:09:24 +03:00
{/*<div css={STYLES_ITEM}>
2020-09-09 20:56:35 +03:00
<div css={STYLES_FOCUS}>
2020-11-26 02:53:25 +03:00
{Filecoin.formatAsFilecoinConversion(selected.balance)}
2020-09-09 20:56:35 +03:00
</div>
<div css={STYLES_SUBTEXT}>Filecoin</div>
2020-12-04 11:09:24 +03:00
</div>*/}
2020-09-09 20:56:35 +03:00
<div css={STYLES_ITEM}>
<div css={STYLES_FOCUS}>{selected.type}</div>
<div css={STYLES_SUBTEXT}>Address type</div>
</div>
</div>
</div>
2020-09-09 20:56:35 +03:00
<div css={STYLES_ACTIONS}>
<span
css={STYLES_CIRCLE_BUTTON}
onClick={this._handleMakeAddressVisible}
style={{
marginRight: 16,
backgroundColor: this.state.visible ? null : Constants.system.brand,
2020-09-09 20:56:35 +03:00
}}
2020-08-22 07:25:34 +03:00
>
2020-09-09 20:56:35 +03:00
<SVG.Privacy height="16px" />
</span>
<span css={STYLES_CIRCLE_BUTTON} onClick={() => this._handleCopy(selected.address)}>
2020-09-09 20:56:35 +03:00
<SVG.CopyAndPaste height="16px" />
</span>
</div>
</div>
2020-09-09 20:56:35 +03:00
</Section>
) : (
<LoaderSpinner style={{ marginTop: 48, height: 32, width: 32 }} />
)}
2020-11-16 00:54:14 +03:00
</React.Fragment>
);
}
}