@@ -3,6 +3,7 @@ import { Grid, Flex, Button } from 'indigo-react';
3import * as ob from 'urbit-ob';
3import * as ob from 'urbit-ob';
4import { Just, Nothing } from 'folktale/maybe';
4import { Just, Nothing } from 'folktale/maybe';
5import cn from 'classnames';
5import cn from 'classnames';
6+import { delegatedSending } from 'azimuth-js';
7import { usePointCursor } from 'store/pointCursor';
8import { usePointCursor } from 'store/pointCursor';
8import { usePointCache } from 'store/pointCache';
9import { usePointCache } from 'store/pointCache';
@@ -27,6 +28,7 @@ import Inviter from 'views/Invite/Inviter';
27import { ReactComponent as SearchIcon } from 'assets/search.svg';
28import { ReactComponent as SearchIcon } from 'assets/search.svg';
28import CopyButton from 'components/CopyButton';
29import CopyButton from 'components/CopyButton';
29import { useSyncForeignPoints } from 'lib/useSyncPoints';
30import { useSyncForeignPoints } from 'lib/useSyncPoints';
31+import { useNetwork } from 'store/network';
31function SearchInput({ className, value, onChange }) {
33function SearchInput({ className, value, onChange }) {
@@ -164,10 +166,14 @@ function CohortMemberExpanded({ point, className, ...rest }) {
164 const { sentInvites, acceptedInvites } = useInvites(point);
166 const { sentInvites, acceptedInvites } = useInvites(point);
165 const { getDetails } = usePointCache();
167 const { getDetails } = usePointCache();
166 const { authToken } = useWallet();
168 const { authToken } = useWallet();
169+ const { contracts } = useNetwork();
167− const details = getDetails(point).getOrElse({});
170+ const details = getDetails(point);
168− const { active } = details;
171+ const { active } = details.getOrElse({});
169 const patp = useMemo(() => ob.patp(point), [point]);
172 const patp = useMemo(() => ob.patp(point), [point]);
173+ const colors = useMemo(
170− const colors = !active ? ['#ee892b', '#FFFFFF'] : ['#000000', '#FFFFFF'];
174+ () => (!active ? ['#ee892b', '#FFFFFF'] : ['#000000', '#FFFFFF']),
172 const [code, setCode] = useState(Nothing());
178 const [code, setCode] = useState(Nothing());
173 const [codeVisible, setCodeVisible] = useState(false);
179 const [codeVisible, setCodeVisible] = useState(false);
@@ -175,20 +181,35 @@ function CohortMemberExpanded({ point, className, ...rest }) {
175 useEffect(() => {
181 useEffect(() => {
176 const fetchWallet = async () => {
182 const fetchWallet = async () => {
177 const _authToken = authToken.getOrElse(null);
183 const _authToken = authToken.getOrElse(null);
184+ const _details = details.getOrElse(null);
185+ const _contracts = contracts.getOrElse(null);
178− if (!_authToken || active) {
187+ !_authToken ||
181− const ticket = await wg.makeDeterministicTicket(point, _authToken);
196+ const { ticket, owner } = await wg.generateTemporaryDeterministicWallet(
201+ if (owner.keys.address !== _details.transferProxy) {
202+ setCode(Just(null));
182− setCode(Just(ticket));
204+ setCode(Just(ticket));
184 fetchWallet();
207 fetchWallet();
185− }, [authToken, point, active]);
208+ }, [codeVisible]);
187− const DetailText = useCallback(
188− () =>
210+ useEffect(() => {
189− !active ? 'Pending' : <> {matchBlinky(sentInvites)} points invited </>,
211+ setCodeVisible(false);
190− [active, sentInvites]
212+ }, [point]);
194 <Grid justify="between" className={cn('b1 b-gray2', className)} {...rest}>
215 <Grid justify="between" className={cn('b1 b-gray2', className)} {...rest}>
@@ -209,20 +230,27 @@ function CohortMemberExpanded({ point, className, ...rest }) {
210 Invite Code
231 Invite Code
211 </Grid.Item>
232 </Grid.Item>
214− className="mb-auto mt1 f6 gray4"
233+ <Grid.Item cols={[4, 10]} className="mb-auto mt1 f6 gray4">
215− as={Flex}
234+ {(code.getOrElse(true) === null &&
216− col
235+ 'This invite code cannot be recovered') ||
217− onClick={() => setCodeVisible(r => !r)}>
218− {hideIf(!codeVisible, matchBlinky(code))}
236+ hideIf(!codeVisible, matchBlinky(code))}
219 </Grid.Item>
237 </Grid.Item>
220− <Grid.Item
239+ <Grid.Item
241+ className="mh-auto f6 underline pointer"
242+ onClick={() => setCodeVisible(true)}>
246+ {codeVisible && code.getOrElse('') !== null && (
221− className="mh-auto f6"
248+ className="mh-auto f6 t-right"
222− cols={[10, 13]}
249+ cols={[10, 13]}
223− as={CopyButton}
250+ as={CopyButton}
224− text={code.getOrElse('')}
251+ text={code.getOrElse('')}
@@ -244,22 +272,6 @@ function CohortMemberExpanded({ point, className, ...rest }) {
244 </Grid.Item>
272 </Grid.Item>
248− {/* <Flex.Item>Invite Code</Flex.Item> */}
249− {/* <Flex.Item>{matchBlinky(code)}</Flex.Item> */}
250− {/* <span className="pointer underline">Get Invite code </span> */}
252− {/* {resend && <span>{matchBlinky(code)}</span>} */}
253− {/* </Grid.Item> */}
254− {/* {resend && ( */}
255− {/* <Grid.Item cols={[5, 13]} rows={[2, 3]} className="mv-auto"></Grid.Item> */}
257− {/* <Grid.Item justify="evenly" as={Flex} col className="mono f6 ph4"> */}
258− {/* <Flex.Item>{patp}</Flex.Item> */}
259− {/* <Flex.Item className="gray4"> */}
260− {/* <DetailText /> */}
261− {/* </Flex.Item> */}
262− {/* </Grid.Item> */}
@@ -293,9 +305,7 @@ export default function InviteCohort() {
294 const [selectedInvite, _setSelectedInvite] = useState();
306 const [selectedInvite, _setSelectedInvite] = useState();
297− Promise.all(_acceptedPoints.map(i => syncDetails(i)));
298− }, [_acceptedPoints, syncDetails]);
308+ useSyncForeignPoints([..._acceptedPoints, ..._pendingPoints]);
300 const setSelectedInvite = useCallback(
310 const setSelectedInvite = useCallback(
301 p => _setSelectedInvite(old => (old === p ? null : p)),
311 p => _setSelectedInvite(old => (old === p ? null : p)),