Skip to content

Commit dd8d6f7

Browse files
committed
fix(suite-native): simplify and fix deleting state related to non-remembered device when disconnected
1 parent ba2f01b commit dd8d6f7

File tree

8 files changed

+24
-68
lines changed

8 files changed

+24
-68
lines changed

suite-common/wallet-core/src/accounts/accountsReducer.ts

-10
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import {
1414
selectDevice,
1515
selectIsNoPhysicalDeviceConnected,
1616
selectIsPortfolioTrackerDevice,
17-
selectPersistedDeviceStates,
1817
} from '../device/deviceReducer';
1918
import { DiscoveryRootState, selectIsDeviceDiscoveryActive } from '../discovery/discoveryReducer';
2019

@@ -366,15 +365,6 @@ export const selectIsDeviceDiscoveryEmpty = (
366365
return isDeviceAccountless && !isDeviceDiscoveryActive;
367366
};
368367

369-
export const selectDevicelessAccounts = (state: AccountsRootState & DeviceRootState) => {
370-
const persistedDevicesStates = selectPersistedDeviceStates(state);
371-
372-
return pipe(
373-
selectAccounts(state),
374-
A.filter(account => !persistedDevicesStates.includes(account.deviceState)),
375-
) as Account[];
376-
};
377-
378368
export const selectAreAllDevicesDisconnectedOrAccountless = (
379369
state: AccountsRootState & DeviceRootState & DiscoveryRootState,
380370
) => {

suite-common/wallet-core/src/device/deviceReducer.ts

+1-8
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { isNative } from '@trezor/env-utils';
1616

1717
import { deviceActions } from './deviceActions';
1818
import { authorizeDevice } from './deviceThunks';
19-
import { PORTFOLIO_TRACKER_DEVICE_ID, PORTFOLIO_TRACKER_DEVICE_STATE } from './deviceConstants';
19+
import { PORTFOLIO_TRACKER_DEVICE_ID } from './deviceConstants';
2020

2121
export type State = {
2222
devices: TrezorDevice[];
@@ -784,13 +784,6 @@ export const selectDeviceFirmwareVersion = memoize((state: DeviceRootState) => {
784784

785785
return getFirmwareVersionArray(device);
786786
});
787-
788-
export const selectPersistedDeviceStates = (state: DeviceRootState) => {
789-
const devices = selectDevices(state);
790-
791-
return [...devices.map(d => d.state), PORTFOLIO_TRACKER_DEVICE_STATE];
792-
};
793-
794787
export const selectPhysicalDevices = memoize((state: DeviceRootState) => {
795788
const devices = selectDevices(state);
796789

suite-common/wallet-core/src/discovery/discoveryReducer.ts

+1-16
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
1-
import { A, pipe } from '@mobily/ts-belt';
2-
31
import { createDeferred } from '@trezor/utils';
42
import { Discovery, PartialDiscovery } from '@suite-common/wallet-types';
53
import { createReducerWithExtraDeps } from '@suite-common/redux-utils';
64
import { DiscoveryStatus } from '@suite-common/wallet-constants';
75

86
import { discoveryActions } from './discoveryActions';
9-
import {
10-
DeviceRootState,
11-
selectDevice,
12-
selectPersistedDeviceStates,
13-
} from '../device/deviceReducer';
7+
import { DeviceRootState, selectDevice } from '../device/deviceReducer';
148

159
export type DiscoveryState = Discovery[];
1610

@@ -124,12 +118,3 @@ export const selectIsDiscoveryAuthConfirmationRequired = (
124118
discovery.status === DiscoveryStatus.COMPLETED)
125119
);
126120
};
127-
128-
export const selectDevicelessDiscoveries = (state: DiscoveryRootState & DeviceRootState) => {
129-
const persistedDeviceStates = selectPersistedDeviceStates(state);
130-
131-
return pipe(
132-
selectDiscovery(state),
133-
A.filter(discovery => !persistedDeviceStates.includes(discovery.deviceState)),
134-
) as Discovery[];
135-
};

suite-native/app/src/initActions.ts

-5
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import {
99
import { initAnalyticsThunk } from '@suite-native/analytics';
1010
import { selectFiatCurrencyCode } from '@suite-native/settings';
1111
import { initMessageSystemThunk } from '@suite-common/message-system';
12-
import { wipeDisconnectedDevicesDataThunk } from '@suite-native/device';
1312
import { setIsAppReady, setIsConnectInitialized } from '@suite-native/state/src/appSlice';
1413
import { periodicCheckTokenDefinitionsThunk } from '@suite-common/token-definitions';
1514

@@ -47,10 +46,6 @@ export const applicationInit = createThunk(
4746

4847
// Create Portfolio Tracker device if it doesn't exist
4948
dispatch(createImportedDeviceThunk());
50-
51-
// In case that user closed the app while device was connected,
52-
// remove its persistent data on app init if the device is not connected anymore.
53-
dispatch(wipeDisconnectedDevicesDataThunk());
5449
} catch (error) {
5550
console.error(error);
5651
} finally {

suite-native/device/src/deviceThunks.ts

-25
This file was deleted.

suite-native/device/src/index.ts

-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,5 @@ export * from './hooks/useHandleDeviceRequestsPassphrase';
77
export * from './hooks/useReportDeviceConnectToAnalytics';
88
export * from './screens/DeviceInfoModalScreen';
99
export * from './components/ConnectDeviceAnimation';
10-
export * from './deviceThunks';
1110
export * from './utils';
1211
export * from './selectors';

suite-native/device/src/middlewares/deviceMiddleware.ts

+10-3
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,16 @@ import { AnyAction, isAnyOf } from '@reduxjs/toolkit';
33
import { createMiddlewareWithExtraDeps } from '@suite-common/redux-utils';
44
import { DEVICE } from '@trezor/connect';
55
import {
6+
accountsActions,
67
deviceActions,
78
forgetDisconnectedDevices,
89
handleDeviceDisconnect,
910
observeSelectedDevice,
1011
selectDeviceThunk,
12+
selectAccountsByDeviceState,
1113
} from '@suite-common/wallet-core';
1214
import { FeatureFlag, selectIsFeatureFlagEnabled } from '@suite-native/feature-flags';
13-
14-
import { wipeDisconnectedDevicesDataThunk } from '../deviceThunks';
15+
import { clearAndUnlockDeviceAccessQueue } from '@suite-native/device-mutex';
1516

1617
const isActionDeviceRelated = (action: AnyAction): boolean => {
1718
if (
@@ -49,6 +50,12 @@ export const prepareDeviceMiddleware = createMiddlewareWithExtraDeps(
4950

5051
if (deviceActions.forgetDevice.match(action)) {
5152
dispatch(handleDeviceDisconnect(action.payload));
53+
54+
const deviceState = action.payload.state;
55+
if (deviceState) {
56+
const accounts = selectAccountsByDeviceState(getState(), deviceState);
57+
dispatch(accountsActions.removeAccount(accounts));
58+
}
5259
}
5360

5461
const isUsbDeviceConnectFeatureEnabled = selectIsFeatureFlagEnabled(
@@ -65,7 +72,7 @@ export const prepareDeviceMiddleware = createMiddlewareWithExtraDeps(
6572
break;
6673
case DEVICE.DISCONNECT:
6774
dispatch(handleDeviceDisconnect(action.payload));
68-
dispatch(wipeDisconnectedDevicesDataThunk());
75+
clearAndUnlockDeviceAccessQueue();
6976
break;
7077
default:
7178
break;

suite-native/graph/src/slice.ts

+12
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { G } from '@mobily/ts-belt';
22
import { createTransform } from 'redux-persist';
33
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
44

5+
import { deviceActions } from '@suite-common/wallet-core';
56
import { AccountKey } from '@suite-common/wallet-types';
67
import { selectDeviceStatesNotRemembered, filterObjectKeys } from '@suite-native/storage';
78

@@ -58,6 +59,17 @@ export const graphSlice = createSlice({
5859
};
5960
},
6061
},
62+
extraReducers: builder => {
63+
builder.addCase(deviceActions.forgetDevice, (state, action) => {
64+
const deviceState = action.payload.state;
65+
if (deviceState) {
66+
state.accountToGraphTimeframeMap = filterObjectKeys(
67+
state.accountToGraphTimeframeMap,
68+
[deviceState],
69+
);
70+
}
71+
});
72+
},
6173
});
6274

6375
export const selectPortfolioGraphTimeframe = (state: GraphSliceRootState) =>

0 commit comments

Comments
 (0)