New feature: dropdown from navbar to change tab

master
TZGyn 2 years ago
parent e8d9e01897
commit 6eec4e0c38
Signed by: TZGyn
GPG Key ID: 122EAF77AE81FD4A

@ -42,6 +42,17 @@ export const BookmarkContext = React.createContext<BookmarkContextContent>({
setBookmark: () => {}, setBookmark: () => {},
}) })
export type BookmarkCategoryContextContent = {
selectedCategory: string
setSelectedCategory: (category: string) => void
}
export const BookmarkCategoryContext =
React.createContext<BookmarkCategoryContextContent>({
selectedCategory: '',
setSelectedCategory: () => {},
})
export function Providers({ children, themeProps }: ProvidersProps) { export function Providers({ children, themeProps }: ProvidersProps) {
// const [isEditBookmark, setIsEditBookmark] = React.useState<boolean>(false) // const [isEditBookmark, setIsEditBookmark] = React.useState<boolean>(false)
const { const {
@ -57,7 +68,13 @@ export function Providers({ children, themeProps }: ProvidersProps) {
url: '', url: '',
category_id: 2, category_id: 2,
}) })
const [selectedCategory, setSelectedCategory] = React.useState('')
return ( return (
<BookmarkCategoryContext.Provider
value={{
selectedCategory,
setSelectedCategory,
}}>
<BookmarkContext.Provider <BookmarkContext.Provider
value={{ value={{
bookmark, bookmark,
@ -76,5 +93,6 @@ export function Providers({ children, themeProps }: ProvidersProps) {
</NextUIProvider> </NextUIProvider>
</EditBookmarkContext.Provider> </EditBookmarkContext.Provider>
</BookmarkContext.Provider> </BookmarkContext.Provider>
</BookmarkCategoryContext.Provider>
) )
} }

@ -31,6 +31,8 @@ import { Icon } from '@iconify/react'
import NewBookmarkForm from '@/components/newBookmarkForm' import NewBookmarkForm from '@/components/newBookmarkForm'
import { usePathname, useRouter } from 'next/navigation' import { usePathname, useRouter } from 'next/navigation'
import { BookmarkCategory, User } from '@/types' import { BookmarkCategory, User } from '@/types'
import { useContext } from 'react'
import { BookmarkCategoryContext } from '@/app/providers'
export const Navbar = ({ export const Navbar = ({
user, user,
@ -45,6 +47,8 @@ export const Navbar = ({
return <></> return <></>
} }
const { setSelectedCategory } = useContext(BookmarkCategoryContext)
return ( return (
<NextUINavbar <NextUINavbar
maxWidth='xl' maxWidth='xl'
@ -80,6 +84,30 @@ export const Navbar = ({
</NextLink> </NextLink>
</NavbarItem> </NavbarItem>
))} ))}
<NavbarItem>
<Dropdown>
<DropdownTrigger>Category</DropdownTrigger>
<DropdownMenu>
{categories.length > 0 ? (
categories.map((category) => (
<DropdownItem
key={category.name}
onPress={() =>
setSelectedCategory(
category.id.toString()
)
}>
{category.name}
</DropdownItem>
))
) : (
<DropdownItem key='empty'>
Nothing Here
</DropdownItem>
)}
</DropdownMenu>
</Dropdown>
</NavbarItem>
</ul> </ul>
</NavbarContent> </NavbarContent>

@ -3,20 +3,28 @@
import { BookmarkCategoryWithBookmarks } from '@/types' import { BookmarkCategoryWithBookmarks } from '@/types'
import { Tabs, Tab } from '@nextui-org/tabs' import { Tabs, Tab } from '@nextui-org/tabs'
import { BookmarkCard } from './bookmarkCard' import { BookmarkCard } from './bookmarkCard'
import { useContext, useState } from 'react'
import { BookmarkCategoryContext } from '@/app/providers'
export default function BookmarkTabs({ export default function BookmarkTabs({
data, data,
}: { }: {
data: BookmarkCategoryWithBookmarks[] data: BookmarkCategoryWithBookmarks[]
}) { }) {
const { selectedCategory, setSelectedCategory } = useContext(
BookmarkCategoryContext
)
return ( return (
<div className='flex w-full max-w-4xl flex-col'> <div className='flex w-full max-w-4xl flex-col'>
<Tabs <Tabs
fullWidth fullWidth
selectedKey={selectedCategory}
onSelectionChange={(key) => setSelectedCategory(key.toString())}
color='primary'> color='primary'>
{data.map((bookmarkCategory, index) => ( {data.map((bookmarkCategory) => (
<Tab <Tab
key={index} key={bookmarkCategory.id}
title={bookmarkCategory.name}> title={bookmarkCategory.name}>
<div className='mt-12 flex flex-wrap justify-center gap-6'> <div className='mt-12 flex flex-wrap justify-center gap-6'>
{bookmarkCategory.bookmark.map((data, index) => ( {bookmarkCategory.bookmark.map((data, index) => (

Loading…
Cancel
Save