refactor: modal 전역으로 코드 수정

This commit is contained in:
yoosangwook 2024-08-08 14:39:00 +09:00
parent cc7f71be6a
commit a7d725cff0
4 changed files with 53 additions and 11 deletions

View File

@ -1,11 +1,15 @@
import { Inter } from 'next/font/google' import { Inter } from 'next/font/google'
import './globals.css'
import '../styles/style.scss'
import Headers from '@/components/Headers'
import RecoilRootWrapper from './RecoilWrapper' import RecoilRootWrapper from './RecoilWrapper'
import UIProvider from './UIProvider' import UIProvider from './UIProvider'
import { headers } from 'next/headers' import { headers } from 'next/headers'
import Headers from '@/components/Headers'
import { ToastContainer } from 'react-toastify' import { ToastContainer } from 'react-toastify'
import QModal from '@/components/common/modal/QModal'
import './globals.css'
import '../styles/style.scss'
const inter = Inter({ subsets: ['latin'] }) const inter = Inter({ subsets: ['latin'] })
@ -25,8 +29,9 @@ export default function RootLayout({ children }) {
{headerPathname !== '/login' && <Headers />} {headerPathname !== '/login' && <Headers />}
<RecoilRootWrapper> <RecoilRootWrapper>
<UIProvider>{children}</UIProvider> <UIProvider>{children}</UIProvider>
<QModal />
<ToastContainer />
</RecoilRootWrapper> </RecoilRootWrapper>
<ToastContainer />
</body> </body>
</html> </html>
) )

View File

@ -4,6 +4,9 @@ import { useEffect, useMemo, useState } from 'react'
import Link from 'next/link' import Link from 'next/link'
import { useRecoilState } from 'recoil'
import { modalContent, modalState } from '@/store/modalAtom'
import { AxiosType, useAxios } from '@/hooks/useAxios' import { AxiosType, useAxios } from '@/hooks/useAxios'
import { Button } from '@nextui-org/react' import { Button } from '@nextui-org/react'
@ -11,13 +14,12 @@ import { Button } from '@nextui-org/react'
import SingleDatePicker from './common/datepicker/SingleDatePicker' import SingleDatePicker from './common/datepicker/SingleDatePicker'
import RangeDatePicker from './common/datepicker/RangeDatePicker' import RangeDatePicker from './common/datepicker/RangeDatePicker'
import QGrid from './common/grid/QGrid' import QGrid from './common/grid/QGrid'
import QModal from './common/modal/QModal'
import { QToast } from '@/hooks/useToast' import { QToast } from '@/hooks/useToast'
export default function Intro() { export default function Intro() {
const { get } = useAxios() const { get } = useAxios()
const [open, setOpen] = useState(false) // const [open, setOpen] = useState(false)
const [startDate, setStartDate] = useState(new Date()) const [startDate, setStartDate] = useState(new Date())
const singleDatePickerProps = { const singleDatePickerProps = {
startDate, startDate,
@ -40,6 +42,9 @@ export default function Intro() {
isPageable: false, isPageable: false,
}) })
const [open, setOpen] = useRecoilState(modalState)
const [contents, setContent] = useRecoilState(modalContent)
const modelProps = { const modelProps = {
open, open,
setOpen, setOpen,
@ -101,10 +106,19 @@ export default function Intro() {
<div className="my-2"> <div className="my-2">
<div className="text-2xl">QModal</div> <div className="text-2xl">QModal</div>
<div> <div>
<Button color="primary" onClick={() => setOpen(true)}> {/* <Button color="primary" onClick={() => setOpen(true)}>
Open Modal
</Button>
<QModal {...modelProps}>{ipsum}</QModal> */}
<Button
color="primary"
onClick={() => {
setContent(ipsum)
setOpen(true)
}}
>
Open Modal Open Modal
</Button> </Button>
<QModal {...modelProps}>{ipsum}</QModal>
</div> </div>
</div> </div>
<div className="my-2"> <div className="my-2">
@ -119,7 +133,7 @@ export default function Intro() {
}) })
}} }}
> >
Open Modal Open Toast
</Button> </Button>
</div> </div>
</div> </div>

View File

@ -1,8 +1,16 @@
'use client'
import { useRecoilState, useRecoilValue } from 'recoil'
import { Modal } from 'react-responsive-modal' import { Modal } from 'react-responsive-modal'
import { modalContent, modalState } from '@/store/modalAtom'
import 'react-responsive-modal/styles.css' import 'react-responsive-modal/styles.css'
export default function QModal(props) { export default function QModal() {
const { open, setOpen, children } = props const [open, setOpen] = useRecoilState(modalState)
const children = useRecoilValue(modalContent)
return ( return (
<Modal open={open} onClose={() => setOpen(false)} center> <Modal open={open} onClose={() => setOpen(false)} center>

15
src/store/modalAtom.js Normal file
View File

@ -0,0 +1,15 @@
import { atom } from 'recoil'
export const modalState = atom({
key: 'modalState',
default: false,
})
export const modalContent = atom({
key: 'modalContent',
default: (
<>
<div>test</div>
</>
),
})