Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: 공용 모달 임시 작업 #31

Merged
merged 1 commit into from
Dec 29, 2024
Merged

Conversation

changhui-chan
Copy link
Collaborator

📝 Description

image

파라미터.

image

모달 관리 스토어.

사용법

A라는 버튼을 누르면 모달 띄우고 싶은 경우, A라는 버튼있는 컴포넌트 파일에서 작업함

해당 컴포넌트 파일에서

const { modals, openModal, closeModal } = useModalStore();

모달 스토어를 불러오고,

const modalId = useRef('confirm');

모달에 관련된 ref를 설정한다. useReF('[여기]') [여기]에 들어갈 값은 임의로 정해도 괜찮으나, 다른 모달이랑 중복되지 않은 단어로 설정할 필요가 있다.

{modals[modalId.current]?.isVisible && (
        <Modal
          customModalContentStyle={styles.backButtonModal}
          onClose={handleCloseModal}
          customModalButtonStyle={styles.defaultButton}
          isVisible={modals[modalId.current]?.isVisible}
        >
          <div className={styles.modalContainer}>
            <img
              src={exclamationImage}
              className={styles.exclamationImage}
              alt="느낌표 이미지"
            />
            <p>
              페이지를 떠나시면 작성 중인 내용을 잃게 됩니다. 떠나시겠습니까?
            </p>
            <div className={styles.modalButtonContainer}>
              <Button className={styles.backButton} onClick={handleCloseModal}>
                취소
              </Button>
              <Button className={styles.confirmButton} onClick={handleGoBack}>
                확인
              </Button>
            </div>
          </div>
        </Modal>
      )}

이런 식으로 return문 안에서 현재 모달의 isVisible에 따라 열리고 닫히게끔 설정하고

<Modal>
  {children}
</Modal>

{children}은 본인이 작성하고 싶은 모달 안의 내용을 직접 작성해야한다.

  const handleCloseModal = () => {
    closeModal(modalId.current);
  };

close부분의 handleCloseModal의 함수 내용은 위와 같이 모달을 닫을 수 있게끔 설정하는 함수도 따로 작성해주어야한다.

📸 Screenshot

import Modal from '../../shared/ui/modal';
import useModalStore from '../../shared/ui/modal/useModalStore';

const 머시깽깽이 = () => {

  const modalId = useRef('confirm');
  const { modals, openModal, closeModal } = useModalStore();

  const handleOpenBackModal = () => {
    openModal(modalId.current);
  };

  const handleCloseModal = () => {
    closeModal(modalId.current);
  };
  
  return (
  <div>
  <button onClick={handleOpenBackModal}>
{modals[modalId.current]?.isVisible && (
        <Modal
          customModalContentStyle={styles.backButtonModal}
          onClose={handleCloseModal}
          customModalButtonStyle={styles.defaultButton}
          isVisible={modals[modalId.current]?.isVisible}
        >
          <div className={styles.modalContainer}>
            <img
              src={exclamationImage}
              className={styles.exclamationImage}
              alt="느낌표 이미지"
            />
            <p>
              페이지를 떠나시면 작성 중인 내용을 잃게 됩니다. 떠나시겠습니까?
            </p>
            <div className={styles.modalButtonContainer}>
              <Button className={styles.backButton} onClick={handleCloseModal}>
                취소
              </Button>
              <Button className={styles.confirmButton} onClick={handleGoBack}>
                확인
              </Button>
            </div>
          </div>
        </Modal>
      )}
</div>
  )
}


## 📢 Notes

급하게 반영한 만큼 수정할 부분이 산더미라 v2, v3에 반영하도록 하겠읍니다

@changhui-chan changhui-chan self-assigned this Dec 26, 2024
@21ow
Copy link
Owner

21ow commented Dec 26, 2024

감사합니다~! 🐹🐹

@21ow 21ow added the ✨ Feature 새로운 기능이나 기능 개선 작업을 추가한 경우 label Dec 26, 2024
@changhui-chan changhui-chan merged commit e4fc2bc into develop Dec 29, 2024
2 checks passed
21ow pushed a commit that referenced this pull request Jan 17, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ Feature 새로운 기능이나 기능 개선 작업을 추가한 경우
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants