aboutsummaryrefslogtreecommitdiff
path: root/apps/web/app/(navigation)/layout.tsx
blob: 7b7628bba3984f6587e5f3a1419e5e2863fbbd03 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
"use client"

import { GraphDialog } from "@/components/graph-dialog"
import { Header } from "@/components/header"
import { AddMemoryView } from "@/components/views/add-memory"
import { useEffect, useState } from "react"

export default function NavigationLayout({
	children,
}: {
	children: React.ReactNode
}) {
	const [showAddMemoryView, setShowAddMemoryView] = useState(false)
	useEffect(() => {
		const handleKeydown = (event: KeyboardEvent) => {
			const target = event.target as HTMLElement
			const isInputField =
				target.tagName === "INPUT" ||
				target.tagName === "TEXTAREA" ||
				target.isContentEditable ||
				target.closest('[contenteditable="true"]')

			if (isInputField) return

			// add memory shortcut
			if (
				event.key === "c" &&
				!event.ctrlKey &&
				!event.metaKey &&
				!event.altKey &&
				!event.shiftKey
			) {
				event.preventDefault()
				setShowAddMemoryView(true)
			}
		}

		document.addEventListener("keydown", handleKeydown)

		return () => {
			document.removeEventListener("keydown", handleKeydown)
		}
	}, [])
	return (
		<div className="relative h-screen flex flex-col">
			<div className="sticky top-0 z-50 bg-background/80 backdrop-blur-md border-b border-white/10">
				<Header onAddMemory={() => setShowAddMemoryView(true)} />
			</div>
			<div className="flex-1">{children}</div>
			{showAddMemoryView && (
				<AddMemoryView
					initialTab="note"
					onClose={() => setShowAddMemoryView(false)}
				/>
			)}

			<GraphDialog />
		</div>
	)
}