Skip to content
Snippets Groups Projects
account-select.tsx 1.6 KiB
Newer Older
Niklas P's avatar
Niklas P committed
import { useState } from 'react';
Niklas P's avatar
Niklas P committed
import Identicon from '@polkadot/react-identicon';
Niklas P's avatar
Niklas P committed
import { usePolkadotExtensionWithContext } from '@/context/polkadotExtensionContext';

Niklas P's avatar
Niklas P committed
import 'primereact/resources/themes/md-dark-indigo/theme.css';
import 'primereact/resources/primereact.min.css';
import { Dropdown } from 'primereact/dropdown';
import styles from '@/styles/Home.module.css';
Niklas P's avatar
Niklas P committed

export const accountValueTemplate = (option: any, props: any) => {
Niklas P's avatar
Niklas P committed
  if (option) {
Niklas P's avatar
Niklas P committed
    return (
Niklas P's avatar
Niklas P committed
      <div className={styles.accountOption}>
        <div>
          <Identicon value={option?.address} size={32} theme="polkadot" />
          {option?.meta?.name}
Niklas P's avatar
Niklas P committed
        </div>
Niklas P's avatar
Niklas P committed
      </div>
Niklas P's avatar
Niklas P committed
    );
Niklas P's avatar
Niklas P committed
  }
Niklas P's avatar
Niklas P committed

Niklas P's avatar
Niklas P committed
  return <span>{props.placeholder}</span>;
Niklas P's avatar
Niklas P committed
};
Niklas P's avatar
Niklas P committed

export const accountOptionTemplate = (option: any) => {
Niklas P's avatar
Niklas P committed
  return (
    <div className={styles.accountOption}>
      <div>
        <Identicon value={option?.address} size={32} theme="polkadot" />
        {option?.meta?.name}
      </div>
    </div>
  );
Niklas P's avatar
Niklas P committed
export default function AccountSelector() {
  const { accounts, actingAccount, setActingAccountIdx } = usePolkadotExtensionWithContext();

  return (
    <Dropdown
      options={accounts ?? undefined}
      optionLabel="address"
      placeholder="Select Account"
      className={styles.dropdown}
      value={actingAccount}
      itemTemplate={accountOptionTemplate}
      valueTemplate={accountValueTemplate}
      onChange={(event) => {
        const accountIdx = accounts
          ? accounts.findIndex((account) => account.address === event.target.value.address)
          : 0;
        setActingAccountIdx(accountIdx);
      }}
    />
  );
}