Skip to content

Commit

Permalink
[FIX]: Throw error to avoid Error: qrcode websocket prematurely close…
Browse files Browse the repository at this point in the history
…d on QRCode host (#7556)
  • Loading branch information
mcayuelas-ledger committed Aug 8, 2024
1 parent 0407529 commit ebbbe52
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 25 deletions.
6 changes: 6 additions & 0 deletions .changeset/loud-bikes-rest.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"ledger-live-desktop": patch
"live-mobile": patch
---

Throw errors to avoid rejection on QRCode
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,11 @@ import { trustchainSelector, memberCredentialsSelector } from "@ledgerhq/trustch
import { useTrustchainSdk } from "./useTrustchainSdk";
import { useFeature } from "@ledgerhq/live-common/featureFlags/index";
import getWalletSyncEnvironmentParams from "@ledgerhq/live-common/walletSync/getEnvironmentParams";
import { useQueryClient } from "@tanstack/react-query";
import { QueryKey } from "./type.hooks";

export function useQRCode() {
const queryClient = useQueryClient();
const dispatch = useDispatch();
const trustchain = useSelector(trustchainSelector);
const memberCredentials = useSelector(memberCredentialsSelector);
Expand All @@ -29,8 +32,6 @@ export function useQRCode() {
const startQRCodeProcessing = useCallback(() => {
if (!trustchain || !memberCredentials) return;

let hasCompleted = false;

setError(null);
setIsLoading(true);
createQRCodeHostInstance({
Expand All @@ -44,7 +45,6 @@ export function useQRCode() {
},
addMember: async member => {
await sdk.addMember(trustchain, memberCredentials, member);
hasCompleted = true;
return trustchain;
},
})
Expand All @@ -53,17 +53,17 @@ export function useQRCode() {
dispatch(setFlow({ flow: Flow.Synchronize, step: Step.PinCodeError }));
}
setError(e);
throw e;
})
.then(() => {
if (hasCompleted) dispatch(setFlow({ flow: Flow.Synchronize, step: Step.Synchronized }));
})
.finally(() => {
dispatch(setFlow({ flow: Flow.Synchronize, step: Step.Synchronized }));
queryClient.invalidateQueries({ queryKey: [QueryKey.getMembers] });
setUrl(null);
dispatch(setQrCodePinCode(null));
setIsLoading(false);
setError(null);
});
}, [trustchain, memberCredentials, trustchainApiBaseUrl, dispatch, sdk]);
}, [trustchain, memberCredentials, trustchainApiBaseUrl, dispatch, sdk, queryClient]);

return {
url,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import AddAccountDrawer from "LLM/features/Accounts/screens/AddAccount";
import { BaseNavigatorStackParamList } from "~/components/RootNavigator/types/BaseNavigator";
import AddAccountsNavigator from "~/components/RootNavigator/AddAccountsNavigator";
import ImportAccountsNavigator from "~/components/RootNavigator/ImportAccountsNavigator";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";

const MockComponent = () => {
const { t } = useTranslation();
Expand Down Expand Up @@ -38,10 +39,12 @@ const Stack = createStackNavigator<BaseNavigatorStackParamList>();

export function TestButtonPage() {
return (
<Stack.Navigator initialRouteName={ScreenName.MockedAddAssetButton}>
<Stack.Screen name={ScreenName.MockedAddAssetButton} component={MockComponent} />
<Stack.Screen name={NavigatorName.AddAccounts} component={AddAccountsNavigator} />
<Stack.Screen name={NavigatorName.ImportAccounts} component={ImportAccountsNavigator} />
</Stack.Navigator>
<QueryClientProvider client={new QueryClient()}>
<Stack.Navigator initialRouteName={ScreenName.MockedAddAssetButton}>
<Stack.Screen name={ScreenName.MockedAddAssetButton} component={MockComponent} />
<Stack.Screen name={NavigatorName.AddAccounts} component={AddAccountsNavigator} />
<Stack.Screen name={NavigatorName.ImportAccounts} component={ImportAccountsNavigator} />
</Stack.Navigator>
</QueryClientProvider>
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import { useNavigation } from "@react-navigation/native";
import { NavigatorName, ScreenName } from "~/const";
import { useFeature } from "@ledgerhq/live-common/featureFlags/index";
import getWalletSyncEnvironmentParams from "@ledgerhq/live-common/walletSync/getEnvironmentParams";
import { useQueryClient } from "@tanstack/react-query";
import { QueryKey } from "./type.hooks";

interface Props {
setCurrentStep: (step: Steps) => void;
Expand All @@ -17,6 +19,7 @@ interface Props {
}

export function useQRCodeHost({ setCurrentStep, currentStep, currentOption }: Props) {
const queryClient = useQueryClient();
const trustchain = useSelector(trustchainSelector);
const memberCredentials = useSelector(memberCredentialsSelector);
const sdk = useTrustchainSdk();
Expand All @@ -36,8 +39,6 @@ export function useQRCodeHost({ setCurrentStep, currentStep, currentOption }: Pr
const startQRCodeProcessing = useCallback(() => {
if (!trustchain || !memberCredentials || isLoading) return;

let hasCompleted = false;

setError(null);
setIsLoading(true);
createQRCodeHostInstance({
Expand All @@ -55,7 +56,6 @@ export function useQRCodeHost({ setCurrentStep, currentStep, currentOption }: Pr
},
addMember: async member => {
await sdk.addMember(trustchain, memberCredentials, member);
hasCompleted = true;
return trustchain;
},
})
Expand All @@ -65,17 +65,17 @@ export function useQRCodeHost({ setCurrentStep, currentStep, currentOption }: Pr
return;
}
setError(e);
throw e;
})
.then(() => {
if (!error && hasCompleted)
navigation.navigate(NavigatorName.WalletSync, {
screen: ScreenName.WalletSyncSuccess,
params: {
created: false,
},
});
})
.finally(() => {
queryClient.invalidateQueries({ queryKey: [QueryKey.getMembers] });
navigation.navigate(NavigatorName.WalletSync, {
screen: ScreenName.WalletSyncSuccess,
params: {
created: false,
},
});

setUrl(null);
setPinCode(null);
setIsLoading(false);
Expand All @@ -87,7 +87,7 @@ export function useQRCodeHost({ setCurrentStep, currentStep, currentOption }: Pr
trustchainApiBaseUrl,
setCurrentStep,
sdk,
error,
queryClient,
navigation,
]);

Expand Down

0 comments on commit ebbbe52

Please sign in to comment.