1import { useState, useCallback } from 'react';
2import { Just, Nothing } from 'folktale/maybe';
4import { azimuth } from 'azimuth-js';
6import { useNetwork } from 'store/network';
8import * as need from 'lib/need';
10const emptyCacheEntry = {
11 residentCount: Nothing(),
12 requestCount: Nothing(),
17export default function useResidents() {
18 const [residentCache, _setResidentCache] = useState({});
20 const addToResidentCache = useCallback(
22 _setResidentCache(cache => ({ ...cache, [point]: entry })),
26 const getResidents = useCallback(
27 point => residentCache[point] || emptyCacheEntry,
31 const { contracts } = useNetwork();
32 const _contracts = need.contracts(contracts);
34 const syncResidentCount = useCallback(
36 // Do nothing if we've already fetched in full
37 // or we aren't a sponsor
38 const pointSize = azimuth.getPointSize(point);
39 if (Just.hasInstance(getResidents(point).residents)) {
42 if (pointSize === azimuth.PointSize.Planet) {
43 addToResidentCache(point, {
44 residentCount: Just(0),
45 requestCount: Just(0),
52 const isGalaxy = pointSize === azimuth.PointSize.Galaxy;
53 const [residentCount, requestCount] = await Promise.all([
54 azimuth.getSponsoringCount(_contracts, point),
55 azimuth.getEscapeRequestsCount(_contracts, point),
58 // Galaxies sponsor themselves
59 const _residentCount = isGalaxy
60 ? residentCount.toNumber() - 1
61 : residentCount.toNumber();
63 addToResidentCache(point, {
64 residentCount: Just(_residentCount),
65 requestCount: Just(requestCount.toNumber()),
70 [addToResidentCache, _contracts, getResidents]
73 const syncResidents = useCallback(
75 if (azimuth.getPointSize(point) === azimuth.PointSize.Planet) {
76 addToResidentCache(point, {
77 residentCount: Just(0),
78 requestCount: Just(0),
85 const [residents, requests] = await Promise.all([
86 azimuth.getSponsoring(_contracts, point),
87 azimuth.getEscapeRequests(_contracts, point),
90 // Galaxies sponsor themselves
91 const _residents = residents.filter(r => r !== point);
93 addToResidentCache(point, {
94 residentCount: Just(_residents.length),
95 requestCount: Just(requests.length),
96 residents: Just(_residents),
97 requests: Just(requests),
100 [addToResidentCache, _contracts]
103 return { getResidents, syncResidentCount, syncResidents };
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list