on 58fbcd2 help sign in
bridge/src/store/lib/useControlledPointsStore.js
65 lines 1.8 kB history raw
1import { useState, useEffect, useCallback } from 'react';
2import { Just, Nothing } from 'folktale/maybe';
3import Result from 'folktale/result';
4import * as azimuth from 'azimuth-js';
6import { useNetwork } from '../network';
7import { useWallet } from 'store/wallet';
9export default function useControlledPointsStore() {
10 const { contracts } = useNetwork();
11 const { wallet } = useWallet();
12 const [controlledPoints, _setControlledPoints] = useState(Nothing());
14 const syncControlledPoints = useCallback(async () => {
15 const _contracts = contracts.getOrElse(null);
16 const _wallet = wallet.getOrElse(null);
17 if (!_contracts || !_wallet) {
18 return;
19 }
21 _setControlledPoints(Nothing());
23 const address = _wallet.address;
25 try {
26 const [
27 ownedPoints,
28 incomingPoints,
29 managingPoints,
30 votingPoints,
31 spawningPoints,
32 ] = await Promise.all([
33 azimuth.azimuth.getOwnedPoints(_contracts, address),
34 azimuth.azimuth.getTransferringFor(_contracts, address),
35 azimuth.azimuth.getManagerFor(_contracts, address),
36 azimuth.azimuth.getVotingFor(_contracts, address),
37 azimuth.azimuth.getSpawningFor(_contracts, address),
38 ]);
40 _setControlledPoints(
41 Just(
42 Result.Ok({
43 ownedPoints,
44 incomingPoints,
45 managingPoints,
46 votingPoints,
47 spawningPoints,
48 })
49 )
50 );
51 } catch (error) {
52 _setControlledPoints(Just(Result.Error(error)));
53 }
54 }, [contracts, wallet]);
56 // sync controlled points whenever wallet or contracts changes
57 useEffect(() => {
58 syncControlledPoints();
59 }, [syncControlledPoints]);
61 return {
62 controlledPoints,
63 syncControlledPoints,
64 };