Skip to content

[UI] 모임방 페이지 QA#54

Merged
rbqks529 merged 10 commits into
THIP-TextHip:developfrom
rbqks529:ui/#53-group_qa
Jul 24, 2025
Merged

[UI] 모임방 페이지 QA#54
rbqks529 merged 10 commits into
THIP-TextHip:developfrom
rbqks529:ui/#53-group_qa

Conversation

@rbqks529
Copy link
Copy Markdown
Collaborator

@rbqks529 rbqks529 commented Jul 24, 2025

➕ 이슈 링크


🔎 작업 내용

  • 모임방 페이지 QA
  • 모임방 만들기 페이지 QA
  • 검색 페이지 QA

📸 스크린샷


😢 해결하지 못한 과제

  • [] TASK


📢 리뷰어들에게

  • 전체적으로 패딩이나 글자 스타일 등을 변경했습니다

Summary by CodeRabbit

  • 신규 기능

    • 일부 UI 컴포넌트에 디자인 미리보기(Preview) 기능이 추가되었습니다.
    • 새로운 벡터 아이콘(ic_x_circle_grey02)이 추가되었습니다.
  • 버그 수정

    • 리스트 마지막 항목에 불필요한 구분선 및 여백이 더 이상 표시되지 않습니다.
  • 리팩터링 및 스타일

    • 여러 UI 요소의 색상, 여백, 패딩, 텍스트 스타일이 개선되어 일관된 디자인을 제공합니다.
    • 명칭 및 패키지 구조가 booksearch에서 search로 통합되어 검색 관련 화면 및 컴포넌트가 정리되었습니다.
    • 일부 UI 컴포넌트의 이름이 더 명확하게 변경되었습니다.
  • 문서 및 문자열

    • 일부 안내 문구와 버튼 텍스트가 더 명확하고 구체적으로 변경되었습니다.
    • 책 등록 관련 안내 메시지가 분리되어 사용자에게 더 명확한 정보를 제공합니다.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jul 24, 2025

Walkthrough

이 PR은 모임방 및 검색 관련 UI 컴포넌트의 레이아웃, 색상, 텍스트 스타일, 패키지 및 함수명 리팩토링, 프리뷰 추가, 문자열 리소스 개선 등 전반적인 QA 및 디자인 피드백을 반영하여 다수의 화면과 컴포넌트에 걸쳐 세부적인 UI/UX 품질을 향상시키는 변경을 포함합니다. 비즈니스 로직 변경은 없으며, 주로 시각적 요소와 코드 구조 정리에 집중되어 있습니다.

Changes

파일/경로 그룹 변경 요약
.../ui/common/cards/CardItemRoom.kt, CardItemRoomSmall.kt, CardRoomBook.kt 카드 배경색, 내부 패딩/스페이싱, 텍스트 간격 등 UI 스타일 및 레이아웃 미세 조정
.../ui/common/forms/SearchBookTextField.kt, WarningTextField.kt 텍스트필드 내 아이콘 리소스 교체 및 아이콘 렌더링 로직 단순화, 미세한 코드 포맷팅
.../ui/group/makeroom/component/GroupBookListWithScrollbar.kt 마지막 아이템 뒤 구분선 및 스페이싱 제거 (forEach → forEachIndexed)
.../ui/group/makeroom/component/GroupBookSearchBottomSheet.kt, GroupEmptyBookSheetContent.kt 실시간 검색 필터링 로직 추가, 검색결과/빈 상태 UI 분리, 안내문구 텍스트화 및 스타일 변경
.../ui/group/makeroom/component/GroupDatePicker.kt 날짜 피커의 상태 관리 최적화 (remember, derivedStateOf 등 활용), 일수 유효성 보장
.../ui/group/makeroom/component/GroupMemberLimitPicker.kt 함수명 및 프리뷰명 변경(MemberLimitPicker → GroupMemberLimitPicker)
.../ui/group/makeroom/component/GroupRoomDurationPicker.kt, GroupSelectBook.kt import 구체화, OptionChipButton 파라미터 수정
.../ui/group/makeroom/component/GroupWheelPicker.kt 상태 관리 및 recomposition 최적화, 드래그 종료 시에만 선택값 변경
.../ui/group/makeroom/mock/GroupBookData.kt 더미 데이터에 author 필드 추가
.../ui/group/makeroom/screen/GroupMakeRoomScreen.kt import 구체화, MemberLimitPicker → GroupMemberLimitPicker, 비밀번호 입력 필드 파라미터 추가
.../ui/group/myroom/component/GroupDeadlineRoomSection.kt import 구체화
.../ui/group/myroom/component/GroupEmptyResult.kt, GroupFilteredSearchResult.kt, GroupLiveSearchResult.kt, GroupMyRoomFilterRow.kt, GroupRecentSearch.kt, SimplePagerIndicator.kt 프리뷰 함수 다수 추가, 레이아웃 구조 개선, 스타일/스페이싱 조정
.../ui/group/myroom/component/GroupMainCard.kt 참가자 수 row 스페이서 제거, 진행률 % 표기 분리(숫자/기호)
.../ui/group/myroom/component/GroupSearchTextField.kt import 구체화, 배경색/텍스트스타일 조정
.../ui/group/myroom/screen/GroupMyScreen.kt, GroupRoomScreen.kt, GroupRoomSecretScreen.kt 스페이서 제거, 패딩 변환, 빈 상태 아이콘 제거 등 레이아웃 개선
.../ui/group/screen/GroupDoneScreen.kt, GroupScreen.kt 패딩 추가 및 스페이서 → 패딩 변환, Preview 어노테이션 수정
.../ui/navigator/MainNavHost.kt BookSearchScreen → SearchBookScreen 네비게이션 경로 및 import 수정
.../ui/search/component/ (여러 파일) 패키지명 booksearch → search로 변경, 함수명 일괄 변경, import 경로 수정, 스타일/레이아웃 소폭 조정
.../ui/search/mock/BookData.kt, DetailBookData.kt 패키지명 변경(booksearch.mock → search.mock)
.../ui/search/screen/ (여러 파일) 패키지명, 함수명 일괄 변경, import 경로 수정, 프리뷰 함수명 변경, 레이아웃 및 스타일 조정
.../res/drawable/ic_x_circle_grey02.xml 신규 닫기 아이콘 벡터 리소스 추가
.../res/values/strings.xml 모임방/참여/책 관련 안내문구 및 라벨 다수 개선, 일부 문자열 분리/추가

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant GroupBookSearchBottomSheet
    participant BookList

    User->>GroupBookSearchBottomSheet: 검색어 입력
    GroupBookSearchBottomSheet->>BookList: 실시간 필터링 (제목/저자)
    alt 결과 있음
        GroupBookSearchBottomSheet-->>User: 필터링된 리스트 표시
    else 결과 없음
        GroupBookSearchBottomSheet-->>User: "검색 결과 없음" 안내 표시
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20분

Possibly related PRs

Suggested labels

🎨 UI, 🍀 refactor, 🐻 규빈, ✅ OK merge

Poem

🐰
새로워진 방과 책의 빛,
스페이서 대신 패딩이 짙어지네.
아이콘도 한층 더 예뻐져,
프리뷰 속 토끼가 깡충깡충!
QA의 손길 따라
코드는 말끔, 화면은 반짝—
오늘도 토끼는 행복해!

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ 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.
    • Explain this complex logic.
    • 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 explain this code block.
    • @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 explain its main purpose.
    • @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.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

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 generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this 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
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR implements QA fixes for the meeting room page, meeting room creation page, and search page. The changes focus on improving UI consistency through padding adjustments, text style updates, and component reorganization.

  • Refactored search-related components from booksearch to search package structure
  • Updated UI spacing, typography styles, and component layouts across group room screens
  • Enhanced text field icons and improved visual consistency in cards and form components

Reviewed Changes

Copilot reviewed 41 out of 41 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
strings.xml Updated text content for group participation and book registration messages
ic_x_circle_grey02.xml Added new grey circle X icon drawable resource
SearchBookScreen.kt Renamed from BookSearchScreen and updated component references
SearchBookGroupScreen.kt Renamed from BookRecruitingScreen with layout padding improvements
SearchBookDetailScreen.kt Renamed from BookDetailScreen with typography and spacing updates
GroupRoomScreen.kt Improved layout spacing and conditional rendering of recommendations
GroupMakeRoomScreen.kt Updated component references and text field configurations
WarningTextField.kt Simplified trailing icon logic and updated icon resource
Various component files Added preview functions, updated spacing, and improved layout consistency

BookData("토마토 컬러면", R.drawable.bookcover_sample, "최정화"),
BookData("사슴", R.drawable.bookcover_sample, "최정화")
)
val dummyGroupBooks = listOf(
Copy link

Copilot AI Jul 24, 2025

Choose a reason for hiding this comment

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

The dummyGroupBooks list is missing author parameters while dummySavedBooks was updated to include them. This inconsistency could cause issues if the BookData constructor requires author parameters.

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown

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

🧹 Nitpick comments (7)
app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupRoomDurationPicker.kt (1)

39-41: LocalDate 를 rememberSaveable로 직렬화할 때 Bundle 크기 주의

LocalDateSerializable이므로 rememberSaveable이 Bundler에 그대로 저장합니다. 화면 회전이 잦은 경우 큰 객체를 여러 번 직렬화/역직렬화하면서 성능·메모리 오버헤드가 생길 수 있습니다.

epochDay(Long)로 저장/복원하는 Saver를 만들어 바이트 수를 최소화하거나, 구성 변경 시 복원이 굳이 필요 없다면 remember { … }만 사용해도 됩니다.

+private val LocalDateSaver = Saver<LocalDate, Long>(
+    save = { it.toEpochDay() },
+    restore = { LocalDate.ofEpochDay(it) }
+)

-var startDate by rememberSaveable { mutableStateOf(today) }
-var endDate   by rememberSaveable { mutableStateOf(today.plusDays(1)) }
+var startDate by rememberSaveable(stateSaver = LocalDateSaver) { mutableStateOf(today) }
+var endDate   by rememberSaveable(stateSaver = LocalDateSaver) { mutableStateOf(today.plusDays(1)) }
app/src/main/java/com/texthip/thip/ui/group/makeroom/mock/GroupBookData.kt (1)

12-19: 목데이터의 다양성을 개선해보세요

모든 책에 동일한 저자("최정화")를 사용하고 있습니다. UI 테스트와 필터링 기능을 더 효과적으로 검증하려면 다양한 저자명을 사용하는 것이 좋겠습니다.

val dummySavedBooks = listOf(
-    BookData("토마토 컬러면", R.drawable.bookcover_sample, "최정화"),
-    BookData("사슴",  R.drawable.bookcover_sample, "최정화"),
-    BookData("토마토 컬러면", R.drawable.bookcover_sample, "최정화"),
-    BookData("사슴",  R.drawable.bookcover_sample, "최정화"),
+    BookData("토마토 컬러면", R.drawable.bookcover_sample, "최정화"),
+    BookData("사슴",  R.drawable.bookcover_sample, "김영하"),
+    BookData("토마토 컬러면", R.drawable.bookcover_sample, "최정화"),
+    BookData("사슴",  R.drawable.bookcover_sample, "박민규"),
app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoom.kt (1)

118-129: 2 dp 간격 제거 여부 재검토

동일 PR에서 CardItemRoomSmall, GroupMainCard 등에서는 2 dp Spacer를 제거하여 텍스트 간격을 더 조밀하게 맞춘 것으로 보입니다. 이 컴포넌트에는 여전히 남아 있어 디자인 일관성이 깨질 수 있습니다.

-                                Spacer(modifier = Modifier.width(2.dp))
app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyResult.kt (1)

3-6: 불필요한 background import 제거

해당 파일에서는 Modifier.background를 사용하지 않으므로 import androidx.compose.foundation.background 가 불필요합니다. 정리하면 경고를 줄일 수 있습니다.

-import androidx.compose.foundation.background

Also applies to: 13-14

app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupMemberLimitPicker.kt (1)

73-73: 프리뷰 함수명을 일관성 있게 업데이트하세요.

프리뷰 함수명이 여전히 MemberLimitPickerPreview로 되어 있어 새로운 컴포넌트명과 일치하지 않습니다.

다음과 같이 수정하는 것을 권장합니다:

-fun MemberLimitPickerPreview() {
+fun GroupMemberLimitPickerPreview() {
app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookGroupScreen.kt (1)

144-144: 프리뷰 함수명을 새로운 컴포넌트명과 일치시키세요.

프리뷰 함수명들이 여전히 GroupRecruiting 접두사를 사용하고 있어 새로운 컴포넌트명 SearchBookGroup과 일치하지 않습니다.

다음과 같이 수정하는 것을 권장합니다:

-fun GroupRecruitingScreenPreview() {
+fun SearchBookGroupScreenPreview() {
-fun GroupRecruitingScreenEmptyPreview() {
+fun SearchBookGroupScreenEmptyPreview() {

Also applies to: 221-221

app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomScreen.kt (1)

497-497: 장르 표시 일관성 개선

프리뷰 데이터에서 장르를 "고전 문학"에서 "문학"으로 통일한 것이 좋습니다. 다만 562라인의 프리뷰에서는 여전히 "고전 문학"이 사용되고 있어 일관성을 확인해보세요.

// 562라인도 동일하게 통일 고려:
genre = "문학", // "고전 문학" 대신

Also applies to: 627-627

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1d57638 and a55f7c1.

📒 Files selected for processing (41)
  • app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoom.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt (3 hunks)
  • app/src/main/java/com/texthip/thip/ui/common/cards/CardRoomBook.kt (1 hunks)
  • app/src/main/java/com/texthip/thip/ui/common/forms/SearchBookTextField.kt (1 hunks)
  • app/src/main/java/com/texthip/thip/ui/common/forms/WarningTextField.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupBookListWithScrollbar.kt (1 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupBookSearchBottomSheet.kt (6 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupDatePicker.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupEmptyBookSheetContent.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupMemberLimitPicker.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupRoomDurationPicker.kt (1 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupSelectBook.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupWheelPicker.kt (6 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/makeroom/mock/GroupBookData.kt (1 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/makeroom/screen/GroupMakeRoomScreen.kt (4 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupDeadlineRoomSection.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyResult.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupFilteredSearchResult.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupLiveSearchResult.kt (3 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMainCard.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMyRoomFilterRow.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupRecentSearch.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupSearchTextField.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/myroom/component/SimplePagerIndicator.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupMyScreen.kt (1 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomScreen.kt (8 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomSecretScreen.kt (1 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/screen/GroupDoneScreen.kt (1 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt (4 hunks)
  • app/src/main/java/com/texthip/thip/ui/navigator/MainNavHost.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/ui/search/component/SearchActiveField.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/ui/search/component/SearchBookFilteredResult.kt (4 hunks)
  • app/src/main/java/com/texthip/thip/ui/search/component/SearchEmptyResult.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/ui/search/component/SearchRecentBook.kt (7 hunks)
  • app/src/main/java/com/texthip/thip/ui/search/mock/BookData.kt (1 hunks)
  • app/src/main/java/com/texthip/thip/ui/search/mock/DetailBookData.kt (1 hunks)
  • app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookDetailScreen.kt (5 hunks)
  • app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookGroupScreen.kt (5 hunks)
  • app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookScreen.kt (6 hunks)
  • app/src/main/res/drawable/ic_x_circle_grey02.xml (1 hunks)
  • app/src/main/res/values/strings.xml (2 hunks)
🧰 Additional context used
🧠 Learnings (19)
📓 Common learnings
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.
app/src/main/java/com/texthip/thip/ui/common/forms/SearchBookTextField.kt (1)

Learnt from: rbqks529
PR: #30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.

app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomSecretScreen.kt (1)

Learnt from: rbqks529
PR: #30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.

app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookGroupScreen.kt (1)

Learnt from: rbqks529
PR: #30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.

app/src/main/java/com/texthip/thip/ui/group/makeroom/screen/GroupMakeRoomScreen.kt (1)

Learnt from: rbqks529
PR: #30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.

app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupMemberLimitPicker.kt (1)

Learnt from: rbqks529
PR: #30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.

app/src/main/java/com/texthip/thip/ui/common/forms/WarningTextField.kt (1)

Learnt from: rbqks529
PR: #30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.

app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMyRoomFilterRow.kt (1)

Learnt from: rbqks529
PR: #30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.

app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupSearchTextField.kt (1)

Learnt from: rbqks529
PR: #30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.

app/src/main/java/com/texthip/thip/ui/search/component/SearchActiveField.kt (1)

Learnt from: rbqks529
PR: #30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.

app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupSelectBook.kt (1)

Learnt from: rbqks529
PR: #30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.

app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt (1)

Learnt from: rbqks529
PR: #30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.

app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupEmptyBookSheetContent.kt (1)

Learnt from: rbqks529
PR: #30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.

app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMainCard.kt (1)

Learnt from: rbqks529
PR: #30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.

app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookScreen.kt (1)

Learnt from: rbqks529
PR: #30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.

app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookDetailScreen.kt (1)

Learnt from: rbqks529
PR: #30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.

app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomScreen.kt (1)

Learnt from: rbqks529
PR: #30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.

app/src/main/java/com/texthip/thip/ui/search/component/SearchRecentBook.kt (1)

Learnt from: rbqks529
PR: #30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.

app/src/main/res/values/strings.xml (1)

Learnt from: rbqks529
PR: #30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.

🧬 Code Graph Analysis (10)
app/src/main/java/com/texthip/thip/ui/navigator/MainNavHost.kt (1)
app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookScreen.kt (1)
  • SearchBookScreen (36-160)
app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupBookListWithScrollbar.kt (1)
app/src/main/java/com/texthip/thip/ui/common/cards/CardBookSearch.kt (1)
  • CardBookSearch (28-76)
app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyResult.kt (1)
app/src/main/java/com/texthip/thip/ui/theme/Theme.kt (1)
  • ThipTheme (41-69)
app/src/main/java/com/texthip/thip/ui/group/makeroom/screen/GroupMakeRoomScreen.kt (1)
app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupMemberLimitPicker.kt (1)
  • GroupMemberLimitPicker (25-69)
app/src/main/java/com/texthip/thip/ui/group/myroom/component/SimplePagerIndicator.kt (1)
app/src/main/java/com/texthip/thip/ui/theme/Theme.kt (1)
  • ThipTheme (41-69)
app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMyRoomFilterRow.kt (1)
app/src/main/java/com/texthip/thip/ui/theme/Theme.kt (1)
  • ThipTheme (41-69)
app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupLiveSearchResult.kt (1)
app/src/main/java/com/texthip/thip/ui/theme/Theme.kt (1)
  • ThipTheme (41-69)
app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupWheelPicker.kt (1)
app/src/main/java/com/texthip/thip/ui/group/makeroom/util/WheelPickerDisplayUtils.kt (2)
  • offsetToIndex (18-29)
  • normalizeOffset (11-16)
app/src/main/java/com/texthip/thip/ui/search/component/SearchBookFilteredResult.kt (1)
app/src/main/java/com/texthip/thip/ui/search/component/SearchEmptyResult.kt (1)
  • SearchEmptyResult (21-55)
app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupBookSearchBottomSheet.kt (2)
app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupEmptyBookSheetContent.kt (1)
  • EmptyBookSheetContent (24-57)
app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupBookListWithScrollbar.kt (1)
  • GroupBookListWithScrollbar (24-62)
🔇 Additional comments (90)
app/src/main/java/com/texthip/thip/ui/group/screen/GroupDoneScreen.kt (1)

52-58: LazyColumn 상단 여백은 contentPadding으로 통일하는 편이 더 일관됩니다

contentPadding = PaddingValues(bottom = 20.dp)와 달리 상단 여백은 Modifier.padding(top = 16.dp)로 주어져 있어 여백 정의 위치가 섞여 있습니다.
같은 속성(contentPadding)으로 모두 지정하면 코드 가독성과 유지보수가 조금 더 쉬워집니다.

-                contentPadding = PaddingValues(bottom = 20.dp),
+                contentPadding = PaddingValues(top = 16.dp, bottom = 20.dp),
                 modifier = Modifier
                     .fillMaxSize()
-                    .padding(top = 16.dp)
+                    // 상단 패딩을 contentPadding 으로 이동했으므로 제거

[ suggest_optional_refactor ]

app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupDeadlineRoomSection.kt (1)

5-16: import 구문 개선이 잘 되었습니다.

와일드카드 import에서 명시적 import로 변경한 것은 코드 가독성과 유지보수성을 향상시키는 좋은 개선입니다. 의존성이 더 명확해지고 네이밍 충돌 위험도 줄어듭니다.

Also applies to: 21-25, 38-38

app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupRoomDurationPicker.kt (2)

4-15: 명시적 import 전환 👍

와일드카드 대신 필요한 클래스만 명시적으로 import 하여 가독성과 의존성 추적성이 모두 향상되었습니다. 스타일 가이드를 잘 준수하셨습니다.


63-91: LaunchedEffect 블록 분산 → 단일 검증 로직으로 단순화 가능

startDateendDate의 유효성 검사를 두 개의 LaunchedEffect로 나누면 재조정 로직이 분산되고, 서로를 연쇄적으로 트리거할 위험이 있습니다.

DerivedState + 단일 LaunchedEffect 또는 snapshotFlow로 합쳐 사이드이펙트를 한 곳에서 처리하면 코드 양과 재계산 횟수를 모두 줄일 수 있습니다.

val adjustedRange by remember(startDate, endDate) {
    derivedStateOf {
        val newStart = startDate.coerceIn(today, maxDate)
        val newEnd   = endDate.coerceIn(newStart.plusDays(1), maxDate)
        newStart to newEnd
    }
}

LaunchedEffect(adjustedRange) {
    startDate = adjustedRange.first
    endDate   = adjustedRange.second
    onDateRangeSelected(startDate, endDate)
}

[ suggest_optional_refactor ]

app/src/main/java/com/texthip/thip/ui/common/cards/CardRoomBook.kt (1)

139-139: 좋은 레이아웃 최적화입니다!

Spacer를 제거하고 Text 컴포넌트에 직접 padding을 적용한 것은 좋은 개선사항입니다. 이렇게 하면 컴포즈 트리의 노드 수가 줄어들어 성능상 이점이 있고, 스페이싱 의도가 더 명확해집니다.

app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMainCard.kt (1)

131-139: 진행률 표시의 시각적 계층구조가 개선되었습니다

숫자와 퍼센트 기호를 분리하여 서로 다른 타이포그래피를 적용한 것은 좋은 개선사항입니다. 시각적 계층구조가 더 명확해졌습니다.

접근성을 고려해서 필요시 두 Text 컴포넌트를 의미적으로 그룹화하는 것도 검토해보시기 바랍니다.

app/src/main/java/com/texthip/thip/ui/search/mock/BookData.kt (1)

1-1: 패키지 리팩토링이 적절합니다

booksearch에서 search로 패키지명을 변경한 것은 좋은 개선사항입니다. 더 일반적이고 간결한 네이밍으로 코드 구조가 개선되었습니다.

app/src/main/java/com/texthip/thip/ui/search/mock/DetailBookData.kt (1)

1-1: 일관된 패키지 리팩토링입니다

BookData.kt와 동일하게 패키지명을 search로 변경한 것이 일관성을 유지하는 좋은 접근입니다.

app/src/main/java/com/texthip/thip/ui/common/forms/SearchBookTextField.kt (1)

92-92: 아이콘 리소스 업데이트 승인

텍스트 클리어 버튼의 아이콘을 새로운 버전으로 업데이트한 것이 적절합니다. UI QA 개선의 일환으로 시각적 일관성을 높이는 변경사항입니다.

app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomSecretScreen.kt (1)

92-92: 레이아웃 개선 승인

Spacer 컴포넌트를 제거하고 Text에 직접 padding을 적용한 것이 좋은 리팩토링입니다. 코드가 더 간결해지고 성능상 이점도 있습니다.

app/src/main/java/com/texthip/thip/ui/navigator/MainNavHost.kt (2)

7-7: 패키지 리팩토링 승인

booksearch 패키지에서 search 패키지로의 이름 변경이 일관되게 적용되었습니다. 더 간결하고 명확한 패키지명으로 개선되었습니다.


17-17: 네비게이션 컴포저블 업데이트 승인

SearchBookScreen으로의 네비게이션 업데이트가 올바르게 적용되었습니다. 기존 인터페이스가 유지되어 네비게이션 기능에 영향이 없습니다.

app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupMyScreen.kt (2)

78-78: 간격 조정 승인

필터 행 이후의 간격을 20.dp로 증가시켜 시각적 분리를 개선한 것이 적절합니다.


83-83: LazyColumn 패딩 조정 승인

상단 패딩을 제거하고 상위 Spacer로 간격을 통일한 것이 레이아웃 일관성을 높입니다.

app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupBookListWithScrollbar.kt (1)

42-58: 목록 UI 개선 승인

forEachIndexed를 사용하여 마지막 아이템 뒤의 불필요한 구분선과 간격을 제거한 것이 좋은 개선사항입니다. 조건부 로직(index < books.size - 1)이 올바르게 구현되어 깔끔한 목록 UI를 제공합니다.

app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoom.kt (1)

64-65: DarkGrey 사용으로 카드-배경 대비 확인 필요

DarkGrey50에서 DarkGrey로 변경되면서 카드가 배경(특히 colors.Black)과 시각적으로 거의 붙어 보일 수 있습니다. 실제 기기(light/dark 모드 포함)에서 카드 윤곽이 충분히 구분되는지 한번 더 확인해 주세요.

app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt (3)

55-56: 배경색 통일 👍

와이드가 아닌 카드의 배경색을 DarkGrey로 맞춰 일관성이 높아졌습니다.


104-106: 텍스트 상단 여백 직접 부여 👍

Spacer 제거 후 Modifier.padding(top = 4.dp)로 대체해 코드 가독성이 좋아졌습니다.


146-147: 7 dp 여백이 의도된 수치인지 확인

기존 4 dp에서 7 dp로 늘어나면서 상-하 높이 합계가 홀수 dp가 됩니다. 디자인 시스템에서 짝수 dp 단위를 권장한다면 다시 한번 값이 맞는지 검토 부탁드립니다.

app/src/main/java/com/texthip/thip/ui/search/component/SearchEmptyResult.kt (1)

1-2: 레거시 참조 없음 확인
BookEmptyResult 및 ui.booksearch.component에 대한 전역 검색 결과, 남아있는 호출부가 없습니다.

app/src/main/java/com/texthip/thip/ui/group/myroom/component/SimplePagerIndicator.kt (1)

43-56: 프리뷰 추가 👍

ThipTheme로 감싼 프리뷰 덕분에 스튜디오에서 상태를 쉽게 확인할 수 있게 되었습니다. 코드에도 영향이 없으므로 그대로 머지해도 좋습니다.

app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyResult.kt (1)

43-57: 프리뷰 추가 👍

디자인 확인을 위한 프리뷰가 추가되었습니다. 실제 UI에 영향이 없으며 가독성도 좋습니다.

app/src/main/res/drawable/ic_x_circle_grey02.xml (1)

1-16: 새로운 아이콘 리소스가 올바르게 구현되었습니다.

벡터 드로어블이 안드로이드 표준을 잘 따르고 있으며, 크기와 색상 설정이 적절합니다. 텍스트 필드의 클리어 버튼용도로 사용하기에 적합한 디자인입니다.

app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupMemberLimitPicker.kt (1)

26-26: 컴포넌트 이름 변경이 적절합니다.

GroupMemberLimitPicker로의 이름 변경이 그룹 패키지의 네이밍 컨벤션과 잘 맞습니다.

app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupSearchTextField.kt (2)

4-18: import 문 명시적 선언이 좋습니다.

와일드카드 임포트 대신 명시적 임포트를 사용하여 코드 가독성과 유지보수성이 향상되었습니다.


45-45: 배경색 변경이 UI 일관성을 향상시킵니다.

DarkGrey50에서 DarkGrey로의 변경이 다른 UI 컴포넌트들과의 시각적 일관성을 높입니다.

app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupDatePicker.kt (2)

42-49: 상태 캐싱 개선이 성능을 향상시킵니다.

remember를 사용하여 날짜 범위 계산 결과를 캐싱하고 적절한 의존성을 설정한 것이 훌륭합니다. 이는 불필요한 재계산을 방지하고 컴포지션 성능을 개선합니다.


112-112: 날짜 유효성 검증 로직이 안정성을 높입니다.

coerceAtMost를 사용하여 월 변경 시 유효하지 않은 날짜 선택을 방지하는 것이 좋은 접근입니다. 이는 사용자 경험을 개선하고 잠재적인 크래시를 방지합니다.

app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookGroupScreen.kt (3)

1-1: 패키지 구조 개선이 코드 조직화를 향상시킵니다.

booksearch.screen에서 search.screen으로의 패키지 변경이 검색 기능의 통합적인 구조 개선에 적합합니다.


36-36: 함수명 변경이 목적을 명확히 합니다.

BookRecruitingScreen에서 SearchBookGroupScreen으로의 변경이 컴포넌트의 실제 기능을 더 명확하게 표현합니다.


57-57: 상단 패딩 추가가 UI 간격을 개선합니다.

16dp의 상단 패딩 추가가 레이아웃의 시각적 균형을 향상시킵니다.

app/src/main/java/com/texthip/thip/ui/group/makeroom/screen/GroupMakeRoomScreen.kt (4)

3-19: Import 구문 개선이 적절합니다.

wildcard import에서 explicit import로 변경하여 코드 가독성과 의존성 추적이 개선되었습니다.


36-36: 컴포넌트 이름 변경이 일관성 있게 적용되었습니다.

MemberLimitPicker에서 GroupMemberLimitPicker로 변경하여 네이밍 컨벤션이 일관되게 적용되었습니다.


158-158: 컴포넌트 사용법이 올바르게 업데이트되었습니다.

Import 변경에 맞춰 GroupMemberLimitPicker 사용이 적절히 적용되었습니다.


197-200: WarningTextField의 새로운 매개변수들이 적절히 설정되었습니다.

비밀방 비밀번호 입력 필드에 추가된 매개변수들이 UI 개선에 적합합니다:

  • showIcon = true: 비밀번호 필드임을 명확히 표시
  • showLimit = false: 글자 수 제한 표시 비활성화
  • containerColor = colors.DarkGrey02: 적절한 배경색 적용
app/src/main/java/com/texthip/thip/ui/search/component/SearchActiveField.kt (3)

1-1: 패키지 리팩토링이 적절합니다.

booksearch에서 search로 패키지명 변경이 더 간결하고 명확한 구조를 제공합니다.


14-14: Import 경로가 새 패키지 구조에 맞게 올바르게 업데이트되었습니다.

BookData의 import 경로가 새로운 패키지 구조와 일치합니다.


19-19: 함수명 변경이 더 명확한 의미를 제공합니다.

BookLiveSearchResult에서 SearchActiveField로 변경하여 컴포넌트의 역할이 더 명확해졌습니다.

app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupLiveSearchResult.kt (4)

5-21: 새로운 import들이 적절히 추가되었습니다.

Preview 기능과 UI 개선을 위한 필요한 import들이 올바르게 추가되었습니다.


26-26: LazyColumn 스페이싱 방식 개선이 적절합니다.

verticalArrangement = Arrangement.spacedBy(16.dp) 제거하고 명시적 padding 사용으로 더 세밀한 제어가 가능해졌습니다.


40-40: 아이템 간 간격 설정이 일관성 있게 적용되었습니다.

12dp의 top/bottom padding으로 아이템 간 간격을 명시적으로 설정하여 UI 일관성이 향상되었습니다.


50-94: Preview 함수가 잘 구현되었습니다.

다양한 상태의 샘플 데이터(일반 모임, 비공개 모임, 모집완료 등)를 포함하여 개발 시 컴포넌트 확인이 용이해졌습니다. ThipTheme 적용도 적절합니다.

app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupEmptyBookSheetContent.kt (2)

22-22: Typography import 추가가 적절합니다.

새로운 타이포그래피 스타일 사용을 위한 필요한 import입니다.


34-44: 텍스트 기반 UI 개선이 효과적입니다.

아이콘을 제거하고 두 줄의 명확한 텍스트 메시지로 교체한 것이 사용자 경험을 향상시킵니다:

  • 문자열 리소스 사용으로 지역화 지원
  • typography.copy_m500_s14_h20 스타일로 일관된 디자인
  • colors.Grey로 적절한 색상 적용

이전 학습에서 확인된 바와 같이 문자열 리소스 추출을 선호하는 개발 스타일과 일치합니다.

app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupSelectBook.kt (2)

8-15: Import 구문 개선이 적절합니다.

wildcard import에서 explicit import로 변경하여 코드 가독성과 유지보수성이 향상되었습니다. 사용되지 않는 Button, OutlinedButton import도 적절히 제거되었습니다.


121-121: OptionChipButton의 isSelected 값 변경이 논리적으로 적절합니다.

"변경" 버튼이 선택된 상태(true)로 표시되는 것보다 일반 상태(false)로 표시하는 것이 UX 관점에서 더 자연스럽고 직관적입니다.

app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMyRoomFilterRow.kt (2)

6-11: 프리뷰를 위한 import 추가가 적절합니다.

디자인 타임 시각화를 위해 필요한 상태 관리 및 프리뷰 관련 import들이 올바르게 추가되었습니다.

Also applies to: 15-15


38-53: 인터랙티브 프리뷰 구현이 우수합니다.

프리뷰 함수가 다음과 같이 잘 구현되었습니다:

  • ThipTheme으로 적절한 테마 래핑
  • 로컬 상태 관리를 통한 인터랙티브 동작 구현
  • 실제 컴포넌트와 동일한 파라미터 구조 유지

이는 디자인 타임에서 컴포넌트의 동작을 확인할 수 있게 해주는 좋은 구현입니다.

app/src/main/java/com/texthip/thip/ui/common/forms/WarningTextField.kt (2)

85-91: 아이콘 로직 단순화가 UX를 개선합니다.

트레일링 아이콘 로직이 다음과 같이 개선되었습니다:

  • 텍스트 유무에 관계없이 일관된 클리어 아이콘 표시
  • 항상 클릭 가능한 상태로 사용자 경험 향상
  • 일관된 회색 아이콘 사용으로 시각적 통일성 확보

이 변경으로 사용자는 언제든지 텍스트를 쉽게 지울 수 있게 되었습니다.


156-156: 프리뷰 함수의 포맷팅이 정리되었습니다.

불필요한 공백이 제거되고 람다 파라미터 주변의 간격이 일관되게 조정되었습니다.

app/src/main/java/com/texthip/thip/ui/search/component/SearchBookFilteredResult.kt (3)

1-1: 패키지 구조 개선이 적절합니다.

booksearch에서 search로의 패키지 재구성이 더 명확한 구조를 제공합니다.


4-10: Import 구문이 명시적으로 개선되었습니다.

레이아웃 관련 컴포넌트들의 import가 명시적으로 선언되어 코드 가독성과 의존성 파악이 용이해졌습니다.


21-21: 함수 및 컴포넌트 이름 변경이 일관성 있게 적용되었습니다.

  • BookFilteredSearchResultSearchBookFilteredResult
  • BookEmptyResultSearchEmptyResult
  • BookData import 경로 업데이트
  • 프리뷰 함수에서도 새로운 이름 사용

패키지 재구성과 일치하는 체계적인 리네이밍입니다.

Also applies to: 28-28, 52-52, 87-87

app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt (4)

10-10: 패딩 관련 import 추가가 적절합니다.

레이아웃 간격 조정을 위한 padding import가 올바르게 추가되었습니다.


66-66: 간격 제어 방식 개선이 코드 품질을 향상시킵니다.

별도의 Spacer 대신 컴포넌트에 직접 padding modifier를 적용하여:

  • 코드 구조가 더 명확해짐
  • 간격 관리가 컴포넌트 단위로 통합됨
  • 유지보수성 향상

동일한 시각적 결과를 더 깔끔한 방식으로 달성했습니다.


86-86: 구분선 간격 조정이 일관성 있게 적용되었습니다.

수평 구분선에 bottom padding을 적용하여 상하 Spacer를 대체한 것이 다른 컴포넌트들과 일관된 패턴입니다.


108-108: 프리뷰 어노테이션 정리가 코드를 간결하게 만듭니다.

불필요한 빈 괄호를 제거하여 코드가 더 간결해졌습니다.

app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookScreen.kt (3)

1-1: 검색 기능 패키지 통합이 완료되었습니다.

booksearch에서 search로의 패키지 이전이 완료되어 검색 관련 기능들이 하나의 명확한 패키지로 통합되었습니다.


27-31: 컴포넌트 import 경로가 체계적으로 업데이트되었습니다.

모든 검색 관련 컴포넌트들의 import 경로가 새로운 패키지 구조에 맞게 일관성 있게 변경되었습니다:

  • SearchEmptyResult
  • SearchBookFilteredResult
  • SearchActiveField
  • SearchRecentBook
  • BookData

37-37: 함수명 변경과 컴포넌트 호출이 일관성 있게 적용되었습니다.

  • 메인 스크린: BookSearchScreenSearchBookScreen
  • 모든 하위 컴포넌트 호출이 새로운 이름으로 정확히 업데이트됨
  • 프리뷰 함수들도 새로운 스크린 이름 사용

패키지 재구성에 따른 체계적이고 완전한 업데이트입니다.

Also applies to: 119-119, 138-138, 144-144, 151-151, 167-167, 192-192

app/src/main/java/com/texthip/thip/ui/search/component/SearchRecentBook.kt (5)

1-1: 패키지 구조 개선이 잘 반영되었습니다.

booksearch에서 search로의 패키지 리팩토링이 일관성 있게 적용되어 코드 구조가 더 명확해졌습니다.


31-31: 함수명 변경과 타이포그래피 스타일 업데이트가 적절합니다.

BookRecentSearch에서 SearchRecentBook로의 함수명 변경과 menu_r400_s14_h24에서 smalltitle_sb600_s18_h24로의 타이포그래피 변경이 일관성 있게 적용되었습니다. 더 굵은 폰트 웨이트(600)로 변경하여 가독성이 향상될 것으로 보입니다.

Also applies to: 43-43, 79-79


69-72: 레이아웃 최적화가 효과적입니다.

독립적인 Spacer 대신 Row에 직접 padding(top = 32.dp)를 적용하여 더 간결하고 효율적인 레이아웃 구조로 개선되었습니다.


91-91: Box modifier 단순화가 좋습니다.

weight(1f, fill = true)에서 weight(1f)로 단순화하여 코드가 더 깔끔해졌습니다. 기본값이 fill = true이므로 동일한 동작을 합니다.


145-145: 프리뷰 함수들의 일관된 업데이트.

프리뷰 함수들에서 새로운 함수명 SearchRecentBook을 사용하도록 적절히 업데이트되었으며, 불필요한 마침표도 제거되어 더 깔끔해졌습니다.

Also applies to: 179-179, 182-182

app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookDetailScreen.kt (4)

1-1: 패키지 리팩토링과 함수명 변경이 일관되게 적용되었습니다.

booksearch에서 search로의 패키지 변경과 BookDetailScreen에서 SearchBookDetailScreen으로의 함수명 변경이 체계적으로 이루어져 코드 구조가 개선되었습니다.

Also applies to: 40-40, 52-52


163-163: 타이포그래피 스타일 업데이트가 적절합니다.

출판사 정보와 코멘트 제목에서 각각 menu_sb600_s12_h20menu_sb600_s14_h24로 타이포그래피를 변경하여 UI 일관성이 향상되었습니다.

Also applies to: 175-175


168-168: 레이아웃 간격 조정이 세밀하게 이루어졌습니다.

padding(top = 33.dp)Spacer(height = 5.dp) 조정으로 시각적 계층구조가 더 명확해졌습니다.

Also applies to: 177-177


328-328: 프리뷰 함수 업데이트가 일관됩니다.

프리뷰 함수에서 새로운 함수명을 사용하도록 적절히 업데이트되었습니다.

app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupBookSearchBottomSheet.kt (4)

9-9: 실시간 검색 필터링 구현이 효율적입니다.

derivedStateOf를 사용하여 검색어와 현재 책 목록을 기반으로 필터링된 결과를 계산하는 방식이 적절합니다. 불필요한 리컴포지션을 방지하면서 실시간 검색 기능을 구현했습니다.

Also applies to: 47-58


52-55: 검색 로직이 사용자 친화적입니다.

제목과 작가명 모두에서 대소문자를 구분하지 않는 검색을 지원하여 사용자 경험이 향상되었습니다. ignoreCase = true 옵션을 적절히 활용했습니다.


97-113: UI 상태 분기가 명확하고 포괄적입니다.

when 표현식을 사용하여 다음 세 가지 상태를 명확히 구분했습니다:

  1. 현재 탭에 책이 없는 경우
  2. 검색어는 있지만 필터링된 결과가 없는 경우
  3. 필터링된 책을 표시하는 경우

이는 사용자에게 적절한 피드백을 제공합니다.


129-137: SearchEmptyContent 구현이 실용적입니다.

현재는 기존 EmptyBookSheetContent에 위임하는 방식으로 구현되어 있어 일관된 UI를 유지하면서도 향후 검색 전용 빈 상태 UI로 확장할 수 있는 구조입니다.

app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupWheelPicker.kt (4)

60-60: 메모이제이션을 통한 성능 최적화가 잘 구현되었습니다.

remember를 사용하여 selectedIndex, 픽셀 변환 값들(itemHeightPx, spacingPx), 그리고 유틸리티 함수들을 메모이제이션하여 불필요한 재계산을 방지했습니다. 특히 밀도 변환과 같은 비용이 큰 연산을 캐싱한 것이 효과적입니다.

Also applies to: 67-81


94-103: 드래그 완료 시점의 선택 업데이트 로직이 안전합니다.

드래그 중이 아닐 때만 선택 아이템을 업데이트하고, newSelectedIndex in items.indices 체크를 통해 배열 범위를 검증한 후 콜백을 호출하는 방식이 안전하고 효율적입니다.


195-207: 계산된 상태 값들의 derivedStateOf 사용이 적절합니다.

currOffsetcenterIndexderivedStateOf로 구현하여 의존하는 값들이 변경될 때만 재계산되도록 최적화했습니다. 이는 불필요한 리컴포지션을 방지하는 좋은 패턴입니다.


105-107: UI 상수와 스타일의 메모이제이션이 효과적입니다.

containerHeight, visibleRange, textStyle 등의 UI 관련 상수들을 메모이제이션하여 렌더링 성능을 향상시켰습니다.

Also applies to: 123-124, 229-229

app/src/main/res/values/strings.xml (2)

178-179: 모임방 참여 취소 관련 메시지가 더 사용자 친화적으로 개선되었습니다.

팝업 메시지와 설명 텍스트가 사용자에게 더 명확한 정보를 제공하도록 개선되었습니다. "지금 취소해도, 활동 시작 전에 다시 참여 가능해요"라는 안내는 사용자의 우려를 덜어주는 좋은 문구입니다.


202-204: 책 신청 관련 문자열이 모듈화되고 명확해졌습니다.

"책 등록하기"에서 "책 신청하기"로 변경하여 사용자 관점에서 더 자연스러운 표현이 되었고, 코멘트를 두 개의 별도 문자열로 분리하여 재사용성과 유지보수성이 향상되었습니다. 이는 학습된 선호사항인 하드코딩된 문자열을 리소스로 추출하는 모범 사례와도 일치합니다.

app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomScreen.kt (5)

116-116: 패딩 개선이 깔끔하게 적용되었습니다.

메인 컬럼에 bottom 패딩을 추가하여 화면 하단 여백을 일관되게 관리하는 것이 좋은 개선입니다.


144-144: 텍스트 간격 조정이 적절합니다.

설명 레이블의 top 패딩을 40dp로 설정하여 상단 타이틀과의 적절한 시각적 분리를 제공합니다.


180-182: 날짜와 참여자 정보의 패딩 일관성이 향상되었습니다.

모집 기간(182라인)과 참여 인원(214라인) 정보에 동일한 12dp top 패딩을 적용하여 시각적 일관성을 확보했습니다.

Also applies to: 214-214


239-241: 태그 섹션의 레이아웃 개선이 효과적입니다.

fillMaxWidth()와 적절한 수직 패딩(22dp top, 30dp bottom)을 통해 태그 영역의 시각적 공간 활용이 개선되었습니다.


297-324: 추천 섹션의 조건부 렌더링이 우수합니다.

추천 모임방이 있을 때만 섹션을 표시하는 로직이 UI/UX 관점에서 매우 적절합니다. 빈 추천 리스트로 인한 불필요한 공백을 방지하고 사용자 경험을 개선합니다.

app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupRecentSearch.kt (3)

33-62: 컴포넌트 구조 개선이 훌륭합니다.

Column으로 래핑하여 레이아웃이 더 명확해졌고, 조건부 렌더링 로직도 직관적으로 개선되었습니다. FlowRow 사용으로 검색 키워드들이 적절히 배치되며, 최대 9개 제한과 2줄 제한도 적절합니다.


35-38: 텍스트 스타일 업그레이드가 적절합니다.

typography.menu_r400_s14_h24에서 typography.smalltitle_sb600_s18_h24로 변경하여 제목의 시각적 위계가 더 명확해졌습니다.


64-105: 프리뷰 컴포저블 추가가 개발 생산성에 도움됩니다.

빈 상태와 데이터 있는 상태 모두에 대한 프리뷰를 제공하여 다양한 시나리오를 쉽게 확인할 수 있습니다. 상호작용 로직(제거 기능)도 시뮬레이션되어 있어 유용합니다.

app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupFilteredSearchResult.kt (3)

42-98: 레이아웃 구조 개선이 효과적입니다.

Column으로 래핑하여 컴포넌트의 수직 레이아웃이 더 명확해졌습니다. 기존 로직은 그대로 유지하면서 구조만 개선한 것이 좋은 접근입니다.


60-66: 구분선 패딩 추가로 시각적 개선

구분선에 수직 패딩을 추가하여 요소들 간의 시각적 분리가 더 자연스러워졌습니다. 일관된 패딩 값(4dp, 8dp, 12dp)을 사용한 것도 좋습니다.

Also applies to: 86-93


100-162: 포괄적인 프리뷰 구성이 우수합니다.

데이터가 있는 상태와 빈 상태 모두에 대한 프리뷰를 제공하여 다양한 시나리오를 쉽게 확인할 수 있습니다. 장르 선택 상태도 시뮬레이션되어 있어 실제 사용 환경과 유사한 테스트가 가능합니다.

import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

사용되지 않는 import문을 확인해주세요

FontWeightsp import가 추가되었지만 코드에서 직접 사용되지 않는 것 같습니다. typography 테마 스타일을 통해 폰트 스타일링이 이루어지고 있어 이 import들이 불필요할 수 있습니다.

사용되지 않는 import문이 있는지 확인해보겠습니다:

Also applies to: 33-33


🏁 Script executed:

#!/bin/bash
# Description: Check if FontWeight and sp imports are actually used in the file

# Search for FontWeight usage
echo "=== FontWeight usage ==="
rg "FontWeight\." app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMainCard.kt

# Search for sp usage  
echo "=== sp usage ==="
rg "\.sp" app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMainCard.kt

echo "=== Current typography styles ==="
rg "typography\." app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMainCard.kt

Length of output: 897


사용되지 않는 import 제거하기

GroupMainCard.kt 파일에서 아래 두 import는 코드 내에서 직접 사용되지 않으므로 제거를 권장합니다.

• app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMainCard.kt
– 30행: import androidx.compose.ui.text.font.FontWeight
– 33행: import androidx.compose.ui.unit.sp

🤖 Prompt for AI Agents
In app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMainCard.kt
at lines 30 and 33, remove the unused imports 'import
androidx.compose.ui.text.font.FontWeight' and 'import
androidx.compose.ui.unit.sp' since they are not directly used in the code.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@rbqks529 rbqks529 merged commit c6c3bc1 into THIP-TextHip:develop Jul 24, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[UI] 모임방 페이지 QA [(THIP2025-146)]

2 participants