From b42f078c0eaa16ced5fd8face3e386b082a16038 Mon Sep 17 00:00:00 2001 From: im-adithya Date: Mon, 18 Nov 2024 17:29:45 +0530 Subject: [PATCH 1/8] chore: add high error correction level to qr codes --- components/QRCode.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/QRCode.tsx b/components/QRCode.tsx index fb118d6..2cb58c3 100644 --- a/components/QRCode.tsx +++ b/components/QRCode.tsx @@ -12,7 +12,7 @@ function QRCode({ value }: { value: string }) { style={{ borderRadius: 28, elevation: 2 }} > - + ); From 622471e0a56824fafdf8e1ad42926cecaec97f73 Mon Sep 17 00:00:00 2001 From: im-adithya Date: Tue, 19 Nov 2024 23:51:18 +0530 Subject: [PATCH 2/8] feat: add option to delete contacts --- components/Icons.tsx | 6 ++++++ components/ui/card.tsx | 12 +++++++---- lib/state/appStore.ts | 22 ++++++++++++++++++++ pages/send/AddressBook.tsx | 41 ++++++++++++++++++++++++++------------ 4 files changed, 64 insertions(+), 17 deletions(-) diff --git a/components/Icons.tsx b/components/Icons.tsx index c0cf94f..b716ef0 100644 --- a/components/Icons.tsx +++ b/components/Icons.tsx @@ -34,7 +34,9 @@ import { RefreshCw, Settings2, Share2, + Trash2, TriangleAlert, + UserCircle2, Wallet2, WalletIcon, X, @@ -95,6 +97,8 @@ interopIcon(CircleCheck); interopIcon(TriangleAlert); interopIcon(LogOut); interopIcon(ArchiveRestore); +interopIcon(UserCircle2); +interopIcon(Trash2); export { AlertCircle, @@ -131,7 +135,9 @@ export { RefreshCw, Settings2, Share2, + Trash2, TriangleAlert, + UserCircle2, Wallet2, WalletIcon, X, diff --git a/components/ui/card.tsx b/components/ui/card.tsx index 8191c86..8cc91be 100644 --- a/components/ui/card.tsx +++ b/components/ui/card.tsx @@ -11,7 +11,7 @@ const Card = React.forwardRef< (({ className, ...props }, ref) => ( )); @@ -39,6 +39,8 @@ const CardTitle = React.forwardRef< role="heading" aria-level={3} ref={ref} + numberOfLines={1} + ellipsizeMode="tail" className={cn( "text-xl text-card-foreground font-semibold2 leading-none tracking-tight", className, @@ -54,6 +56,8 @@ const CardDescription = React.forwardRef< >(({ className, ...props }, ref) => ( @@ -65,7 +69,7 @@ const CardContent = React.forwardRef< React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - + )); CardContent.displayName = "CardContent"; @@ -76,7 +80,7 @@ const CardFooter = React.forwardRef< >(({ className, ...props }, ref) => ( )); diff --git a/lib/state/appStore.ts b/lib/state/appStore.ts index dfcc173..a5fa0db 100644 --- a/lib/state/appStore.ts +++ b/lib/state/appStore.ts @@ -24,6 +24,7 @@ interface AppState { setSecurityEnabled(securityEnabled: boolean): void; addWallet(wallet: Wallet): void; addAddressBookEntry(entry: AddressBookEntry): void; + removeAddressBookEntry: (index: number) => void; reset(): void; getLastAlbyPayment(): Date | null; updateLastAlbyPayment(): void; @@ -140,6 +141,26 @@ export const useAppStore = create()((set, get) => { }); }; + const removeAddressBookEntry = (index: number) => { + const addressBookEntries = [...get().addressBookEntries]; + if (index < 0 || index >= addressBookEntries.length) { + return; + } + + addressBookEntries.splice(index, 1); + + for (let i = index; i < addressBookEntries.length; i++) { + secureStorage.setItem( + getAddressBookEntryKey(i), + JSON.stringify(addressBookEntries[i]), + ); + } + + secureStorage.removeItem(getAddressBookEntryKey(addressBookEntries.length)); + + set({ addressBookEntries }); + }; + const initialSelectedWalletId = +( secureStorage.getItem(selectedWalletIdKey) || "0" ); @@ -162,6 +183,7 @@ export const useAppStore = create()((set, get) => { selectedWalletId: initialSelectedWalletId, updateCurrentWallet, removeCurrentWallet, + removeAddressBookEntry, setUnlocked: (unlocked) => { set({ unlocked }); }, diff --git a/pages/send/AddressBook.tsx b/pages/send/AddressBook.tsx index 299a3cb..1d00446 100644 --- a/pages/send/AddressBook.tsx +++ b/pages/send/AddressBook.tsx @@ -1,11 +1,12 @@ import { Link, router } from "expo-router"; -import { Pressable, ScrollView, View } from "react-native"; +import { ScrollView, TouchableOpacity, View } from "react-native"; +import { Trash2, UserCircle2 } from "~/components/Icons"; import Screen from "~/components/Screen"; import { Button } from "~/components/ui/button"; import { Card, + CardContent, CardDescription, - CardHeader, CardTitle, } from "~/components/ui/card"; import { Text } from "~/components/ui/text"; @@ -13,13 +14,14 @@ import { useAppStore } from "~/lib/state/appStore"; export function AddressBook() { const addressBookEntries = useAppStore((store) => store.addressBookEntries); + return ( {addressBookEntries.length > 0 ? ( addressBookEntries.map((addressBookEntry, index) => ( - { router.dismissAll(); @@ -30,18 +32,31 @@ export function AddressBook() { }, }); }} + className="mb-4" > - - - - {addressBookEntry.name || addressBookEntry.lightningAddress} - - - {addressBookEntry.lightningAddress} - - + + + + + + {addressBookEntry.name || + addressBookEntry.lightningAddress} + + + {addressBookEntry.lightningAddress} + + + { + e.stopPropagation(); + useAppStore.getState().removeAddressBookEntry(index); + }} + > + + + - + )) ) : ( No entries yet. From 23eccd478166b675960445f873d47773e163e7ce Mon Sep 17 00:00:00 2001 From: im-adithya Date: Tue, 19 Nov 2024 23:54:02 +0530 Subject: [PATCH 3/8] chore: do not allow empty name or lightning address in contacts --- pages/settings/address-book/NewAddressBookEntry.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pages/settings/address-book/NewAddressBookEntry.tsx b/pages/settings/address-book/NewAddressBookEntry.tsx index 9e5c2b1..ef3a632 100644 --- a/pages/settings/address-book/NewAddressBookEntry.tsx +++ b/pages/settings/address-book/NewAddressBookEntry.tsx @@ -17,7 +17,7 @@ export function NewAddressBookEntry() { - + @@ -51,6 +51,7 @@ export function NewAddressBookEntry() { diff --git a/pages/send/AddressBook.tsx b/pages/send/AddressBook.tsx index b81a656..c3f60e2 100644 --- a/pages/send/AddressBook.tsx +++ b/pages/send/AddressBook.tsx @@ -1,5 +1,5 @@ import { Link, router } from "expo-router"; -import { ScrollView, TouchableOpacity, View } from "react-native"; +import { Pressable, ScrollView, TouchableOpacity, View } from "react-native"; import { Trash2 } from "~/components/Icons"; import Screen from "~/components/Screen"; import { Button } from "~/components/ui/button"; @@ -21,7 +21,7 @@ export function AddressBook() { {addressBookEntries.length > 0 ? ( addressBookEntries.map((addressBookEntry, index) => ( - { router.dismissAll(); @@ -62,7 +62,7 @@ export function AddressBook() { - + )) ) : ( No entries yet. From fce4ebc328e4185f935aeaf62917550faf251a4b Mon Sep 17 00:00:00 2001 From: im-adithya Date: Wed, 4 Dec 2024 12:13:50 +0530 Subject: [PATCH 8/8] chore: update version to 1.7.2 --- app.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app.json b/app.json index 657a53b..eb6438b 100644 --- a/app.json +++ b/app.json @@ -2,7 +2,7 @@ "expo": { "name": "Alby Go", "slug": "alby-mobile", - "version": "1.7.1", + "version": "1.7.2", "scheme": ["lightning", "bitcoin", "alby"], "orientation": "portrait", "icon": "./assets/icon.png", diff --git a/package.json b/package.json index 0dbe795..5f856a6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "alby-go", - "version": "1.7.1", + "version": "1.7.2", "main": "./index.js", "scripts": { "start": "expo start",