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: #204 일정 수정 모달에서 일정 상세 모달로 돌아가기 버튼 추가 #205

Merged
merged 9 commits into from
Oct 14, 2024

Conversation

Seok93
Copy link
Contributor

@Seok93 Seok93 commented Oct 11, 2024

PR Type

What kind of change does this PR introduce?

  • [Feat] 새로운 기능을 추가했어요.
  • [Refactor] 리팩토링을 했어요 (기능적인 변화 없이, api 변경 없이)
  • [Comment] 필요한 주석 추가/삭제/변경 했어요.

Related Issues

What does this PR do?

  • 일정 수정 버튼 클릭 시 모달이 닫히는 기능 제거
  • ModalButton text 색상 props 추가
  • 일정 상세보기 모달에서 일정 정보를 찾도록 수정
  • 캘린더 양식에서 일정을 hover시 CSS 처리 추가
  • QueryFilter 옵션 수정으로 refetch 요청 최소화
  • 일정 목록 로딩시 캘린더에서 Spinner UI가 나오도록 수정
  • 돌아가기 버튼 추가

Other information

캘린더 양식에서는 문제없이 수정이 가능하지만, 칸반 보드에서 문제가 되는 부분이 있습니다.

일정 수정 모달에서는 다음과 같이 크게 3가지 영역으로 나뉘어 개별적으로 일정 정보를 수정하고 있습니다.

1. 일정 상태, 일정명, 기간(시작일/종료일), 일정 내용 수정 ⇒ 일정 정보 수정 API
2. 수행자 추가/삭제 ⇒ 일정 수행자 추가 API, 일정 수행자 삭제 API
3. 파일 추가/삭제 ⇒ 일정 파일 추가 API, 일정 파일 삭제 API

이중에서 1번의 경우에서 특히 일정 상태를 수정할 때 발생하는 문제입니다. (일정명, 기간, 일정 내용 수정은 괜찮습니다.) 일정명, 기간, 일정 내용은 수정이 되더라도 TaskItem이라는 컴포넌트가 리렌더링이될 뿐 빠르게 언마운트 후 마운트하지 않습니다. 하지만 일정 상태를 수정하는 경우, 상태를 수정한 TaskItem에 한해서면 언마운트 후 마운트를 수행합니다. 때문에 일정 수정 모달의 showModal 정보가 초기화 되면서 모달 컴포넌트가 자동으로 사라집니다.

화면 예시 - 일정 상세보기 돌아가기 버튼 칸반보드 문제

처음에는 react 상태(props, state), key 등의 영향으로 발생하는건가 고민해보았지만, 뚜렷히 원인을 찾을 수 없었고, react-beautiful-dnd 라이브러리의 issue를 확인하여 비슷한 상황을 겪은 내용을 찾았습니다. 해당 이슈도 dragend 이후 item이 unmount-remount가 일어난다는 것이었고, 이를 통해 react에도 등록되어 있는 이슈임을 알게 되었습니다.

내용을 읽어보던중 react reparenting이라는 개념을 처음 접하게 되었습니다. react reparenting이란 부모에 속한 자식 노드가 다른 부모에게 옮겨갈 때 구성된 트리 구조가 변경되게 되어 언마운트와 리마운트가 일어난다는 개념이었습니다. 일단은 지금까지 만든 내용을 넣고 다른 PR에서 해결하려고 생각하고 있습니다.

reparenting

Reparenting is now possible with React를 참고하여 해결책을 찾아보려고 합니다.

View

화면 예시 - 일정 상세보기 돌아가기 버튼

@Seok93 Seok93 added 🌟 Feature 새로운 기능 개발했어요 🛠️ Refactor 코드를 개선했어요 labels Oct 11, 2024
@Seok93 Seok93 self-assigned this Oct 11, 2024
Copy link

coderabbitai bot commented Oct 11, 2024

Walkthrough

이 변경 사항은 ModalButton 컴포넌트의 ModalButtonProps 타입에 새로운 필수 속성 color를 추가하고, 여러 컴포넌트에서 이 속성을 사용하도록 업데이트하는 내용을 포함합니다. 각 버튼의 className 속성은 이제 하드코딩된 text-white 대신 동적으로 제공된 color 값을 사용합니다. 또한, DetailModalTaskUpdateModalTask 컴포넌트의 타입 정의가 변경되어 새로운 매개변수를 수용하도록 수정되었습니다.

Changes

파일 경로 변경 요약
src/components/modal/modalButton.tsx ModalButtonPropscolor 속성 추가, ModalButton 함수 컴포넌트 업데이트
src/components/modal/project-status/CreateModalProjectStatus.tsx ModalButtoncolor 속성 추가
src/components/modal/project-status/UpdateModalProjectStatus.tsx ModalButtoncolor 속성 추가
src/components/modal/project/CreateModalProject.tsx ModalButtoncolor 속성 추가
src/components/modal/project/UpdateModalProject.tsx ModalButtoncolor 속성 추가
src/components/modal/task/CreateModalTask.tsx ModalButtoncolor 속성 추가
src/components/modal/task/DetailModalTask.tsx ViewModalTaskProps 타입 변경, 내부 로직 수정
src/components/modal/task/UpdateModalTask.tsx UpdateModalTaskPropsopenDetailModal 속성 추가, ModalButtoncolor 속성 추가
src/components/modal/team/CreateModalTeam.tsx ModalButtoncolor 속성 추가
src/components/modal/team/UpdateModalTeam.tsx ModalButtoncolor 속성 추가
src/components/task/calendar/CustomEventWrapper.tsx CustomEventWrapperProps 타입 정의 추가, div 클래스 이름 업데이트
src/components/task/kanban/TaskItem.tsx TaskItemPropsstatusId 추가, 관련 컴포넌트 수정
src/hooks/query/useTaskQuery.ts useUpdateTaskInfouseDeleteTask 함수 수정, invalidateQueriesexact: true 옵션 추가
src/pages/project/CalendarPage.tsx selectedTask 상태를 statusTaskList와 동기화, 초기 상태 정의, 로딩 상태에서 Spinner 조건부 렌더링

Assessment against linked issues

Objective Addressed Explanation
일정 정보 수정에 돌아가기 버튼 추가 ( #204 ) 돌아가기 버튼 추가가 이루어지지 않았음.

Possibly related PRs

Suggested labels

🎨 UI, 💉 Fix

Suggested reviewers

  • ice-bear98
  • Yoonyesol

🐰 새로운 색깔로 버튼을 꾸미고,
모달의 매력을 더해주네!
클릭할 때마다 반짝이는,
우리 UI, 더욱 빛나리!
변화의 바람을 타고,
즐거운 경험을 선사하리! 🌈


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: 7

🧹 Outside diff range and nitpick comments (21)
src/components/modal/ModalButton.tsx (2)

3-3: 색상 속성 추가에 대한 승인 및 개선 제안

color 속성을 추가한 것은 좋은 변경사항입니다. 버튼 텍스트의 스타일을 더 유연하게 조정할 수 있게 되었습니다.

개선 제안: 가독성을 높이기 위해 이 색상 옵션들을 별도의 타입으로 정의하는 것을 고려해 보세요. 예를 들어:

type ButtonTextColor = 'text-white' | 'text-emphasis' | 'text-default';

type ModalButtonProps = React.PropsWithChildren<{
  // ... 다른 속성들
  color: ButtonTextColor;
  // ... 나머지 속성들
}>;

이렇게 하면 코드의 재사용성과 유지보수성이 향상될 수 있습니다.


8-8: 컴포넌트 구현 변경 승인 및 일관성 개선 제안

ModalButton 컴포넌트에 color prop을 추가하고 className에서 사용한 것은 적절한 변경입니다. 이로 인해 버튼 텍스트 색상을 동적으로 스타일링할 수 있게 되었습니다.

개선 제안: backgroundColor prop도 color prop과 유사한 방식으로 처리하는 것이 어떨까요? 예를 들어:

type ButtonBackgroundColor = 'bg-main' | 'bg-delete' | 'bg-sub' | 'bg-button' | 'bg-kakao';

type ModalButtonProps = React.PropsWithChildren<{
  // ... 다른 속성들
  color: ButtonTextColor;
  backgroundColor: ButtonBackgroundColor;
  // ... 나머지 속성들
}>;

이렇게 하면 colorbackgroundColor 속성의 처리 방식이 일관되어 코드의 가독성과 유지보수성이 향상될 수 있습니다.

Also applies to: 15-15

src/components/modal/team/CreateModalTeam.tsx (1)

27-29: 색상 속성 추가 승인

ModalButton 컴포넌트에 color 속성을 추가한 것은 좋은 변경사항입니다. 이는 버튼 스타일링을 더 동적이고 일관되게 만드는 데 도움이 됩니다.

다만, 향후 유지보수성을 높이기 위해 다음과 같은 개선을 고려해 보시는 것은 어떨까요?

-<ModalButton formId={createTeamFormId} color="text-white" backgroundColor="bg-main">
+<ModalButton formId={createTeamFormId} variant="primary">
   등록
 </ModalButton>

이렇게 하면 variant 속성을 통해 미리 정의된 스타일 세트를 사용할 수 있어, 코드의 일관성을 유지하고 향후 스타일 변경 시 유연성을 높일 수 있습니다.

src/components/task/calendar/CustomEventWrapper.tsx (2)

Line range hint 1-22: 타입 정의가 잘 되어 있습니다. 약간의 개선 제안이 있습니다.

새로운 CustomEventWrapperProps 타입 정의가 잘 되어 있습니다. 커뮤니티에서 제공하는 TypeScript 정의와 실제 컴포넌트에 전달되는 props 사이의 불일치를 해결하는 좋은 접근 방식입니다.

가독성을 더욱 높이기 위해, 다음과 같이 타입 정의를 분리하는 것을 고려해 보세요:

type BaseEventWrapperProps = Omit<EventWrapperProps<CustomEvent>, 'continuesEarlier' | 'continuesLater'>;

type CustomEventWrapperProps = PropsWithChildren<
  BaseEventWrapperProps & {
    continuesPrior: boolean;
    continuesAfter: boolean;
  }
>;

이렇게 하면 타입 정의가 더 명확해지고 필요한 경우 BaseEventWrapperProps를 재사용할 수 있습니다.


Line range hint 24-36: 컴포넌트 구현이 잘 되어 있습니다. 타입 안전성을 위한 작은 제안이 있습니다.

CustomEventWrapper 컴포넌트의 구현이 잘 되어 있습니다. props를 새로운 CustomEventWrapperProps 타입으로 캐스팅한 것과 hover:brightness-90 CSS 클래스를 추가한 것은 좋은 변경사항입니다.

타입 안전성을 더욱 높이기 위해, 다음과 같이 컴포넌트의 props 타입을 직접 CustomEventWrapperProps로 지정하는 것을 고려해 보세요:

export default function CustomEventWrapper({
  children,
  event,
  continuesPrior,
  continuesAfter
}: CustomEventWrapperProps) {
  // ... 나머지 코드는 그대로
}

이렇게 하면 타입 캐스팅을 피할 수 있고, TypeScript가 더 정확한 타입 체크를 수행할 수 있습니다.

src/components/modal/project/UpdateModalProject.tsx (2)

30-35: ModalButton 컴포넌트의 변경사항이 적절해 보입니다.

color prop이 추가되어 버튼 텍스트 색상을 동적으로 설정할 수 있게 되었습니다. 이는 PR 목표와 일치하며, 이전에 하드코딩된 text-white 클래스를 대체합니다.

일관성을 위해 다음과 같이 prop 순서를 조정하는 것이 어떨까요?

 <ModalButton
   formId={updateProjectFormId}
+  color="text-white"
+  backgroundColor="bg-main"
   onClick={handleUpdateClick}
-  color="text-white"
-  backgroundColor="bg-main"
 >
   수정
 </ModalButton>

이렇게 하면 관련 스타일 prop들이 함께 그룹화되어 가독성이 향상될 것 같습니다.


Line range hint 1-38: PR 목표와 관련된 주요 기능이 누락되었습니다.

현재 변경사항은 ModalButton의 스타일 관련 prop 추가에 국한되어 있습니다. 그러나 PR의 주요 목표인 다음 기능들이 구현되지 않았습니다:

  1. 일정 수정 모달에서 일정 상세 모달로 돌아가는 "뒤로 가기" 버튼 추가
  2. 일정 수정 후 모달이 자동으로 닫히는 기능 제거

이러한 기능을 구현하기 위해 다음과 같은 변경이 필요할 것 같습니다:

  1. "뒤로 가기" 버튼 추가
  2. handleUpdateClick 함수 수정하여 모달이 자동으로 닫히지 않도록 변경
  3. 일정 상세 모달로 돌아가는 로직 구현

이러한 변경사항을 구현하는데 도움이 필요하시다면 말씀해 주세요. 구체적인 코드 제안을 드릴 수 있습니다.

src/components/modal/project-status/CreateModalProjectStatus.tsx (1)

30-32: ModalButtoncolor prop 추가 승인

ModalButton 컴포넌트에 color prop을 추가한 것은 좋은 개선입니다. 이는 버튼 스타일의 일관성과 유연성을 향상시킵니다.

더 나은 재사용성을 위해 color 값을 상수나 테마 설정에서 가져오는 것을 고려해 보세요. 예를 들어:

import { COLORS } from '@/constants/theme';

// ...

<ModalButton formId={createStatusFormId} color={COLORS.TEXT_WHITE} backgroundColor="bg-main">
  등록
</ModalButton>

이렇게 하면 향후 색상 scheme을 쉽게 변경할 수 있습니다.

src/components/modal/task/CreateModalTask.tsx (1)

51-51: 버튼 텍스트 색상 설정이 명시적으로 추가되었습니다.

이 변경은 버튼의 텍스트 색상을 명시적으로 설정하여 UI의 일관성을 개선합니다. 이는 좋은 변경사항입니다.

다만, 더 나은 유지보수를 위해 색상 값을 상수나 테마 설정으로 분리하는 것을 고려해 보시는 것은 어떨까요? 예를 들어:

const BUTTON_TEXT_COLOR = 'text-white';
// ...
<ModalButton formId={createTaskFormId} color={BUTTON_TEXT_COLOR} backgroundColor="bg-main">

이렇게 하면 나중에 색상 변경이 필요할 때 한 곳에서만 수정하면 되어 편리할 것 같습니다.

src/components/task/kanban/TaskItem.tsx (3)

49-56: DetailModalTask 컴포넌트 props 업데이트 승인 및 개선 제안

DetailModalTask 컴포넌트의 props 업데이트는 적절합니다. 개별 속성을 전달하는 것은 더 명확하고 유연한 접근 방식입니다.

성능 최적화를 위해 useMemo를 사용하여 projectId와 같은 값을 메모이제이션하는 것을 고려해 보세요. 예:

const memoizedProjectId = useMemo(() => project.projectId, [project.projectId]);

그런 다음 projectId={memoizedProjectId}를 사용할 수 있습니다.


58-63: UpdateModalTask 컴포넌트 props 업데이트 승인 및 최적화 제안

UpdateModalTask 컴포넌트의 props 업데이트는 DetailModalTask의 변경사항과 일관성이 있어 적절합니다.

성능 최적화를 위해 project 객체 전체를 전달하는 대신 필요한 특정 속성만 전달하는 것을 고려해 보세요. 예를 들어:

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

이렇게 하면 불필요한 리렌더링을 방지하고 컴포넌트 간의 결합도를 낮출 수 있습니다.


Line range hint 1-68: 전체적인 변경 사항 요약 및 향후 개선 방향

이 PR의 변경 사항들은 모달 기능 개선이라는 목표에 잘 부합합니다. TaskItem 컴포넌트가 더 구체적인 props를 처리하도록 업데이트되어 유연성이 향상되었습니다.

향후 개선을 위한 제안:

  1. React Reparenting 문제 해결을 위한 구체적인 계획을 수립하세요.
  2. 성능 최적화를 위해 useMemo와 같은 React 훅을 적절히 활용하세요.
  3. 컴포넌트 간 데이터 전달을 최소화하고 필요한 속성만 전달하도록 리팩토링을 고려하세요.
  4. 변경된 기능에 대한 단위 테스트를 추가하여 코드의 안정성을 높이세요.

이러한 개선사항들을 통해 코드의 품질과 성능을 더욱 향상시킬 수 있을 것입니다.

src/components/modal/project-status/UpdateModalProjectStatus.tsx (3)

64-66: 버튼 스타일링 개선 승인

ModalButton 컴포넌트에 color 속성을 추가한 것은 좋은 변경사항입니다. 이는 버튼 텍스트의 가시성을 향상시키고 스타일링을 더 명확하게 만듭니다.

일관성을 위해 backgroundColor 속성도 문자열로 변경하는 것을 고려해보세요. 예를 들어:

-<ModalButton formId={updateStatusFormId} color="text-white" backgroundColor="bg-main">
+<ModalButton formId={updateStatusFormId} color="text-white" backgroundColor="bg-main">

이렇게 하면 모든 속성이 같은 형식을 가지게 되어 코드의 일관성이 향상됩니다.


67-69: 삭제 버튼 스타일링 개선 승인

삭제 버튼에 color 속성을 추가한 것은 적절한 변경사항입니다. 이로 인해 버튼 텍스트의 가시성이 향상되고 사용자 경험이 개선될 것입니다.

앞서 제안한 것과 마찬가지로, 일관성을 위해 backgroundColor 속성도 문자열로 변경하는 것을 고려해보세요. 예를 들어:

-<ModalButton color="text-white" backgroundColor="bg-delete" onClick={() => handleDeleteClick(statusId)}>
+<ModalButton color="text-white" backgroundColor="bg-delete" onClick={() => handleDeleteClick(statusId)}>

이렇게 하면 모든 버튼 컴포넌트의 속성이 동일한 형식을 가지게 되어 코드의 일관성이 향상됩니다.


Line range hint 1-74: 전체적인 변경사항 요약 및 평가

이 PR의 변경사항은 UpdateModalProjectStatus 컴포넌트의 버튼 스타일링을 개선하는 데 중점을 두고 있습니다. ModalButton 컴포넌트에 color 속성을 추가함으로써 버튼 텍스트의 가시성이 향상되었습니다. 이는 사용자 경험을 개선하고 인터페이스의 일관성을 높이는 데 기여할 것입니다.

주요 개선사항:

  1. "수정" 및 "삭제" 버튼에 color="text-white" 속성 추가
  2. 버튼 스타일링의 명확성 및 일관성 향상

향후 개선을 위한 제안:

  1. backgroundColor 속성의 값도 문자열 형식으로 통일하여 코드의 일관성을 더욱 높일 수 있습니다.
  2. 버튼 스타일에 대한 테마 또는 설정 파일을 만들어 중앙에서 관리하는 것을 고려해보세요. 이는 향후 스타일 변경 시 유지보수를 용이하게 할 것입니다.

전반적으로, 이 변경사항은 PR의 목표를 잘 달성하고 있으며, 사용자 인터페이스의 품질을 향상시키는 데 기여할 것입니다.

src/components/modal/task/UpdateModalTask.tsx (1)

217-219: "돌아가기" 버튼이 성공적으로 구현되었습니다.

버튼 스타일링과 handleDetailClick 함수의 사용이 적절합니다. PR의 목적을 완전히 달성했습니다.

접근성 향상을 위해 aria-label을 추가하는 것을 고려해 보세요. 예:

<ModalButton
  color="text-emphasis"
  backgroundColor="bg-button"
  onClick={handleDetailClick}
  aria-label="상세 모달로 돌아가기"
>
  돌아가기
</ModalButton>
src/hooks/query/useTaskQuery.ts (1)

Line range hint 208-208: 쿼리 무효화 정밀도 향상 및 개선 제안

exact: true 옵션을 추가한 것은 좋은 변경입니다. 이는 useUpdateTaskInfo와 일관성 있게 적용되었습니다.

개선 제안: 파일 및 담당자 쿼리 제거에도 exact: true 옵션을 적용하는 것이 어떨까요? 이렇게 하면 더 정밀한 쿼리 관리가 가능할 것 같습니다.

다음과 같이 변경을 고려해보세요:

-queryClient.removeQueries({ queryKey: filesQueryKey, exact: true });
-queryClient.removeQueries({ queryKey: assigneesQueryKey, exact: true });
+queryClient.removeQueries({ queryKey: filesQueryKey, exact: true });
+queryClient.removeQueries({ queryKey: assigneesQueryKey, exact: true });
src/components/modal/task/DetailModalTask.tsx (3)

73-73: [로딩 상태 및 데이터 존재 여부 확인 로직 개선 제안]

현재 로딩 상태와 task의 존재 여부만을 확인하고 있습니다. 렌더링 시 status, assigneeList, taskFileList가 필요하므로 이들도 존재하는지 확인하는 것이 좋습니다.

-{isStatusLoading || isTaskLoading || isAssigneeLoading || isTaskFileLoading || !task ? (
+{isStatusLoading || isTaskLoading || isAssigneeLoading || isTaskFileLoading || !task || !status || !assigneeList || !taskFileList ? (

86-86: [task.taskName 사용 시 안전성 확인]

task.taskName을 사용할 때 task 객체가 존재한다고 가정하고 있습니다. 하지만 타입 안정성을 위해 task?.taskName처럼 옵셔널 체이닝을 사용하는 것을 고려해보세요.

-<span>{task.taskName}</span>
+<span>{task?.taskName}</span>

90-90: [getTaskPeriod 함수의 인자 전달 방식 확인]

getTaskPeriod 함수에 task 객체 전체를 전달하고 있습니다. 해당 함수의 시그니처에 맞게 필요한 프로퍼티만 전달하는 것이 명확할 수 있습니다.

-<span>{getTaskPeriod(task)}</span>
+<span>{getTaskPeriod({ startDate: task.startDate, endDate: task.endDate })}</span>
src/pages/project/CalendarPage.tsx (1)

37-37: initialTask 선언 위치 개선 제안 [니트픽]

initialTask 변수가 컴포넌트 함수 외부에 선언되어 있습니다. 컴포넌트 내부에 선언하여 코드의 응집도를 높이고 가독성을 향상시킬 수 있습니다.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between aa79669 and 079ac1c.

📒 Files selected for processing (14)
  • src/components/modal/ModalButton.tsx (1 hunks)
  • src/components/modal/project-status/CreateModalProjectStatus.tsx (1 hunks)
  • src/components/modal/project-status/UpdateModalProjectStatus.tsx (1 hunks)
  • src/components/modal/project/CreateModalProject.tsx (1 hunks)
  • src/components/modal/project/UpdateModalProject.tsx (1 hunks)
  • src/components/modal/task/CreateModalTask.tsx (1 hunks)
  • src/components/modal/task/DetailModalTask.tsx (5 hunks)
  • src/components/modal/task/UpdateModalTask.tsx (4 hunks)
  • src/components/modal/team/CreateModalTeam.tsx (1 hunks)
  • src/components/modal/team/UpdateModalTeam.tsx (1 hunks)
  • src/components/task/calendar/CustomEventWrapper.tsx (1 hunks)
  • src/components/task/kanban/TaskItem.tsx (2 hunks)
  • src/hooks/query/useTaskQuery.ts (1 hunks)
  • src/pages/project/CalendarPage.tsx (3 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/components/modal/team/UpdateModalTeam.tsx
🧰 Additional context used
🪛 Biome
src/components/modal/ModalButton.tsx

[error] 9-9: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

🔇 Additional comments (13)
src/components/modal/project/CreateModalProject.tsx (1)

25-27: 변경 사항이 적절해 보입니다.

ModalButton 컴포넌트에 color prop이 추가되었습니다. 이는 버튼 텍스트의 색상을 동적으로 설정할 수 있게 해주는 좋은 개선사항입니다. 이 변경으로 인해 버튼의 스타일링이 더 유연해지고 재사용성이 향상될 것으로 보입니다.

다음 스크립트를 실행하여 다른 ModalButton 사용 위치에서도 color prop이 일관되게 사용되고 있는지 확인해 주세요:

✅ Verification successful

이전 스크립트에서 파일 유형 인식 오류가 발생했습니다.

rg 명령어의 파일 유형을 typescriptreact에서 tsx로 수정했습니다. 아래 스크립트를 실행하여 다시 확인해 주세요.


rg 명령어의 파일 유형 인식 오류로 인해 이전 스크립트가 실패했습니다.

rg 명령어에서 --type 옵션 대신 -g "*.tsx"를 사용하여 .tsx 파일에서 ModalButton 사용 위치를 검색하도록 수정했습니다. 아래 스크립트를 실행하여 다시 확인해 주세요.


검증 완료: 모든 ModalButton 사용에 color prop이 포함되어 있습니다.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: `ModalButton` 컴포넌트의 사용을 확인합니다.

# Test: `ModalButton` 컴포넌트의 모든 사용 위치를 검색합니다. 
# 예상 결과: 모든 `ModalButton` 사용에 `color` prop이 포함되어 있어야 합니다.
rg --type typescript --type typescriptreact '<ModalButton' -A 3

Length of output: 100


Script:

#!/bin/bash
# Description: `ModalButton` 컴포넌트의 사용을 확인합니다.

# Test: `ModalButton` 컴포넌트의 모든 사용 위치를 검색합니다. 
# 예상 결과: 모든 `ModalButton` 사용에 `color` prop이 포함되어 있어야 합니다.
rg --type tsx '<ModalButton' -A 3

Length of output: 63


Script:

#!/bin/bash
# Description: `ModalButton` 컴포넌트의 사용을 확인합니다.

# Test: `ModalButton` 컴포넌트의 모든 사용 위치를 검색합니다. 
# 예상 결과: 모든 `ModalButton` 사용에 `color` prop이 포함되어 있어야 합니다.
rg -g "*.tsx" '<ModalButton' -A 3

Length of output: 4277

src/components/task/kanban/TaskItem.tsx (1)

23-23: task 객체에서 statusId 추출 승인

statusId를 task 객체에서 추출하는 것은 적절한 변경사항입니다. 이는 업데이트된 TaskItemProps 타입과 일치하며, 모달 컴포넌트에 필요한 데이터를 제공합니다.

src/components/modal/task/UpdateModalTask.tsx (4)

41-42: 새로운 prop이 올바르게 추가되었습니다.

openDetailModal prop의 추가는 PR의 목적인 "돌아가기" 버튼 기능 구현에 부합합니다. 타입이 () => void로 정의된 것은 적절합니다.


45-50: 컴포넌트 함수 시그니처가 올바르게 업데이트되었습니다.

새로운 openDetailModal prop이 컴포넌트 매개변수에 정확히 추가되었습니다. 기존 props와 일관된 구조분해할당 문법을 사용하여 가독성을 유지하고 있습니다.


135-135: handleFormSubmit 함수가 간소화되었습니다.

async 키워드 제거는 적절하지만, updateTaskInfoMutate가 비동기 함수일 경우 오류 처리에 영향을 줄 수 있습니다.

오류 처리가 적절히 이루어지는지 확인해 주세요. 필요하다면 try-catch 블록을 사용하여 오류를 처리하는 것을 고려해 보세요.


137-141: "돌아가기" 기능이 올바르게 구현되었습니다.

handleDetailClick 함수는 PR의 목적에 부합하며, 상세 모달을 열고 현재 모달을 닫는 순서가 논리적입니다. 사용자 경험 향상에 기여할 것으로 보입니다.

src/hooks/query/useTaskQuery.ts (2)

185-185: 쿼리 무효화 정밀도 향상

exact: true 옵션을 추가한 것은 좋은 변경입니다. 이 변경으로 인해 정확히 일치하는 쿼리만 무효화되어, 불필요한 리페치를 줄이고 성능을 향상시킬 수 있습니다.


185-185: 전체적인 변경 요약 및 영향

이번 변경사항들은 쿼리 무효화의 정밀도를 향상시키는 데 중점을 두고 있습니다. exact: true 옵션을 추가함으로써, 불필요한 리페치를 줄이고 애플리케이션의 성능을 개선할 수 있습니다. 이러한 변경은 React Query의 최신 버전에서 권장되는 방식과 일치하며, 전반적으로 코드 품질을 향상시킵니다.

다만, useDeleteTask 함수에서 파일 및 담당자 쿼리 제거 시에도 exact: true 옵션을 적용하면 더욱 일관성 있는 접근이 될 것 같습니다.

Also applies to: 208-208

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

33-37: [데이터 패칭 훅의 의존성 및 데이터 일관성 확인]

여러 개의 useRead 훅을 사용하여 데이터를 패칭하고 있습니다. 각 훅이 의존하는 파라미터(projectId, statusId, taskId)가 올바르게 전달되고 있으며, 패칭된 데이터(status, task, assigneeList, taskFileList)가 컴포넌트 내에서 일관성 있게 사용되고 있는지 확인해주세요.


128-131: [추가된 ModalButton Props에 따른 스타일 적용 확인]

ModalButton 컴포넌트에 colorbackgroundColor Props가 추가되었습니다. 해당 Props가 제대로 전달되고 스타일이 의도한 대로 적용되고 있는지 확인해주세요.


19-21: [변경된 Props에 따른 영향 범위 확인 요청]

ViewModalTaskProps의 타입이 변경되어 projectId, statusId, taskId를 받도록 수정되었습니다. 이로 인해 DetailModalTask 컴포넌트를 사용하는 모든 곳에서 해당 Props를 올바르게 전달하고 있는지 확인해야 합니다.

다음 스크립트를 사용하여 DetailModalTask 컴포넌트의 사용처를 찾아 Props가 올바르게 수정되었는지 검토해주세요:

#!/bin/bash
# Description: DetailModalTask 컴포넌트의 사용처 확인
rg --type tsx 'DetailModalTask' src/

12-12: [확인 필요] 사용되지 않는 import 확인

useDeleteTask, useReadAssignees, useReadStatusTasks, useReadTaskFiles 중 실제로 사용되지 않는 훅이 있는지 확인해주세요. 사용되지 않는 경우 import 구문에서 제거하여 코드의 가독성과 성능을 향상시킬 수 있습니다.

다음 스크립트를 실행하여 해당 훅들이 사용되고 있는지 확인해보세요:


54-54: [함수 호출 시 인자 순서 및 타입 확인 필요]

fetchData 함수 호출 시 전달되는 인자들의 순서와 타입이 downloadTaskFile 함수의 정의와 일치하는지 확인해주세요. 인자 순서가 다를 경우 예상치 못한 동작이나 에러가 발생할 수 있습니다.

다음 스크립트를 사용하여 downloadTaskFile 함수의 정의를 확인해주세요:

src/components/modal/ModalButton.tsx Show resolved Hide resolved
src/components/task/kanban/TaskItem.tsx Show resolved Hide resolved
src/components/modal/task/DetailModalTask.tsx Show resolved Hide resolved
src/components/modal/task/DetailModalTask.tsx Show resolved Hide resolved
src/pages/project/CalendarPage.tsx Show resolved Hide resolved
src/pages/project/CalendarPage.tsx Outdated Show resolved Hide resolved
@GU-99 GU-99 deleted a comment from coderabbitai bot Oct 11, 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.

돌아가기 버튼이 실제 구현 내용을 보니 생각보다 더 괜찮아서 놀랐습니다ㅋㅋㅋ 급하게 디자인 했던 거지만 UI가 잘 뽑혔네요😂👍👍 문제가 발생한 지점은 다시 봐도 생각할 거리가 아주 많아 보입니다. 저도 관련해서 공부를 좀 해봐야겠어요. 이번 작업도 고생 많으셨습니다!

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.

이슈도 머리가 많이 아팠겠네요... 일정 상세 모달 돌아가기 버튼 기능 고생하셨습니다!

@Seok93
Copy link
Contributor Author

Seok93 commented Oct 14, 2024

@Yoonyesol @ice-bear98 리뷰 감사합니다! 돌아가기 버튼 잘 추가한 것 같아요 ㅎㅎ

@Seok93 Seok93 merged commit 4ae00e8 into develop Oct 14, 2024
@Seok93 Seok93 deleted the feature/#204-task-modal-back branch October 14, 2024 14:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🌟 Feature 새로운 기능 개발했어요 🛠️ Refactor 코드를 개선했어요
Projects
None yet
Development

Successfully merging this pull request may close these issues.

일정 수정 모달에서 일정 상세 모달로 돌아가기 버튼 추가
3 participants