on 04765bb help sign in
bridge/src/store/lib/useControlledPointsStore.js
71 lines 1.9 kB history raw
1import { useState, useCallback } from 'react';
2import Maybe from 'folktale/maybe';
3import * as azimuth from 'azimuth-js';
5import { useNetwork } from '../network';
6import { useWallet } from 'store/wallet';
8const kEmptyControlledPoints = {
9 ownedPoints: Maybe.Nothing(),
10 incomingPoints: Maybe.Nothing(),
11 managingPoints: Maybe.Nothing(),
12 votingPoints: Maybe.Nothing(),
13 spawningPoints: Maybe.Nothing(),
14};
16export default function useControlledPointsStore() {
17 const { contracts } = useNetwork();
18 const { wallet } = useWallet();
19 const [controlledPointsCache, _setControlledPointsCache] = useState(
20 kEmptyControlledPoints
21 );
23 const getControlledPoints = useCallback(
24 () => controlledPointsCache || kEmptyControlledPoints,
25 [controlledPointsCache]
26 );
28 const syncControlledPoints = useCallback(async () => {
29 const _contracts = contracts.getOrElse(null);
30 const _wallet = wallet.getOrElse(null);
31 if (!_contracts || !_wallet) {
32 return;
33 }
35 const address = _wallet.address;
37 const ownedPoints = await azimuth.azimuth.getOwnedPoints(
38 _contracts,
39 address
40 );
41 const incomingPoints = await azimuth.azimuth.getTransferringFor(
42 _contracts,
43 address
44 );
45 const managingPoints = await azimuth.azimuth.getManagerFor(
46 _contracts,
47 address
48 );
49 const votingPoints = await azimuth.azimuth.getVotingFor(
50 _contracts,
51 address
52 );
53 const spawningPoints = await azimuth.azimuth.getSpawningFor(
54 _contracts,
55 address
56 );
58 _setControlledPointsCache({
59 ownedPoints: Maybe.Just(ownedPoints),
60 incomingPoints: Maybe.Just(incomingPoints),
61 managingPoints: Maybe.Just(managingPoints),
62 votingPoints: Maybe.Just(votingPoints),
63 spawningPoints: Maybe.Just(spawningPoints),
64 });
65 }, [contracts, wallet, _setControlledPointsCache]);
67 return {
68 getControlledPoints,
69 syncControlledPoints,
70 };