Modal - FE14-Part4-Team5/reser-on-do GitHub Wiki
Modal ์ปดํฌ๋ํธ์ ๋๋ค.
interface ModalProps {
isOpen?: boolean; // ๋ชจ๋ฌ์ด ์ด๋ ค์๋์ง ์ฌ๋ถ
onClose?: () => void; // ์ธ๋ถ ํด๋ฆญ ๋๋ ๋ฒํผ์ผ๋ก ๋ซ์ ๋ ์คํ
children: React.ReactNode; // ์ ๋ชฉ์ด๋ ์ค๋ช
ํ
์คํธ, ์์ด์ฝ ๋ฑ ์ปจํ
์ธ
isSecondary?: boolean; // ๋ ๋ฒ์งธ ๋ชจ๋ฌ ์ฌ๋ถ
isThird?: boolean; // ์ธ ๋ฒ์งธ ๋ชจ๋ฌ ์ฌ๋ถ
onActionClick?: (payload?: { rating: number; content: string }) => void; // '์์ฑํ๊ธฐ'/'์ทจ์ํ๊ธฐ' ๋ฒํผ ๋๋ฅผ ๋ ํธ์ถ
}
- isSecondary ๋ชจ๋ฌ์์๋ ์ธ์ ์์ด ํธ์ถ๋ฉ๋๋ค
- isThird ๋ชจ๋ฌ์์๋ { rating, content } ํํ์ payload๊ฐ ์ ๋ฌ๋ฉ๋๋ค.
- ์ฒซ ๋ฒ์งธ ๋ชจ๋ฌ์ ๋จ์ ์๋ฆผ ๋ชจ๋ฌ์ ๋๋ค. ํ์ธ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ฌ๋ผ์ง๋๋ค.
- ๋ ๋ฒ์งธ ๋ชจ๋ฌ์ ์ ํ ๋ชจ๋ฌ์ ๋๋ค. ๋ ๊ฐ์ ๋ฒํผ์ด ์๋๋ฐ, ์ผ์ชฝ์ '์๋์ค' ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ชจ๋ฌ์ฐฝ์ด ์ฌ๋ผ์ง๊ณ , ์ค๋ฅธ์ชฝ ๋ฒํผ์ ์ญ์ ๋ ์ทจ์ ๋ฒํผ์ ๋๋ฅด๋ฉด ๊ทธ ๊ธฐ๋ฅ์ด ๋์ํฉ๋๋ค.
- ๋ ๋ฒ์งธ ๋ชจ๋ฌ์ ์์ด์ฝ๊ณผ ์ธ ๋ฒ์งธ ๋ชจ๋ฌ์ ๋ณ ์์ด์ฝ์ SVG ์์ด์ฝ์ผ๋ก ์ปค์คํฐ๋ง์ด์ง๋์ด ์์ต๋๋ค.
- ๋ณ์ ํด๋ฆญ์
isactive
activeon
๊ณผactiveoff
๋ก ํ์ฑํ, ๋นํ์ฑํํ ์ ์์ต๋๋ค. - ์ธ ๋ฒ์งธ ๋ชจ๋ฌ์ ๋ณ์ ์์ฑ ๋ชจ๋ฌ์ ๋๋ค. ์๋ ์์ฑํ๊ธฐ ๋ฒํผ์ ๋๋ฅด๋ฉด detail ํ์ด์ง์ ๋ณ์ ๊ณผ ๋ด์ฉ์ด ๊ธฐ๋ก๋ฉ๋๋ค.
// ์ธ ๋ชจ๋ฌ์ ๋ ๋๋งํ๋ ์ปดํฌ๋ํธ
export const ModalContainer = () => {
const [isFirstModalOpen, setIsFirstModalOpen] = useState(true);
const [isSecondModalOpen, setIsSecondModalOpen] = useState(true);
const [isThirdModalOpen, setIsThirdModalOpen] = useState(true);
return (
<div>
<Modal isOpen={isFirstModalOpen} onClose={() => setIsFirstModalOpen(false)}>
<h2></h2>
</Modal>
<Modal
isOpen={isSecondModalOpen}
onClose={() => setIsSecondModalOpen(false)}
isSecondary={true}
>
<img src={WarningIcon} className={styles.warningIcon} alt="warning" />
</Modal>
<Modal isOpen={isThirdModalOpen} onClose={() => setIsThirdModalOpen(false)} isThird={true}>
<h2></h2>
</Modal>
</div>
);
};
export default Modal;