slate/scenes/SceneWallet.js

225 lines
6.5 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`
2021-07-07 22:14:51 +03:00
color: ${Constants.system.blue};
`;
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.
You can not send Filecoin from this wallet to other people. Please read our [terms of
service](https://slate.host/terms) for more details. */}
This is your storage credit wallet address. Filecoin (FIL) in this wallet can be used for
making storage deals for your Slate files. You can not send FIL from this wallet to other
addresses. Please read our [terms of service](https://slate.host/terms) 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>
2021-01-28 09:18:09 +03:00
<div style={{ marginTop: 24 }}>
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,
2021-07-07 22:14:51 +03:00
backgroundColor: this.state.visible ? null : Constants.system.blue,
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>
);
}
}