Skip to content

Commit

Permalink
refactor: inbound link screens, starting with NoteScreen
Browse files Browse the repository at this point in the history
  • Loading branch information
dcposch committed Aug 14, 2023
1 parent 87365c6 commit 147d4c2
Show file tree
Hide file tree
Showing 10 changed files with 34 additions and 63 deletions.
1 change: 0 additions & 1 deletion apps/daimo-mobile/src/logic/note.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,6 @@ export function useEphemeralSignature(
account: ephemeralAccount,
chain: baseGoerli,
transport: http(),
// TODO: webSocket("wss://base-goerli.public.blastapi.io")
});
const message = keccak256(recipient);
const signature = await ephemeralClient.signMessage({
Expand Down
16 changes: 8 additions & 8 deletions apps/daimo-mobile/src/view/HomeStack.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@ import { tokenMetadata } from "@daimo/contract";
import { createNativeStackNavigator } from "@react-navigation/native-stack";
import { useMemo } from "react";

import { AccountScreen } from "./screen/AccountScreen";
import { HistoryScreen } from "./screen/History";
import { HistoryOpScreen } from "./screen/HistoryOpScreen";
import HomeScreen from "./screen/HomeScreen";
import OnboardingScreen from "./screen/OnboardingScreen";
import ClaimNoteScreen from "./screen/receive/ClaimNoteScreen";
import { SettingsScreen } from "./screen/SettingsScreen";
import NoteScreen from "./screen/link/NoteScreen";
import CreateRequestScreen from "./screen/receive/CreateRequestScreen";
import DepositScreen from "./screen/receive/DepositScreen";
import RequestScreen from "./screen/receive/RequestScreen";
import RequestSendScreen from "./screen/receive/RequestSendScreen";
import SendRequestScreen from "./screen/receive/SendRequestScreen";
import SendScreen from "./screen/send/SendScreen";
import WithdrawScreen from "./screen/send/WithdrawScreen";
import { HomeStackParamList } from "./shared/nav";
Expand All @@ -30,22 +30,22 @@ export function HomeStackNav() {
options={useMemo(() => ({ headerShown: !!account }), [account])}
/>
<HomeStack.Screen name="Send" component={SendScreen} />
<HomeStack.Screen name="Request" component={RequestScreen} />
<HomeStack.Screen name="Request" component={CreateRequestScreen} />
<HomeStack.Screen
name="History"
component={HistoryScreen}
options={useMemo(() => ({ animation: "slide_from_bottom" }), [])}
/>
</HomeStack.Group>
<HomeStack.Group screenOptions={{ presentation: "modal" }}>
<HomeStack.Screen name="Account" component={AccountScreen} />
<HomeStack.Screen name="Settings" component={SettingsScreen} />
<HomeStack.Screen name="Deposit" component={DepositScreen} />
<HomeStack.Screen name="Withdraw" component={WithdrawScreen} />
<HomeStack.Screen name="Note" component={ClaimNoteScreen} />
<HomeStack.Screen name="Note" component={NoteScreen} />
<HomeStack.Screen
name="RequestSend"
options={{ headerTitle: `Request ${tokenMetadata.symbol}` }}
component={RequestSendScreen}
component={SendRequestScreen}
/>
<HomeStack.Screen name="HistoryOp" component={HistoryOpScreen} />
</HomeStack.Group>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import { useNav } from "../shared/nav";
import { color, ss } from "../shared/style";
import { TextBody, TextBold, TextH2, TextH3, TextLight } from "../shared/text";

export function AccountScreen() {
export function SettingsScreen() {
const [account, setAccount] = useAccount();
const nav = useNav();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import { NativeStackScreenProps } from "@react-navigation/native-stack";
import { ReactNode, useEffect, useState } from "react";
import { ActivityIndicator, ScrollView, StyleSheet, View } from "react-native";
import { Address } from "viem";
import { privateKeyToAccount } from "viem/accounts";

import { SendOpFn, useSendAsync } from "../../../action/useSendAsync";
import {
Expand All @@ -28,17 +27,14 @@ import { TextCenter, TextError, TextLight } from "../../shared/text";

type Props = NativeStackScreenProps<HomeStackParamList, "Note">;

export default function ClaimNoteScreen({ route }: Props) {
export default function NoteScreen({ route }: Props) {
const [account] = useAccount();
assert(account != null);

const { ephemeralPrivateKey, ephemeralOwner: passedEphemeralOwner } =
route.params || {};
const ephemeralOwner =
passedEphemeralOwner || privateKeyToAccount(ephemeralPrivateKey!).address;

const { ephemeralPrivateKey, ephemeralOwner } = route.params;
console.log(`[NOTE] rendering note ${ephemeralOwner}`);

// TODO: delete useFetchNote etc, use rpcFunc.getLinkStatus
const [note, loadState] = useFetchNote(ephemeralOwner);

return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { useNav } from "../../shared/nav";
import { ss } from "../../shared/style";
import { TextLight } from "../../shared/text";

export default function RequestScreen() {
export default function CreateRequestScreen() {
const nav = useNav();
const send = useCallback(() => nav.navigate("RequestSend"), [nav]);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import { AmountInput } from "../../shared/Input";
import { useNav } from "../../shared/nav";
import { color } from "../../shared/style";

export default function RequestSendScreen() {
export default function SendRequestScreen() {
const [account] = useAccount();
assert(account != null);
const [dollars, setDollars] = useState(0);
Expand Down
2 changes: 1 addition & 1 deletion apps/daimo-mobile/src/view/shared/Header.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { useAccount } from "../../model/account";

export function Header() {
const nav = useNav();
const goToAccount = useCallback(() => nav.navigate("Account"), [nav]);
const goToAccount = useCallback(() => nav.navigate("Settings"), [nav]);

const [account] = useAccount();

Expand Down
22 changes: 9 additions & 13 deletions apps/daimo-mobile/src/view/shared/nav.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,25 @@
import { DaimoLink, parseDaimoLink, OpEvent } from "@daimo/common";
import {
DaimoLink,
DaimoLinkNote,
OpEvent,
parseDaimoLink,
} from "@daimo/common";
import { useNavigation } from "@react-navigation/native";
import type { NativeStackNavigationProp } from "@react-navigation/native-stack";
import { useURL } from "expo-linking";
import { useEffect } from "react";
import { Address } from "viem";

import { Recipient, getRecipient } from "../../sync/recipients";

export type HomeStackParamList = {
Home: undefined;
Account: undefined;
Settings: undefined;
Chain: undefined;
Send: undefined | { recipient: Recipient; dollars?: number };
Withdraw: undefined;
Request: undefined;
Deposit: undefined;
Note:
| undefined
| {
ephemeralPrivateKey: `0x${string}` | undefined;
ephemeralOwner: Address | undefined;
};
Note: DaimoLinkNote;
RequestSend: undefined;
History: undefined;
HistoryOp: { op: OpEvent };
Expand Down Expand Up @@ -62,10 +61,7 @@ async function goTo(nav: ReturnType<typeof useNav>, link: DaimoLink) {
break;
}
case "note": {
nav.navigate("Note", {
ephemeralPrivateKey: link.ephemeralPrivateKey,
ephemeralOwner: link.ephemeralOwner,
});
nav.navigate("Note", link);
break;
}
default:
Expand Down
24 changes: 1 addition & 23 deletions packages/daimo-api/src/router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -131,30 +131,8 @@ export function createRouter(
})
)
.query(async (opts) => {
const ret = null as DAccount | null;
// TODO: lookup account by signing key
// Doing this efficiently likely requires an AddKey event
// Alternately, an indexer contract thru which all accounts are deployed
let ret = null as DAccount | null;

// Stub to test client
if (
opts.input.pubKeyHex ===
"0x3059301306072a8648ce3d020106082a8648ce3d03010703420004fea4465280cfcb1e1b77a91525ca90dfdd213705b6eac7bc7a79931af4e0cfe7464564a11e15252f840d73da0d34fddb74ebe806e93840f3c208e68d620d7376"
) {
ret = {
name: "test",
addr: "0xa3449c3f57af6d39bc9eb41d6e0b75d3723210cd",
};
} else if (
opts.input.pubKeyHex ===
`0x3059301306072a8648ce3d020106082a8648ce3d0301070342000436dff9029e718c4c7da071077a53a987569ecc780f92203e26afc7b91e1362582ce0bfc65b7cef65dff64768978e691eca8576da6f9d387fe77c70eeaed26f33`
) {
ret = {
name: "jules",
addr: "0xbfbff790707f8a9bddae662985270df58011cd9c",
};
}

console.log(
`[API] lookup found ${ret?.name || "<no account>"} for pubkey ${
opts.input.pubKeyHex
Expand Down
16 changes: 9 additions & 7 deletions packages/daimo-common/src/daimoLink.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,17 @@ export type DaimoLinkNote = {

export function formatDaimoLink(link: DaimoLink) {
switch (link.type) {
case "account":
case "account": {
return `${daimoLinkBase}/account/${link.addr}`;
case "request":
}
case "request": {
return `${daimoLinkBase}/request/${link.recipient}/${link.dollars}`;
case "note":
if (link.ephemeralPrivateKey == null) {
return `${daimoLinkBase}/note/${link.ephemeralOwner}`;
}
return `${daimoLinkBase}/note/${link.ephemeralOwner}#${link.ephemeralPrivateKey}`;
}
case "note": {
const base = `${daimoLinkBase}/note/${link.ephemeralOwner}`;
const hash = link.ephemeralPrivateKey && `#${link.ephemeralPrivateKey}`;
return `${base}${hash || ""}`;
}
}
}

Expand Down

0 comments on commit 147d4c2

Please sign in to comment.