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';
9import { isPlanet } from 'lib/utils/point';
11const emptyCacheEntry = {
12 residentCount: Nothing(),
13 requestCount: Nothing(),
18// any because wrapped in Just / Nothing
19interface ResidentDetail {
26export default function useResidents() {
27 const [residentCache, _setResidentCache] = useState<
28 Record<number, ResidentDetail>
31 const addToResidentCache = useCallback(
33 _setResidentCache(cache => ({ ...cache, [point]: entry })),
37 const getResidents = useCallback(
38 point => residentCache[point] || emptyCacheEntry,
42 const { contracts }: any = useNetwork();
43 const _contracts = need.contracts(contracts);
45 const syncResidentCount = useCallback(
47 // Do nothing if we've already fetched in full
48 // or we aren't a sponsor
49 const pointSize = azimuth.getPointSize(point);
50 if (Just.hasInstance(getResidents(point).residents)) {
53 if (pointSize === azimuth.PointSize.Planet) {
54 addToResidentCache(point, {
55 residentCount: Just(0),
56 requestCount: Just(0),
63 const isGalaxy = pointSize === azimuth.PointSize.Galaxy;
64 const [residentCount, requestCount] = await Promise.all([
65 azimuth.getSponsoringCount(_contracts, point),
66 azimuth.getEscapeRequestsCount(_contracts, point),
69 // Galaxies sponsor themselves
70 const parsedCount = Number(residentCount);
71 const _residentCount = isGalaxy ? parsedCount - 1 : parsedCount;
73 addToResidentCache(point, {
74 residentCount: Just(_residentCount),
75 requestCount: Just(Number(requestCount)),
80 [addToResidentCache, _contracts, getResidents]
83 const syncResidents = useCallback(
85 if (isPlanet(point)) {
86 addToResidentCache(point, {
87 residentCount: Just(0),
88 requestCount: Just(0),
95 const [residents, requests] = await Promise.all([
96 azimuth.getSponsoring(_contracts, point),
97 azimuth.getEscapeRequests(_contracts, point),
100 // Galaxies sponsor themselves
101 const _residents = residents.filter((r: number) => r !== point);
103 addToResidentCache(point, {
104 residentCount: Just(_residents.length),
105 requestCount: Just(requests.length),
106 residents: Just(_residents),
107 requests: Just(requests),
110 [addToResidentCache, _contracts]
113 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