From 4a4be19f60dd4d272a028b8327849c62dfda6f73 Mon Sep 17 00:00:00 2001 From: Xharles Date: Wed, 10 Apr 2024 10:31:30 +0100 Subject: [PATCH 01/13] handle superfeed links in desktop app --- packages/frontend/src/App.tsx | 51 +++++++++++++------ .../frontend/src/api/hooks/useViewRoute.ts | 5 ++ packages/frontend/src/routes.ts | 15 ++++++ 3 files changed, 55 insertions(+), 16 deletions(-) diff --git a/packages/frontend/src/App.tsx b/packages/frontend/src/App.tsx index 2f908116c..8ee7e449b 100644 --- a/packages/frontend/src/App.tsx +++ b/packages/frontend/src/App.tsx @@ -4,7 +4,7 @@ import { IonApp, IonRouterOutlet } from "@ionic/react"; import { IonReactRouter } from "@ionic/react-router"; import { FetchBaseQueryError } from "@reduxjs/toolkit/dist/query"; import { Web3Modal } from "@web3modal/react"; -import { Route } from "react-router-dom"; +import { Redirect, Route } from "react-router-dom"; import * as userStore from "src/api/store/slices/user"; import ToastContainer from "src/containers/toasts/ToastContainer"; import { @@ -40,19 +40,25 @@ const AppRoutes = () => { }); const resolvedView = useResolvedView(); - const { pathContainsHashOrSlug, isRoot } = useViewRoute(); + const { pathContainsHashOrSlug, isRoot, isSuperfeed } = useViewRoute(); const errorCode = useMemo(() => { /** * At this moment, we do not support any other routes than the root and the hash/slug routes * If the path does not contain a hash or slug, we show the 404 error page */ - if (!pathContainsHashOrSlug && !isRoot) { + if (!pathContainsHashOrSlug && !isRoot && !isSuperfeed) { return 404; } const errorInfo = error ?? resolvedView.error; return errorInfo && getRtkErrorCode(errorInfo); - }, [error, resolvedView.error, pathContainsHashOrSlug, isRoot]); + }, [ + pathContainsHashOrSlug, + isRoot, + isSuperfeed, + error, + resolvedView.error, + ]); const routes = useMemo(() => { if (error || errorCode) { @@ -73,19 +79,32 @@ const AppRoutes = () => { return ( }> - {routes.map((route) => ( - ( - { + if (route.type === "redirect") { + return ( + - )} - /> - ))} + ); + } + return ( + ( + + )} + /> + ); + })} ); }; diff --git a/packages/frontend/src/api/hooks/useViewRoute.ts b/packages/frontend/src/api/hooks/useViewRoute.ts index 1277e86c8..e21709895 100644 --- a/packages/frontend/src/api/hooks/useViewRoute.ts +++ b/packages/frontend/src/api/hooks/useViewRoute.ts @@ -39,6 +39,10 @@ interface IViewRouteInfo { * true if the current path is root path */ isRoot: boolean; + /** + * true if the current path is superfeed path + */ + isSuperfeed: boolean; } export const useViewRoute = (): IViewRouteInfo => { @@ -117,6 +121,7 @@ export const useViewRoute = (): IViewRouteInfo => { isFullSize: fullSizeWidgetPath !== undefined, isViewHash, isRoot: location.pathname === "/", + isSuperfeed: location.pathname.includes("/superfeed"), }; }; diff --git a/packages/frontend/src/routes.ts b/packages/frontend/src/routes.ts index 6256ccc95..3fa650fa6 100644 --- a/packages/frontend/src/routes.ts +++ b/packages/frontend/src/routes.ts @@ -40,6 +40,8 @@ export interface IRoute { component: typeof ErrorPage | typeof PreloaderPage | typeof DashboardPage; exact?: boolean; isFullsize?: boolean; + redirectTo?: string; + type: string; } /** @@ -56,6 +58,7 @@ export enum EDesktopRoutePaths { Calendar = "/b/:slug/calendar", CalendarEvent = "/b/:slug/calendar/event/:eventId/:eventTitle", FallBack = "*", + Superfeed = "/superfeed", } /** @@ -63,27 +66,38 @@ export enum EDesktopRoutePaths { */ export const desktopRoutes: IRoute[] = [ { + type: "regular", path: EDesktopRoutePaths.Base, component: DashboardPage, exact: true, }, { + type: "regular", path: EDesktopRoutePaths.Boards, component: DashboardPage, exact: true, }, { + type: "regular", path: EDesktopRoutePaths.Calendar, component: DashboardPage, isFullsize: true, exact: true, }, { + type: "regular", path: EDesktopRoutePaths.CalendarEvent, component: DashboardPage, isFullsize: true, exact: true, }, + { + type: "redirect", + path: EDesktopRoutePaths.Superfeed, + redirectTo: EDesktopRoutePaths.Base, + component: DashboardPage, + exact: true, + }, ]; /** @@ -91,6 +105,7 @@ export const desktopRoutes: IRoute[] = [ */ export const errorRoutes: IRoute[] = [ { + type: "regular", path: EDesktopRoutePaths.FallBack, component: ErrorPage, }, From 3f5de975dcc2e34cdee9ab48e59e90979cd54c6a Mon Sep 17 00:00:00 2001 From: Xharles Date: Wed, 10 Apr 2024 13:24:05 +0100 Subject: [PATCH 02/13] map board routes to search tags --- packages/frontend/src/MobileApp.tsx | 13 ++----- packages/frontend/src/api/hooks/index.ts | 1 + .../src/api/hooks/useMobileRouteUpdater.ts | 39 +++++++++++++++++++ packages/frontend/src/routes.ts | 9 ++++- 4 files changed, 52 insertions(+), 10 deletions(-) create mode 100644 packages/frontend/src/api/hooks/useMobileRouteUpdater.ts diff --git a/packages/frontend/src/MobileApp.tsx b/packages/frontend/src/MobileApp.tsx index 1788687aa..a05cccd7f 100644 --- a/packages/frontend/src/MobileApp.tsx +++ b/packages/frontend/src/MobileApp.tsx @@ -7,11 +7,11 @@ import { IonTabs, } from "@ionic/react"; import { IonReactRouter } from "@ionic/react-router"; -import { Redirect, Route, useLocation } from "react-router-dom"; +import { Redirect, Route } from "react-router-dom"; import { ReactComponent as MarketsSVG } from "src/assets/svg/markets.svg"; import { ReactComponent as PortfolioSVG } from "src/assets/svg/portfolio.svg"; import { ReactComponent as SuperfeedSVG } from "src/assets/svg/superfeed.svg"; -import { useAuth } from "./api/hooks"; +import { useAuth, useMobileRouteUpdater } from "./api/hooks"; import CONFIG from "./config"; import ToastContainer from "./containers/toasts/ToastContainer"; import "@alphaday/ui-kit/global.scss"; @@ -41,14 +41,9 @@ const CustomNavTab: React.FC<{ ); const RouterChild = () => { - const { pathname } = useLocation(); const { isAuthenticated } = useAuth(); - const isTabBarHidden = !!mobileRoutes.find( - (route) => - route.type !== "fallback" && - route.path === pathname && - route?.hideTabBar - ); + const { isTabBarHidden } = useMobileRouteUpdater(); + return ( diff --git a/packages/frontend/src/api/hooks/index.ts b/packages/frontend/src/api/hooks/index.ts index 4baa7d830..4aa92917b 100644 --- a/packages/frontend/src/api/hooks/index.ts +++ b/packages/frontend/src/api/hooks/index.ts @@ -33,3 +33,4 @@ export * from "./useValueWatcher"; export * from "./useOnScreen"; export * from "./usePullToRefresh"; export * from "./useHistory"; +export * from "./useMobileRouteUpdater"; diff --git a/packages/frontend/src/api/hooks/useMobileRouteUpdater.ts b/packages/frontend/src/api/hooks/useMobileRouteUpdater.ts new file mode 100644 index 000000000..f516105d7 --- /dev/null +++ b/packages/frontend/src/api/hooks/useMobileRouteUpdater.ts @@ -0,0 +1,39 @@ +import { useHistory, useLocation } from "react-router"; +import { mobileRoutes } from "src/routes"; +import { TKeyword } from "../types"; +import { useResolvedView } from "./useResolvedView"; +import { useViewRoute } from "./useViewRoute"; + +interface IMobileRouteInfo { + isTabBarHidden: boolean; + isBoardRoute: boolean; +} + +export const useMobileRouteUpdater = (): IMobileRouteInfo => { + const history = useHistory(); + const { pathname } = useLocation(); + const { pathContainsHashOrSlug } = useViewRoute(); + const isTabBarHidden = !!mobileRoutes.find( + (route) => + route.type !== "fallback" && + route.path === pathname && + route?.hideTabBar + ); + const resolvedView = useResolvedView(); + + if (resolvedView.currentData !== undefined) { + const { keywords } = resolvedView.currentData; + const searchSlugs = keywords.map((kw: TKeyword) => kw.tag.slug); + + const newRoute = `/superfeed/search/${[...new Set(searchSlugs)].join(",")}`; + + if (pathContainsHashOrSlug && pathname !== newRoute) { + history.push(newRoute); + } + } + + return { + isTabBarHidden, + isBoardRoute: pathContainsHashOrSlug, + }; +}; diff --git a/packages/frontend/src/routes.ts b/packages/frontend/src/routes.ts index 3fa650fa6..167f63f62 100644 --- a/packages/frontend/src/routes.ts +++ b/packages/frontend/src/routes.ts @@ -41,7 +41,7 @@ export interface IRoute { exact?: boolean; isFullsize?: boolean; redirectTo?: string; - type: string; + type: "regular" | "redirect"; } /** @@ -125,6 +125,7 @@ export enum EMobileTabRoutePaths { export enum EMobileRoutePaths { Base = BASE_TABS_ROUTE, + Boards = `${BASE_TABS_ROUTE}b/:slug`, Superfeed = `${BASE_TABS_ROUTE}superfeed`, Search = `${BASE_TABS_ROUTE}superfeed/search/:tags`, UserSettings = `${BASE_TABS_ROUTE}superfeed/user-settings`, @@ -175,6 +176,12 @@ export const mobileRoutes: TMobileRoute[] = [ exact: true, type: "regular", }, + { + path: EMobileRoutePaths.Boards, + component: SuperfeedPage, + exact: true, + type: "regular", + }, { path: EMobileRoutePaths.Search, component: SuperfeedPage, From 776b03ae6139442b274a44398ad0dff949997e43 Mon Sep 17 00:00:00 2001 From: Xharles Date: Tue, 16 Apr 2024 11:06:26 +0100 Subject: [PATCH 03/13] replace redefinition of desktop route --- packages/frontend/src/routes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/frontend/src/routes.ts b/packages/frontend/src/routes.ts index 167f63f62..a9af83786 100644 --- a/packages/frontend/src/routes.ts +++ b/packages/frontend/src/routes.ts @@ -125,7 +125,7 @@ export enum EMobileTabRoutePaths { export enum EMobileRoutePaths { Base = BASE_TABS_ROUTE, - Boards = `${BASE_TABS_ROUTE}b/:slug`, + Boards = EDesktopRoutePaths.Boards, Superfeed = `${BASE_TABS_ROUTE}superfeed`, Search = `${BASE_TABS_ROUTE}superfeed/search/:tags`, UserSettings = `${BASE_TABS_ROUTE}superfeed/user-settings`, From 632c6e741a0aacda271c05b415a51bdd7496e828 Mon Sep 17 00:00:00 2001 From: Xharles Date: Tue, 16 Apr 2024 12:20:38 +0100 Subject: [PATCH 04/13] remove useMobile updater --- packages/frontend/src/api/hooks/index.ts | 1 - .../src/api/hooks/useMobileRouteUpdater.ts | 39 ------------------- 2 files changed, 40 deletions(-) delete mode 100644 packages/frontend/src/api/hooks/useMobileRouteUpdater.ts diff --git a/packages/frontend/src/api/hooks/index.ts b/packages/frontend/src/api/hooks/index.ts index 4aa92917b..4baa7d830 100644 --- a/packages/frontend/src/api/hooks/index.ts +++ b/packages/frontend/src/api/hooks/index.ts @@ -33,4 +33,3 @@ export * from "./useValueWatcher"; export * from "./useOnScreen"; export * from "./usePullToRefresh"; export * from "./useHistory"; -export * from "./useMobileRouteUpdater"; diff --git a/packages/frontend/src/api/hooks/useMobileRouteUpdater.ts b/packages/frontend/src/api/hooks/useMobileRouteUpdater.ts deleted file mode 100644 index f516105d7..000000000 --- a/packages/frontend/src/api/hooks/useMobileRouteUpdater.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { useHistory, useLocation } from "react-router"; -import { mobileRoutes } from "src/routes"; -import { TKeyword } from "../types"; -import { useResolvedView } from "./useResolvedView"; -import { useViewRoute } from "./useViewRoute"; - -interface IMobileRouteInfo { - isTabBarHidden: boolean; - isBoardRoute: boolean; -} - -export const useMobileRouteUpdater = (): IMobileRouteInfo => { - const history = useHistory(); - const { pathname } = useLocation(); - const { pathContainsHashOrSlug } = useViewRoute(); - const isTabBarHidden = !!mobileRoutes.find( - (route) => - route.type !== "fallback" && - route.path === pathname && - route?.hideTabBar - ); - const resolvedView = useResolvedView(); - - if (resolvedView.currentData !== undefined) { - const { keywords } = resolvedView.currentData; - const searchSlugs = keywords.map((kw: TKeyword) => kw.tag.slug); - - const newRoute = `/superfeed/search/${[...new Set(searchSlugs)].join(",")}`; - - if (pathContainsHashOrSlug && pathname !== newRoute) { - history.push(newRoute); - } - } - - return { - isTabBarHidden, - isBoardRoute: pathContainsHashOrSlug, - }; -}; From 2d2abc4b296ac6e69eaf4f10e7d1dd76194ab09c Mon Sep 17 00:00:00 2001 From: Xharles Date: Tue, 16 Apr 2024 12:21:00 +0100 Subject: [PATCH 05/13] create board slug map --- packages/frontend/src/config/boards.ts | 92 ++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 packages/frontend/src/config/boards.ts diff --git a/packages/frontend/src/config/boards.ts b/packages/frontend/src/config/boards.ts new file mode 100644 index 000000000..759ec39ac --- /dev/null +++ b/packages/frontend/src/config/boards.ts @@ -0,0 +1,92 @@ +const BOARDS_CONFIG = { + BOARD_SLUG_MAP: { + aave: ["aave"], + ai: [ + "bittensor", + "fetch-ai", + "ocean-protocol", + "singularitynet", + "chaingpt", + "arkham", + "phala-network", + "oasis", + "iexec-rlc", + "render", + "ai", + ], + alchemix: ["alchemix"], + alpha: [], + aptos: ["aptos"], + arbitrum: ["arbitrum", "offchain-labs"], + avalanche: ["avalanche"], + bankless: ["bankless"], + base: ["base", "coinbase"], + beginner: [], + bitcoin: ["bitcoin"], + canto: ["canto"], + celestia: ["celestia"], + chiliz: ["chiliz"], + dfinity: ["dfinity", "internet-computer"], + eigenlayer: ["eigenlayer"], + eos: ["eos"], + ethereumclassic: ["ethereumclassic"], + ethereum: ["ethereum", "ethereum-research-forum"], + functionx: ["function-x"], + gamefi: [ + "gamefi", + "blockchain-gaming", + "the-sandbox", + "decentraland", + "ronin", + "immutablex", + ], + impossible: ["impossible-finance"], + injective: ["injective"], + kyber: ["kyber-network", "kyberswap"], + linea: ["linea"], + liquidstaking: [ + "liquid-staking", + "lido", + "rocket-pool", + "frax", + "eigenlayer", + "coinbase-wrapped-staked-eth", + "swell", + "ankr", + "ethereum", + "swell-ethereum", + ], + manta: ["manta-network"], + metis: ["metis", "metisdao"], + mina: ["mina", "mina-protocol"], + moonbeam: ["moonbeam"], + nft: ["nft"], + oceanprotocol: ["ocean-protocol"], + optimism: ["optimism"], + orbs: ["orbs"], + ordinals: ["ordinals"], + rocketpool: ["rocket-pool"], + scroll: ["scroll"], + shefi: ["shefi"], + sia: ["siacoin"], + solana: ["solana"], + starknet: ["starknet"], + thegraph: ["the-graph"], + trading: ["market", "trading-video", "economic-calendar"], + verasity: ["verasity", "verasity-source"], + vitalikbuterin: ["vitalki-buterin"], + wax: ["wax"], + zcash: [ + "zcash-newsletter", + "electric-coin", + "zcash", + "the-ambassadors-reception", + "the-zf-a-v-club", + "zcash-brasil", + "zechub", + ], + zksync: ["zksync", "zksync-era"], + }, +}; + +export default BOARDS_CONFIG; From 2d173ed04d4680d9cd1a997b6a416b95bb898ee3 Mon Sep 17 00:00:00 2001 From: Xharles Date: Tue, 16 Apr 2024 12:21:55 +0100 Subject: [PATCH 06/13] redirect board routes to respective search routes --- packages/frontend/src/MobileApp.tsx | 39 +++++++++++++++++++++++--- packages/frontend/src/config/config.ts | 2 ++ 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/packages/frontend/src/MobileApp.tsx b/packages/frontend/src/MobileApp.tsx index a05cccd7f..33494c221 100644 --- a/packages/frontend/src/MobileApp.tsx +++ b/packages/frontend/src/MobileApp.tsx @@ -7,11 +7,11 @@ import { IonTabs, } from "@ionic/react"; import { IonReactRouter } from "@ionic/react-router"; -import { Redirect, Route } from "react-router-dom"; +import { Redirect, Route, useHistory, useLocation } from "react-router-dom"; import { ReactComponent as MarketsSVG } from "src/assets/svg/markets.svg"; import { ReactComponent as PortfolioSVG } from "src/assets/svg/portfolio.svg"; import { ReactComponent as SuperfeedSVG } from "src/assets/svg/superfeed.svg"; -import { useAuth, useMobileRouteUpdater } from "./api/hooks"; +import { useAuth, useViewRoute } from "./api/hooks"; import CONFIG from "./config"; import ToastContainer from "./containers/toasts/ToastContainer"; import "@alphaday/ui-kit/global.scss"; @@ -22,7 +22,24 @@ import { mobileRoutes, } from "./routes"; -const { IS_DEV } = CONFIG; +const { IS_DEV, BOARDS } = CONFIG; + +const BoardRoutesHandler = ( + pathname: string, + callback: (path: string) => void +) => { + if (pathname in BOARDS.BOARD_SLUG_MAP) { + const searchSlugs = + BOARDS.BOARD_SLUG_MAP[ + pathname as keyof typeof BOARDS.BOARD_SLUG_MAP + ]; + const newRoute = `/superfeed/search/${[...new Set(searchSlugs)].join(",")}`; + + if (pathname !== newRoute) { + callback(newRoute); + } + } +}; const CustomNavTab: React.FC<{ label: string; @@ -41,8 +58,22 @@ const CustomNavTab: React.FC<{ ); const RouterChild = () => { + const { pathname } = useLocation(); + const history = useHistory(); + const { pathContainsHashOrSlug, routeInfo } = useViewRoute(); + const { isAuthenticated } = useAuth(); - const { isTabBarHidden } = useMobileRouteUpdater(); + const isTabBarHidden = !!mobileRoutes.find( + (route) => + route.type !== "fallback" && + route.path === pathname && + route?.hideTabBar + ); + + if (pathContainsHashOrSlug && routeInfo?.value) { + const navigate = (str: string) => history.push(str); + BoardRoutesHandler(routeInfo?.value, navigate); + } return ( diff --git a/packages/frontend/src/config/config.ts b/packages/frontend/src/config/config.ts index 5aff7c34b..e23a53234 100644 --- a/packages/frontend/src/config/config.ts +++ b/packages/frontend/src/config/config.ts @@ -1,4 +1,5 @@ import API_CONFIG from "./backend"; +import BOARDS_CONFIG from "./boards"; import FIREBASE_CONFIG from "./firebase"; import NUMBERS from "./numbers"; import ROUTING_CONFIG from "./routing"; @@ -81,6 +82,7 @@ const CONFIG = { IS_PROD, LOGLEVEL, API: API_CONFIG, + BOARDS: BOARDS_CONFIG, ROUTING: ROUTING_CONFIG, UI: UI_CONFIG, WIDGETS: WIDGETS_CONFIG, From 4bfc8784e8888b200c7f02fae3e4e7ad770bb421 Mon Sep 17 00:00:00 2001 From: Xharles Date: Tue, 16 Apr 2024 16:03:58 +0100 Subject: [PATCH 07/13] remove possible infinite loop --- packages/frontend/src/App.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/frontend/src/App.tsx b/packages/frontend/src/App.tsx index 8ee7e449b..8405f989a 100644 --- a/packages/frontend/src/App.tsx +++ b/packages/frontend/src/App.tsx @@ -21,7 +21,7 @@ import { getRtkErrorCode } from "./api/utils/errorHandling"; import { Logger } from "./api/utils/logging"; import CONFIG from "./config/config"; import PreloaderPage from "./pages/preloader"; -import { desktopRoutes, errorRoutes } from "./routes"; +import { EDesktopRoutePaths, desktopRoutes, errorRoutes } from "./routes"; import "@alphaday/ui-kit/global.scss"; const landingPage = CONFIG.SEO.DOMAIN; @@ -86,7 +86,7 @@ const AppRoutes = () => { key={route.path} path={route.path} exact={route.exact} - to={route.redirectTo ?? route.path} + to={route.redirectTo ?? EDesktopRoutePaths.Base} push /> ); From 208cf02c4101cac75d53f4a160c164e128797bd6 Mon Sep 17 00:00:00 2001 From: Xharles Date: Wed, 17 Apr 2024 12:12:34 +0100 Subject: [PATCH 08/13] use correct board slug --- packages/frontend/src/config/boards.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/frontend/src/config/boards.ts b/packages/frontend/src/config/boards.ts index 759ec39ac..78eaca5ab 100644 --- a/packages/frontend/src/config/boards.ts +++ b/packages/frontend/src/config/boards.ts @@ -74,7 +74,7 @@ const BOARDS_CONFIG = { thegraph: ["the-graph"], trading: ["market", "trading-video", "economic-calendar"], verasity: ["verasity", "verasity-source"], - vitalikbuterin: ["vitalki-buterin"], + vitalikbuterin: ["vitalik-buterin"], wax: ["wax"], zcash: [ "zcash-newsletter", From 868b1a8cfa71e504fabc00c9c4efed60c15a7909 Mon Sep 17 00:00:00 2001 From: Xharles Date: Wed, 17 Apr 2024 12:25:41 +0100 Subject: [PATCH 09/13] redefine interface so some types are not optional --- packages/frontend/src/routes.ts | 34 +++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/packages/frontend/src/routes.ts b/packages/frontend/src/routes.ts index a9af83786..21f8741c3 100644 --- a/packages/frontend/src/routes.ts +++ b/packages/frontend/src/routes.ts @@ -35,14 +35,28 @@ const PortfolioHoldingsPage = lazyRetry( * * It defines the path and the page to be rendered. */ -export interface IRoute { - path: EDesktopRoutePaths; - component: typeof ErrorPage | typeof PreloaderPage | typeof DashboardPage; - exact?: boolean; - isFullsize?: boolean; - redirectTo?: string; - type: "regular" | "redirect"; -} +export type TRoute = + | { + path: EDesktopRoutePaths; + component: + | typeof ErrorPage + | typeof PreloaderPage + | typeof DashboardPage; + exact?: boolean; + isFullsize?: boolean; + type: "regular"; + } + | { + path: EDesktopRoutePaths; + component: + | typeof ErrorPage + | typeof PreloaderPage + | typeof DashboardPage; + exact?: boolean; + isFullsize?: boolean; + redirectTo: string; + type: "redirect"; + }; /** * Enum of all routes in the desktop app. @@ -64,7 +78,7 @@ export enum EDesktopRoutePaths { /** * An array of all valid routes in the desktop app. */ -export const desktopRoutes: IRoute[] = [ +export const desktopRoutes: TRoute[] = [ { type: "regular", path: EDesktopRoutePaths.Base, @@ -103,7 +117,7 @@ export const desktopRoutes: IRoute[] = [ /** * An array of invalid routes in the desktop app. */ -export const errorRoutes: IRoute[] = [ +export const errorRoutes: TRoute[] = [ { type: "regular", path: EDesktopRoutePaths.FallBack, From b1ad0b7f85b49f5b9fd276472d820e1538dfb3cf Mon Sep 17 00:00:00 2001 From: Xharles Date: Wed, 17 Apr 2024 12:27:36 +0100 Subject: [PATCH 10/13] remove undefined catch --- packages/frontend/src/App.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/frontend/src/App.tsx b/packages/frontend/src/App.tsx index 8405f989a..52339fe98 100644 --- a/packages/frontend/src/App.tsx +++ b/packages/frontend/src/App.tsx @@ -21,7 +21,7 @@ import { getRtkErrorCode } from "./api/utils/errorHandling"; import { Logger } from "./api/utils/logging"; import CONFIG from "./config/config"; import PreloaderPage from "./pages/preloader"; -import { EDesktopRoutePaths, desktopRoutes, errorRoutes } from "./routes"; +import { desktopRoutes, errorRoutes } from "./routes"; import "@alphaday/ui-kit/global.scss"; const landingPage = CONFIG.SEO.DOMAIN; @@ -86,7 +86,7 @@ const AppRoutes = () => { key={route.path} path={route.path} exact={route.exact} - to={route.redirectTo ?? EDesktopRoutePaths.Base} + to={route.redirectTo} push /> ); From 53e96b85c06fe8fac9c7f8c004b62e0c2c40f4e2 Mon Sep 17 00:00:00 2001 From: Xharles Date: Wed, 17 Apr 2024 12:36:24 +0100 Subject: [PATCH 11/13] redirect undefined board routes to superfeed --- packages/frontend/src/MobileApp.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/frontend/src/MobileApp.tsx b/packages/frontend/src/MobileApp.tsx index 33494c221..126da1d17 100644 --- a/packages/frontend/src/MobileApp.tsx +++ b/packages/frontend/src/MobileApp.tsx @@ -24,7 +24,7 @@ import { const { IS_DEV, BOARDS } = CONFIG; -const BoardRoutesHandler = ( +const boardRoutesHandler = ( pathname: string, callback: (path: string) => void ) => { @@ -38,6 +38,8 @@ const BoardRoutesHandler = ( if (pathname !== newRoute) { callback(newRoute); } + } else { + callback(EMobileRoutePaths.Base); } }; @@ -72,7 +74,7 @@ const RouterChild = () => { if (pathContainsHashOrSlug && routeInfo?.value) { const navigate = (str: string) => history.push(str); - BoardRoutesHandler(routeInfo?.value, navigate); + boardRoutesHandler(routeInfo?.value, navigate); } return ( From 438a9b0abdaee3ff1fe5cd91d4ad9fc21ee8c3ac Mon Sep 17 00:00:00 2001 From: Xharles Date: Wed, 17 Apr 2024 16:28:51 +0100 Subject: [PATCH 12/13] use unique key --- packages/frontend/src/MobileApp.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/frontend/src/MobileApp.tsx b/packages/frontend/src/MobileApp.tsx index 126da1d17..91b39f758 100644 --- a/packages/frontend/src/MobileApp.tsx +++ b/packages/frontend/src/MobileApp.tsx @@ -95,7 +95,7 @@ const RouterChild = () => { if (route.type === "fallback") { return ( From 45a742001921876633306765e7f40ae5aecc7b93 Mon Sep 17 00:00:00 2001 From: Xharles Date: Wed, 17 Apr 2024 16:29:09 +0100 Subject: [PATCH 13/13] return null when redirecting --- packages/frontend/src/MobileApp.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/frontend/src/MobileApp.tsx b/packages/frontend/src/MobileApp.tsx index 91b39f758..b828718be 100644 --- a/packages/frontend/src/MobileApp.tsx +++ b/packages/frontend/src/MobileApp.tsx @@ -74,7 +74,9 @@ const RouterChild = () => { if (pathContainsHashOrSlug && routeInfo?.value) { const navigate = (str: string) => history.push(str); - boardRoutesHandler(routeInfo?.value, navigate); + boardRoutesHandler(routeInfo.value, navigate); + + return null; } return (