Change context for editBookmarkForm to useDisclosure + enter to submit

master
TZGyn 2 years ago
parent 204905c411
commit 8c4ab5a0a8
Signed by: TZGyn
GPG Key ID: 122EAF77AE81FD4A

@ -5,6 +5,7 @@ import { NextUIProvider } from '@nextui-org/system'
import { ThemeProvider as NextThemesProvider } from 'next-themes' import { ThemeProvider as NextThemesProvider } from 'next-themes'
import { ThemeProviderProps } from 'next-themes/dist/types' import { ThemeProviderProps } from 'next-themes/dist/types'
import { Bookmark } from '@/types' import { Bookmark } from '@/types'
import { useDisclosure } from '@nextui-org/modal'
export interface ProvidersProps { export interface ProvidersProps {
children: React.ReactNode children: React.ReactNode
@ -13,13 +14,15 @@ export interface ProvidersProps {
export type EditBookmarkContextContent = { export type EditBookmarkContextContent = {
isEditBookmark: boolean isEditBookmark: boolean
setIsEditBookmark: (c: boolean) => void onIsEditBookmark: () => void
onIsEditBookmarkChange: () => void
} }
export const EditBookmarkContext = export const EditBookmarkContext =
React.createContext<EditBookmarkContextContent>({ React.createContext<EditBookmarkContextContent>({
isEditBookmark: false, isEditBookmark: false,
setIsEditBookmark: () => {}, onIsEditBookmark: () => {},
onIsEditBookmarkChange: () => {},
}) })
export type BookmarkContextContent = { export type BookmarkContextContent = {
@ -39,7 +42,12 @@ export const BookmarkContext = React.createContext<BookmarkContextContent>({
}) })
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 {
isOpen: isEditBookmark,
onOpen: onIsEditBookmark,
onOpenChange: onIsEditBookmarkChange,
} = useDisclosure()
const [bookmark, setBookmark] = React.useState<Bookmark>({ const [bookmark, setBookmark] = React.useState<Bookmark>({
id: 0, id: 0,
name: '', name: '',
@ -56,7 +64,8 @@ export function Providers({ children, themeProps }: ProvidersProps) {
<EditBookmarkContext.Provider <EditBookmarkContext.Provider
value={{ value={{
isEditBookmark, isEditBookmark,
setIsEditBookmark, onIsEditBookmark,
onIsEditBookmarkChange,
}}> }}>
<NextUIProvider> <NextUIProvider>
<NextThemesProvider {...themeProps}> <NextThemesProvider {...themeProps}>

@ -14,13 +14,12 @@ import {
} from '@nextui-org/dropdown' } from '@nextui-org/dropdown'
import { useRouter } from 'next/navigation' import { useRouter } from 'next/navigation'
import EditBookmarkForm from './editBookmarkForm'
import { type Bookmark } from '@/types' import { type Bookmark } from '@/types'
import { useContext } from 'react' import { useContext } from 'react'
import { BookmarkContext, EditBookmarkContext } from '@/app/providers' import { BookmarkContext, EditBookmarkContext } from '@/app/providers'
export const BookmarkCard = ({ data }: { data: Bookmark }) => { export const BookmarkCard = ({ data }: { data: Bookmark }) => {
const { setIsEditBookmark } = useContext(EditBookmarkContext) const { onIsEditBookmark } = useContext(EditBookmarkContext)
const { bookmark, setBookmark } = useContext(BookmarkContext) const { bookmark, setBookmark } = useContext(BookmarkContext)
const router = useRouter() const router = useRouter()
@ -34,7 +33,7 @@ export const BookmarkCard = ({ data }: { data: Bookmark }) => {
} }
const editBookmark = (selectedBookmark: Bookmark) => { const editBookmark = (selectedBookmark: Bookmark) => {
setBookmark({ ...bookmark, ...selectedBookmark }) setBookmark({ ...bookmark, ...selectedBookmark })
setIsEditBookmark(true) onIsEditBookmark()
} }
return ( return (
<> <>
@ -67,7 +66,7 @@ export const BookmarkCard = ({ data }: { data: Bookmark }) => {
<DropdownMenu aria-label='Static Actions'> <DropdownMenu aria-label='Static Actions'>
<DropdownItem <DropdownItem
key='edit' key='edit'
onClick={() => editBookmark(data)}> onPress={() => editBookmark(data)}>
Edit Bookmark Edit Bookmark
</DropdownItem> </DropdownItem>
<DropdownItem <DropdownItem

@ -16,7 +16,7 @@ import { Bookmark } from '@/types'
import { BookmarkContext, EditBookmarkContext } from '@/app/providers' import { BookmarkContext, EditBookmarkContext } from '@/app/providers'
export default function EditBookmarkForm() { export default function EditBookmarkForm() {
const { isEditBookmark, setIsEditBookmark } = const { isEditBookmark, onIsEditBookmarkChange } =
useContext(EditBookmarkContext) useContext(EditBookmarkContext)
const { bookmark, setBookmark } = useContext(BookmarkContext) const { bookmark, setBookmark } = useContext(BookmarkContext)
@ -28,7 +28,7 @@ export default function EditBookmarkForm() {
method: 'PATCH', method: 'PATCH',
body: JSON.stringify(body), body: JSON.stringify(body),
}) })
setIsEditBookmark(false) onIsEditBookmarkChange()
router.refresh() router.refresh()
} }
@ -36,10 +36,14 @@ export default function EditBookmarkForm() {
<> <>
<Modal <Modal
isOpen={isEditBookmark} isOpen={isEditBookmark}
onOpenChange={() => setIsEditBookmark(false)} onOpenChange={onIsEditBookmarkChange}
placement='top-center' placement='top-center'
hideCloseButton> hideCloseButton>
<ModalContent> <ModalContent
onKeyUp={(e) => {
console.log(e.key)
if (e.key === 'Enter') onSubmit()
}}>
{(onClose) => ( {(onClose) => (
<> <>
<ModalHeader className='flex gap-2'> <ModalHeader className='flex gap-2'>

@ -55,8 +55,12 @@ export default function NewBookmarkForm() {
<Modal <Modal
isOpen={isOpen} isOpen={isOpen}
onOpenChange={onOpenChange} onOpenChange={onOpenChange}
placement='top-center'> placement='top-center'
<ModalContent> hideCloseButton>
<ModalContent
onKeyUp={(e) => {
if (e.key === 'Enter') onSubmit()
}}>
{(onClose) => ( {(onClose) => (
<> <>
<ModalHeader className='flex gap-2'> <ModalHeader className='flex gap-2'>

Loading…
Cancel
Save