accounts.ts 749 B
Newer Older
Andrei Eres's avatar
Andrei Eres committed
import { AccountJson } from '@polkadot/extension-base/background/types'
Andrei Eres's avatar
Andrei Eres committed
import { action, atom, computed, onStart } from 'nanostores'
import { subscribeAccounts } from '../messaging/uiActions'
Andrei Eres's avatar
Andrei Eres committed
import { buildHierarchy } from '../utils/buildHierarchy'
Andrei Eres's avatar
Andrei Eres committed

Andrei Eres's avatar
Andrei Eres committed
export const accountsStore = atom<AccountJson[]>([])

onStart(accountsStore, () => {
Andrei Eres's avatar
Andrei Eres committed
  subscribeAccounts(setAccounts).catch(console.error)
})

Andrei Eres's avatar
Andrei Eres committed
export const accountNamesByAddressStore = computed(accountsStore, (list) =>
  list.reduce((res, account) => {
    res[account.address] = account.name
    return res
  }, {} as Record<string, string | undefined>)
)

Andrei Eres's avatar
Andrei Eres committed
const setAccounts = action(
  accountsStore,
  'set_accounts',
  (store, list: AccountJson[]) => {
    store.set(buildHierarchy(list))
  }
)