Skip to content

모달 캘린더 구현#44

Merged
Jieunsse merged 2 commits into
mainfrom
feature/modal-calender
Feb 11, 2026
Merged

모달 캘린더 구현#44
Jieunsse merged 2 commits into
mainfrom
feature/modal-calender

Conversation

@Jieunsse

@Jieunsse Jieunsse commented Feb 9, 2026

Copy link
Copy Markdown
Contributor

Summary

  • 모달 캘린더 구현 완료

Issue

Scope

  • 특이사항

디자인 변경 및 애니메이션 적용을 고려한 리팩토링을 진행하고 있습니다.

@Jieunsse Jieunsse added this to the 컴포넌트 milestone Feb 9, 2026
@Jieunsse Jieunsse self-assigned this Feb 9, 2026
@Jieunsse Jieunsse added the 기능추가 기능개발 및 추가할 때 사용해주세요. label Feb 9, 2026
@Jieunsse Jieunsse added this to workers Feb 9, 2026
@github-project-automation github-project-automation Bot moved this to 개발 대기중 in workers Feb 9, 2026
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello @Jieunsse, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 PR은 새로운 CalenderModal 컴포넌트를 도입하여 "할 일" 항목을 생성하고 예약하기 위한 포괄적인 인터페이스를 제공합니다. 날짜 및 시간 선택, 다양한 반복 옵션, 메모 입력 기능을 포함하며, 향상된 사용자 경험을 위해 동적인 UI 조정을 제공합니다.

Highlights

  • 새로운 CalenderModal 컴포넌트 추가: 할 일 생성 및 예약을 위한 새로운 CalenderModal 컴포넌트가 도입되었습니다. 이 모달은 제목, 시작 날짜 및 시간, 반복 설정, 메모 입력 등 다양한 기능을 제공합니다.
  • 모달 스타일링 및 반응형 디자인: CalenderModal의 시각적 요소를 정의하는 새로운 CSS 모듈이 추가되었습니다. 모달 컨테이너, 폼 요소, 날짜/시간 선택기, 드롭다운, 요일 버튼 등에 대한 스타일이 포함되어 있으며, 작은 화면에 대한 반응형 조정도 지원합니다.
  • 폼 상태 관리 및 로직: CalenderModal 폼의 상태와 로직을 관리하기 위한 useCalenderModalForm 커스텀 훅이 구현되었습니다. 이 훅은 할 일 제목, 시작 날짜/시간, 반복 유형, 반복 요일, 메모 등의 상태를 관리하고, 폼 필드 업데이트 및 선택기 토글 기능을 제공합니다.
  • 동적 UI 조정: 활성화된 날짜/시간 선택기 또는 요일 선택기 가시성에 따라 모달의 높이가 동적으로 조정됩니다. 이는 사용자 경험을 향상시키기 위한 UI 유연성을 제공합니다.
  • 유틸리티 및 타입 정의: 모달의 동작을 지원하는 다양한 유틸리티 함수와 타입 정의가 추가되었습니다. 텍스트 옵션 해결, 날짜 형식 지정, 반복 유형 처리, 요일 정렬 및 토글 등의 기능이 포함됩니다.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • src/components/Modal/domain/components/Calender/CalenderModal.module.css
    • CalenderModal 컴포넌트 스타일링을 위한 새로운 CSS 모듈이 추가되었습니다.
    • 모달 컨테이너, 헤더, 폼 요소(입력 필드, 라벨), 날짜/시간 선택기, 드롭다운, 요일 버튼, 메모 입력 필드 및 제출 버튼에 대한 스타일을 정의합니다.
    • 작은 화면에 대한 반응형 조정이 포함되어 있습니다.
  • src/components/Modal/domain/components/Calender/CalenderModal.tsx
    • 주요 CalenderModal React 컴포넌트가 추가되었습니다.
    • 제목, 시작 날짜/시간, 반복 설정 및 메모를 포함한 할 일 항목 생성을 위한 UI를 구현합니다.
    • 상태 관리 및 폼 로직을 위해 useCalenderModalForm 훅을 활용합니다.
    • 날짜 및 시간 선택을 위해 CalendarCalendarTime 컴포넌트를 통합합니다.
    • 폼 제출 및 모달 닫기 로직을 처리합니다.
    • 활성화된 선택기 및 요일 선택기 가시성에 따라 CSS 클래스를 동적으로 적용합니다.
  • src/components/Modal/domain/components/Calender/constants/CalenderModal.constants.ts
    • CalenderModal을 위한 상수가 추가되었습니다.
    • 접근성을 위한 ID, 입력 필드 이름, 반복 유형(없음, 한 번, 매일, 매주, 매월), 기본 텍스트 라벨 및 플레이스홀더, 드롭다운 반복 옵션 및 요일 옵션을 정의합니다.
  • src/components/Modal/domain/components/Calender/hooks/useCalenderModalForm.ts
    • CalenderModal 폼의 상태 및 로직 관리를 위한 사용자 정의 React 훅 useCalenderModalForm이 추가되었습니다.
    • todoTitle, startDate, startTime, repeatType, repeatDays, memo, activePicker 상태를 관리합니다.
    • 폼 필드 업데이트, 반복 유형 변경, 요일 토글, 날짜/시간 선택기 표시/숨기기를 위한 핸들러를 제공합니다.
    • resetForm 함수를 포함합니다.
  • src/components/Modal/domain/components/Calender/types/CalenderModal.types.ts
    • CalenderModal을 위한 타입 정의가 추가되었습니다.
    • CalenderRepeatType, CalenderActivePicker, CalenderModalFormValues, CalenderModalSubmitPayload, CalenderModalTextOptions, ResolvedCalenderModalText, TodoTitleInputProps, TodoMemoInputProps, CalenderModalInputOptions, CalenderModalInitialValues, CalenderModalProps를 정의합니다.
  • src/components/Modal/domain/components/Calender/utils/CalenderModal.utils.ts
    • CalenderModal을 위한 유틸리티 함수가 추가되었습니다.
    • 텍스트 옵션, 닫기 옵션 해결, 날짜 라벨 형식 지정, 반복 유형 해결, 요일 반복 유형 확인, 요일 정렬 및 토글, 초기 폼 값 해결, 선택기 토글 키 확인, 콘텐츠 높이 클래스 이름 해결을 위한 함수를 포함합니다.
Activity
  • 작성자 Jieunsse가 이 풀 리퀘스트를 생성했습니다.
  • 이 풀 리퀘스트는 모달 캘린더 기능을 구현합니다.
  • 설명에는 디자인 변경 및 애니메이션 적용을 위한 리팩토링이 진행 중이라고 언급되어 있습니다.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

모달 캘린더 구현을 위한 PR 잘 보았습니다. 전반적으로 컴포넌트 구조가 잘 잡혀있고, 커스텀 훅을 사용해 상태 관리 로직을 분리한 점이 인상적입니다. 타입 정의와 유틸리티 함수들도 명확하게 작성되어 유지보수성이 높아 보입니다. 코드 품질을 더욱 향상시키기 위해 몇 가지 개선점을 제안드리니 확인 부탁드립니다.

startDate,
startTime,
repeatType,
repeatDays: isWeekdaySelectorVisible ? repeatDays : [],

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

isWeekdaySelectorVisible에 의존하여 repeatDays를 전송하는 로직에 버그가 있을 수 있습니다. isWeekdaySelectorVisibleactivePicker의 상태에 따라 false가 될 수 있는데, 이 경우 repeatType이 'weekly' 또는 'monthly'여도 repeatDays가 빈 배열로 전송됩니다. 예를 들어, 할 일 제목 입력 필드에서 Enter 키를 눌러 폼을 제출할 때 날짜나 시간 선택기가 열려있다면(activePicker !== 'none') 문제가 발생합니다. repeatType에 직접 의존하도록 수정하는 것이 좋습니다. isWeekdayRepeatType 유틸리티 함수를 utils/CalenderModal.utils에서 가져와 사용해주세요.

Suggested change
repeatDays: isWeekdaySelectorVisible ? repeatDays : [],
repeatDays: isWeekdayRepeatType(repeatType) ? repeatDays : [],

Comment on lines +1 to +26
section > .modalContent {
width: 384px;
height: 664px;
display: inline-flex;
padding: 0 16px 32px 16px;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 10px;
border-radius: 24px;
background: var(--Background-Primary, #fff);
box-shadow: 4px 4px 10px 0 rgba(36, 36, 36, 0.25);
box-sizing: border-box;
}

section > .modalContentDateOpen {
height: 930px;
}

section > .modalContentTimeOpen {
height: 848px;
}

section > .modalContentWeekdayOpen {
height: 759px;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

CSS 선택자에서 section > 부분은 Modal 컴포넌트의 내부 구현(오버레이를 <section>으로 렌더링)에 의존하게 되어 유지보수성을 저해할 수 있습니다. 만약 Modal 컴포넌트가 <div>를 사용하도록 리팩토링되면 이 스타일이 적용되지 않을 수 있습니다. 클래스 이름만으로도 충분히 구체적이므로 태그 이름 선택자 section을 제거하여 컴포넌트 간의 결합도를 낮추는 것이 좋습니다. 이 변경은 215라인의 @media 쿼리 내 선택자에도 동일하게 적용되어야 합니다.

.modalContent {
  width: 384px;
  height: 664px;
  display: inline-flex;
  padding: 0 16px 32px 16px;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  gap: 10px;
  border-radius: 24px;
  background: var(--Background-Primary, #fff);
  box-shadow: 4px 4px 10px 0 rgba(36, 36, 36, 0.25);
  box-sizing: border-box;
}

.modalContentDateOpen {
  height: 930px;
}

.modalContentTimeOpen {
  height: 848px;
}

.modalContentWeekdayOpen {
  height: 759px;
}

Comment on lines +164 to +165
<section className={styles.fieldGroup}>
<p className={styles.label}>{textOptions.startDateTimeLabel}</p>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

접근성 향상을 위해 여러 관련된 컨트롤을 그룹화할 때 <section><p> 대신 <fieldset><legend>를 사용하는 것이 좋습니다. <legend>fieldset의 자식 컨트롤 그룹에 대한 캡션을 제공하여 스크린 리더 사용자에게 더 명확한 컨텍스트를 제공합니다. 이 패턴을 repeatSettingLabelrepeatWeekdayLabel을 사용하는 다른 그룹들에도 적용하는 것을 권장합니다. 각 그룹의 닫는 태그도 </section>에서 </fieldset>로 변경해야 합니다.

Suggested change
<section className={styles.fieldGroup}>
<p className={styles.label}>{textOptions.startDateTimeLabel}</p>
<fieldset className={styles.fieldGroup}>
<legend className={styles.label}>{textOptions.startDateTimeLabel}</legend>

@Jieunsse Jieunsse merged commit 54ea55f into main Feb 11, 2026
1 check passed
@github-project-automation github-project-automation Bot moved this from 개발 대기중 to 개발 완료 in workers Feb 11, 2026
@Jieunsse Jieunsse deleted the feature/modal-calender branch February 20, 2026 09:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

기능추가 기능개발 및 추가할 때 사용해주세요.

Projects

Status: 개발 완료

Development

Successfully merging this pull request may close these issues.

도메인 맥락 포함된 모달 개발

2 participants