diff --git a/apps/ledger-live-desktop/src/renderer/Default.tsx b/apps/ledger-live-desktop/src/renderer/Default.tsx index 649064c70530..cbb19db999b6 100644 --- a/apps/ledger-live-desktop/src/renderer/Default.tsx +++ b/apps/ledger-live-desktop/src/renderer/Default.tsx @@ -328,7 +328,7 @@ export default function Default() { - + { flow: flowName, }); + const pathname = match.path.replace("/:appId?", ""); history.replace({ - pathname: "/exchange", + pathname, search: `?referrer=isExternal`, state: { mode: flowName, @@ -167,12 +168,19 @@ export const TopBar = ({ manifest, webviewAPIRef, webviewState }: Props) => { await webview.loadURL(safeUrl); webview.clearHistory(); } - }, [localStorage, history, webviewAPIRef, webviewState.url]); + }, [localStorage, history, match.path, webviewAPIRef, webviewState.url]); const getButtonLabel = useCallback(() => { const lastScreen = localStorage.getItem("last-screen") || ""; - return lastScreen === "compare_providers" ? t("common.quote") : manifest.name; + const screenMap: { + [key: string]: string; + } = { + compare_providers: t("common.quote"), + card: t("card.backToCard"), + }; + + return screenMap[lastScreen] || manifest.name; }, [localStorage, manifest, t]); const handleReload = useCallback(() => { @@ -192,7 +200,10 @@ export const TopBar = ({ manifest, webviewAPIRef, webviewState }: Props) => { if (goToURL) { localStorage.setItem("manifest-id", manifestId); localStorage.setItem("flow-name", url.searchParams.get("flowName") || "buy"); - localStorage.setItem("last-screen", url.searchParams.get("lastScreen") || ""); + localStorage.setItem( + "last-screen", + url.searchParams.get("lastScreen") || url.searchParams.get("flowName") || "", + ); history.replace(`${match.url}/${manifestId}?goToURL=${goToURL}`); } diff --git a/apps/ledger-live-desktop/src/renderer/screens/card/index.tsx b/apps/ledger-live-desktop/src/renderer/screens/card/index.tsx index 59d19258a114..8d4e9ca49366 100644 --- a/apps/ledger-live-desktop/src/renderer/screens/card/index.tsx +++ b/apps/ledger-live-desktop/src/renderer/screens/card/index.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { useLocation } from "react-router-dom"; +import { useLocation, RouteComponentProps } from "react-router-dom"; import { useSelector } from "react-redux"; import Card from "~/renderer/components/Box/Card"; import { @@ -12,12 +12,14 @@ import useTheme from "~/renderer/hooks/useTheme"; import WebPTXPlayer from "~/renderer/components/WebPTXPlayer"; import { LiveAppManifest } from "@ledgerhq/live-common/platform/types"; import { useFeature } from "@ledgerhq/live-common/featureFlags/index"; -import { CARD_APP_ID } from "@ledgerhq/live-common/wallet-api/constants"; +import { CARD_APP_ID, INTERNAL_APP_IDS } from "@ledgerhq/live-common/wallet-api/constants"; import { useLocalLiveAppManifest } from "@ledgerhq/live-common/wallet-api/LocalLiveAppProvider/index"; import CardPlatformApp from "./CardPlatformApp"; -const LiveAppCard = () => { - const { state: urlParams, search } = useLocation(); +type CardState = { account?: string } | undefined; + +const LiveAppCard = ({ appId }: { appId: string }) => { + const { state: urlParams, search } = useLocation(); const searchParams = new URLSearchParams(search); const locale = useSelector(localeSelector); const language = useSelector(languageSelector); @@ -26,8 +28,8 @@ const LiveAppCard = () => { const mockManifest: LiveAppManifest | undefined = process.env.MOCK_REMOTE_LIVE_MANIFEST && JSON.parse(process.env.MOCK_REMOTE_LIVE_MANIFEST)[0]; - const localManifest = useLocalLiveAppManifest(CARD_APP_ID); - const remoteManifest = useRemoteLiveAppManifest(CARD_APP_ID); + const localManifest = useLocalLiveAppManifest(appId); + const remoteManifest = useRemoteLiveAppManifest(appId); const manifest = localManifest || mockManifest || remoteManifest; const themeType = useTheme().colors.palette.type; @@ -36,7 +38,7 @@ const LiveAppCard = () => { * to ensure the context is reset. last-screen is used to give an external app's webview context * of the last screen the user was on before navigating to the external app screen. */ - if (manifest?.id) { + if (manifest?.id && INTERNAL_APP_IDS.includes(manifest.id)) { const { localStorage } = window; localStorage.removeItem("last-screen"); localStorage.removeItem("manifest-id"); @@ -67,10 +69,15 @@ const LiveAppCard = () => { ); }; -const CardDapp = () => { +export type ComponentParams = { + appId?: string; +}; + +const CardDapp = ({ match }: RouteComponentProps) => { + const appId = match?.params?.appId; const ptxCardFlag = useFeature("ptxCard"); if (ptxCardFlag?.enabled) { - return ; + return ; } else { return ; // Baanx card } diff --git a/apps/ledger-live-desktop/static/i18n/en/app.json b/apps/ledger-live-desktop/static/i18n/en/app.json index 266ecad8cbaf..078e8fd0697e 100644 --- a/apps/ledger-live-desktop/static/i18n/en/app.json +++ b/apps/ledger-live-desktop/static/i18n/en/app.json @@ -860,6 +860,9 @@ "continue": "Continue" } }, + "card": { + "backToCard": "all cards" + }, "lend": { "title": "Lend crypto", "tabs": {