FC-DEV-FinalProject / final-fe-team4

4조 프론트엔드 깃허브
0 stars 2 forks source link

[fix] ttspage 무한로딩 문제 해결, tts 사이드바 수정 #189

Closed nakyeonko3 closed 1 week ago

nakyeonko3 commented 1 week ago
sourcery-ai[bot] commented 1 week ago

리뷰어 가이드 by Sourcery

이 PR은 TTS 페이지의 무한 로딩 문제를 해결하고 TTS 사이드바 기능을 수정합니다. 구현은 React hooks (useCallback, useMemo)를 사용하여 컴포넌트 렌더링을 최적화하고 TTS 설정의 초기화 기능을 개선하는 데 중점을 둡니다. 변경 사항에는 Select 컴포넌트의 value props를 더 잘 처리하기 위한 수정도 포함됩니다.

TTS 설정 초기화 프로세스의 시퀀스 다이어그램

sequenceDiagram
    participant User
    participant TTSSidebar
    participant ApplySelectionButton
    participant ResetChangesButton

    User->>TTSSidebar: 설정 변경
    TTSSidebar->>TTSSidebar: checkIfModified()
    TTSSidebar->>TTSSidebar: checkCanReset()
    User->>ResetChangesButton: 초기화 클릭
    ResetChangesButton->>TTSSidebar: handleReset()
    TTSSidebar->>TTSSidebar: 설정을 초기값으로 초기화
    TTSSidebar->>ApplySelectionButton: 상태 업데이트
    ApplySelectionButton->>User: 수정되지 않은 경우 비활성 상태 반영

TTSSidebar 컴포넌트의 업데이트된 클래스 다이어그램

classDiagram
    class TTSSidebar {
        - selectedLanguage: string
        - selectedVoice: string
        - selectedStyle: string
        - isAllConfigUpdated: boolean
        - enableReset: boolean
        - initialSettings: object
        + checkIfModified(): void
        + checkCanReset(): void
        + handleSpeedChange(value: number): void
        + handleVolumeChange(value: number): void
        + handlePitchChange(value: number): void
        + handleLanguageChange(value: string): void
        + handleVoiceChange(value: string): void
        + handleStyleChange(value: string): void
        + handleReset(): void
    }
    note for TTSSidebar "초기화 및 수정 확인을 위한 상태 관리 추가"

Select 컴포넌트의 업데이트된 클래스 다이어그램

classDiagram
    class Select {
        + value: string
        + placeholder: string
    }
    class SelectValue {
        + placeholder: string
        + value: string
    }
    Select --> SelectValue
    note for Select "value prop 처리 추가"
    note for SelectValue "placeholder 및 value props 처리를 위해 확장됨"

파일 수준 변경 사항

변경 사항 세부 사항 파일
상태 추적을 통한 TTS 설정 초기화 기능 구현
  • isAllConfigUpdated 및 enableReset 플래그를 사용하여 수정된 설정에 대한 상태 추적 추가
  • 각 설정 변경에 대한 별도의 핸들러 함수 생성
  • 초기 값을 복원하기 위한 초기화 기능 구현
  • 수정 사항에 따라 초기화 버튼을 활성화/비활성화하는 체크 추가
src/components/section/sidebar/TTSSidebar.tsx
버튼 컴포넌트를 isActive 대신 className prop을 사용하도록 리팩토링
  • 유연한 스타일링을 위해 isActive prop을 className prop으로 대체
  • 조건부 스타일링을 className을 통해 처리하도록 버튼 컴포넌트 업데이트
src/components/custom/buttons/IconButton.tsx
개선된 value 처리로 Select 컴포넌트 강화
  • SelectPrimitive.Root에서 명시적인 value prop 처리 추가
  • 적절한 타입 정의를 가진 새로운 SelectValue 컴포넌트 생성
  • 값 존재 여부에 따른 placeholder 처리 개선
src/components/ui/select.tsx
TTSPage 컴포넌트 성능 최적화
  • 불필요한 재렌더링을 방지하기 위해 상태 업데이트 함수를 useCallback으로 래핑
  • useMemo로 isAllSelected 계산 메모화
src/pages/TTSPage.tsx

관련 있을 수 있는 이슈


팁 및 명령어 #### Sourcery와 상호작용하기 - **새로운 리뷰 트리거:** PR에 `@sourcery-ai review`라고 댓글을 남깁니다. - **토론 계속하기:** Sourcery의 리뷰 댓글에 직접 답글을 남깁니다. - **리뷰 댓글에서 GitHub 이슈 생성:** 리뷰 댓글에서 Sourcery에게 이슈 생성을 요청합니다. - **PR 제목 생성:** PR 제목 어디에나 `@sourcery-ai`를 작성하여 언제든지 제목을 생성합니다. - **PR 요약 생성:** PR 본문 어디에나 `@sourcery-ai summary`를 작성하여 언제든지 PR 요약을 생성합니다. 이 명령어를 사용하여 요약이 삽입될 위치를 지정할 수도 있습니다. #### 경험 맞춤화 [대시보드](https://app.sourcery.ai)에 접속하여: - Sourcery가 생성한 PR 요약, 리뷰어 가이드 등과 같은 리뷰 기능을 활성화하거나 비활성화합니다. - 리뷰 언어를 변경합니다. - 사용자 정의 리뷰 지침을 추가, 제거 또는 편집합니다. - 기타 리뷰 설정을 조정합니다. #### 도움 받기 - 질문이나 피드백이 있는 경우 [지원 팀에 문의](mailto:support@sourcery.ai)하세요. - 자세한 가이드와 정보를 보려면 [문서](https://docs.sourcery.ai)를 방문하세요. - [X/Twitter](https://x.com/SourceryAI), [LinkedIn](https://www.linkedin.com/company/sourcery-ai/) 또는 [GitHub](https://github.com/sourcery-ai)에서 Sourcery 팀을 팔로우하여 소식을 받아보세요.
Original review guide in English ## Reviewer's Guide by Sourcery This PR addresses infinite loading issues in the TTS page and modifies the TTS sidebar functionality. The implementation focuses on optimizing component rendering using React hooks (useCallback, useMemo) and improving the reset functionality of TTS settings. The changes also include modifications to the Select component to better handle value props. #### Sequence diagram for TTS settings reset process ```mermaid sequenceDiagram participant User participant TTSSidebar participant ApplySelectionButton participant ResetChangesButton User->>TTSSidebar: Change settings TTSSidebar->>TTSSidebar: checkIfModified() TTSSidebar->>TTSSidebar: checkCanReset() User->>ResetChangesButton: Click reset ResetChangesButton->>TTSSidebar: handleReset() TTSSidebar->>TTSSidebar: Reset settings to initial TTSSidebar->>ApplySelectionButton: Update state ApplySelectionButton->>User: Reflect disabled state if not modified ``` #### Updated class diagram for TTSSidebar component ```mermaid classDiagram class TTSSidebar { - selectedLanguage: string - selectedVoice: string - selectedStyle: string - isAllConfigUpdated: boolean - enableReset: boolean - initialSettings: object + checkIfModified(): void + checkCanReset(): void + handleSpeedChange(value: number): void + handleVolumeChange(value: number): void + handlePitchChange(value: number): void + handleLanguageChange(value: string): void + handleVoiceChange(value: string): void + handleStyleChange(value: string): void + handleReset(): void } note for TTSSidebar "Added state management for reset and modification checks" ``` #### Updated class diagram for Select component ```mermaid classDiagram class Select { + value: string + placeholder: string } class SelectValue { + placeholder: string + value: string } Select --> SelectValue note for Select "Added value prop handling" note for SelectValue "Extended to handle placeholder and value props" ``` ### File-Level Changes | Change | Details | Files | | ------ | ------- | ----- | | Implemented TTS settings reset functionality with state tracking |
  • Added state tracking for modified settings using isAllConfigUpdated and enableReset flags
  • Created separate handler functions for each setting change
  • Implemented reset functionality to restore initial values
  • Added checks to enable/disable reset button based on modifications
| `src/components/section/sidebar/TTSSidebar.tsx` | | Refactored button components to use className prop instead of isActive |
  • Replaced isActive prop with className prop for more flexible styling
  • Updated button components to handle conditional styling through className
| `src/components/custom/buttons/IconButton.tsx` | | Enhanced Select component with improved value handling |
  • Added explicit value prop handling in SelectPrimitive.Root
  • Created new SelectValue component with proper type definitions
  • Improved placeholder handling based on value presence
| `src/components/ui/select.tsx` | | Optimized TTSPage component performance |
  • Wrapped state update functions with useCallback to prevent unnecessary re-renders
  • Memoized isAllSelected computation with useMemo
| `src/pages/TTSPage.tsx` | ### Possibly linked issues - **#1**: PR addresses TTSOptionsSidebar initial values and button states, aligning with issue requirements. - **#1**: PR addresses sidebar changes mentioned in the issue, including functional updates. ---
Tips and commands #### Interacting with Sourcery - **Trigger a new review:** Comment `@sourcery-ai review` on the pull request. - **Continue discussions:** Reply directly to Sourcery's review comments. - **Generate a GitHub issue from a review comment:** Ask Sourcery to create an issue from a review comment by replying to it. - **Generate a pull request title:** Write `@sourcery-ai` anywhere in the pull request title to generate a title at any time. - **Generate a pull request summary:** Write `@sourcery-ai summary` anywhere in the pull request body to generate a PR summary at any time. You can also use this command to specify where the summary should be inserted. #### Customizing Your Experience Access your [dashboard](https://app.sourcery.ai) to: - Enable or disable review features such as the Sourcery-generated pull request summary, the reviewer's guide, and others. - Change the review language. - Add, remove or edit custom review instructions. - Adjust other review settings. #### Getting Help - [Contact our support team](mailto:support@sourcery.ai) for questions or feedback. - Visit our [documentation](https://docs.sourcery.ai) for detailed guides and information. - Keep in touch with the Sourcery team by following us on [X/Twitter](https://x.com/SourceryAI), [LinkedIn](https://www.linkedin.com/company/sourcery-ai/) or [GitHub](https://github.com/sourcery-ai).
github-actions[bot] commented 1 week ago

Visit the preview URL for this PR (updated for commit b59e003):

https://aipark-four-t--189-extfufr6.web.app

(expires Thu, 28 Nov 2024 17:55:53 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

Sign: 0a4b3ef6ecc2c695a6a0d6ade46651e032870a9f