@@ -1,12 +1,11 @@
1−import React, { useCallback, useMemo, useRef } from 'react';
2−import { Just, Nothing } from 'folktale/maybe';
1+import { useCallback, useMemo, useRef } from 'react';
2+import { Just } from 'folktale/maybe';
33import * as azimuth from 'azimuth-js';
44import { Grid, H4, P, CheckboxInput } from 'indigo-react';
55import { FORM_ERROR } from 'final-form';
66
77import View from 'components/View';
88import { ForwardButton } from 'components/Buttons';
9−import Passport from 'components/Passport';
109import WarningBox from 'components/WarningBox';
1110import FooterButton from 'components/FooterButton';
1211
@@ -18,7 +17,7 @@ import { ROUTE_NAMES } from 'lib/routeNames';
1817import { walletFromMnemonic } from 'lib/wallet';
1918import { DEFAULT_HD_PATH } from 'lib/constants';
2019import { generateWallet } from 'lib/invite';
21−import { generateTemporaryOwnershipWallet } from 'lib/walletgen';
20+import { generateOwnershipWallet } from 'lib/walletgen';
2221import { useLocalRouter } from 'lib/LocalRouter';
2322import useImpliedTicket from 'lib/useImpliedTicket';
2423import { timeout } from 'lib/timeout';
@@ -39,20 +38,20 @@ import FormError from 'form/FormError';
3938import { useActivateFlow } from './ActivateFlow';
4039import { WARNING } from 'form/helpers';
4140import { convertToInt } from 'lib/convertToInt';
41+import { patp2dec } from 'lib/patp2dec';
4242
4343export default function ActivateCode() {
4444 const history = useHistory();
4545 const { names, push } = useLocalRouter();
4646 const { contracts } = useNetwork();
47− const impliedTicket = useImpliedTicket();
47+ const { impliedPoint, impliedTicket } = useImpliedTicket();
4848 const [hasDisclaimed] = useHasDisclaimed();
4949 const didWarn = useRef(false);
5050
5151 const {
52+ setDerivedPoint,
5253 setDerivedWallet,
5354 setInviteWallet,
54− derivedPoint,
55− setDerivedPoint,
5655 } = useActivateFlow();
5756 // this is a pretty naive way to detect if we're on a mobile device
5857 // (i.e. we're checking the width of the screen)
@@ -90,18 +89,23 @@ export default function ActivateCode() {
9089 [validateForm]
9190 );
9291
93− // set our state on submission
92+ // derive and set our state on submission
9493 const onSubmit = useCallback(
95− async values => {
94+ async _values => {
9695 await timeout(16); // allow the ui changes to flush before we lag it out
9796
97+ // TODO: fallback logic to first use implied values if present, otherwise form values?
98+ // Derive wallet
99+ const impliedAzimuthPoint = patp2dec(impliedPoint);
98100 const _contracts = need.contracts(contracts);
99− const { seed } = await generateTemporaryOwnershipWallet(values.ticket);
100−
101+ const { seed } = await generateOwnershipWallet(
102+ impliedAzimuthPoint,
103+ impliedTicket
104+ );
101105 const inviteWallet = walletFromMnemonic(seed, DEFAULT_HD_PATH);
102−
103106 const _inviteWallet = need.wallet(inviteWallet);
104107
108+ // Load associated points
105109 const owned = await azimuth.azimuth.getOwnedPoints(
106110 _contracts,
107111 _inviteWallet.address
@@ -110,11 +114,16 @@ export default function ActivateCode() {
110114 _contracts,
111115 _inviteWallet.address
112116 );
117+
113118 const incoming = [...owned, ...transferring];
114119
120+ setInviteWallet(inviteWallet);
121+
122+ // Set derived
115123 if (incoming.length > 0) {
116124 if (incoming.length > 1 && !didWarn.current) {
117125 didWarn.current = true;
126+
118127 return {
119128 [WARNING]:
120129 'This invite code has multiple points available. ' +
@@ -126,7 +135,6 @@ export default function ActivateCode() {
126135 const point = convertToInt(incoming[0], 10);
127136
128137 setDerivedPoint(Just(point));
129− setInviteWallet(inviteWallet);
130138 setDerivedWallet(Just(await generateWallet(point, true)));
131139 } else {
132140 return {
@@ -136,7 +144,14 @@ export default function ActivateCode() {
136144 };
137145 }
138146 },
139− [contracts, setDerivedPoint, setDerivedWallet, setInviteWallet]
147+ [
148+ contracts,
149+ impliedPoint,
150+ impliedTicket,
151+ setDerivedPoint,
152+ setDerivedWallet,
153+ setInviteWallet,
154+ ]
140155 );
141156
142157 const initialValues = useMemo(
@@ -147,19 +162,20 @@ export default function ActivateCode() {
147162 return (
148163 <View inset>
149164 <Grid>
150− <Grid.Item
151− full
152− as={Passport}
153− point={derivedPoint}
154− address={Nothing()}
155− />
156165 <Grid.Item full as={H4} className="mt3">
157− Activate
158− </Grid.Item>
159− <Grid.Item full as={P} className="mb2">
160− Someone has invited you to claim your Urbit identity and join the
161− network. {!impliedTicket && 'Enter your activation code to continue.'}
166+ Welcome. This is your Urbit.
162167 </Grid.Item>
168+ {!impliedTicket && (
169+ <Grid.Item full as={P} className="mb2">
170+ Enter your activation code to continue.
171+ </Grid.Item>
172+ )}
173+
174+ {impliedPoint && (
175+ <Grid.Item full as={P} className="mb2">
176+ {impliedPoint}
177+ </Grid.Item>
178+ )}
163179 <BridgeForm
164180 validate={validate}
165181 onSubmit={onSubmit}
@@ -201,7 +217,7 @@ export default function ActivateCode() {
201217 ? 'Generating...'
202218 : isWarning
203219 ? 'Continue Activation'
204− : 'Go'
220+ : 'Claim'
205221 }
206222 </Grid.Item>
207223