From 86b8954b1c40b00bcea8021cdb571d3d1ead1139 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Fri, 6 Sep 2019 14:35:52 +0200 Subject: [PATCH] Mobile signer support (via Qr) (#1583) * Add external accounts via Qr * WIP on signing * And we are off to the races * Add qr state * Name checks * Bump deps --- packages/app-accounts/package.json | 1 + packages/app-accounts/src/Account.tsx | 22 ++- packages/app-accounts/src/Overview.tsx | 81 ++++---- packages/app-accounts/src/modals/Create.tsx | 2 +- packages/app-accounts/src/modals/Qr.tsx | 112 +++++++++++ packages/react-api/package.json | 2 +- packages/react-components/src/AddressInfo.tsx | 2 +- packages/react-components/src/CryptoType.tsx | 4 +- .../react-components/src/Status/index.tsx | 148 +++++++------- packages/react-components/src/Status/types.ts | 2 +- packages/react-signer/package.json | 3 +- packages/react-signer/src/Modal.tsx | 182 ++++++++++++++---- packages/react-signer/src/Qr.tsx | 43 +++++ packages/react-signer/src/Transaction.tsx | 61 +++--- yarn.lock | 74 ++++++- 15 files changed, 529 insertions(+), 210 deletions(-) create mode 100644 packages/app-accounts/src/modals/Qr.tsx create mode 100644 packages/react-signer/src/Qr.tsx diff --git a/packages/app-accounts/package.json b/packages/app-accounts/package.json index 94c7a30c9e..a1a56dc1cf 100644 --- a/packages/app-accounts/package.json +++ b/packages/app-accounts/package.json @@ -12,6 +12,7 @@ "dependencies": { "@babel/runtime": "^7.5.5", "@polkadot/react-components": "^0.35.0-beta.35", + "@polkadot/react-qr": "^0.43.0-beta.11", "@types/file-saver": "^2.0.0", "@types/yargs": "^13.0.2", "babel-plugin-module-resolver": "^3.1.1", diff --git a/packages/app-accounts/src/Account.tsx b/packages/app-accounts/src/Account.tsx index bc7d0272e6..a58f399570 100644 --- a/packages/app-accounts/src/Account.tsx +++ b/packages/app-accounts/src/Account.tsx @@ -24,6 +24,7 @@ interface State { genesisHash: string | null; isBackupOpen: boolean; isEditable: boolean; + isExternal: boolean; isForgetOpen: boolean; isPasswordOpen: boolean; isTransferOpen: boolean; @@ -43,6 +44,7 @@ class Account extends React.PureComponent { isEditable: account ? !(account.meta.isInjected) : false, + isExternal: (account && account.meta.isExternal) || false, isForgetOpen: false, isPasswordOpen: false, isTransferOpen: false @@ -188,20 +190,22 @@ class Account extends React.PureComponent { private renderButtons (): React.ReactNode { const { t } = this.props; - const { genesisHash, isEditable } = this.state; + const { genesisHash, isEditable, isExternal } = this.state; return (
{isEditable && ( +
- {isEditable && ( + {isEditable && !isExternal && (
{ public constructor (props: Props) { super(props); - const { state: { isCreateOpen = false } = {} } = this.props.location; - this.state = { - isCreateOpen, - isImportOpen: false + isCreateOpen: false, + isImportOpen: false, + isQrOpen: false }; } public render (): React.ReactNode { - const { accounts, t } = this.props; - const { isCreateOpen, isImportOpen } = this.state; - const emptyScreen = !isCreateOpen && !isImportOpen && (!accounts || Object.keys(accounts).length === 0); + const { accounts = [], onStatusChange, t } = this.props; + const { isCreateOpen, isImportOpen, isQrOpen } = this.state; + const emptyScreen = !(isCreateOpen || isImportOpen || isQrOpen) && (Object.keys(accounts).length === 0); return ( { label={t('Restore JSON')} onClick={this.toggleImport} /> + +