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: #188 일정 상세 모달 수정 버튼 기능 구현 (상세 모달 → 수정 모달 전환) #190

Merged
merged 4 commits into from
Oct 6, 2024

Conversation

Seok93
Copy link
Contributor

@Seok93 Seok93 commented Oct 5, 2024

PR Type

What kind of change does this PR introduce?

  • [Feat] 새로운 기능을 추가했어요.

Related Issues

What does this PR do?

  • 일정 상세 모달에서 수정 모달 전환을 위한 props 추가 (openUpdateModal)
  • 칸반보드: 일정 상세 모달의 수정 버튼을 통해 수정 모달로 전환
  • 캘린더: 일정 상세 모달의 수정 버튼을 통해 수정 모달로 전환

Other information

이전에 타입 수정으로 인해 Calendar 페이지에서 타입 호환 문제가 있는 것 같습니다. 이는 다음 PR에서 처리하도록 하겠습니다.

View

캘린더에서의 수정 모달 전환
화면 예시 - 캘린더 수정 모달 전환

칸반보드에서의 수정 모달 전환
화면 예시 - 칸반보드 수정 모달 전환

@Seok93 Seok93 added the 🌟 Feature 새로운 기능 개발했어요 label Oct 5, 2024
@Seok93 Seok93 self-assigned this Oct 5, 2024
Copy link

coderabbitai bot commented Oct 5, 2024

Walkthrough

이 풀 리퀘스트는 DetailModalTask 컴포넌트에 새로운 프롭인 openUpdateModal을 추가하고, 이를 통해 수정 모달을 열 수 있도록 기능을 개선했습니다. TaskItem 컴포넌트는 두 개의 모달을 독립적으로 관리할 수 있도록 수정되었으며, CalendarPageKanbanPage에서 모달 관련 상태 및 이벤트 처리 로직이 업데이트되었습니다. 이러한 변경은 모달 관리의 명확성을 높이고, 태스크 세부정보 및 업데이트 기능을 보다 구조적으로 처리할 수 있게 합니다.

Changes

파일 경로 변경 요약
src/components/modal/task/DetailModalTask.tsx DetailModalTaskopenUpdateModal 프롭 추가 및 handleUpdateClick 함수 수정.
src/components/task/kanban/TaskItem.tsx UpdateModalTask 임포트 추가, 두 개의 모달 상태 관리 로직 업데이트, DetailModalTaskopenUpdateModal 프롭 전달.
src/pages/project/CalendarPage.tsx selectedTask 초기화 로직 수정, handleSelectEvent 함수 업데이트, 모달 렌더링 로직 수정.
src/pages/project/KanbanPage.tsx createChangedStatuscreateChangedTasks 함수 추가, 드래그 앤 드롭 기능 개선.

Assessment against linked issues

Objective Addressed Explanation
일정 상세 모달에서 수정 모달 전환을 위한 props 추가 (openUpdateModal) (#188)
칸반보드: 일정 상세 모달의 수정 버튼을 통해 수정 모달로 전환 (#188)
캘린더: 일정 상세 모달의 수정 버튼을 통해 수정 모달로 전환 (#188)

Possibly related PRs

Suggested labels

🎨 UI

Suggested reviewers

  • Yoonyesol
  • ice-bear98

🐰 변화의 춤을 추며,
수정 모달이 열리네,
클릭 한 번에 태스크가,
새로 태어나는 걸 보네.
달콤한 업데이트의 순간,
우리 함께 즐겨보자! 🎉


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Outside diff range and nitpick comments (8)
src/components/task/kanban/TaskItem.tsx (2)

19-20: 모달 관리 로직이 개선되었습니다.

상세 모달과 수정 모달을 독립적으로 제어할 수 있도록 useModal 훅 사용이 업데이트되었습니다. 이는 PR의 목표에 부합하는 변경사항입니다.

가독성 향상을 위해 다음과 같이 구조 분해 할당을 사용하는 것을 고려해 보세요:

const [
  { showModal: showDetailModal, openModal: openDetailModal, closeModal: closeDetailModal },
  { showModal: showUpdateModal, openModal: openUpdateModal, closeModal: closeUpdateModal }
] = [useModal(), useModal()];

50-50: UpdateModalTask 컴포넌트가 적절히 추가되었습니다.

수정 모달 기능을 구현하기 위해 UpdateModalTask 컴포넌트가 추가되었습니다. 이는 PR의 목표에 부합하는 변경사항입니다.

projecttask 객체를 전달하는 대신, 필요한 속성만 전달하는 것이 좋습니다. 예를 들어:

<UpdateModalTask projectId={project.id} taskId={task.taskId} onClose={closeUpdateModal} />

이렇게 하면 컴포넌트 간의 결합도를 낮출 수 있습니다.

src/pages/project/CalendarPage.tsx (3)

40-48: selectedTask 상태 초기화 개선

기본 Task 객체로 selectedTask 상태를 초기화한 것은 좋은 접근입니다. 이는 항상 일관된 구조를 보장합니다.

타입 안전성을 더욱 높이기 위해 다음과 같은 개선을 고려해 보세요:

const defaultTask: Task = {
  taskId: 0,
  statusId: 0,
  name: '',
  content: '',
  startDate: '',
  endDate: '',
  sortOrder: 0,
};

const [selectedTask, setSelectedTask] = useState<Task>(defaultTask);

이렇게 하면 기본 Task 객체를 재사용할 수 있고, 코드의 가독성도 향상됩니다.


58-61: handleSelectEvent 함수 변경 승인

event.task 객체를 구조 분해하고 새로운 Task 객체를 생성하는 방식으로 변경한 것은 좋습니다. 이는 선택된 작업의 구조를 명확히 하고 타입 안전성을 높입니다.

코드의 가독성을 더욱 높이기 위해 다음과 같은 개선을 고려해 보세요:

const handleSelectEvent = (event: CustomEvent) => {
  const { task } = event;
  setSelectedTask(task);
  openDetailModal();
};

이렇게 하면 코드가 더 간결해지고, CustomEvent 타입이 올바르게 정의되어 있다면 타입 안전성도 유지됩니다.


135-143: 모달 렌더링 로직 변경 승인

DetailModalTask와 UpdateModalTask의 조건부 렌더링 로직이 잘 구현되었습니다. 특히 DetailModalTask에 openUpdateModal prop을 전달한 것은 PR의 주요 목적인 상세 모달에서 수정 모달로의 전환 기능을 구현하는 데 핵심적인 부분입니다.

prop 타입의 안전성을 높이기 위해 다음과 같은 개선을 고려해 보세요:

  1. DetailModalTask와 UpdateModalTask 컴포넌트에 대한 prop 타입을 명시적으로 정의합니다.
  2. 필요한 경우 prop의 필수 여부를 지정합니다.

예를 들어:

type DetailModalTaskProps = {
  project: Project;
  task: Task;
  openUpdateModal: () => void;
  onClose: () => void;
};

type UpdateModalTaskProps = {
  project: Project;
  taskId: number;
  onClose: () => void;
};

이렇게 하면 컴포넌트 사용 시 타입 오류를 미리 방지할 수 있습니다.

src/components/modal/task/DetailModalTask.tsx (2)

21-21: 타입 정의에 openUpdateModal 추가 승인

openUpdateModal 프롭의 추가는 PR의 목표와 잘 일치합니다. 상세 모달에서 수정 모달로의 전환 기능을 구현하는 데 필요한 변경사항입니다.

타입 안전성을 더욱 높이기 위해 다음과 같이 변경하는 것을 고려해보세요:

openUpdateModal: () => void;

대신

openUpdateModal: VoidFunction;

이렇게 하면 의도를 더 명확히 표현할 수 있습니다.


39-42: handleUpdateClick 함수 구현 승인 및 개선 제안

handleUpdateClick 함수의 구현은 PR의 목표를 달성하는 데 적합합니다. 수정 모달을 열고 현재 모달을 닫는 순서가 논리적으로 보입니다.

만약 openUpdateModal이 비동기 작업을 포함할 가능성이 있다면, 다음과 같이 개선할 수 있습니다:

const handleUpdateClick = async () => {
  await openUpdateModal();
  handleClose();
};

이렇게 하면 openUpdateModal 작업이 완료된 후에 현재 모달이 닫히므로, 잠재적인 레이스 컨디션이나 의도치 않은 UI 동작을 방지할 수 있습니다.

src/pages/project/KanbanPage.tsx (1)

Line range hint 28-42: '!' 연산자의 사용 최소화 및 에러 처리 필요

find 메서드를 사용할 때 결과가 undefined일 수 있으므로, '!' 연산자를 사용하여 단언하기보다는 조건문을 통해 null 또는 undefined 여부를 확인하는 것이 좋습니다. 이는 런타임 에러를 방지하고 코드의 안정성을 높입니다.

코드 수정 제안:

- const sourceTasks = newStatusTasks.find((data) => data.statusId === sourceStatusId)!.tasks;
+ const sourceStatusData = newStatusTasks.find((data) => data.statusId === sourceStatusId);
+ if (!sourceStatusData) throw Error('유효하지 않은 sourceStatusId입니다.');
+ const sourceTasks = sourceStatusData.tasks;

- const destinationTasks = isSameStatus
-   ? sourceTasks
-   : newStatusTasks.find((data) => data.statusId === destinationStatusId)!.tasks;
+ const destinationStatusData = newStatusTasks.find((data) => data.statusId === destinationStatusId);
+ if (!destinationStatusData) throw Error('유효하지 않은 destinationStatusId입니다.');
+ const destinationTasks = isSameStatus ? sourceTasks : destinationStatusData.tasks;

- const task = sourceTasks.find((data) => data.taskId === taskId)! as Task;
+ const foundTask = sourceTasks.find((data) => data.taskId === taskId);
+ if (!foundTask) throw Error('유효하지 않은 taskId입니다.');
+ const task = foundTask as Task;
🧰 Tools
🪛 Biome

[error] 25-28: The assignment should not be in an expression.

The use of assignments in expressions is confusing.
Expressions are often considered as side-effect free.

(lint/suspicious/noAssignInExpressions)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 0728622 and 2bea096.

📒 Files selected for processing (4)
  • src/components/modal/task/DetailModalTask.tsx (2 hunks)
  • src/components/task/kanban/TaskItem.tsx (3 hunks)
  • src/pages/project/CalendarPage.tsx (3 hunks)
  • src/pages/project/KanbanPage.tsx (2 hunks)
🧰 Additional context used
🪛 Biome
src/pages/project/KanbanPage.tsx

[error] 25-28: The assignment should not be in an expression.

The use of assignments in expressions is confusing.
Expressions are often considered as side-effect free.

(lint/suspicious/noAssignInExpressions)

🔇 Additional comments (11)
src/components/task/kanban/TaskItem.tsx (4)

8-8: 새로운 import 문이 적절히 추가되었습니다.

UpdateModalTask 컴포넌트를 가져오는 import 문이 추가되었습니다. 이는 PR의 목표인 수정 모달 기능 구현에 필요한 변경사항입니다.


26-26: 태스크 클릭 핸들러가 적절히 수정되었습니다.

handleTaskClick 함수가 상세 모달을 여는 것으로 변경되었습니다. 이는 새로운 모달 관리 방식과 일치하며, PR의 목표에 부합합니다.


47-49: DetailModalTask 렌더링이 적절히 업데이트되었습니다.

DetailModalTask 컴포넌트에 openUpdateModal prop이 추가되었습니다. 이를 통해 상세 모달에서 수정 모달로의 전환이 가능해졌으며, PR의 목표에 부합합니다.


Line range hint 1-53: 전반적인 변경 사항이 PR 목표에 잘 부합합니다.

이 PR의 주요 목표인 상세 모달에서 수정 모달로의 전환 기능이 성공적으로 구현되었습니다. 주요 변경 사항은 다음과 같습니다:

  1. 새로운 UpdateModalTask 컴포넌트 import
  2. 상세 모달과 수정 모달을 위한 독립적인 모달 제어 로직
  3. 태스크 클릭 시 상세 모달 열기
  4. DetailModalTask에 수정 모달 열기 기능 추가
  5. UpdateModalTask 컴포넌트 렌더링 추가

이러한 변경 사항들은 칸반 보드와 캘린더 뷰에서 상세 모달에서 수정 모달로의 원활한 전환을 가능하게 합니다. 몇 가지 minor한 개선 사항을 제안했지만, 전반적으로 코드 품질이 우수하며 PR의 목표를 잘 달성했습니다.

src/pages/project/CalendarPage.tsx (2)

16-16: import 문 변경 승인

Task 타입과 DetailModalTask 컴포넌트의 추가 import는 PR의 목적에 부합하며, 새로운 기능 구현에 필요한 요소들을 적절히 가져오고 있습니다.

Also applies to: 18-18


52-53: 모달 처리 로직 개선 승인

상세 모달과 수정 모달을 독립적으로 제어할 수 있도록 변경한 것은 매우 적절합니다. 이는 PR의 주요 목적인 상세 모달에서 수정 모달로의 전환 기능을 구현하는 데 필수적인 변경사항입니다.

src/components/modal/task/DetailModalTask.tsx (2)

25-25: DetailModalTask 컴포넌트 매개변수에 openUpdateModal 추가 승인

DetailModalTask 컴포넌트의 매개변수에 openUpdateModal을 추가한 것은 타입 정의 변경사항과 일치하며, PR의 목표를 달성하는 데 필요한 적절한 변경입니다.


Line range hint 1-138: 전체 변경사항 요약 및 PR 목표 달성 확인

이 PR의 변경사항들은 일정 상세 모달에서 수정 모달로의 전환 기능을 성공적으로 구현했습니다. 주요 변경사항은 다음과 같습니다:

  1. ViewModalTaskProps 타입에 openUpdateModal 프롭 추가
  2. DetailModalTask 컴포넌트에 openUpdateModal 매개변수 추가
  3. handleUpdateClick 함수 구현으로 모달 전환 로직 구현

이러한 변경사항들은 PR의 목표인 "일정 상세 모달 수정 버튼 기능 구현 (상세 모달 → 수정 모달 전환)"을 정확히 달성하고 있습니다. 제안된 minor 개선사항들을 고려하여 구현을 더욱 견고하게 만들 수 있을 것입니다.

src/pages/project/KanbanPage.tsx (3)

12-15: 함수 createChangedStatus의 로직이 정확합니다

상태 순서 변경을 위한 로직이 올바르게 구현되어 있습니다. 깊은 복사를 통해 원본 데이터를 보호하고 있으며, sortOrder를 업데이트하는 처리도 적절합니다.


Line range hint 44-56: useEffect 훅에서의 상태 관리가 올바릅니다

statusTaskList의 변경에 따라 localStatusTaskList를 업데이트하는 로직이 정확하게 구현되어 있습니다.


Line range hint 58-75: handleDragEnd 함수의 이벤트 처리 로직이 정확합니다

드래그 종료 시 타입에 따라 적절한 함수를 호출하여 상태 및 일정의 순서 변경을 효과적으로 처리하고 있습니다.

Yoonyesol
Yoonyesol previously approved these changes Oct 5, 2024
Copy link
Contributor

@Yoonyesol Yoonyesol left a comment

Choose a reason for hiding this comment

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

오 모달 간에 위화감 없이 잘 넘어가는데요. 좋네요!! 작업 고생 많으셨습니다

ice-bear98
ice-bear98 previously approved these changes Oct 5, 2024
Copy link
Contributor

@ice-bear98 ice-bear98 left a comment

Choose a reason for hiding this comment

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

모달 전환 고생하셨습니다! 경로 한번만 확인해주시면 될거같아요~

src/pages/project/CalendarPage.tsx Outdated Show resolved Hide resolved
@Seok93 Seok93 dismissed stale reviews from ice-bear98 and Yoonyesol via aa5bf29 October 6, 2024 10:12
@Seok93
Copy link
Contributor Author

Seok93 commented Oct 6, 2024

@Yoonyesol @ice-bear98 리뷰 감사합니다!

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