Skip to content

패스워드 리셋 모달 추가#40

Closed
Jieunsse wants to merge 3 commits into
mainfrom
feature/password-reset-modal
Closed

패스워드 리셋 모달 추가#40
Jieunsse wants to merge 3 commits into
mainfrom
feature/password-reset-modal

Conversation

@Jieunsse

@Jieunsse Jieunsse commented Feb 7, 2026

Copy link
Copy Markdown
Contributor

Summary

  • 패스워드 리셋 모달 추가했습니다.

Issue

Scope

@Jieunsse Jieunsse added this to the 컴포넌트 milestone Feb 7, 2026
@Jieunsse Jieunsse self-assigned this Feb 7, 2026
@Jieunsse Jieunsse added this to workers Feb 7, 2026
@Jieunsse Jieunsse added the 기능추가 기능개발 및 추가할 때 사용해주세요. label Feb 7, 2026
@github-project-automation github-project-automation Bot moved this to 개발 대기중 in workers Feb 7, 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은 ResetPassword, AddTodoList, MemberInvite 세 가지 새로운 모달 컴포넌트를 도입하여 애플리케이션의 상호작용 기능을 확장합니다. 각 모달은 특정 사용자 인터페이스 요구사항을 충족하며, 핵심 Modal 컴포넌트의 유연성을 높이기 위해 콘텐츠 영역 스타일링 기능이 추가되었습니다.

Highlights

  • 새로운 모달 컴포넌트 추가: 비밀번호 재설정, 할 일 목록 추가, 멤버 초대 기능을 위한 세 가지 새로운 모달 컴포넌트(ResetPassword, AddTodoList, MemberInvite)가 추가되었습니다.
  • 모달 컴포넌트 확장: 기존 Modal 컴포넌트에 contentClassName prop이 추가되어 모달 콘텐츠 영역에 대한 사용자 정의 스타일링이 가능해졌습니다.

🧠 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/AddTodoList.module.css
    • AddTodoList 모달의 레이아웃 및 스타일링을 정의하는 새로운 CSS 모듈이 추가되었습니다.
  • src/components/Modal/domain/AddTodoList.tsx
    • 할 일 목록을 생성하기 위한 새로운 React 컴포넌트로, 작업 입력 필드와 제출 버튼을 포함합니다.
  • src/components/Modal/domain/MemberInvite.module.css
    • MemberInvite 모달의 초대 링크 표시 및 복사 버튼 스타일링을 위한 새로운 CSS 모듈이 추가되었습니다.
  • src/components/Modal/domain/MemberInvite.tsx
    • 멤버 초대를 위한 새로운 React 컴포넌트로, 초대 링크를 표시하고 복사 기능을 제공합니다.
  • src/components/Modal/domain/ResetPassword.module.css
    • ResetPassword 모달의 폼, 입력 필드 및 액션 버튼에 대한 스타일을 정의하는 새로운 CSS 모듈이 추가되었습니다.
  • src/components/Modal/domain/ResetPassword.tsx
    • 비밀번호 재설정을 위한 새로운 React 컴포넌트로, 이메일 입력 필드와 재설정 링크 전송 또는 모달 닫기 버튼을 포함합니다.
  • src/components/Modal/types/types.ts
    • BaseModalProps 인터페이스에 contentClassName 속성이 추가되어 모달의 콘텐츠 영역에 사용자 정의 스타일을 적용할 수 있게 되었습니다.
Activity
  • PR은 Jieunsse에 의해 생성되었습니다.
  • 이슈 #33을 해결합니다.
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.

@Jieunsse Jieunsse closed this Feb 7, 2026
@github-project-automation github-project-automation Bot moved this from 개발 대기중 to 개발 완료 in workers Feb 7, 2026

@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은 패스워드 리셋 모달을 추가하는 것을 목표로 하고 있지만, AddTodoListMemberInvite 모달도 함께 추가되었습니다. 전반적으로 새로운 모달 컴포넌트들의 구조는 잘 잡혀있습니다. 다만, AddTodoListResetPassword 컴포넌트에서 폼 데이터를 처리하는 로직이 누락되어 있어, 컴포넌트가 의도대로 동작하지 않는 문제가 있습니다. 이 부분은 반드시 수정이 필요합니다. 또한, ResetPassword 모달의 스타일시트에는 반응형 디자인을 위한 미디어 쿼리가 빠져있어 추가가 필요해 보입니다. 자세한 내용은 각 파일에 남긴 리뷰 코멘트를 참고해주세요.

export interface AddTodoListProps {
isOpen: boolean;
onClose: () => void;
onCreate: () => void;

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.

critical

onCreate prop이 생성할 할 일의 내용을 인자로 받을 수 있도록 onCreate: (todo: string) => void; 와 같이 시그니처를 변경해야 합니다. 현재 구현에서는 입력된 값이 onCreate 함수로 전달되지 않습니다.

Suggested change
onCreate: () => void;
onCreate: (todo: string) => void;

Comment on lines +19 to +22
const handleSubmit = (e: FormEvent<HTMLFormElement>) => {
e.preventDefault();
onCreate();
};

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.

critical

handleSubmit 함수가 폼 데이터를 읽어서 onCreate 콜백에 전달해야 합니다. FormData API를 사용하면 Input의 값을 쉽게 가져올 수 있습니다. 이를 위해 Input 컴포넌트에 name 속성을 추가하는 것을 잊지 마세요 (예: <Input name="todo" ... />).

  const handleSubmit = (e: FormEvent<HTMLFormElement>) => {
    e.preventDefault();
    const formData = new FormData(e.currentTarget);
    const todo = formData.get('todo') as string;
    onCreate(todo);
  };

export interface ResetPasswordProps {
isOpen: boolean;
onClose: () => void;
onSendLink: () => void;

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.

critical

onSendLink prop이 재설정 링크를 보낼 이메일 주소를 인자로 받을 수 있도록 onSendLink: (email: string) => void; 와 같이 시그니처를 변경해야 합니다.

Suggested change
onSendLink: () => void;
onSendLink: (email: string) => void;

Comment on lines +34 to +37
const handleSubmit = (e: FormEvent<HTMLFormElement>) => {
e.preventDefault();
onSendLink();
};

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.

critical

handleSubmit 함수가 폼 데이터를 읽어서 onSendLink 콜백에 전달해야 합니다. FormData API를 사용하면 Input의 값을 쉽게 가져올 수 있습니다. 이 컴포넌트의 Input에는 이미 name="email" 속성이 있으므로 바로 활용할 수 있습니다.

  const handleSubmit = (e: FormEvent<HTMLFormElement>) => {
    e.preventDefault();
    const formData = new FormData(e.currentTarget);
    const email = formData.get('email') as string;
    onSendLink(email);
  };

Comment on lines +1 to +117
.modalContent.modalContent {
display: inline-flex;
padding: 16px 16px 32px 16px;
flex-direction: column;
align-items: stretch;
gap: 10px;
border-radius: 24px;
background: var(--Background-Primary, #fff);
box-sizing: border-box;
width: 384px;
height: 260px;
}

.container {
display: flex;
flex-direction: column;
gap: 16px;
width: 100%;
height: 100%;
box-sizing: border-box;
margin-top: 24px;
}

.header {
display: flex;
flex-direction: column;
gap: 6px;
align-items: center;
}

.title {
margin: 0;
color: var(--Text-Primary, #1e293b);
font-family: Pretendard;
font-size: 16px;
font-style: normal;
font-weight: 500;
line-height: 19px;
text-align: center;
}

.description {
margin: 0;
color: var(--Text-Default, #64748b);
font-family: Pretendard;
font-size: 14px;
font-style: normal;
font-weight: 400;
line-height: 17px;
text-align: center;
}

.form {
display: flex;
flex-direction: column;
gap: 16px;
flex: 1;
}

.input.input {
display: flex;
width: 280px;
height: 48px;
padding: 16px;
align-items: center;
gap: 10px;
border-radius: 12px;
border: 1px solid var(--Border-Primary, #e2e8f0);
background: var(--Background-Primary, #fff);
box-sizing: border-box;
margin: 0 auto;
}

.actions {
display: flex;
width: 280px;
gap: 8px;
margin: auto auto 0;
}

.closeButton {
display: flex;
width: 136px;
height: 48px;
justify-content: center;
align-items: center;
gap: 10px;
border-radius: 12px;
border: 1px solid var(--Color-Brand-Primary, #5189fa);
background: transparent;
color: var(--Color-Brand-Primary, #5189fa);
font-family: Pretendard;
font-size: 16px;
font-style: normal;
font-weight: 600;
line-height: 19px;
cursor: pointer;
}

.sendButton {
display: flex;
width: 136px;
height: 48px;
justify-content: center;
align-items: center;
gap: 10px;
border-radius: 12px;
border: none;
background: var(--Color-Brand-Primary, #5189fa);
color: #fff;
font-family: Pretendard;
font-size: 16px;
font-style: normal;
font-weight: 600;
line-height: 19px;
cursor: pointer;
}

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에는 다른 모달들과 달리 모바일 화면을 위한 반응형 스타일(@media 쿼리)이 빠져있습니다. 이로 인해 모바일에서 레이아웃이 깨질 수 있습니다. 일관성을 유지하고 더 나은 사용자 경험을 위해 (max-width: 480px)와 같은 중단점(breakpoint)에 대한 스타일을 추가하는 것을 권장합니다.

@Jieunsse Jieunsse deleted the feature/password-reset-modal 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.

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

1 participant