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

refactor: 임시 저장 api 보완 #250

Merged
merged 14 commits into from
Dec 9, 2024
Merged

Conversation

WonJuneKim
Copy link
Collaborator

@WonJuneKim WonJuneKim commented Dec 5, 2024

💡 작업 내용

  • 임시 저장 로직 재설정
  • 임시 저장 불러오기 로직 재설정
  • 스테이지 처리 시 선택지가 제대로 입력되지 않는 문제 해결
  • 스테이지 이동 제약 조건 추가
  • 스테이지 및 게임 세트 기본 조건 추가

💡 자세한 설명

✅ 임시 저장, 임시 저장 불러오기

export interface TempGameOption {
  name: string;
  description: string;
  fileId?: number | null;
  imgUrl?: string;
  optionType: 'A' | 'B';
}

와 같이 임시 저장 시에는 imgUrl을 사용하지 않고, 임시 저장 불러오기 시에는 사용하기 때문에 해당 항목을 옵셔널 처리 하였습니다.

export const createInitialGameStages = (totalStage: number): BalanceGameSet[] =>
  Array.from({ length: totalStage }, (_, idx) => ({
    description: '',
    gameOptions: [
      {
        id: idx * 2,
        name: '',
        imgUrl: '',
        fileId: null,
        description: '',
        optionType: 'A',
      },
      {
        id: idx * 2 + 1,
        name: '',
        imgUrl: '',
        fileId: null,
        description: '',
        optionType: 'B',
      },
    ],
  }));

해당 함수는 유틸리티 함수로, 기본 밸런스 게임 세트를 생성하는 함수입니다. 기존 fileId의 기본 값이 0으로 처리되어있었는데, 실제 fileId와 동기화 시키기 위해 해당 항목이 없다면 null 처리를 하였습니다.

해당 수정으로 정상적으로 임시 저장 처리가 되며, 이미지가 없을 경우에도 밸런스 게임이 정상적으로 생성되는 결과를 얻을 수 있었습니다.

  • 임시 저장, 불러오기
+.mp4
  • 이미지가 없을 때 밸런스게임 생성
default.mp4

✅ BalanceGameCreation 내부의 훅의 순환 참조 문제

  • 스테이지 유효성 검사를 추가하기 위해서는 해당 organisms 컴포넌트 내부에서 사용하는 useBalanceGameCreation 훅과 useStageNavigation 훅의 순환 참조 문제를 해결해야 했습니다.

- 문제 원인 : currentStage 의 경우 useStageNavigation 의 결과 물인데 useBalanceGameCreation 훅의 매개 변수로 사용되고 있고, validateStage는 useBalanceGameCreation의 결과물인데 useStageNavigation의 매개변수로 사용되고있음.

-해결 방안 : 원래 해당 훅의 의도는 스테이지 이동과 스테이지 데이터 관리를 분할하기 위해서 였습니다. 제약 조건을 추가된다면 해당 훅의 복잡성이 증가하기 때문에 하나의 훅으로 스테이지 이동 및 데이터 관리를 모두 담당하도록 처리했습니다.

<선택지 관련 요구사항>

  1. 첫번째 스테이지에서 제목, A, B 선택지를 입력하지 않으면 다음 스테이지로 이동불가, 두번째 스테이지부터는 A,B 선택지만
  2. 사진은 양쪽 모두 있거나 모두 없거나, 즉 하나만 있으면 다음 스테이지로 이동불가

useBalanceGameCreation 훅의

  const validateStage = (): true | string => {
    if (!currentOptions[0]?.name.trim() || !currentOptions[1]?.name.trim()) {
      return '모든 옵션의 설명을 입력해주세요!';
    }

    const hasBothImages =
      currentOptions[0]?.imgUrl.trim() && currentOptions[1]?.imgUrl.trim();
    const hasNoImages =
      !currentOptions[0]?.imgUrl.trim() && !currentOptions[1]?.imgUrl.trim();

    if (!(hasBothImages || hasNoImages)) {
      return 'A와 B의 이미지가 모두 없거나 모두 있어야 합니다!';
    }

    return true;
  };

의 함수에서 확인할 수 있습니다.

default.mp4

✅ 선택지의 이벤트 핸들러가 정상적으로 감지되지 않는 문제

  • useBalanceGameCreation 훅의 updateOption 함수 에서 해당 이벤트를 같이 업데이트하도록 처리하여 해결 문제를 해결하였습니다.
default.mp4

📗 참고 자료 (선택)

📢 리뷰 요구 사항 (선택)

🚩 후속 작업 (선택)

  • 임시 저장 api의 추가 수정 사항이 있습니다. 현재는 10개의 스테이지가 모두 등록되어야 임시 저장 api가 작동하는데, 중간에 밸런스 게임을 작성하다가 멈추어도 해당 로직이 동일하게 수행되도록 하는 수정 작업이 진행중입니다. api 수정이 완료되면 해당 로직을 추가 수정하도록 하겠습니다.

✅ 셀프 체크리스트

  • PR 제목을 형식에 맞게 작성했나요?
  • 브랜치 전략에 맞는 브랜치에 PR을 올리고 있나요? (master/main이 아닙니다.)
  • 이슈는 close 했나요?
  • Reviewers, Labels, Projects를 등록했나요?
  • 작업 도중 문서 수정이 필요한 경우 잘 수정했나요?
  • 테스트는 잘 통과했나요?
  • 불필요한 코드는 제거했나요?

closes #246

Summary by CodeRabbit

  • New Features

    • 추가된 toastModalStyling으로 모달의 스타일을 개선하였습니다.
    • 게임 생성 과정에서 토스트 알림을 표시하는 기능이 도입되었습니다.
    • TempGameOption 인터페이스에 imgUrl 속성이 추가되어 유연성이 향상되었습니다.
    • 성공 및 오류 메시지 상수를 추가하여 일관된 메시지 처리를 강화하였습니다.
  • Bug Fixes

    • 게임 옵션의 fileId 속성을 기본값 0에서 null로 수정하였습니다.
  • Chores

    • useCreateBalanceGameMutationuseSaveTempGameMutation에서 디버깅을 위한 콘솔 로그를 제거하였습니다.

@WonJuneKim WonJuneKim added 👩🏻‍💻 frontend 프론트엔드 작업 🪄refactor 리팩토링 labels Dec 5, 2024
@WonJuneKim WonJuneKim self-assigned this Dec 5, 2024
Copy link
Contributor

coderabbitai bot commented Dec 5, 2024

Walkthrough

이 풀 리퀘스트에서는 BalanceGameCreation 컴포넌트와 관련된 여러 파일에 대한 변경 사항이 포함되어 있습니다. 주요 변경 사항으로는 새로운 스타일 선언이 추가되고, 기존의 useStageNavigation 훅이 useToastModal로 대체되어 토스트 메시지를 표시하는 기능이 도입되었습니다. 또한, useBalanceGameCreation 훅의 시그니처가 업데이트되어 입력 유효성 검사와 상태 관리를 개선하였으며, TempGameOption 인터페이스에 imgUrl 속성이 추가되었습니다.

Changes

파일 경로 변경 요약
src/components/organisms/BalanceGameCreation/BalanceGameCreation.style.ts 새로운 스타일 선언 toastModalStyling 추가
src/components/organisms/BalanceGameCreation/BalanceGameCreation.tsx useStageNavigation에서 useToastModal로 변경, 상태 관리 및 렌더링 로직 업데이트
src/hooks/game/useBalanceGameCreation.ts 새로운 매개변수 showToast 추가, 상태 변수 및 유효성 검사 로직 추가
src/hooks/game/useStageNavigation.ts 훅 삭제
src/pages/BalanceGameCreationPage/BalanceGameCreationPage.tsx useLoadTempGameQuery의 활성화 및 디버깅을 위한 콘솔 로그 추가
src/types/game.ts TempGameOption 인터페이스에 선택적 속성 imgUrl 추가
src/utils/balanceGameUtils.ts createInitialGameStages 함수에서 fileId 속성을 0에서 null로 업데이트
src/constants/message.ts 새로운 오류 및 성공 메시지 상수 추가
src/hooks/api/game/useCreateBalanceGameMutation.ts 성공 메시지 로그를 위한 콘솔 로그 제거
src/hooks/api/game/useSaveTempGameMutation.ts 임시 게임 저장 요청 데이터에 대한 콘솔 로그 제거

Assessment against linked issues

Objective Addressed Explanation
임시 저장 로직 재설정 (#246)
임시 저장 불러오기 로직 재설정 (#246)

Possibly related PRs

Suggested labels

✔︎pull requests, ✅feature

Suggested reviewers

  • alwubin
  • areumH
  • hsgh085

🐰 변화의 순간, 새로움이 가득,
토스트 모달과 함께, 기쁨이 넘쳐,
게임의 세계, 더 풍부해지네,
이미지와 함께, 꿈을 꾸게 해.
🥕✨


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

sonarqubecloud bot commented Dec 5, 2024

Copy link
Contributor

@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 (2)
src/hooks/game/useBalanceGameCreation.ts (2)

80-96: 유효성 검사 함수의 메시지 관리 제안

validateStage 함수에서 반환하는 오류 메시지가 하드코딩되어 있습니다. 향후 다국어 지원이나 유지보수를 위해 메시지를 상수나 별도의 메시지 관리 모듈로 분리하는 것을 권장합니다.


126-137: 함수 정의 방식의 일관성 개선 제안

handleOptionChangehandleDescriptionChange 함수의 정의 방식이 다릅니다. 하나는 커링을 사용하고, 다른 하나는 일반 함수로 정의되어 있습니다. 코드의 일관성과 가독성을 위해 동일한 방식으로 함수를 정의하는 것을 권장합니다.

예를 들어, handleOptionChange를 일반 함수로 변경할 수 있습니다:

- const handleOptionChange =
-   (optionType: 'A' | 'B') => (event: React.ChangeEvent<HTMLInputElement>) => {
+ const handleOptionChange = (
+   optionType: 'A' | 'B',
+   event: React.ChangeEvent<HTMLInputElement>
+ ) => {
    updateOption(currentStage, optionType, { name: event.target.value });
  };
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 47a2e46 and 1d01bc5.

📒 Files selected for processing (7)
  • src/components/organisms/BalanceGameCreation/BalanceGameCreation.style.ts (1 hunks)
  • src/components/organisms/BalanceGameCreation/BalanceGameCreation.tsx (3 hunks)
  • src/hooks/game/useBalanceGameCreation.ts (5 hunks)
  • src/hooks/game/useStageNavigation.ts (0 hunks)
  • src/pages/BalanceGameCreationPage/BalanceGameCreationPage.tsx (2 hunks)
  • src/types/game.ts (1 hunks)
  • src/utils/balanceGameUtils.ts (1 hunks)
💤 Files with no reviewable changes (1)
  • src/hooks/game/useStageNavigation.ts
✅ Files skipped from review due to trivial changes (1)
  • src/pages/BalanceGameCreationPage/BalanceGameCreationPage.tsx
🔇 Additional comments (9)
src/hooks/game/useBalanceGameCreation.ts (3)

35-51: 입력 초기화를 위한 useEffect 사용 적절성 확인

clearInput 상태를 관리하기 위해 useEffect와 타이머를 활용한 로직이 적절하게 구현되었습니다. 타이머의 참조를 timerRef로 관리하여 메모리 누수를 방지하고 있습니다.


97-107: 마지막 단계 처리 로직 확인 필요

handleNextStage 함수에서 currentStage < totalStage - 1 조건으로 다음 단계로의 이동을 제한하고 있습니다. 마지막 단계에서도 유효성 검사를 수행하고 필요한 처리가 이루어지는지 확인이 필요합니다.

마지막 단계에서의 처리가 올바르게 이루어지는지 확인해주세요.


9-11: ⚠️ Potential issue

함수 시그니처 변경에 따른 영향 확인 필요

useBalanceGameCreation 훅에 showToast 매개변수가 추가되고 currentStage가 삭제되었습니다. 이 변경으로 인해 해당 훅을 사용하는 모든 곳에서 함수 호출부를 업데이트해야 합니다.

기존에 useBalanceGameCreation을 사용하던 코드를 모두 확인하여 새로운 시그니처에 맞게 수정해야 합니다.

src/components/organisms/BalanceGameCreation/BalanceGameCreation.style.ts (1)

33-39: Toast 모달 스타일 추가 적절성 확인

toastModalStyling 스타일이 추가되어 토스트 모달의 위치와 레이어가 적절하게 설정되었습니다. 고정 위치와 변환(transform) 속성을 사용하여 화면 중앙에 표시되도록 구현되었습니다.

src/utils/balanceGameUtils.ts (1)

11-11: fileId 초기값 변경에 따른 영향 확인 필요

createInitialGameStages 함수에서 fileId의 초기값이 0에서 null로 변경되었습니다. 이로 인해 fileId를 참조하는 다른 부분에서 null 값을 적절히 처리하는지 확인이 필요합니다.

fileIdnull인 경우에 대한 예외 처리가 누락되지 않았는지 점검해주세요.

Also applies to: 19-19

src/types/game.ts (1)

79-79: TempGameOptionimgUrl 속성 추가 확인

TempGameOption 인터페이스에 imgUrl 속성이 추가되어 이미지 URL을 옵션에서 사용할 수 있게 되었습니다. 이 변경은 이미지 처리 기능을 향상시킵니다.

src/components/organisms/BalanceGameCreation/BalanceGameCreation.tsx (3)

8-9: useToastModalToastModal 모듈 임포트 확인

useToastModal 훅과 ToastModal 컴포넌트가 올바르게 임포트되었습니다. 토스트 메시지 기능 추가에 필요한 모듈들이 적절히 포함되었습니다.


34-34: 토스트 모달 상태 관리 추가 확인

useToastModal 훅을 사용하여 isVisible, modalText, showToastModal 상태를 관리하고 있습니다. 이는 사용자에게 유효성 검사 메시지를 표시하기 위한 적절한 구현입니다.


107-109: ToastModal 컴포넌트의 적절한 렌더링 확인

ToastModal 컴포넌트가 조건부 렌더링을 통해 화면에 표시되고 있습니다. isVisible 상태에 따라 모달이 나타나도록 구현하여 사용자 경험을 향상시켰습니다.

Copy link
Collaborator

@areumH areumH left a comment

Choose a reason for hiding this comment

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

밸겜 임시저장 api 수정 수고 많으셨습니다!!!!!

Comment on lines 80 to 95
const validateStage = (): true | string => {
if (!currentOptions[0]?.name.trim() || !currentOptions[1]?.name.trim()) {
return '모든 옵션의 설명을 입력해주세요!';
}

const handleDescriptionChange = (
optionType: 'A' | 'B',
event: React.ChangeEvent<HTMLInputElement>,
) => {
const { value } = event.target;
updateOption(currentStage, optionType, { description: value });
const hasBothImages =
currentOptions[0]?.imgUrl.trim() && currentOptions[1]?.imgUrl.trim();
const hasNoImages =
!currentOptions[0]?.imgUrl.trim() && !currentOptions[1]?.imgUrl.trim();

if (!(hasBothImages || hasNoImages)) {
return 'A와 B의 이미지가 모두 없거나 모두 있어야 합니다!';
}

return true;
};
Copy link
Collaborator

Choose a reason for hiding this comment

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

텍스트는 상수로 분리하면 좋을 것 같습니다!!

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

38b30fc 메시지 텍스트는 전부 상수화 처리했습니다!!

Comment on lines 199 to 201
};
console.log('임시 저장 실행 데이터:', tempGameData);
console.table(tempGameData);
Copy link
Collaborator

Choose a reason for hiding this comment

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

머지 전에 불필요한 콘솔문은 삭제 부탁드려요!! 🙌

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

저장 관련 추가 수정 사항이 생겨서 우선 삭제하지 않았었는데, 우선 삭제하도록 하겠습니다 ㅎㅎ

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

86e0f59 콘솔 제거 완료입니닷!!

Copy link
Collaborator

@alwubin alwubin left a comment

Choose a reason for hiding this comment

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

임시저장 api 관련 리팩토링 하시느라 수고 많으셨습니다~! 코멘트 확인 부탁드림다👏

Comment on lines 126 to 137
const handleOptionChange =
(optionType: 'A' | 'B') => (event: React.ChangeEvent<HTMLInputElement>) => {
updateOption(currentStage, optionType, { name: event.target.value });
};

const handleDescriptionChange = (
optionType: 'A' | 'B',
event: React.ChangeEvent<HTMLInputElement>,
) => {
const { value } = event.target;
updateOption(currentStage, optionType, { description: value });
};
Copy link
Collaborator

Choose a reason for hiding this comment

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

두 함수가 비슷한 작업을 수행하고 있는데, 통합하여 props로 전달받은 후 상태를 업데이트 하는 방식은 어떨까요?

Suggested change
const handleOptionChange =
(optionType: 'A' | 'B') => (event: React.ChangeEvent<HTMLInputElement>) => {
updateOption(currentStage, optionType, { name: event.target.value });
};
const handleDescriptionChange = (
optionType: 'A' | 'B',
event: React.ChangeEvent<HTMLInputElement>,
) => {
const { value } = event.target;
updateOption(currentStage, optionType, { description: value });
};
const handleOptionUpdate =
(optionType: 'A' | 'B', field: 'name' | 'description') =>
(event: React.ChangeEvent<HTMLInputElement>) => {
const { value } = event.target;
updateOption(currentStage, optionType, { [field]: value });
};

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

오 같은 핸들러로 처리하는 방법도 있었네요! 시도해보고 추가 코멘트 남기겠습니다!

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

2523713 에서 처리했습니다!

const [currentOptions, setCurrentOptions] = useState<BalanceGameOption[]>([]);
const [currentDescription, setCurrentDescription] = useState<string>('');
const [clearInput, setClearInput] = useState(false);

const timerRef = useRef<number | NodeJS.Timeout | null>(null);
Copy link
Collaborator

Choose a reason for hiding this comment

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

timerRef의 타입을 number | NodeJS.Timeout로 정의하고 초기값을 굳이 null로 설정하지 않아도 안전하게 동작할 수 있다고 생각하는데, null을 포함신 이유가 따로 있을까용?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

성능적인 면에서는 차이가 없으나, useRef<number | NodeJS.Timeout>(); 로 처리하게 될 경우 timerRef.current 에 대한 추론이 모호해질 수 있는 거 같습니다!
추가적인 undefined 에 대한 검증을 별도로 하지 않고, 타이머가 설정되지 않았다는 걸 명시하기 위해 null을 사용했습니다ㅏㅏ

Copy link
Contributor

@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 (3)
src/components/organisms/BalanceGameCreation/BalanceGameCreation.tsx (1)

70-75: 렌더링 시 생성되는 익명 함수 최소화 제안

onChange 핸들러에 익명 함수를 직접 전달하면 컴포넌트가 렌더링될 때마다 새로운 함수가 생성되어 성능에 영향을 줄 수 있습니다. 핸들러 함수를 컴포넌트 내부에서 미리 선언하거나 useCallback 훅을 사용하여 함수를 메모이제이션하는 것을 권장합니다.

Also applies to: 86-91

src/constants/message.ts (2)

51-51: 오타 수정: 불필요한 '가' 제거

ERROR.IMAGE.DELETE 메시지에서 불필요한 '가'가 있습니다. '이미지 삭제에 실패했습니다. 다시 시도해주세요.'로 수정해주세요.

다음의 변경사항을 적용해주세요:

- DELETE: '이미지가 삭제에 실패했습니다. 다시 시도해주세요.',
+ DELETE: '이미지 삭제에 실패했습니다. 다시 시도해주세요.',

91-91: 불필요한 공백 제거

SUCCESS.TEMPGAME.SAVE 메시지의 시작 부분에 불필요한 공백이 있습니다. 공백을 제거해주세요.

다음의 변경사항을 적용해주세요:

- SAVE: ' 임시 저장이 완료되었습니다!',
+ SAVE: '임시 저장이 완료되었습니다!',
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 1d01bc5 and 8d0ab6b.

📒 Files selected for processing (6)
  • src/components/organisms/BalanceGameCreation/BalanceGameCreation.tsx (5 hunks)
  • src/constants/message.ts (2 hunks)
  • src/hooks/api/game/useCreateBalanceGameMutation.ts (0 hunks)
  • src/hooks/api/game/useSaveTempGameMutation.ts (0 hunks)
  • src/hooks/game/useBalanceGameCreation.ts (5 hunks)
  • src/pages/BalanceGameCreationPage/BalanceGameCreationPage.tsx (7 hunks)
💤 Files with no reviewable changes (2)
  • src/hooks/api/game/useSaveTempGameMutation.ts
  • src/hooks/api/game/useCreateBalanceGameMutation.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/pages/BalanceGameCreationPage/BalanceGameCreationPage.tsx
🔇 Additional comments (1)
src/hooks/game/useBalanceGameCreation.ts (1)

22-22: 타이머 참조 변수의 타입 정의 개선 제안

timerRef의 타입을 React.MutableRefObject<number | null>로 변경하는 것이 좋을 것 같습니다. 브라우저 환경에서는 setTimeout이 숫자 ID를 반환하므로 NodeJS.Timeout 타입은 불필요합니다.

@WonJuneKim WonJuneKim merged commit 56be95c into dev Dec 9, 2024
1 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
👩🏻‍💻 frontend 프론트엔드 작업 🪄refactor 리팩토링
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

임시 저장 api 보완
3 participants