refactor: modal 전역으로 코드 수정
This commit is contained in:
parent
cc7f71be6a
commit
a7d725cff0
@ -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>
|
||||||
)
|
)
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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
15
src/store/modalAtom.js
Normal 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>
|
||||||
|
</>
|
||||||
|
),
|
||||||
|
})
|
||||||
Loading…
x
Reference in New Issue
Block a user