Skip to content

Commit 0c4f6bf

Browse files
committed
refactor: useSidebarConversationNavigation across navigation components
1 parent a21ece6 commit 0c4f6bf

5 files changed

Lines changed: 40 additions & 26 deletions

File tree

frontend/features/layouts/components/navigation/nav-projects.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ import { DeleteFilesOption } from "@/shared/components/delete-files-option"
8686
import { useDialogSnapshot } from "@/shared/hooks/use-dialog-snapshot"
8787
import { useSettingsChatPreferences } from "@/features/settings/hooks/use-settings-chat-preferences"
8888
import { useLayoutActiveConversation } from "@/features/layouts/hooks/use-layout-active-conversation"
89-
import { useMobileSidebarNavigation } from "@/features/layouts/hooks/use-mobile-sidebar-navigation"
89+
import { useSidebarConversationNavigation } from "@/features/layouts/hooks/use-sidebar-conversation-navigation"
9090
import { SidebarConversationItem } from "@/features/layouts/components/navigation/sidebar-conversation-item"
9191
import type {
9292
SidebarConversationDeleteTarget,
@@ -593,7 +593,7 @@ export function NavProjects() {
593593
const resolveErrorMessage = useLocalizedErrorMessage()
594594
const { isMobile, setOpenMobile } = useSidebar()
595595
const router = useRouter()
596-
const onNavigate = useMobileSidebarNavigation()
596+
const onNavigate = useSidebarConversationNavigation()
597597
const pathname = usePathname()
598598
const searchParams = useSearchParams()
599599
const activeRecentProjectID = searchParams.get("project") ?? ""

frontend/features/layouts/components/navigation/nav-recents.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ import { useDialogSnapshot } from "@/shared/hooks/use-dialog-snapshot"
3939
import { useSettingsChatPreferences } from "@/features/settings/hooks/use-settings-chat-preferences"
4040
import { useLayoutActiveConversation } from "@/features/layouts/hooks/use-layout-active-conversation"
4141
import { useLayoutSidebarListFlip } from "@/features/layouts/hooks/use-layout-sidebar-list-flip"
42-
import { useMobileSidebarNavigation } from "@/features/layouts/hooks/use-mobile-sidebar-navigation"
42+
import { useSidebarConversationNavigation } from "@/features/layouts/hooks/use-sidebar-conversation-navigation"
4343
import type {
4444
SidebarConversationDeleteTarget,
4545
SidebarConversationRenameTarget,
@@ -55,7 +55,7 @@ const RECENTS_OPEN_STORAGE_KEY = "deeix.sidebar.recents.open"
5555

5656
export function NavRecents() {
5757
const t = useTranslations("recent")
58-
const onNavigate = useMobileSidebarNavigation()
58+
const onNavigate = useSidebarConversationNavigation()
5959
const router = useRouter()
6060
const activeConversationID = useLayoutActiveConversation()
6161
const { deleteFilesByDefault } = useSettingsChatPreferences()

frontend/features/layouts/components/navigation/nav-starred.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import { useDialogSnapshot } from "@/shared/hooks/use-dialog-snapshot"
4242
import { useSettingsChatPreferences } from "@/features/settings/hooks/use-settings-chat-preferences"
4343
import { useLayoutActiveConversation } from "@/features/layouts/hooks/use-layout-active-conversation"
4444
import { useLayoutSidebarListFlip } from "@/features/layouts/hooks/use-layout-sidebar-list-flip"
45-
import { useMobileSidebarNavigation } from "@/features/layouts/hooks/use-mobile-sidebar-navigation"
45+
import { useSidebarConversationNavigation } from "@/features/layouts/hooks/use-sidebar-conversation-navigation"
4646
import { SIDEBAR_OVERFLOW_ROW_TRANSITION } from "@/features/layouts/model/sidebar-motion"
4747
import type {
4848
SidebarConversationDeleteTarget,
@@ -72,7 +72,7 @@ export function NavStarred() {
7272
const t = useTranslations("recent")
7373
const { isMobile, setOpenMobile } = useSidebar()
7474
const router = useRouter()
75-
const onNavigate = useMobileSidebarNavigation()
75+
const onNavigate = useSidebarConversationNavigation()
7676
const activeConversationID = useLayoutActiveConversation()
7777
const { deleteFilesByDefault } = useSettingsChatPreferences()
7878

frontend/features/layouts/hooks/use-mobile-sidebar-navigation.ts

Lines changed: 0 additions & 20 deletions
This file was deleted.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
"use client"
2+
3+
import * as React from "react"
4+
import { useRouter } from "next/navigation"
5+
6+
import { useSidebar } from "@/components/ui/sidebar"
7+
8+
function shouldUseNativeNavigation(event: React.MouseEvent<HTMLAnchorElement>) {
9+
const target = event.currentTarget.getAttribute("target")
10+
return event.defaultPrevented ||
11+
event.button !== 0 ||
12+
event.metaKey ||
13+
event.ctrlKey ||
14+
event.shiftKey ||
15+
event.altKey ||
16+
Boolean(target && target !== "_self")
17+
}
18+
19+
export function useSidebarConversationNavigation() {
20+
const router = useRouter()
21+
const { isMobile, setOpenMobile } = useSidebar()
22+
23+
return React.useCallback((href: string, event: React.MouseEvent<HTMLAnchorElement>) => {
24+
if (shouldUseNativeNavigation(event)) {
25+
return
26+
}
27+
28+
event.preventDefault()
29+
router.push(href)
30+
if (isMobile) {
31+
setOpenMobile(false)
32+
}
33+
}, [isMobile, router, setOpenMobile])
34+
}

0 commit comments

Comments
 (0)