|
| 1 | +import { useState } from "react"; |
| 2 | + |
| 3 | +import classNames from "classnames"; |
| 4 | + |
| 5 | +import styles from "@/components/HomeNavigateConfirmModal/HomeNavigateConfirmModal.module.scss"; |
| 6 | +import Button from "@/components/ui/Button/Button"; |
| 7 | +import Icon from "@/components/ui/Icon/Icon"; |
| 8 | +import Modal from "@/components/ui/Modal/Modal"; |
| 9 | +import Text from "@/components/ui/Text/Text"; |
| 10 | + |
| 11 | +import { useOverlay } from "@/hooks/common/useOverlay"; |
| 12 | + |
| 13 | +import type { Meta, StoryObj, StoryFn } from "@storybook/react"; |
| 14 | + |
| 15 | +interface HomeNavigateConfirmModalProps { |
| 16 | + isOpen: boolean; |
| 17 | + handleClose: () => void; |
| 18 | +} |
| 19 | + |
| 20 | +const HomeNavigateConfirmModalStory = ({ isOpen, handleClose }: HomeNavigateConfirmModalProps) => { |
| 21 | + const [isShowButtonChecked, setIsShowButtonChecked] = useState(false); |
| 22 | + |
| 23 | + const handleShowButtonClick = () => { |
| 24 | + setIsShowButtonChecked((prev) => !prev); |
| 25 | + }; |
| 26 | + return ( |
| 27 | + <Modal isOpen={isOpen}> |
| 28 | + <div className={styles.Modal}> |
| 29 | + <Text variant="titleSm" color="primary" align="center" as="h2"> |
| 30 | + 홈으로 가시겠어요? |
| 31 | + </Text> |
| 32 | + <Text variant="bodyM" color="secondary" align="center" as="p"> |
| 33 | + 복사하지 않은 리뷰는 삭제돼요. |
| 34 | + </Text> |
| 35 | + <div className={styles.ButtonWrapper}> |
| 36 | + <Button text="아니요" variant="tertiary" onClick={handleClose} /> |
| 37 | + <Button text="네" variant="primary" onClick={handleClose} /> |
| 38 | + </div> |
| 39 | + <button |
| 40 | + className={classNames(styles.ShowButtonWrapper, { |
| 41 | + [styles.isChecked]: isShowButtonChecked, |
| 42 | + })} |
| 43 | + onClick={handleShowButtonClick} |
| 44 | + > |
| 45 | + <Icon name="checkCircle" /> |
| 46 | + <Text variant="bodyXsm" color={isShowButtonChecked ? "primary" : "tertiary"}> |
| 47 | + 다시 안볼래요 |
| 48 | + </Text> |
| 49 | + </button> |
| 50 | + </div> |
| 51 | + </Modal> |
| 52 | + ); |
| 53 | +}; |
| 54 | + |
| 55 | +const meta: Meta<typeof HomeNavigateConfirmModalStory> = { |
| 56 | + title: "Example/HomeNavigateConfirmModal", |
| 57 | + component: HomeNavigateConfirmModalStory, |
| 58 | + parameters: { |
| 59 | + layout: "centered", |
| 60 | + }, |
| 61 | + tags: ["!autodocs"], |
| 62 | +}; |
| 63 | + |
| 64 | +export default meta; |
| 65 | + |
| 66 | +const ModalTemplate = () => { |
| 67 | + const { isOpen, handleOpen, handleClose } = useOverlay(); |
| 68 | + |
| 69 | + return ( |
| 70 | + <> |
| 71 | + <Button text="open modal" onClick={handleOpen} /> |
| 72 | + <HomeNavigateConfirmModalStory isOpen={isOpen} handleClose={handleClose} /> |
| 73 | + </> |
| 74 | + ); |
| 75 | +}; |
| 76 | + |
| 77 | +const Template: StoryFn<typeof ModalTemplate> = ModalTemplate; |
| 78 | + |
| 79 | +export const ModalStory: StoryObj<HomeNavigateConfirmModalProps> = { |
| 80 | + render: Template, |
| 81 | +}; |
0 commit comments