From da893bf2671540f538cbae195639176a2005a00a Mon Sep 17 00:00:00 2001 From: Philipp Walter Date: Sat, 1 Feb 2025 11:41:05 +0100 Subject: [PATCH 1/7] fix(restore): #2445 backup card shown after restore --- __tests__/todos.ts | 4 ++-- src/screens/Onboarding/RestoreFromSeed.tsx | 3 +-- src/screens/Settings/Backup/BackupPrompt.tsx | 2 +- src/screens/Settings/Backup/Success.tsx | 2 +- src/store/reselect/settings.ts | 4 ---- src/store/reselect/todos.ts | 7 +++++-- src/store/reselect/user.ts | 3 +++ src/store/shapes/settings.ts | 1 - src/store/slices/settings.ts | 5 ----- src/store/slices/user.ts | 6 ++++++ 10 files changed, 19 insertions(+), 18 deletions(-) diff --git a/__tests__/todos.ts b/__tests__/todos.ts index 43a300995..f423e5f97 100644 --- a/__tests__/todos.ts +++ b/__tests__/todos.ts @@ -32,7 +32,7 @@ describe('Todos selector', () => { let s: RootState; beforeAll(async () => { - let res = await createNewWallet(); + const res = await createNewWallet(); if (res.isErr()) { throw res.error; } @@ -67,7 +67,7 @@ describe('Todos selector', () => { it('should not return backupSeedPhraseTodo if backup is verified', () => { const state = cloneDeep(s); - state.settings.backupVerified = true; + state.user.backupVerified = true; expect(todosFullSelector(state)).not.toEqual( expect.arrayContaining([backupSeedPhraseTodo]), diff --git a/src/screens/Onboarding/RestoreFromSeed.tsx b/src/screens/Onboarding/RestoreFromSeed.tsx index 25e79d991..8be009a24 100644 --- a/src/screens/Onboarding/RestoreFromSeed.tsx +++ b/src/screens/Onboarding/RestoreFromSeed.tsx @@ -26,8 +26,7 @@ import VerticalShadow from '../../components/VerticalShadow'; import Button from '../../components/buttons/Button'; import { useAppDispatch } from '../../hooks/redux'; import { OnboardingStackScreenProps } from '../../navigation/types'; -import { verifyBackup } from '../../store/slices/settings'; -import { updateUser } from '../../store/slices/user'; +import { updateUser, verifyBackup } from '../../store/slices/user'; import { ScrollView, TextInput, diff --git a/src/screens/Settings/Backup/BackupPrompt.tsx b/src/screens/Settings/Backup/BackupPrompt.tsx index bcbb236ea..5d6594de9 100644 --- a/src/screens/Settings/Backup/BackupPrompt.tsx +++ b/src/screens/Settings/Backup/BackupPrompt.tsx @@ -10,8 +10,8 @@ import { } from '../../../hooks/bottomSheet'; import { useAppDispatch, useAppSelector } from '../../../hooks/redux'; import { useBalance } from '../../../hooks/wallet'; -import { backupVerifiedSelector } from '../../../store/reselect/settings'; import { viewControllersSelector } from '../../../store/reselect/ui'; +import { backupVerifiedSelector } from '../../../store/reselect/user'; import { ignoreBackupTimestampSelector } from '../../../store/reselect/user'; import { closeSheet } from '../../../store/slices/ui'; import { ignoreBackup } from '../../../store/slices/user'; diff --git a/src/screens/Settings/Backup/Success.tsx b/src/screens/Settings/Backup/Success.tsx index 9e7c919f9..593c217b4 100644 --- a/src/screens/Settings/Backup/Success.tsx +++ b/src/screens/Settings/Backup/Success.tsx @@ -8,7 +8,7 @@ import SafeAreaInset from '../../../components/SafeAreaInset'; import Button from '../../../components/buttons/Button'; import { useAppDispatch } from '../../../hooks/redux'; import { BackupScreenProps } from '../../../navigation/types'; -import { verifyBackup } from '../../../store/slices/settings'; +import { verifyBackup } from '../../../store/slices/user'; import { BodyM, BodyMB } from '../../../styles/text'; const imageSrc = require('../../../assets/illustrations/check.png'); diff --git a/src/store/reselect/settings.ts b/src/store/reselect/settings.ts index c4f8d0e91..3a405f35d 100644 --- a/src/store/reselect/settings.ts +++ b/src/store/reselect/settings.ts @@ -19,10 +19,6 @@ export const settingsSelector = (state: RootState): TSettings => state.settings; const customElectrumPeersState = (state: RootState): TCustomElectrumPeers => { return state.settings.customElectrumPeers; }; - -export const backupVerifiedSelector = (state: RootState): boolean => { - return state.settings.backupVerified; -}; export const selectedCurrencySelector = (state: RootState): string => { return state.settings.selectedCurrency; }; diff --git a/src/store/reselect/todos.ts b/src/store/reselect/todos.ts index 3a12def53..ce62438b9 100644 --- a/src/store/reselect/todos.ts +++ b/src/store/reselect/todos.ts @@ -20,9 +20,12 @@ import { ITodo, TTodosState } from '../types/todos'; import { ETransferType, TTransferToSavings } from '../types/wallet'; import { blocktankPaidOrdersFullSelector } from './blocktank'; import { closedChannelsSelector, openChannelsSelector } from './lightning'; -import { backupVerifiedSelector, pinSelector } from './settings'; +import { pinSelector } from './settings'; import { onboardingProfileStepSelector } from './slashtags'; -import { startCoopCloseTimestampSelector } from './user'; +import { + backupVerifiedSelector, + startCoopCloseTimestampSelector, +} from './user'; import { createShallowEqualSelector } from './utils'; import { pendingTransfersSelector } from './wallet'; diff --git a/src/store/reselect/user.ts b/src/store/reselect/user.ts index 3138f163f..86259d87f 100644 --- a/src/store/reselect/user.ts +++ b/src/store/reselect/user.ts @@ -4,6 +4,9 @@ import { TUser } from '../slices/user'; const userState = (state: RootState): TUser => state.user; +export const backupVerifiedSelector = (state: RootState): boolean => { + return state.user.backupVerified; +}; export const isGeoBlockedSelector = createSelector( [userState], (user): boolean => user.isGeoBlocked ?? false, diff --git a/src/store/shapes/settings.ts b/src/store/shapes/settings.ts index ec3fdcb9f..fd55cbf47 100644 --- a/src/store/shapes/settings.ts +++ b/src/store/shapes/settings.ts @@ -74,7 +74,6 @@ const defaultReceivePreference = [ ]; export const initialSettingsState: TSettings = { - backupVerified: false, enableAutoReadClipboard: false, enableSendAmountWarning: false, enableSwipeToHideBalance: true, diff --git a/src/store/slices/settings.ts b/src/store/slices/settings.ts index 86fa6a363..fc22a69eb 100644 --- a/src/store/slices/settings.ts +++ b/src/store/slices/settings.ts @@ -14,7 +14,6 @@ import { import { EDenomination, EUnit } from '../types/wallet'; export type TSettings = { - backupVerified: boolean; enableAutoReadClipboard: boolean; enableSendAmountWarning: boolean; enableSwipeToHideBalance: boolean; @@ -88,9 +87,6 @@ export const settingsSlice = createSlice({ addOrangeTicket: (state, action: PayloadAction) => { state.orangeTickets.push(action.payload); }, - verifyBackup: (state) => { - state.backupVerified = true; - }, resetSettingsState: () => initialSettingsState, }, }); @@ -103,7 +99,6 @@ export const { addTreasureChest, updateTreasureChest, addOrangeTicket, - verifyBackup, resetSettingsState, } = actions; diff --git a/src/store/slices/user.ts b/src/store/slices/user.ts index 4d2250703..2b85a94b7 100644 --- a/src/store/slices/user.ts +++ b/src/store/slices/user.ts @@ -5,6 +5,7 @@ import { PayloadAction, createSlice } from '@reduxjs/toolkit'; export const MAX_WARNINGS = 3; // how many times to show high balance warning export type TUser = { + backupVerified: boolean; ignoreAppUpdateTimestamp: number; ignoreBackupTimestamp: number; ignoreHighBalanceCount: number; @@ -19,6 +20,7 @@ export type TUser = { }; export const initialUserState: TUser = { + backupVerified: false, ignoreAppUpdateTimestamp: 0, ignoreBackupTimestamp: 0, ignoreHighBalanceCount: 0, @@ -65,6 +67,9 @@ export const userSlice = createSlice({ ignoreSwitchUnitToast: (state) => { state.ignoresSwitchUnitToast = true; }, + verifyBackup: (state) => { + state.backupVerified = true; + }, resetUserState: () => initialUserState, }, }); @@ -81,6 +86,7 @@ export const { clearCoopCloseTimer, ignoreHideBalanceToast, ignoreSwitchUnitToast, + verifyBackup, resetUserState, } = actions; From 8eb61ceb78614ed419755c7d7e8fcf95bba44765 Mon Sep 17 00:00:00 2001 From: Philipp Walter Date: Mon, 3 Feb 2025 13:45:12 +0100 Subject: [PATCH 2/7] fix(contacts): fix back navigation loop --- e2e/slashtags.e2e.js | 1 + src/screens/Contacts/Contact.tsx | 5 +---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/e2e/slashtags.e2e.js b/e2e/slashtags.e2e.js index 68e5226c5..515e5fdd2 100644 --- a/e2e/slashtags.e2e.js +++ b/e2e/slashtags.e2e.js @@ -144,6 +144,7 @@ d('Profile and Contacts', () => { await expect(element(by.text('WEBSITE'))).toExist(); await expect(element(by.text(satoshi.website))).toExist(); await element(by.id('NavigationBack')).tap(); + await element(by.id('NavigationBack')).tap(); if (device.getPlatform() === 'ios') { // FIXME: this bottom sheet should not appear diff --git a/src/screens/Contacts/Contact.tsx b/src/screens/Contacts/Contact.tsx index 79f74c2e0..9070e5cbc 100644 --- a/src/screens/Contacts/Contact.tsx +++ b/src/screens/Contacts/Contact.tsx @@ -135,10 +135,7 @@ const Contact = ({ return ( - navigation.navigate('Contacts')} - /> + Date: Mon, 3 Feb 2025 13:57:58 +0100 Subject: [PATCH 3/7] fix(widgets): implement feedback for weather widget --- src/components/widgets/WeatherWidget.tsx | 2 +- src/screens/Widgets/Widget.tsx | 18 ++++++++++-------- src/screens/Widgets/WidgetEdit.tsx | 2 +- src/utils/i18n/locales/en/widgets.json | 2 +- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/components/widgets/WeatherWidget.tsx b/src/components/widgets/WeatherWidget.tsx index 9a63f0eb6..bd164395d 100644 --- a/src/components/widgets/WeatherWidget.tsx +++ b/src/components/widgets/WeatherWidget.tsx @@ -87,7 +87,7 @@ const WeatherWidget = ({ - {nextBlockFee} bitcoin/vB + {nextBlockFee} ₿/vByte )} diff --git a/src/screens/Widgets/Widget.tsx b/src/screens/Widgets/Widget.tsx index 8a6a1e070..c34c3cdc1 100644 --- a/src/screens/Widgets/Widget.tsx +++ b/src/screens/Widgets/Widget.tsx @@ -120,14 +120,16 @@ const Widget = ({ {renderWidget()} -