on ee5bed0 help sign in
bridge/src/lib/useResidents.js
54 lines 1.7 kB history raw
1import { useState, useCallback, useEffect } from 'react';
2import { Just, Nothing } from 'folktale/maybe';
4import { azimuth } from 'azimuth-js';
6import { useNetwork } from 'store/network';
8import useCurrentPermissions from 'lib/useCurrentPermissions';
9import * as need from 'lib/need';
11export function useResidents(point) {
12 const [residents, setResidents] = useState(Nothing());
13 const [residentCount, setResidentCount] = useState(Nothing());
15 const { isParent } = useCurrentPermissions();
16 const { contracts } = useNetwork();
17 const _contracts = need.contracts(contracts);
19 const syncResidentCount = useCallback(async () => {
20 if (!isParent) {
21 return;
22 }
23 const count = await azimuth.getSponsoringCount(_contracts, point);
24 setResidentCount(Just(count.toNumber()));
25 }, [isParent, setResidentCount, point, _contracts]);
27 const syncResidents = useCallback(async () => {
28 if (Just.hasInstance(residents) || !isParent) {
29 return;
30 }
31 // Galaxies sponsor themselves
32 const children = (await azimuth.getSponsoring(_contracts, point)).filter(
33 p => p !== point
34 );
36 setResidents(Just(children));
37 }, [residents, isParent, setResidents, point, _contracts]);
39 const [requests, setRequests] = useState(Nothing);
40 const syncRequests = useCallback(async () => {
41 const reqs = await azimuth.getEscapeRequests(_contracts, point);
42 setRequests(Just(reqs));
43 }, [_contracts, point]);
45 useEffect(() => {
46 syncResidentCount();
47 }, [syncResidentCount]);
49 // useEffect(() => {
50 // syncRequests();
51 // });
53 return { residents, residentCount, syncResidents, requests, syncRequests };