Modal - FE14-Part4-Team5/reser-on-do GitHub Wiki

Modal

Modal ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.


โœ… Props

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;

โš™ ์‚ฌ์šฉ ์˜ˆ์‹œ

๋ชจ๋‹ฌ1

๋ชจ๋‹ฌ2

๋ชจ๋‹ฌ3

โš ๏ธ **GitHub.com Fallback** โš ๏ธ