From f418efcd9c8970ca4e88ee0f04a4f1abf81f090f Mon Sep 17 00:00:00 2001 From: Innei Date: Sun, 24 Nov 2024 17:27:29 +0800 Subject: [PATCH] chore: upgrade to router v7 Signed-off-by: Innei --- apps/renderer/package.json | 2 +- apps/renderer/src/App.tsx | 2 +- .../src/components/common/ErrorElement.tsx | 2 +- .../src/components/common/NotFound.tsx | 4 +-- .../FeedFoundCanBeFollowErrorFallback.tsx | 2 +- .../src/components/errors/FeedNotFound.tsx | 2 +- apps/renderer/src/components/errors/helper.ts | 2 +- .../errors/previews/FeedPreview.tsx | 2 +- .../components/ui/modal/inspire/PeekModal.tsx | 2 +- apps/renderer/src/hooks/biz/useRouteParams.ts | 4 +-- apps/renderer/src/initialize/sentry.ts | 7 +---- apps/renderer/src/main.tsx | 2 +- .../app-layout/entry-column/desktop.tsx | 2 +- .../modules/app-layout/entry-column/index.tsx | 2 +- .../app-layout/entry-content/desktop.tsx | 2 +- .../app-layout/feed-column/desktop.tsx | 2 +- .../app-layout/feed-column/index.mobile.tsx | 2 +- .../modules/app-layout/feed-column/mobile.tsx | 2 +- .../app-layout/subview/index.desktop.tsx | 2 +- .../app-layout/subview/index.mobile.tsx | 2 +- .../src/modules/feed-column/header.tsx | 2 +- .../src/modules/feed-column/list.shared.tsx | 2 +- apps/renderer/src/modules/settings/title.tsx | 2 +- .../renderer/src/modules/user/LoginButton.tsx | 2 +- .../modules/user/ProfileButton.desktop.tsx | 2 +- .../src/modules/user/ProfileButton.mobile.tsx | 2 +- .../renderer/src/modules/wallet/tip-modal.tsx | 2 +- apps/renderer/src/pages/(external)/layout.tsx | 2 +- apps/renderer/src/pages/(external)/login.tsx | 2 +- .../(layer)/(subview)/discover/index.tsx | 2 +- .../(main)/(layer)/feeds/[feedId]/index.tsx | 2 +- apps/renderer/src/pages/(main)/index.tsx | 2 +- apps/renderer/src/pages/add/index.tsx | 2 +- apps/renderer/src/pages/settings/layout.tsx | 2 +- .../providers/external-jump-in-provider.tsx | 2 +- apps/renderer/src/queries/wallet.tsx | 2 +- apps/renderer/src/router.tsx | 2 +- apps/renderer/src/router.web.tsx | 2 +- apps/server/client/App.tsx | 2 +- .../client/components/common/NotFound.tsx | 2 +- apps/server/client/index.tsx | 3 +-- apps/server/client/pages/(login)/layout.tsx | 2 +- apps/server/client/pages/(login)/login.tsx | 2 +- apps/server/client/pages/(main)/layout.tsx | 2 +- .../pages/(main)/share/feeds/[id]/index.tsx | 2 +- .../client/pages/(main)/share/layout.tsx | 2 +- .../pages/(main)/share/lists/[id]/index.tsx | 2 +- .../pages/(main)/share/users/[id]/index.tsx | 2 +- apps/server/client/router.tsx | 2 +- apps/server/package.json | 2 +- packages/components/src/atoms/route.ts | 2 +- .../src/providers/stable-router-provider.tsx | 4 +-- packages/utils/src/route-builder.ts | 2 +- pnpm-lock.yaml | 26 +++---------------- vite.config.ts | 2 +- 55 files changed, 60 insertions(+), 86 deletions(-) diff --git a/apps/renderer/package.json b/apps/renderer/package.json index 1b85a1a84..6d16b17fa 100644 --- a/apps/renderer/package.json +++ b/apps/renderer/package.json @@ -85,7 +85,7 @@ "react-intersection-observer": "9.13.1", "react-ios-pwa-prompt": "^2.0.6", "react-resizable-layout": "npm:@innei/react-resizable-layout@0.7.3-fork.1", - "react-router-dom": "7.0.1", + "react-router": "7.0.1", "react-selecto": "^1.26.3", "react-shadow": "20.5.0", "react-virtuoso": "4.12.2", diff --git a/apps/renderer/src/App.tsx b/apps/renderer/src/App.tsx index abfc9e6d5..51b4e9edc 100644 --- a/apps/renderer/src/App.tsx +++ b/apps/renderer/src/App.tsx @@ -2,7 +2,7 @@ import { isMobile } from "@follow/components/hooks/useMobile.js" import { IN_ELECTRON } from "@follow/shared/constants" import { cn, getOS } from "@follow/utils/utils" import { useEffect } from "react" -import { Outlet } from "react-router-dom" +import { Outlet } from "react-router" import { queryClient } from "~/lib/query-client" diff --git a/apps/renderer/src/components/common/ErrorElement.tsx b/apps/renderer/src/components/common/ErrorElement.tsx index 710bfe713..30ec8b5b0 100644 --- a/apps/renderer/src/components/common/ErrorElement.tsx +++ b/apps/renderer/src/components/common/ErrorElement.tsx @@ -1,7 +1,7 @@ import { Button } from "@follow/components/ui/button/index.js" import { captureException } from "@sentry/react" import { useEffect, useRef } from "react" -import { isRouteErrorResponse, useNavigate, useRouteError } from "react-router-dom" +import { isRouteErrorResponse, useNavigate, useRouteError } from "react-router" import { toast } from "sonner" import { removeAppSkeleton } from "~/lib/app" diff --git a/apps/renderer/src/components/common/NotFound.tsx b/apps/renderer/src/components/common/NotFound.tsx index 0f1c24ed8..03792e7ab 100644 --- a/apps/renderer/src/components/common/NotFound.tsx +++ b/apps/renderer/src/components/common/NotFound.tsx @@ -2,8 +2,8 @@ import { Logo } from "@follow/components/icons/logo.jsx" import { Button } from "@follow/components/ui/button/index.js" import { captureException } from "@sentry/react" import { useEffect } from "react" -import type { Location } from "react-router-dom" -import { useLocation, useNavigate } from "react-router-dom" +import type { Location } from "react-router" +import { useLocation, useNavigate } from "react-router" import { isElectronBuild } from "~/constants" import { removeAppSkeleton } from "~/lib/app" diff --git a/apps/renderer/src/components/errors/FeedFoundCanBeFollowErrorFallback.tsx b/apps/renderer/src/components/errors/FeedFoundCanBeFollowErrorFallback.tsx index 61caed69d..5ff2d3321 100644 --- a/apps/renderer/src/components/errors/FeedFoundCanBeFollowErrorFallback.tsx +++ b/apps/renderer/src/components/errors/FeedFoundCanBeFollowErrorFallback.tsx @@ -2,7 +2,7 @@ import { Button } from "@follow/components/ui/button/index.js" import type { FeedModel } from "@follow/models/types" import { nextFrame } from "@follow/utils/dom" import type { FC } from "react" -import { useNavigate } from "react-router-dom" +import { useNavigate } from "react-router" import { getSidebarActiveView } from "~/atoms/sidebar" import { getRouteParams } from "~/hooks/biz/useRouteParams" diff --git a/apps/renderer/src/components/errors/FeedNotFound.tsx b/apps/renderer/src/components/errors/FeedNotFound.tsx index d572f7288..67ba5ba9b 100644 --- a/apps/renderer/src/components/errors/FeedNotFound.tsx +++ b/apps/renderer/src/components/errors/FeedNotFound.tsx @@ -1,7 +1,7 @@ import { Logo } from "@follow/components/icons/logo.jsx" import { Button } from "@follow/components/ui/button/index.js" import type { FC } from "react" -import { useNavigate } from "react-router-dom" +import { useNavigate } from "react-router" import { CustomSafeError } from "../../errors/CustomSafeError" import type { AppErrorFallbackProps } from "../common/AppErrorBoundary" diff --git a/apps/renderer/src/components/errors/helper.ts b/apps/renderer/src/components/errors/helper.ts index b80fbe894..661007533 100644 --- a/apps/renderer/src/components/errors/helper.ts +++ b/apps/renderer/src/components/errors/helper.ts @@ -1,6 +1,6 @@ import type { FC } from "react" import { createElement, useEffect, useRef } from "react" -import { useLocation } from "react-router-dom" +import { useLocation } from "react-router" import type { AppErrorFallbackProps } from "../common/AppErrorBoundary" diff --git a/apps/renderer/src/components/errors/previews/FeedPreview.tsx b/apps/renderer/src/components/errors/previews/FeedPreview.tsx index 8c4fa2696..db2486361 100644 --- a/apps/renderer/src/components/errors/previews/FeedPreview.tsx +++ b/apps/renderer/src/components/errors/previews/FeedPreview.tsx @@ -5,7 +5,7 @@ import type { FeedModel } from "@follow/models/types" import { cn } from "@follow/utils/utils" import type { FC } from "react" import { useTranslation } from "react-i18next" -import { useSearchParams } from "react-router-dom" +import { useSearchParams } from "react-router" import { getItemComponentByView } from "~/modules/entry-column/Items" import type { UniversalItemProps } from "~/modules/entry-column/types" diff --git a/apps/renderer/src/components/ui/modal/inspire/PeekModal.tsx b/apps/renderer/src/components/ui/modal/inspire/PeekModal.tsx index 240cd8759..80338f90c 100644 --- a/apps/renderer/src/components/ui/modal/inspire/PeekModal.tsx +++ b/apps/renderer/src/components/ui/modal/inspire/PeekModal.tsx @@ -2,7 +2,7 @@ import { Tooltip, TooltipContent, TooltipTrigger } from "@follow/components/ui/t import type { PropsWithChildren } from "react" import { createContext, useContext } from "react" import { useTranslation } from "react-i18next" -import { Link } from "react-router-dom" +import { Link } from "react-router" import { m } from "~/components/common/Motion" diff --git a/apps/renderer/src/hooks/biz/useRouteParams.ts b/apps/renderer/src/hooks/biz/useRouteParams.ts index 7f70834df..fbace71f1 100644 --- a/apps/renderer/src/hooks/biz/useRouteParams.ts +++ b/apps/renderer/src/hooks/biz/useRouteParams.ts @@ -1,7 +1,7 @@ import { getReadonlyRoute, useReadonlyRouteSelector } from "@follow/components/atoms/route.js" import { FeedViewType } from "@follow/constants" -import type { Params } from "react-router-dom" -import { useParams, useSearchParams } from "react-router-dom" +import type { Params } from "react-router" +import { useParams, useSearchParams } from "react-router" import { FEED_COLLECTION_LIST, diff --git a/apps/renderer/src/initialize/sentry.ts b/apps/renderer/src/initialize/sentry.ts index 081a923fd..de594afac 100644 --- a/apps/renderer/src/initialize/sentry.ts +++ b/apps/renderer/src/initialize/sentry.ts @@ -3,12 +3,7 @@ import { appSessionTraceId } from "@follow/utils/environment" import { version } from "@pkg" import { nanoid } from "nanoid" import { useEffect } from "react" -import { - createRoutesFromChildren, - matchRoutes, - useLocation, - useNavigationType, -} from "react-router-dom" +import { createRoutesFromChildren, matchRoutes, useLocation, useNavigationType } from "react-router" import { whoami } from "~/atoms/user" diff --git a/apps/renderer/src/main.tsx b/apps/renderer/src/main.tsx index 1315f223a..7beea1e35 100644 --- a/apps/renderer/src/main.tsx +++ b/apps/renderer/src/main.tsx @@ -7,7 +7,7 @@ import { getOS } from "@follow/utils/utils" import { ClickToComponent } from "click-to-react-component" import * as React from "react" import ReactDOM from "react-dom/client" -import { RouterProvider } from "react-router-dom" +import { RouterProvider } from "react-router/dom" import { setAppIsReady } from "./atoms/app" import { ElECTRON_CUSTOM_TITLEBAR_HEIGHT } from "./constants" diff --git a/apps/renderer/src/modules/app-layout/entry-column/desktop.tsx b/apps/renderer/src/modules/app-layout/entry-column/desktop.tsx index 1e29e6ed6..bb08b4131 100644 --- a/apps/renderer/src/modules/app-layout/entry-column/desktop.tsx +++ b/apps/renderer/src/modules/app-layout/entry-column/desktop.tsx @@ -3,7 +3,7 @@ import { views } from "@follow/constants" import { cn, isSafari } from "@follow/utils/utils" import { useMemo, useRef } from "react" import { useResizable } from "react-resizable-layout" -import { Outlet } from "react-router-dom" +import { Outlet } from "react-router" import { getUISettings, diff --git a/apps/renderer/src/modules/app-layout/entry-column/index.tsx b/apps/renderer/src/modules/app-layout/entry-column/index.tsx index 62d713351..d456f2582 100644 --- a/apps/renderer/src/modules/app-layout/entry-column/index.tsx +++ b/apps/renderer/src/modules/app-layout/entry-column/index.tsx @@ -1,5 +1,5 @@ import { withResponsiveComponent } from "@follow/components/utils/selector.js" -import { Outlet } from "react-router-dom" +import { Outlet } from "react-router" const noop = () => Promise.resolve({ diff --git a/apps/renderer/src/modules/app-layout/entry-content/desktop.tsx b/apps/renderer/src/modules/app-layout/entry-content/desktop.tsx index 1011ef348..d8032444d 100644 --- a/apps/renderer/src/modules/app-layout/entry-content/desktop.tsx +++ b/apps/renderer/src/modules/app-layout/entry-content/desktop.tsx @@ -5,7 +5,7 @@ import { easeOut } from "framer-motion" import type { FC, PropsWithChildren } from "react" import { useState } from "react" import { useHotkeys } from "react-hotkeys-hook" -import { useParams } from "react-router-dom" +import { useParams } from "react-router" import { useRealInWideMode } from "~/atoms/settings/ui" import { useFeedColumnShow, useFeedColumnTempShow } from "~/atoms/sidebar" diff --git a/apps/renderer/src/modules/app-layout/feed-column/desktop.tsx b/apps/renderer/src/modules/app-layout/feed-column/desktop.tsx index 8071c8794..d257e89d1 100644 --- a/apps/renderer/src/modules/app-layout/feed-column/desktop.tsx +++ b/apps/renderer/src/modules/app-layout/feed-column/desktop.tsx @@ -15,7 +15,7 @@ import { forwardRef, lazy, Suspense, useEffect, useRef, useState } from "react" import { useHotkeys } from "react-hotkeys-hook" import { Trans } from "react-i18next" import { useResizable } from "react-resizable-layout" -import { Outlet } from "react-router-dom" +import { Outlet } from "react-router" import { setMainContainerElement, setRootContainerElement } from "~/atoms/dom" import { getIsZenMode, getUISettings, setUISetting, useUISettingKey } from "~/atoms/settings/ui" diff --git a/apps/renderer/src/modules/app-layout/feed-column/index.mobile.tsx b/apps/renderer/src/modules/app-layout/feed-column/index.mobile.tsx index 1034bc32d..75cd995bd 100644 --- a/apps/renderer/src/modules/app-layout/feed-column/index.mobile.tsx +++ b/apps/renderer/src/modules/app-layout/feed-column/index.mobile.tsx @@ -1,4 +1,4 @@ -import { Outlet } from "react-router-dom" +import { Outlet } from "react-router" import { useDailyTask } from "~/hooks/biz/useDailyTask" diff --git a/apps/renderer/src/modules/app-layout/feed-column/mobile.tsx b/apps/renderer/src/modules/app-layout/feed-column/mobile.tsx index d41986bf3..1717bbb20 100644 --- a/apps/renderer/src/modules/app-layout/feed-column/mobile.tsx +++ b/apps/renderer/src/modules/app-layout/feed-column/mobile.tsx @@ -8,7 +8,7 @@ import useEmblaCarousel from "embla-carousel-react" import type { FC } from "react" import { useEffect, useLayoutEffect, useState } from "react" import { useTranslation } from "react-i18next" -import { Link } from "react-router-dom" +import { Link } from "react-router" import { useSetSidebarActiveView, useSidebarActiveView } from "~/atoms/sidebar" import { useLoginModalShow, useWhoami } from "~/atoms/user" diff --git a/apps/renderer/src/modules/app-layout/subview/index.desktop.tsx b/apps/renderer/src/modules/app-layout/subview/index.desktop.tsx index cff715b62..5a3475c0a 100644 --- a/apps/renderer/src/modules/app-layout/subview/index.desktop.tsx +++ b/apps/renderer/src/modules/app-layout/subview/index.desktop.tsx @@ -5,7 +5,7 @@ import { springScrollTo } from "@follow/utils/scroller" import { cn, getOS } from "@follow/utils/utils" import { useEffect, useRef, useState } from "react" import { useTranslation } from "react-i18next" -import { Outlet, useNavigate } from "react-router-dom" +import { Outlet, useNavigate } from "react-router" import { getSidebarActiveView, setSidebarActiveView } from "~/atoms/sidebar" import { FABContainer, FABPortable } from "~/components/ui/fab" diff --git a/apps/renderer/src/modules/app-layout/subview/index.mobile.tsx b/apps/renderer/src/modules/app-layout/subview/index.mobile.tsx index f242616ee..b1d112229 100644 --- a/apps/renderer/src/modules/app-layout/subview/index.mobile.tsx +++ b/apps/renderer/src/modules/app-layout/subview/index.mobile.tsx @@ -1,6 +1,6 @@ import { cn } from "@follow/utils/utils" import { easeOut, m, useScroll, useTransform } from "framer-motion" -import { Outlet } from "react-router-dom" +import { Outlet } from "react-router" import { HeaderTopReturnBackButton } from "~/components/mobile/button" diff --git a/apps/renderer/src/modules/feed-column/header.tsx b/apps/renderer/src/modules/feed-column/header.tsx index cd33becc1..daa13dc58 100644 --- a/apps/renderer/src/modules/feed-column/header.tsx +++ b/apps/renderer/src/modules/feed-column/header.tsx @@ -9,7 +9,7 @@ import type { FC, PropsWithChildren } from "react" import { memo, useCallback, useEffect, useRef, useState } from "react" import { useHotkeys } from "react-hotkeys-hook" import { useTranslation } from "react-i18next" -import { Link } from "react-router-dom" +import { Link } from "react-router" import { toast } from "sonner" import { setAppSearchOpen } from "~/atoms/app" diff --git a/apps/renderer/src/modules/feed-column/list.shared.tsx b/apps/renderer/src/modules/feed-column/list.shared.tsx index 1272a6fb0..75023b2c2 100644 --- a/apps/renderer/src/modules/feed-column/list.shared.tsx +++ b/apps/renderer/src/modules/feed-column/list.shared.tsx @@ -8,7 +8,7 @@ import * as HoverCard from "@radix-ui/react-hover-card" import { AnimatePresence, m } from "framer-motion" import { memo, useCallback, useMemo, useRef, useState } from "react" import { useTranslation } from "react-i18next" -import { Link } from "react-router-dom" +import { Link } from "react-router" import { useOnClickOutside } from "usehooks-ts" import { useGeneralSettingSelector } from "~/atoms/settings/general" diff --git a/apps/renderer/src/modules/settings/title.tsx b/apps/renderer/src/modules/settings/title.tsx index 683e909be..92beb74ab 100644 --- a/apps/renderer/src/modules/settings/title.tsx +++ b/apps/renderer/src/modules/settings/title.tsx @@ -3,7 +3,7 @@ import { cn } from "@follow/utils/utils" import { Slot } from "@radix-ui/react-slot" import { useContext } from "react" import { useTranslation } from "react-i18next" -import { useLoaderData } from "react-router-dom" +import { useLoaderData } from "react-router" import { IsInSettingIndependentWindowContext } from "./context" import { getMemoizedSettings } from "./settings-glob" diff --git a/apps/renderer/src/modules/user/LoginButton.tsx b/apps/renderer/src/modules/user/LoginButton.tsx index b14303272..76ac7bdf8 100644 --- a/apps/renderer/src/modules/user/LoginButton.tsx +++ b/apps/renderer/src/modules/user/LoginButton.tsx @@ -2,7 +2,7 @@ import { UserArrowLeftIcon } from "@follow/components/icons/user.jsx" import { ActionButton } from "@follow/components/ui/button/index.js" import type { FC } from "react" import { useTranslation } from "react-i18next" -import { Link } from "react-router-dom" +import { Link } from "react-router" import { LoginModalContent } from "~/modules/auth/LoginModalContent" diff --git a/apps/renderer/src/modules/user/ProfileButton.desktop.tsx b/apps/renderer/src/modules/user/ProfileButton.desktop.tsx index 4d747e3a6..035d45bea 100644 --- a/apps/renderer/src/modules/user/ProfileButton.desktop.tsx +++ b/apps/renderer/src/modules/user/ProfileButton.desktop.tsx @@ -9,7 +9,7 @@ import { repository } from "@pkg" import type { FC } from "react" import { forwardRef, memo, useCallback, useLayoutEffect, useState } from "react" import { useTranslation } from "react-i18next" -import { useNavigate } from "react-router-dom" +import { useNavigate } from "react-router" import { useUserRole } from "~/atoms/user" import { diff --git a/apps/renderer/src/modules/user/ProfileButton.mobile.tsx b/apps/renderer/src/modules/user/ProfileButton.mobile.tsx index 68d965f46..29eb7cc69 100644 --- a/apps/renderer/src/modules/user/ProfileButton.mobile.tsx +++ b/apps/renderer/src/modules/user/ProfileButton.mobile.tsx @@ -6,7 +6,7 @@ import { UrlBuilder } from "@follow/utils/url-builder" import clsx from "clsx" import type { FC } from "react" import { useTranslation } from "react-i18next" -import { Link } from "react-router-dom" +import { Link } from "react-router" import { useUserRole, useWhoami } from "~/atoms/user" import { useSignOut } from "~/hooks/biz/useSignOut" diff --git a/apps/renderer/src/modules/wallet/tip-modal.tsx b/apps/renderer/src/modules/wallet/tip-modal.tsx index 60c776a2f..e93a1abb3 100644 --- a/apps/renderer/src/modules/wallet/tip-modal.tsx +++ b/apps/renderer/src/modules/wallet/tip-modal.tsx @@ -7,7 +7,7 @@ import { nextFrame } from "@follow/utils/dom" import { from } from "dnum" import type { FC } from "react" import { useState } from "react" -import { useNavigate } from "react-router-dom" +import { useNavigate } from "react-router" import { useCurrentModal } from "~/components/ui/modal/stacked/hooks" import { useI18n } from "~/hooks/common" diff --git a/apps/renderer/src/pages/(external)/layout.tsx b/apps/renderer/src/pages/(external)/layout.tsx index 79a2160fc..2d429363f 100644 --- a/apps/renderer/src/pages/(external)/layout.tsx +++ b/apps/renderer/src/pages/(external)/layout.tsx @@ -1,4 +1,4 @@ -import { Outlet } from "react-router-dom" +import { Outlet } from "react-router" import { EnvironmentIndicator } from "~/modules/app/EnvironmentIndicator" import { UserProvider } from "~/providers/user-provider" diff --git a/apps/renderer/src/pages/(external)/login.tsx b/apps/renderer/src/pages/(external)/login.tsx index e55b5e446..e5f1d8168 100644 --- a/apps/renderer/src/pages/(external)/login.tsx +++ b/apps/renderer/src/pages/(external)/login.tsx @@ -4,7 +4,7 @@ import { DEEPLINK_SCHEME } from "@follow/shared/constants" import { SessionProvider, signIn, useSession } from "@hono/auth-js/react" import { useEffect, useState } from "react" import { useTranslation } from "react-i18next" -import { useLocation, useNavigate } from "react-router-dom" +import { useLocation, useNavigate } from "react-router" import { useSignOut } from "~/hooks/biz/useSignOut" import { apiClient } from "~/lib/api-fetch" diff --git a/apps/renderer/src/pages/(main)/(layer)/(subview)/discover/index.tsx b/apps/renderer/src/pages/(main)/(layer)/(subview)/discover/index.tsx index 5fb259ba5..c8c855456 100644 --- a/apps/renderer/src/pages/(main)/(layer)/(subview)/discover/index.tsx +++ b/apps/renderer/src/pages/(main)/(layer)/(subview)/discover/index.tsx @@ -4,7 +4,7 @@ import { UserRole } from "@follow/constants" import { cn } from "@follow/utils/utils" import { createElement } from "react" import { useTranslation } from "react-i18next" -import { useSearchParams } from "react-router-dom" +import { useSearchParams } from "react-router" import { useUserRole } from "~/atoms/user" import { AppErrorBoundary } from "~/components/common/AppErrorBoundary" diff --git a/apps/renderer/src/pages/(main)/(layer)/feeds/[feedId]/index.tsx b/apps/renderer/src/pages/(main)/(layer)/feeds/[feedId]/index.tsx index bbadf2441..632b26e93 100644 --- a/apps/renderer/src/pages/(main)/(layer)/feeds/[feedId]/index.tsx +++ b/apps/renderer/src/pages/(main)/(layer)/feeds/[feedId]/index.tsx @@ -1,5 +1,5 @@ import { isMobile } from "@follow/components/hooks/useMobile.js" -import { redirect } from "react-router-dom" +import { redirect } from "react-router" import { ROUTE_ENTRY_PENDING } from "~/constants" import { MobileCenterColumnScreen } from "~/modules/app-layout/entry-column/index" diff --git a/apps/renderer/src/pages/(main)/index.tsx b/apps/renderer/src/pages/(main)/index.tsx index d47bfaffa..a9afa4295 100644 --- a/apps/renderer/src/pages/(main)/index.tsx +++ b/apps/renderer/src/pages/(main)/index.tsx @@ -1,6 +1,6 @@ import { isMobile } from "@follow/components/hooks/useMobile.js" import { FeedViewType } from "@follow/constants" -import { redirect } from "react-router-dom" +import { redirect } from "react-router" import { getGeneralSettings } from "~/atoms/settings/general" import { ROUTE_ENTRY_PENDING, ROUTE_FEED_PENDING } from "~/constants" diff --git a/apps/renderer/src/pages/add/index.tsx b/apps/renderer/src/pages/add/index.tsx index 0d26a91cb..34ce18599 100644 --- a/apps/renderer/src/pages/add/index.tsx +++ b/apps/renderer/src/pages/add/index.tsx @@ -1,6 +1,6 @@ import { FeedViewType } from "@follow/constants" import { useLayoutEffect } from "react" -import { useSearchParams } from "react-router-dom" +import { useSearchParams } from "react-router" import { FeedForm } from "~/modules/discover/feed-form" diff --git a/apps/renderer/src/pages/settings/layout.tsx b/apps/renderer/src/pages/settings/layout.tsx index b1a1bba4e..4f86af736 100644 --- a/apps/renderer/src/pages/settings/layout.tsx +++ b/apps/renderer/src/pages/settings/layout.tsx @@ -2,7 +2,7 @@ import { Logo } from "@follow/components/icons/logo.jsx" import { IN_ELECTRON } from "@follow/shared/constants" import { preventDefault } from "@follow/utils/dom" import { cn } from "@follow/utils/utils" -import { Outlet, useLocation } from "react-router-dom" +import { Outlet, useLocation } from "react-router" import { WindowUnderBlur } from "~/components/ui/background" import { isElectronBuild } from "~/constants" diff --git a/apps/renderer/src/providers/external-jump-in-provider.tsx b/apps/renderer/src/providers/external-jump-in-provider.tsx index fba0ffc91..f6296353c 100644 --- a/apps/renderer/src/providers/external-jump-in-provider.tsx +++ b/apps/renderer/src/providers/external-jump-in-provider.tsx @@ -1,5 +1,5 @@ import { useEffect, useRef } from "react" -import { useSearchParams } from "react-router-dom" +import { useSearchParams } from "react-router" import { useFollow } from "~/hooks/biz/useFollow" diff --git a/apps/renderer/src/queries/wallet.tsx b/apps/renderer/src/queries/wallet.tsx index 004445edd..a315e7c4b 100644 --- a/apps/renderer/src/queries/wallet.tsx +++ b/apps/renderer/src/queries/wallet.tsx @@ -1,5 +1,5 @@ import { useMutation } from "@tanstack/react-query" -import { useNavigate } from "react-router-dom" +import { useNavigate } from "react-router" import { toast } from "sonner" import { useAuthQuery } from "~/hooks/common" diff --git a/apps/renderer/src/router.tsx b/apps/renderer/src/router.tsx index 94448caf9..bdc8e0279 100644 --- a/apps/renderer/src/router.tsx +++ b/apps/renderer/src/router.tsx @@ -1,7 +1,7 @@ import { IN_ELECTRON } from "@follow/shared/constants" import { buildGlobRoutes } from "@follow/utils/route-builder" import { wrapCreateBrowserRouter } from "@sentry/react" -import { createBrowserRouter, createHashRouter } from "react-router-dom" +import { createBrowserRouter, createHashRouter } from "react-router" import { Component as App } from "./App" import { ErrorElement } from "./components/common/ErrorElement" diff --git a/apps/renderer/src/router.web.tsx b/apps/renderer/src/router.web.tsx index 4d65a0931..39250c8aa 100644 --- a/apps/renderer/src/router.web.tsx +++ b/apps/renderer/src/router.web.tsx @@ -1,7 +1,7 @@ import { IN_ELECTRON } from "@follow/shared/constants" import { buildGlobRoutes } from "@follow/utils/route-builder" import { wrapCreateBrowserRouter } from "@sentry/react" -import { createBrowserRouter, createHashRouter } from "react-router-dom" +import { createBrowserRouter, createHashRouter } from "react-router" import { ErrorElement } from "./components/common/ErrorElement" import { NotFound } from "./components/common/NotFound" diff --git a/apps/server/client/App.tsx b/apps/server/client/App.tsx index 6f079f8e1..fe7f29d65 100644 --- a/apps/server/client/App.tsx +++ b/apps/server/client/App.tsx @@ -1,4 +1,4 @@ -import { Outlet } from "react-router-dom" +import { Outlet } from "react-router" import { RootProviders } from "./providers/root-providers" diff --git a/apps/server/client/components/common/NotFound.tsx b/apps/server/client/components/common/NotFound.tsx index 1579fa12b..66c7a9a34 100644 --- a/apps/server/client/components/common/NotFound.tsx +++ b/apps/server/client/components/common/NotFound.tsx @@ -1,7 +1,7 @@ import { PoweredByFooter } from "@follow/components/common/PoweredByFooter.jsx" import { Logo } from "@follow/components/icons/logo.jsx" import { Button } from "@follow/components/ui/button/index.js" -import { useLocation } from "react-router-dom" +import { useLocation } from "react-router" export const NotFound = () => { const location = useLocation() diff --git a/apps/server/client/index.tsx b/apps/server/client/index.tsx index 667145bc8..6494abfb6 100644 --- a/apps/server/client/index.tsx +++ b/apps/server/client/index.tsx @@ -2,11 +2,10 @@ import "@follow/components/tailwind" import "@follow/components/dayjs" import "./styles/index.css" -// @ts-expect-error import { ClickToComponent } from "click-to-react-component" import * as React from "react" import ReactDOM from "react-dom/client" -import { RouterProvider } from "react-router-dom" +import { RouterProvider } from "react-router/dom" import { initialize } from "./initialize" import { router } from "./router" diff --git a/apps/server/client/pages/(login)/layout.tsx b/apps/server/client/pages/(login)/layout.tsx index 63e52b4d5..90545743c 100644 --- a/apps/server/client/pages/(login)/layout.tsx +++ b/apps/server/client/pages/(login)/layout.tsx @@ -2,7 +2,7 @@ import { setWhoami } from "@client/atoms/user" import { setIntegrationIdentify } from "@client/initialize/helper" import { useSession } from "@client/query/auth" import { useEffect } from "react" -import { Outlet } from "react-router-dom" +import { Outlet } from "react-router" export function Component() { return ( diff --git a/apps/server/client/pages/(login)/login.tsx b/apps/server/client/pages/(login)/login.tsx index d75407c3f..e5688b7bf 100644 --- a/apps/server/client/pages/(login)/login.tsx +++ b/apps/server/client/pages/(login)/login.tsx @@ -7,7 +7,7 @@ import { DEEPLINK_SCHEME } from "@follow/shared/constants" import { SessionProvider, signIn, signOut, useSession } from "@hono/auth-js/react" import { useEffect, useState } from "react" import { useTranslation } from "react-i18next" -import { useLocation, useNavigate } from "react-router-dom" +import { useLocation, useNavigate } from "react-router" export function Component() { return ( diff --git a/apps/server/client/pages/(main)/layout.tsx b/apps/server/client/pages/(main)/layout.tsx index d35a0108c..3b762d634 100644 --- a/apps/server/client/pages/(main)/layout.tsx +++ b/apps/server/client/pages/(main)/layout.tsx @@ -1,5 +1,5 @@ import { useSyncThemeWebApp } from "@follow/hooks" -import { Outlet } from "react-router-dom" +import { Outlet } from "react-router" export const Component = () => { useSyncThemeWebApp() diff --git a/apps/server/client/pages/(main)/share/feeds/[id]/index.tsx b/apps/server/client/pages/(main)/share/feeds/[id]/index.tsx index 2447d9b85..cbbe078e8 100644 --- a/apps/server/client/pages/(main)/share/feeds/[id]/index.tsx +++ b/apps/server/client/pages/(main)/share/feeds/[id]/index.tsx @@ -18,7 +18,7 @@ import { cn } from "@follow/utils/utils" import type { FC } from "react" import { useMemo } from "react" import { useTranslation } from "react-i18next" -import { useParams, useSearchParams } from "react-router-dom" +import { useParams, useSearchParams } from "react-router" import { toast } from "sonner" const viewsRenderType = { diff --git a/apps/server/client/pages/(main)/share/layout.tsx b/apps/server/client/pages/(main)/share/layout.tsx index 79116009a..6b4d31a1c 100644 --- a/apps/server/client/pages/(main)/share/layout.tsx +++ b/apps/server/client/pages/(main)/share/layout.tsx @@ -2,7 +2,7 @@ import { Header } from "@client/components/layout/header" import { TeleportalDestination } from "@client/components/layout/main/teleportal" import { MemoedDangerousHTMLStyle } from "@follow/components/common/MemoedDangerousHTMLStyle.jsx" import { PoweredByFooter } from "@follow/components/common/PoweredByFooter.jsx" -import { Outlet } from "react-router-dom" +import { Outlet } from "react-router" export const Component = () => { return ( diff --git a/apps/server/client/pages/(main)/share/lists/[id]/index.tsx b/apps/server/client/pages/(main)/share/lists/[id]/index.tsx index 4d123f87a..9a590b3e1 100644 --- a/apps/server/client/pages/(main)/share/lists/[id]/index.tsx +++ b/apps/server/client/pages/(main)/share/lists/[id]/index.tsx @@ -9,7 +9,7 @@ import { FeedIcon } from "@follow/components/ui/feed-icon/index.jsx" import { LoadingCircle } from "@follow/components/ui/loading/index.jsx" import { useTitle } from "@follow/hooks" import { useTranslation } from "react-i18next" -import { useParams } from "react-router-dom" +import { useParams } from "react-router" import { toast } from "sonner" const numberFormatter = new Intl.NumberFormat() diff --git a/apps/server/client/pages/(main)/share/users/[id]/index.tsx b/apps/server/client/pages/(main)/share/users/[id]/index.tsx index e50165be9..4496e93a6 100644 --- a/apps/server/client/pages/(main)/share/users/[id]/index.tsx +++ b/apps/server/client/pages/(main)/share/users/[id]/index.tsx @@ -13,7 +13,7 @@ import { UrlBuilder } from "@follow/utils/url-builder" import { cn } from "@follow/utils/utils" import { Fragment } from "react" import { useTranslation } from "react-i18next" -import { useParams } from "react-router-dom" +import { useParams } from "react-router" export const Component = () => { const params = useParams() diff --git a/apps/server/client/router.tsx b/apps/server/client/router.tsx index 1d6448910..fff933fbc 100644 --- a/apps/server/client/router.tsx +++ b/apps/server/client/router.tsx @@ -1,6 +1,6 @@ import { buildGlobRoutes } from "@follow/utils/route-builder" import { wrapCreateBrowserRouter } from "@sentry/react" -import { createBrowserRouter, createHashRouter } from "react-router-dom" +import { createBrowserRouter, createHashRouter } from "react-router" import { NotFound } from "./components/common/NotFound" diff --git a/apps/server/package.json b/apps/server/package.json index 21e0ccc6a..d285088c7 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -31,7 +31,7 @@ "react-hotkeys-hook": "4.6.1", "react-i18next": "^15.1.1", "react-photo-view": "1.2.6", - "react-router-dom": "7.0.1", + "react-router": "7.0.1", "satori": "0.12.0", "sonner": "1.7.0", "tailwindcss": "3.4.15", diff --git a/packages/components/src/atoms/route.ts b/packages/components/src/atoms/route.ts index b82bdd738..47bb3725d 100644 --- a/packages/components/src/atoms/route.ts +++ b/packages/components/src/atoms/route.ts @@ -2,7 +2,7 @@ import { createAtomHooks } from "@follow/utils/jotai" import { atom, useAtomValue } from "jotai" import { selectAtom } from "jotai/utils" import { useMemo } from "react" -import type { Location, NavigateFunction, Params } from "react-router-dom" +import type { Location, NavigateFunction, Params } from "react-router" interface RouteAtom { params: Readonly> diff --git a/packages/components/src/providers/stable-router-provider.tsx b/packages/components/src/providers/stable-router-provider.tsx index 505156c13..dc81fe72f 100644 --- a/packages/components/src/providers/stable-router-provider.tsx +++ b/packages/components/src/providers/stable-router-provider.tsx @@ -1,7 +1,7 @@ import { setNavigate, setRoute } from "@follow/components/atoms/route.js" import { useLayoutEffect } from "react" -import type { NavigateFunction } from "react-router-dom" -import { useLocation, useNavigate, useParams, useSearchParams } from "react-router-dom" +import type { NavigateFunction } from "react-router" +import { useLocation, useNavigate, useParams, useSearchParams } from "react-router" // eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface CustomRoute {} diff --git a/packages/utils/src/route-builder.ts b/packages/utils/src/route-builder.ts index 8b7cdde16..7e6ea7a2c 100644 --- a/packages/utils/src/route-builder.ts +++ b/packages/utils/src/route-builder.ts @@ -1,6 +1,6 @@ import { get, omit } from "es-toolkit/compat" import { Fragment } from "react/jsx-runtime" -import type { RouteObject } from "react-router-dom" +import type { RouteObject } from "react-router" type NestedStructure = { [key: string]: NestedStructure } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 211cb5374..202e73839 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -573,7 +573,7 @@ importers: react-resizable-layout: specifier: npm:@innei/react-resizable-layout@0.7.3-fork.1 version: '@innei/react-resizable-layout@0.7.3-fork.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)' - react-router-dom: + react-router: specifier: 7.0.1 version: 7.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-selecto: @@ -787,7 +787,7 @@ importers: react-photo-view: specifier: 1.2.6 version: 1.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-router-dom: + react-router: specifier: 7.0.1 version: 7.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) satori: @@ -9563,13 +9563,6 @@ packages: '@types/react': optional: true - react-router-dom@7.0.1: - resolution: {integrity: sha512-duBzwAAiIabhFPZfDjcYpJ+f08TMbPMETgq254GWne2NW1ZwRHhZLj7tpSp8KGb7JvZzlLcjGUnqLxpZQVEPng==} - engines: {node: '>=20.0.0'} - peerDependencies: - react: '>=18' - react-dom: '>=18' - react-router@7.0.1: resolution: {integrity: sha512-WVAhv9oWCNsja5AkK6KLpXJDSJCQizOIyOd4vvB/+eHGbYx5vkhcmcmwWjQ9yqkRClogi+xjEg9fNEOd5EX/tw==} engines: {node: '>=20.0.0'} @@ -10727,11 +10720,6 @@ packages: engines: {node: '>=4.2.0'} hasBin: true - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} - engines: {node: '>=14.17'} - hasBin: true - typescript@5.7.2: resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} engines: {node: '>=14.17'} @@ -17179,7 +17167,7 @@ snapshots: config-file-ts@0.2.8-rc1: dependencies: glob: 10.4.5 - typescript: 5.6.3 + typescript: 5.7.2 consola@3.2.3: {} @@ -21913,12 +21901,6 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 - react-router-dom@7.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-router: 7.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-router@7.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@types/cookie': 0.6.0 @@ -23295,8 +23277,6 @@ snapshots: typescript@4.9.5: {} - typescript@5.6.3: {} - typescript@5.7.2: {} ufo@1.5.4: {} diff --git a/vite.config.ts b/vite.config.ts index 0304d2bdf..ee7604ed2 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -165,7 +165,7 @@ export default ({ mode }) => { createDependencyChunksPlugin([ // React framework ["react", "react-dom"], - ["react-error-boundary", "react-dom/server", "react-router-dom"], + ["react-error-boundary", "react-dom/server", "react-router"], // Data Statement ["zustand", "jotai", "use-context-selector", "immer", "dexie"], // Remark