ImportQr.tsx 1.33 KiB
Newer Older
Andrei Eres's avatar
Andrei Eres committed
import { QrScanAddress } from '@polkadot/react-qr'
import React, { useState } from 'react'
Andrei Eres's avatar
Andrei Eres committed
import styled from 'styled-components'
import Actions from '../components/Actions'
Andrei Eres's avatar
Andrei Eres committed
import Address from '../components/Address'
Andrei Eres's avatar
Andrei Eres committed
import { BaseProps } from '../types'
Andrei Eres's avatar
Andrei Eres committed
import { createAccountExternal } from '../utils/messaging'
import { goHome } from '../utils/routing'
Andrei Eres's avatar
Andrei Eres committed

interface QrAccount {
  isAddress: boolean
  content: string
  genesisHash: string
  name?: string
}

Andrei Eres's avatar
Andrei Eres committed
const ImportQr: React.FC<BaseProps> = ({ className }) => {
Andrei Eres's avatar
Andrei Eres committed
  const [account, setAccount] = useState<QrAccount>()

Andrei Eres's avatar
Andrei Eres committed
  const onCreate = () => {
Andrei Eres's avatar
Andrei Eres committed
    if (!account) return

    createAccountExternal(
      account.name || 'Unknown',
      account.content,
      account.genesisHash
    ).catch((error: Error) => console.error(error))
    goHome()
Andrei Eres's avatar
Andrei Eres committed
  }

  return (
Andrei Eres's avatar
Andrei Eres committed
    <div className={className}>
      {!account && <QrScanAddress onScan={setAccount} />}
      {account && (
Andrei Eres's avatar
Andrei Eres committed
        <Address {...account} address={account.content} name={account.name} />
Andrei Eres's avatar
Andrei Eres committed
      )}
      <Actions>
Andrei Eres's avatar
Andrei Eres committed
        {account && (
Andrei Eres's avatar
Andrei Eres committed
          <button onClick={onCreate}>
            Add the account with identified address
          </button>
Andrei Eres's avatar
Andrei Eres committed
        )}
Andrei Eres's avatar
Andrei Eres committed
        <button onClick={goHome}>Cancel</button>
      </Actions>
    </div>
Andrei Eres's avatar
Andrei Eres committed
export default styled(ImportQr)`
  display: flex;
  flex-direction: column;
  align-items: center;
`