@@ -0,0 +1,81 @@
1+import * as need from 'lib/need';
2+import ob from 'urbit-ob';
3+import { Box, Row } from '@tlon/indigo-react';
4+
5+import Window from 'components/L2/Window/Window';
6+import HeaderPane from 'components/L2/Window/HeaderPane';
7+import BodyPane from 'components/L2/Window/BodyPane';
8+import { useLocalRouter } from 'lib/LocalRouter';
9+import View from 'components/View';
10+import L2BackHeader from 'components/L2/Headers/L2BackHeader';
11+import { usePointCursor } from 'store/pointCursor';
12+import { useCallback, useEffect, useState } from 'react';
13+
14+import './Residents.scss';
15+import Sigil from 'components/Sigil';
16+import useRoller from 'lib/useRoller';
17+import { Ship } from '@urbit/roller-api';
18+
19+export const Residents = () => {
20+ const { pop }: any = useLocalRouter();
21+ const { pointCursor } = usePointCursor();
22+ const point = need.point(pointCursor);
23+ const { api } = useRoller();
24+ const [sponsoredPoints, setSponsoredPoints] = useState<Ship[]>([]);
25+
26+ const fetchResidents = useCallback(async () => {
27+ if (!point) {
28+ return;
29+ }
30+
31+ // TODO: remove this hack once the API is updated
32+ const { residentes, residents } = await api.getSponsoredPoints(point);
33+
34+ setSponsoredPoints((residents || residentes || []).sort());
35+ }, [api, point]);
36+
37+ useEffect(() => {
38+ fetchResidents();
39+ }, [fetchResidents]);
40+
41+ return (
42+ <View
43+ className="ops-residents"
44+ pop={pop}
45+ inset
46+ hideBack
47+ header={<L2BackHeader hideBalance back={pop} />}>
48+ <Window>
49+ <HeaderPane>
50+ <Row className="header-row">
51+ <h5>
52+ Residents{' '}
53+ <span className="header-count">{sponsoredPoints.length}</span>
54+ </h5>
55+ </Row>
56+ </HeaderPane>
57+ <BodyPane>
58+ <Box className="content-container">
59+ <ul className="residents-list">
60+ {sponsoredPoints.map(sp => (
61+ <li>
62+ <Box className="sigil">
63+ <Box className="sigil-container">
64+ <Sigil
65+ icon
66+ patp={ob.patp(sp)}
67+ size={16}
68+ colors={['#000000', '#FFFFFF']}
69+ />
70+ </Box>
71+ </Box>
72+ <Box className={'patp'}>{ob.patp(sp)}</Box>
73+ </li>
74+ ))}
75+ </ul>
76+ </Box>
77+ </BodyPane>
78+ </Window>
79+ </View>
80+ );
81+};