chore: upgrade to router v7

Signed-off-by: Innei <tukon479@gmail.com>
This commit is contained in:
Innei 2024-11-24 17:27:29 +08:00
parent 78c7107d2d
commit f418efcd9c
No known key found for this signature in database
GPG Key ID: 0F62D33977F021F7
55 changed files with 60 additions and 86 deletions

View File

@ -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",

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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,

View File

@ -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"

View File

@ -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"

View File

@ -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,

View File

@ -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({

View File

@ -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"

View File

@ -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"

View File

@ -1,4 +1,4 @@
import { Outlet } from "react-router-dom"
import { Outlet } from "react-router"
import { useDailyTask } from "~/hooks/biz/useDailyTask"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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 {

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -1,4 +1,4 @@
import { Outlet } from "react-router-dom"
import { Outlet } from "react-router"
import { RootProviders } from "./providers/root-providers"

View File

@ -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()

View File

@ -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"

View File

@ -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 (

View File

@ -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 (

View File

@ -1,5 +1,5 @@
import { useSyncThemeWebApp } from "@follow/hooks"
import { Outlet } from "react-router-dom"
import { Outlet } from "react-router"
export const Component = () => {
useSyncThemeWebApp()

View File

@ -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 = {

View File

@ -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 (

View File

@ -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()

View File

@ -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()

View File

@ -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"

View File

@ -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",

View File

@ -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<Params<string>>

View File

@ -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 {}

View File

@ -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 }

View File

@ -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: {}

View File

@ -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