1+ 'use client'
2+
3+ import { useState } from 'react'
4+ import { useRouter } from 'next/navigation'
5+ import { Sidebar } from '@/components/Sidebar'
6+ import { MainContent } from '@/components/MainContent'
7+ import { SearchBar } from '@/components/SearchBar'
8+ import { ThemeToggle } from '@/components/ThemeToggle'
9+
10+ interface KindPageClientProps {
11+ kindNum : number
12+ }
13+
14+ export function KindPageClient ( { kindNum } : KindPageClientProps ) {
15+ const router = useRouter ( )
16+ const [ searchQuery , setSearchQuery ] = useState ( '' )
17+ const [ sidebarOpen , setSidebarOpen ] = useState ( false )
18+
19+ return (
20+ < div className = "flex h-screen bg-gray-100 dark:bg-gray-900 overflow-hidden" >
21+ { /* Mobile sidebar overlay */ }
22+ { sidebarOpen && (
23+ < div
24+ className = "fixed inset-0 z-40 bg-black bg-opacity-25 lg:hidden"
25+ onClick = { ( ) => setSidebarOpen ( false ) }
26+ />
27+ ) }
28+
29+ { /* Sidebar */ }
30+ < div className = { `
31+ flex flex-col w-80 bg-white dark:bg-gray-800 border-r border-gray-200 dark:border-gray-700
32+ lg:relative lg:translate-x-0
33+ fixed inset-y-0 left-0 z-50 transform transition-transform duration-300 ease-in-out
34+ ${ sidebarOpen ? 'translate-x-0' : '-translate-x-full lg:translate-x-0' }
35+ ` } >
36+ < div className = "p-4 border-b border-gray-200 dark:border-gray-700" >
37+ < div className = "flex items-center justify-between mb-3" >
38+ < h1 className = "text-xl font-bold text-gray-900 dark:text-gray-100" >
39+ Nostr Event Kinds
40+ </ h1 >
41+ < div className = "flex items-center gap-2" >
42+ < div className = "hidden lg:block" >
43+ < ThemeToggle />
44+ </ div >
45+ < button
46+ className = "lg:hidden p-2 rounded-md hover:bg-gray-100 dark:hover:bg-gray-700"
47+ onClick = { ( ) => setSidebarOpen ( false ) }
48+ >
49+ < span className = "text-gray-500 dark:text-gray-400" > ✕</ span >
50+ </ button >
51+ </ div >
52+ </ div >
53+ < SearchBar
54+ searchQuery = { searchQuery }
55+ onSearchChange = { setSearchQuery }
56+ />
57+ </ div >
58+ < Sidebar
59+ selectedKind = { kindNum }
60+ onKindSelect = { ( kind ) => {
61+ // Navigate to the new kind URL
62+ router . push ( `/${ kind } ` )
63+ setSidebarOpen ( false )
64+ } }
65+ searchQuery = { searchQuery }
66+ />
67+ </ div >
68+
69+ { /* Main content */ }
70+ < div className = "flex-1 flex flex-col lg:ml-0" >
71+ { /* Mobile header */ }
72+ < div className = "lg:hidden flex items-center justify-between p-4 bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700" >
73+ < button
74+ onClick = { ( ) => setSidebarOpen ( true ) }
75+ className = "p-2 rounded-md hover:bg-gray-100 dark:hover:bg-gray-700"
76+ >
77+ < span className = "text-gray-700 dark:text-gray-300" > ☰</ span >
78+ </ button >
79+ < h2 className = "text-lg font-semibold text-gray-900 dark:text-gray-100" >
80+ Kind { kindNum }
81+ </ h2 >
82+ < div className = "block lg:hidden" >
83+ < ThemeToggle />
84+ </ div >
85+ </ div >
86+
87+ < MainContent selectedKind = { kindNum } />
88+ </ div >
89+ </ div >
90+ )
91+ }
0 commit comments