Skip to content
Snippets Groups Projects
usePolkadotExtension.ts 1.5 KiB
Newer Older
Niklas P's avatar
Niklas P committed
import { useEffect, useState } from "react";
import type { InjectedAccountWithMeta, InjectedExtension } from "@polkadot/extension-inject/types";
Niklas P's avatar
Niklas P committed

export function usePolkadotExtension() {
  const [accounts, setAccounts] = useState<InjectedAccountWithMeta[]>([]);
  const [actingAccount, setActingAccount] = useState<InjectedAccountWithMeta>();
Niklas P's avatar
Niklas P committed
  const [extensionInstalled, setExtensionInstalled] = useState(false);
  const [injector, setInjector] = useState<InjectedExtension>()
Niklas P's avatar
Niklas P committed

  const extensionSetup = async () => {
    const { web3Accounts, web3Enable, web3FromAddress } = await import(
      "@polkadot/extension-dapp"
    );
Niklas P's avatar
Niklas P committed
    const extensions = await web3Enable("Tokengated Polkadot Demo")
Niklas P's avatar
Niklas P committed
    console.log( 'extensions', extensions )
    if (extensions.length === 0) {
      return;
    }
    setExtensionInstalled( true )
    const accounts = await web3Accounts()
    setAccounts(accounts)
    setActingAccount(accounts[0])

    // we can use web3FromSource which will return an InjectedExtension type
Niklas P's avatar
Niklas P committed
    if ( accounts.length > 0 ) {
Niklas P's avatar
Niklas P committed
      // the address we use to use for signing, as injected
    
      // finds an injector for an address
      const injector = await web3FromAddress(accounts[0].address);
      setInjector( injector )
Niklas P's avatar
Niklas P committed
    }
Niklas P's avatar
Niklas P committed
    
  };

  const onSelectAccount = ( address: any ) => {
Niklas P's avatar
Niklas P committed
    console.log( 'onselectaccount', address )
Niklas P's avatar
Niklas P committed
    setActingAccount( accounts?.find( a => a.address === address ) )
  }

Niklas P's avatar
Niklas P committed
  return { accounts, actingAccount, setActingAccount, extensionInstalled, onSelectAccount, injector }
Niklas P's avatar
Niklas P committed
  
}