diff --git a/src/components/common/Modal/BasicModal.tsx b/src/components/common/Modal/BasicModal.tsx index 2fc2ca0..9a867b2 100644 --- a/src/components/common/Modal/BasicModal.tsx +++ b/src/components/common/Modal/BasicModal.tsx @@ -40,11 +40,14 @@ const BasicModal = ({
button:last-child]:hidden`} + className={`${widthClass[type]} flex flex-col rounded-xl max-h-[95vh] [&>button:last-child]:hidden`} > {showCloseButton && ( - @@ -56,8 +59,11 @@ const BasicModal = ({ 다이얼로그 내용 - {/* 컨텐츠 영역 */} - {children} +
+ {/* 컨텐츠 영역 */} + {children} +
+ {buttons} diff --git a/src/components/common/Modal/Modal.tsx b/src/components/common/Modal/Modal.tsx new file mode 100644 index 0000000..d74b424 --- /dev/null +++ b/src/components/common/Modal/Modal.tsx @@ -0,0 +1,74 @@ +import React from 'react'; + +// import Close from '@/assets/icons/close.svg'; +import { + Dialog, // Dialog, + // DialogClose, + // DialogContent, + // DialogDescription, + // DialogFooter, + // DialogHeader, + // DialogTitle, +} from '@/components/ui/dialog'; +import useModalStore from '@/stores/modalStore'; +import { ModalProps } from '@/types/ModalTypes'; + +// interface ModalProps { +// type?: 'register' | 'review' | 'filter'; +// title?: string; +// children?: React.ReactNode; +// buttons?: React.ReactNode; +// open: boolean; +// onOpenChange: (open: boolean) => void; +// showCloseButton?: boolean; +// } + +// const widthClass = { +// register: 'w-full max-w-[375px] md:max-w-none md:w-[460px]', +// review: 'w-full max-w-[375px] md:max-w-none md:w-[528px]', +// filter: 'max-w-[375px]', +// }; + +const Modal = ({ children }: ModalProps) => { + const { open, onOpenChange } = useModalStore(); + return ( + + {children} + + ); +}; + +{ + /* + + button:last-child]:hidden`} + > + {showCloseButton && ( + + + + )} + + + {title} + + 다이얼로그 내용 + + +
+ {children} +
+ + {buttons} +
+ +
; */ +} + +export default Modal; diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 21803e2..8fc01ee 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -13,14 +13,7 @@ const queryClient = new QueryClient(); export default function App({ Component, pageProps }: AppProps) { const { pathname } = useRouter(); - const pagesWithoutGnb = [ - '/login', - '/signup', - '/signin', - '/oauth/kakao', - '/oauth/signup/kakao', - '/_error', - ]; + const pagesWithoutGnb = ['/signup', '/signin', '/oauth/kakao', '/oauth/signup/kakao', '/_error']; const hideHeader = pagesWithoutGnb.includes(pathname); return ( diff --git a/src/stores/modalStore.ts b/src/stores/modalStore.ts new file mode 100644 index 0000000..e918334 --- /dev/null +++ b/src/stores/modalStore.ts @@ -0,0 +1,13 @@ +import { create } from 'zustand'; + +import { ModalState } from '@/types/ModalTypes'; + +const useModalStore = create((set) => ({ + type: 'register', + title: '모달 제목', + open: false, + onOpenChange: (open) => set({ open }), + showCloseButton: true, +})); + +export default useModalStore; diff --git a/src/types/ModalTypes.ts b/src/types/ModalTypes.ts new file mode 100644 index 0000000..8c14278 --- /dev/null +++ b/src/types/ModalTypes.ts @@ -0,0 +1,15 @@ +import React from 'react'; + +export type ModalType = 'register' | 'review' | 'filter'; + +export type ModalProps = { + children: React.ReactNode; +}; + +export type ModalState = { + type?: ModalType; + title?: string; + open: boolean; + onOpenChange: (open: boolean) => void; + showCloseButton?: boolean; +};