Conversation
|
Warning Rate limit exceeded@rbqks529 has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 2 minutes and 54 seconds before requesting another review. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 📒 Files selected for processing (4)
""" Walkthrough이 변경사항은 모임(그룹) 페이지의 UI 전반에 걸쳐 대규모 업데이트를 포함합니다. 새로운 그룹방 완료/검색/비밀번호 입력/비어있는 상태 화면이 추가되었고, 여러 컴포저블 함수와 리소스가 신설·개선되었습니다. 버튼 클릭 로직, 토스트/팝업 처리, 입력 필드 리팩토링, 시크릿룸 관련 UI 및 상태 관리 등 다양한 그룹방 인터랙션이 구현되었습니다. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant GroupRoomScreen
participant Toast
participant Dialog
participant SecretScreen
User->>GroupRoomScreen: 버튼 클릭 (JOIN/CANCEL/CLOSE)
alt JOIN
GroupRoomScreen->>Toast: 참여 완료 토스트 표시
GroupRoomScreen->>GroupRoomScreen: 버튼 상태 CANCEL로 변경
else CANCEL or CLOSE
GroupRoomScreen->>Dialog: 확인 팝업 표시
User->>Dialog: 확인 클릭
Dialog->>GroupRoomScreen: 콜백 실행(참여 취소/모집 마감)
GroupRoomScreen->>Toast: 알림 토스트 표시
GroupRoomScreen->>GroupRoomScreen: 버튼 상태 갱신
end
User->>GroupRoomScreen: 시크릿룸 입장 시도
GroupRoomScreen->>SecretScreen: 비밀번호 입력 화면 이동
User->>SecretScreen: 4자리 입력
alt 비밀번호 일치
SecretScreen->>GroupRoomScreen: 입장 성공 콜백
else 불일치
SecretScreen->>SecretScreen: 에러 메시지 표시, 입력 초기화
end
Assessment against linked issues
Assessment against linked issues: Out-of-scope changes(해당 사항 없음) Possibly related PRs
Suggested labels
Poem
""" ✨ Finishing Touches
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed 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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Actionable comments posted: 12
🧹 Nitpick comments (16)
.idea/misc.xml (1)
1-7: IDE 전용 설정 파일 커밋 여부 재검토 권장
.idea디렉터리의 설정(특히 JDK 경로, JetBrains Runtime 등 환경 의존 정보)을 VCS에 포함하면
– OS·IDE 버전이 다른 팀원이 프로젝트를 열 때 충돌이나 경로 미해결 문제가 자주 발생합니다.
대안으로는:+# .gitignore 예시 +.idea/ +# 단, codeStyle 등 공유가 필요한 하위 파일은 선택적으로 화이트리스트 +!.idea/codeStyles/*필요한 설정만 화이트리스트로 관리하고 나머지는 ignore 처리하는 방안을 고려해 주세요.
.idea/codeStyles/Project.xml (1)
1-158: 대용량 IDE 코드 스타일 파일의 유지보수성 검토
Project.xml은 규칙을 상세히 기술하지만 IDE 종속성이 높고 diff 가 잦아 Git 히스토리가 불필요하게 비대해질 위험이 있습니다.
가능하면 JetBrains IDE와 VS Code 등을 모두 지원하는.editorconfig(Kotlin 공식 스타일 플러그인 지원)로 대체하면:
- IDE 간 호환성 ↑
- 파일 크기 및 변경 노이즈 ↓
만약 JetBrains 형식을 유지해야 한다면, 규칙 변경이 자주 발생하지 않도록 팀 합의 프로세스를 명확히 해두시는 것을 추천드립니다.
app/src/main/java/com/texthip/thip/ui/common/forms/WarningTextField.kt (1)
41-41: 하드코딩된 문자열 제거는 좋지만 StringResource 사용을 고려해보세요.기본값에서 하드코딩된 한국어 문자열을 제거한 것은 좋은 개선입니다. 하지만 기본 경고 메시지가 필요한 경우를 위해 StringResource를 활용하는 것을 고려해보세요.
- warningMessage: String = "", + warningMessage: String = "",또는 호출하는 곳에서 다음과 같이 사용:
warningMessage = stringResource(R.string.default_warning_message)app/src/main/java/com/texthip/thip/ui/common/forms/SingleDigitTextBox.kt (1)
67-80: 키 이벤트 처리 로직을 개선해주세요.백스페이스 키 처리 로직이 올바르게 구현되었지만, 하드코딩된 키 코드 대신 상수를 사용하는 것을 고려해보세요.
- if (keyEvent.nativeKeyEvent.keyCode == android.view.KeyEvent.KEYCODE_DEL && + if (keyEvent.nativeKeyEvent.keyCode == KeyEvent.KEYCODE_DEL && keyEvent.type == androidx.compose.ui.input.key.KeyEventType.KeyDown ) {또한 import에
android.view.KeyEvent추가가 필요합니다.app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyCard.kt (1)
3-5: 사용하지 않는 import를 제거해주세요.
android.R.attr.data와android.R.attr.topimport가 코드에서 사용되지 않고 있습니다.-import android.R.attr.data -import android.R.attr.topapp/src/main/java/com/texthip/thip/ui/group/screen/GroupDoneScreen.kt (1)
42-45: 뒤로가기 버튼 동작을 구현해주세요.현재
onLeftClick이 빈 람다로 설정되어 있어 사용자가 뒤로가기 버튼을 눌러도 아무 동작이 없습니다.DefaultTopAppBar( title = stringResource(R.string.group_done_title), - onLeftClick = {}, + onLeftClick = { /* 뒤로가기 동작 구현 필요 */ }, )Navigation 구현이 완료되면 적절한 뒤로가기 동작을 추가해주세요.
app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupSearchTextField.kt (1)
29-29: 사용되지 않는 onClick 파라미터를 제거해주세요.
onClick파라미터가 정의되어 있지만 코드에서 사용되지 않고 있습니다.fun GroupSearchTextField( modifier: Modifier = Modifier, value: String, placeholder: String = stringResource(R.string.group_search_placeholder), onValueChange: (String) -> Unit, - onClick: (() -> Unit)? = null ) {app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupPager.kt (2)
109-119: 주석 처리된 코드 제거사용하지 않는 주석 코드는 제거하는 것이 좋습니다.
-// 페이지 인디케이터 였던 것 (혹시 몰라 남겨둡니다) -/*val currentPageIndex = ((pagerState.currentPage - startPage) % groupCards.size + groupCards.size) % groupCards.size - -SimplePagerIndicator( - pageCount = groupCards.size, - currentPage = currentPageIndex, - modifier = Modifier - .align(Alignment.BottomCenter) - .padding(top = 12.dp) -)*/
80-82: 복잡한 인덱스 계산 로직 개선모듈로 연산이 복잡하여 가독성이 떨어집니다. 확장 함수로 추출하면 좋겠습니다.
파일 상단에 확장 함수 추가:
private fun Int.normalizeIndex(size: Int, offset: Int): Int { return ((this - offset) % size + size) % size }사용 시:
-val actualIndex = ((page - startPage) % groupCards.size + groupCards.size) % groupCards.size -val currentPageIndex = ((pagerState.currentPage - startPage) % groupCards.size + groupCards.size) % groupCards.size +val actualIndex = page.normalizeIndex(groupCards.size, startPage) +val currentPageIndex = pagerState.currentPage.normalizeIndex(groupCards.size, startPage)app/src/main/java/com/texthip/thip/ui/common/forms/SearchBookTextField.kt (1)
77-85: 클리어 버튼 터치 영역 개선X 아이콘의 터치 영역이 작아 사용성이 떨어질 수 있습니다.
if (text.isNotEmpty()) { Icon( painter = painterResource(id = R.drawable.ic_x_circle_grey), contentDescription = "Clear text", modifier = Modifier + .size(24.dp) + .padding(4.dp) .clickable { onValueChange("") }, tint = Color.Unspecified ) }app/src/main/res/values/strings.xml (2)
169-169: 문자열 시작 부분의 불필요한 공백 제거문자열 시작 부분에 불필요한 공백이 있습니다.
-<string name="group_room_search_hint">" 방 제목 혹은 책 제목을 검색해보세요."</string> +<string name="group_room_search_hint">"방 제목 혹은 책 제목을 검색해보세요."</string>
193-193: 문자열 시작 부분의 불필요한 공백 제거문자열 시작 부분에 불필요한 공백이 있습니다.
-<string name="group_book_search_hint"> 책 제목을 검색해보세요.</string> +<string name="group_book_search_hint">책 제목을 검색해보세요.</string>app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupSearchScreen.kt (1)
46-46: 하드코딩된 검색어를 상수로 추출하세요최근 검색어 샘플 데이터가 하드코딩되어 있습니다. 테스트용 데이터라면 별도의 mock 패키지나 상수로 관리하는 것이 좋습니다.
- mutableStateOf(listOf("user.02", "ㅇㅇ", "훽후ㅣㅣ", "검색4", "검색5", "검색6")) + mutableStateOf(emptyList()) // 실제 구현시 사용자의 최근 검색어 로드app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomSecretScreen.kt (1)
56-56: 에러 표시 딜레이를 상수로 추출하세요에러 메시지 표시 시간이 하드코딩되어 있습니다. 유지보수를 위해 상수로 추출하는 것이 좋습니다.
파일 상단에 추가:
companion object { private const val ERROR_DISPLAY_DURATION_MS = 1000L }코드 수정:
- kotlinx.coroutines.delay(1000) + kotlinx.coroutines.delay(ERROR_DISPLAY_DURATION_MS)app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomScreen.kt (2)
430-436: 토스트 표시 시간을 상수로 추출하세요토스트 표시 시간이 하드코딩되어 있습니다. 일관성 있는 UX를 위해 상수로 관리하는 것이 좋습니다.
파일 상단에 추가:
companion object { private const val TOAST_DISPLAY_DURATION_MS = 3000L }코드 수정:
LaunchedEffect(showToast) { if (showToast) { - delay(3000) + delay(TOAST_DISPLAY_DURATION_MS) showToast = false } }
335-339: 중복된 버튼 색상 로직을 단순화하세요모든 버튼 타입에 대해 동일한 색상(colors.Purple)을 사용하고 있습니다. 불필요한 when 문을 제거할 수 있습니다.
- val buttonColor = when (currentButtonType) { - GroupBottomButtonType.JOIN -> colors.Purple - GroupBottomButtonType.CANCEL -> colors.Purple - GroupBottomButtonType.CLOSE -> colors.Purple - } + val buttonColor = colors.Purple
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
app/src/main/res/drawable/group_room_recruiting.pngis excluded by!**/*.png
📒 Files selected for processing (27)
.idea/codeStyles/Project.xml(1 hunks).idea/codeStyles/codeStyleConfig.xml(1 hunks).idea/misc.xml(1 hunks)app/src/main/java/com/texthip/thip/ui/common/buttons/GenreChipButton.kt(2 hunks)app/src/main/java/com/texthip/thip/ui/common/buttons/GenreChipRow.kt(3 hunks)app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoom.kt(5 hunks)app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt(6 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/SingleDigitTextBox.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/common/forms/WarningTextField.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/common/modal/ToastWithDate.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt(0 hunks)app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupBookSearchBottomSheet.kt(2 hunks)app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupDeadlineRoomSection.kt(6 hunks)app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyCard.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupPager.kt(3 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/mock/GroupCardItemRoomData.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupMyScreen.kt(3 hunks)app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomScreen.kt(6 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/myroom/screen/GroupSearchScreen.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/res/drawable/ic_secret_cover.xml(1 hunks)app/src/main/res/drawable/ic_thip_empty_room.xml(1 hunks)app/src/main/res/values/strings.xml(3 hunks)
💤 Files with no reviewable changes (1)
- app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt
🧰 Additional context used
🧠 Learnings (9)
📓 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/WarningTextField.kt (1)
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/group/makeroom/component/GroupBookSearchBottomSheet.kt (1)
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/group/myroom/component/GroupSearchTextField.kt (1)
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/group/myroom/component/GroupDeadlineRoomSection.kt (1)
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/cards/CardItemRoomSmall.kt (1)
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/group/myroom/component/GroupPager.kt (1)
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/myPage/groupPage/GroupPageScreen.kt:34-37
Timestamp: 2025-07-01T07:19:01.239Z
Learning: GroupPageScreen의 MyPageViewModel은 임시 ViewModel로, 현재는 프로토타입 단계이므로 오류 처리 등의 추가 기능은 나중에 구현 예정입니다.
app/src/main/java/com/texthip/thip/ui/common/forms/SearchBookTextField.kt (1)
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/res/values/strings.xml (1)
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.
🧬 Code Graph Analysis (5)
app/src/main/java/com/texthip/thip/ui/common/buttons/GenreChipRow.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/screen/GroupMyScreen.kt (2)
app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoom.kt (1)
CardItemRoom(37-182)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/GroupEmptyCard.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/common/cards/CardItemRoomSmall.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/common/forms/SearchBookTextField.kt (1)
app/src/main/java/com/texthip/thip/ui/theme/Theme.kt (1)
ThipTheme(41-69)
🔇 Additional comments (26)
.idea/codeStyles/codeStyleConfig.xml (1)
1-5: 프로젝트별 코드 스타일 설정 활성화 👍
USE_PER_PROJECT_SETTINGS=true설정으로 IDE가 전역 설정 대신 프로젝트 전용 스타일을 적용하게 됩니다.
팀 내 코드 일관성 확보 측면에서 적절한 선택으로 보입니다.app/src/main/java/com/texthip/thip/ui/group/myroom/mock/GroupCardItemRoomData.kt (1)
10-10: nullable endDate와 isSecret 프로퍼티 추가가 적절합니다.endDate를 nullable로 변경한 것은 마감일이 없는 모임의 경우를 효과적으로 처리할 수 있게 하고, isSecret 프로퍼티 추가는 비밀방 기능을 지원하기 위한 합리적인 확장입니다. 기본값 설정으로 하위 호환성도 잘 유지되었습니다.
Also applies to: 13-13
app/src/main/res/drawable/ic_thip_empty_room.xml (1)
1-22: 벡터 drawable 구현이 올바릅니다.새로 추가된
ic_thip_empty_room.xml벡터 drawable의 구조와 스타일링이 적절하게 구현되었습니다. 색상 정의와 path 요소들이 올바르게 작성되어 빈 방 상태를 표현하는 아이콘으로 잘 활용될 것 같습니다.app/src/main/java/com/texthip/thip/ui/common/modal/ToastWithDate.kt (1)
35-35: border width 조정이 적절합니다.테두리 두께를 2.dp에서 1.dp로 줄인 것은 더 세련된 UI를 위한 좋은 개선사항입니다.
app/src/main/java/com/texthip/thip/ui/group/makeroom/component/GroupBookSearchBottomSheet.kt (1)
43-43: 제어된 컴포넌트 패턴 적용이 우수합니다.
searchText상태를rememberSaveable로 관리하고SearchBookTextField를 제어된 컴포넌트로 업데이트한 것은 훌륭한 상태 관리 패턴입니다. 이를 통해 검색 입력 필드의 상태가 명확하게 관리되고 화면 재구성 시에도 값이 유지됩니다.Also applies to: 56-58
app/src/main/java/com/texthip/thip/ui/common/buttons/GenreChipRow.kt (2)
26-33: 토글 선택 로직이 잘 구현되었습니다선택된 칩을 다시 클릭하면 선택 해제되는 UX가 직관적이고 구현이 깔끔합니다. 사용자 경험 향상에 도움이 됩니다.
41-51: 프리뷰에 테마 래퍼 적용이 적절합니다다른 컴포넌트들과 일관성을 유지하기 위해 ThipTheme으로 감싸는 것이 좋습니다.
app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt (2)
46-46: 검색 텍스트 상태 관리가 올바르게 구현되었습니다상태를 상위 컴포넌트로 끌어올리는 패턴이 적절하게 적용되었습니다.
68-72: GroupSearchTextField의 콜백 구현을 확인해주세요현재
onValueChange와onClick콜백이 빈 람다로 되어 있습니다. 실제 검색 기능이나 네비게이션 로직이 구현 예정인지 확인이 필요합니다.app/src/main/java/com/texthip/thip/ui/common/buttons/GenreChipButton.kt (2)
32-33: 닫기 클릭 콜백 추가가 적절합니다칩 전체 클릭과 닫기 버튼 클릭을 분리하여 UX가 개선되었습니다.
39-43: 디자인 시스템 일관성과 사용성이 향상되었습니다
- 테두리 색상을 Grey02로 변경하여 시각적 일관성 개선
- 패딩과 간격 증가로 터치 영역 확대
- 텍스트 색상을 Grey01로 조정하여 가독성 향상
- 닫기 아이콘의 별도 클릭 처리로 사용성 개선
모든 변경사항이 디자인 시스템과 잘 조화됩니다.
Also applies to: 51-51, 55-55, 64-67
app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupMyScreen.kt (3)
80-97: 필터링된 리스트가 있을 때의 구현이 적절합니다기존 LazyColumn 로직이 조건부로 래핑되어 깔끔하게 구현되었습니다.
98-124: 빈 상태 UI 구현이 우수합니다
- 사용자에게 명확한 피드백 제공
- 아이콘과 메시지를 통한 직관적인 안내
- 스트링 리소스 사용으로 다국어 지원 및 유지보수성 향상
- 디자인 시스템의 색상과 타이포그래피 일관성 유지
사용자 경험을 크게 개선하는 구현입니다.
236-242: 빈 상태 프리뷰 추가가 유용합니다개발 시 빈 상태 UI를 쉽게 확인할 수 있어 개발 효율성이 향상됩니다.
app/src/main/res/drawable/ic_secret_cover.xml (1)
1-23: 시크릿 룸 오버레이 아이콘이 잘 설계되었습니다
- 적절한 크기 (60dp x 80dp)와 뷰포트 설정
- 반투명 오버레이, 테두리, 중앙 자물쇠 아이콘의 레이어 구조가 명확
- 시크릿 룸임을 직관적으로 나타내는 시각적 효과
- 벡터 드로어블 구조가 올바르게 구현됨
시크릿 룸 상태를 나타내는 목적에 매우 적합한 디자인입니다.
app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupDeadlineRoomSection.kt (4)
53-53: 스케일 팩터 개선이 적절합니다.0.9f에서 0.94f로 변경하여 비활성 페이지의 카드가 더 잘 보이도록 개선된 점이 좋습니다.
Also applies to: 68-68
106-106: 카드 개수 증가로 더 많은 콘텐츠 표시가 가능합니다.카드 개수를 3개에서 4개로 늘려 사용자에게 더 많은 정보를 제공하는 점이 좋습니다. spacer 조건도 일관되게 업데이트되었습니다.
Also applies to: 153-153
113-133: 빈 상태 UI 구현이 훌륭합니다.카드가 없을 때의 사용자 경험을 고려한 빈 상태 처리와 StringResource 사용이 매우 좋습니다. 중앙 정렬과 적절한 간격 설정도 잘 되어 있습니다.
299-330: 빈 장르 상태를 위한 프리뷰 추가가 유용합니다.개발자가 빈 상태 UI를 확인할 수 있도록 별도의 프리뷰를 제공한 점이 좋습니다.
app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyCard.kt (1)
45-107: 빈 상태 카드 구현이 우수합니다.그라데이션 배경, 적절한 레이아웃, StringResource 사용 등 모든 요소가 잘 구현되어 있습니다. 특히
SpaceBetween을 사용한 레이아웃과 중앙 정렬이 좋습니다.app/src/main/java/com/texthip/thip/ui/group/screen/GroupDoneScreen.kt (1)
26-35: 필터링 로직과 StringResource 사용이 적절합니다.
remember를 사용한 효율적인 필터링과 StringResource 사용이 좋습니다.app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupSearchTextField.kt (1)
24-30: BasicTextField로의 리팩터링이 잘 구현되었습니다.OutlinedTextField에서 BasicTextField로 변경하여 더 많은 커스터마이징이 가능해졌고, 제어되는 컴포넌트 패턴으로 변경된 점이 좋습니다. decoration box를 통한 placeholder 처리도 적절합니다.
Also applies to: 53-87
app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt (1)
45-58: 유연한 카드 레이아웃 구현 👍
isWide와isSecret파라미터 추가로 다양한 UI 상황에 대응할 수 있게 되었습니다. 조건부 스타일링이 깔끔하게 구현되었네요.app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupPager.kt (1)
40-58: 상태별 UI 처리 구현 👍데이터 개수에 따른 세 가지 케이스(빈 상태, 단일 항목, 다중 항목)를 명확하게 구분하여 처리한 점이 좋습니다.
app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoom.kt (1)
44-50: nullable endDate 처리 구현 👍
endDate를 nullable로 변경하고 조건부 UI 렌더링을 깔끔하게 구현했습니다. 패딩 조정도 적절합니다.Also applies to: 99-99, 162-178
app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomScreen.kt (1)
65-85: UI 구현이 잘 되었습니다!상태 관리와 다이얼로그/토스트 처리가 깔끔하게 구현되었습니다. 특히 pendingAction을 사용한 비동기 처리 패턴이 좋습니다.
app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupDeadlineRoomSection.kt
Show resolved
Hide resolved
app/src/main/java/com/texthip/thip/ui/common/forms/SingleDigitTextBox.kt
Show resolved
Hide resolved
| items(doneList) { item -> | ||
| CardItemRoom( | ||
| title = item.title, | ||
| participants = item.participants, | ||
| maxParticipants = item.maxParticipants, | ||
| isRecruiting = item.isRecruiting, | ||
| imageRes = item.imageRes, | ||
| onClick = { onCardClick(item) } | ||
| ) | ||
| } |
There was a problem hiding this comment.
🛠️ Refactor suggestion
CardItemRoom에 endDate 파라미터를 추가해주세요.
GroupCardItemRoomData에 endDate가 포함되어 있지만 CardItemRoom에 전달되지 않고 있습니다.
CardItemRoom(
title = item.title,
participants = item.participants,
maxParticipants = item.maxParticipants,
isRecruiting = item.isRecruiting,
+ endDate = item.endDate,
imageRes = item.imageRes,
onClick = { onCardClick(item) }
)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| items(doneList) { item -> | |
| CardItemRoom( | |
| title = item.title, | |
| participants = item.participants, | |
| maxParticipants = item.maxParticipants, | |
| isRecruiting = item.isRecruiting, | |
| imageRes = item.imageRes, | |
| onClick = { onCardClick(item) } | |
| ) | |
| } | |
| items(doneList) { item -> | |
| CardItemRoom( | |
| title = item.title, | |
| participants = item.participants, | |
| maxParticipants = item.maxParticipants, | |
| isRecruiting = item.isRecruiting, | |
| endDate = item.endDate, | |
| imageRes = item.imageRes, | |
| onClick = { onCardClick(item) } | |
| ) | |
| } |
🤖 Prompt for AI Agents
In app/src/main/java/com/texthip/thip/ui/group/screen/GroupDoneScreen.kt between
lines 68 and 77, the CardItemRoom composable is missing the endDate parameter.
Since GroupCardItemRoomData includes endDate, update the CardItemRoom call to
pass item.endDate as the endDate argument to ensure the data is properly
forwarded.
app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupSearchTextField.kt
Show resolved
Hide resolved
app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupSearchScreen.kt
Show resolved
Hide resolved
app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupSearchScreen.kt
Outdated
Show resolved
Hide resolved
app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupSearchScreen.kt
Show resolved
Hide resolved
app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomSecretScreen.kt
Show resolved
Hide resolved
app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomScreen.kt
Show resolved
Hide resolved
Nico1eKim
left a comment
There was a problem hiding this comment.
히야 완전 수고하셨습니다 ..!!
다만 전반적으로 spacer를 남발하고있는거같아요 ..! spacer를 사용하기 보다는 중앙 정렬이면 verticalArrangement를 사용하는게 좋을듯합니다 ! 기기별로 높이가 달라서 spacer를 쓰면 나중에 폰으로 확인했을 때 다르게 보일 확률이 높습니다
추가 질문 두가지 이씀미다
- 모임검색 페이지에서 입력 중 상태가 아니면 커서 focus out 되게하면 어떨까요?
- 검색하고 다시 검색페이지 들어가면 장르 정보 그대로 남는건 의도한건가요?
| ) { | ||
| Spacer(modifier = Modifier.height(16.dp)) | ||
|
|
||
| Spacer(modifier = Modifier.height(paddingValues)) |
There was a problem hiding this comment.
화면 확인해봤는데 중앙정렬 하려고 이런식으로 PaddingValue를 넘겨주는거같은데
그냥 Column내에서 verticalArrangement를 Center로 주면 안되나요?
There was a problem hiding this comment.
어차피 이미지 높이를 고정으로 주고 있어서 같이 높이를 맞추고 가운데 정렬 하니까 더 깔끔 하네요 감사합니당
| text = stringResource( | ||
| R.string.card_item_participant, | ||
| participants | ||
| ), |
There was a problem hiding this comment.
participants가 int값같은데 그럼 participant_count와 같이 명시적인 이름으로 바꾸면 좋을거같습니다 ~
There was a problem hiding this comment.
이미 있어서 최대한 명시적으로 바꿔볼게요
| val cardModifier = if (isWide) { | ||
| modifier | ||
| .fillMaxWidth() | ||
| .height(104.dp) | ||
| } else { | ||
| modifier | ||
| .size(width = 232.dp, height = 104.dp) | ||
| } |
There was a problem hiding this comment.
이부분 height는 고정이고 width만 바뀌는거같은데 width만 if문에 넣어도 좋을거같아욧 ~
| val myStyle = typography.menu_r400_s14_h24.copy( | ||
| fontSize = 14.sp, | ||
| lineHeight = 16.sp, | ||
| color = colors.White | ||
| ) |
There was a problem hiding this comment.
이거 근데 제가 해봤을 때 copy로 fontsize, lineheight 안넣어도 잘 보이던데 확인 한번만 다시 해주세욧
There was a problem hiding this comment.
헉 그렇네요 아웃라인에서 도저히 40dp 높이가 안되서 수정한거여서 똑같이 했는데 안해도 되네요 감사합니당
| .clip(shape) | ||
| .background(backgroundColor), |
There was a problem hiding this comment.
수정했습니다 지피티 코드 참고 했는데 미처 못봤네요
|
|
||
| HorizontalPager( | ||
| state = pagerState, | ||
| contentPadding = PaddingValues(start = horizontalPadding, end = horizontalPadding), |
There was a problem hiding this comment.
위에서 공통적으로 사용하는 패딩이어서 변수로 뺐습니다!
| .padding(horizontal = 20.dp), | ||
| horizontalAlignment = Alignment.CenterHorizontally | ||
| ) { | ||
| Spacer(modifier = Modifier.height(160.dp)) |
There was a problem hiding this comment.
디자인 상으로 화면 중앙은 아니어서 이렇게 배치했습니다!
| when (selectedSortOption) { | ||
| "마감임박순" -> filtered.sortedBy { it.endDate } | ||
| "최신순" -> filtered // TODO: 생성일 기준 정렬 필요 | ||
| "참여많은순" -> filtered.sortedByDescending { it.participants } | ||
| else -> filtered | ||
| } |
There was a problem hiding this comment.
이거 서버에서 소팅 해주지않을까여?? 그냥 해놓은건가요
| ) | ||
| Spacer(modifier = Modifier.height(16.dp)) | ||
|
|
||
| // 아직 검색어를 입력 안했을 때 + 최근 검색어 없을 때 화면 |
There was a problem hiding this comment.
여기부터 아래로 쭉 상황이 엄청 많고 복잡한거같은데 보기 쉽게 컴포넌트로 분리하고 when으로 리팩하는건 어떤가요?
|
|
||
| Column( | ||
| Modifier | ||
| .background(colors.Black) |
rbqks529
left a comment
There was a problem hiding this comment.
- 모임검색 페이지에서 입력 중 상태가 아니면 커서 focus out 되게하면 어떨까요?
- 확인했습니다
- 검색하고 다시 검색페이지 들어가면 장르 정보 그대로 남는건 의도한건가요?
- 의도한건 아니여서 수정하겠습니다
| ) { | ||
| Spacer(modifier = Modifier.height(16.dp)) | ||
|
|
||
| Spacer(modifier = Modifier.height(paddingValues)) |
| when (selectedSortOption) { | ||
| "마감임박순" -> filtered.sortedBy { it.endDate } | ||
| "최신순" -> filtered // TODO: 생성일 기준 정렬 필요 | ||
| "참여많은순" -> filtered.sortedByDescending { it.participants } | ||
| else -> filtered | ||
| } |
| text = stringResource( | ||
| R.string.card_item_participant, | ||
| participants | ||
| ), |
There was a problem hiding this comment.
이미 있어서 최대한 명시적으로 바꿔볼게요
| ) { | ||
| Spacer(modifier = Modifier.height(16.dp)) | ||
|
|
||
| Spacer(modifier = Modifier.height(paddingValues)) |
There was a problem hiding this comment.
어차피 이미지 높이를 고정으로 주고 있어서 같이 높이를 맞추고 가운데 정렬 하니까 더 깔끔 하네요 감사합니당
| val myStyle = typography.menu_r400_s14_h24.copy( | ||
| fontSize = 14.sp, | ||
| lineHeight = 16.sp, | ||
| color = colors.White | ||
| ) |
There was a problem hiding this comment.
헉 그렇네요 아웃라인에서 도저히 40dp 높이가 안되서 수정한거여서 똑같이 했는데 안해도 되네요 감사합니당
| .clip(shape) | ||
| .background(backgroundColor), |
There was a problem hiding this comment.
수정했습니다 지피티 코드 참고 했는데 미처 못봤네요
| BasicTextField( | ||
| value = value, | ||
| onValueChange = { input -> | ||
| val filtered = input.filter { it.isDigit() }.take(1) |
There was a problem hiding this comment.
네 맞아요 비밀번호는 숫자가 하나만 입력되어야 해서 저렇게 했습니다
| Spacer(Modifier.height(20.dp)) | ||
|
|
||
| val cards = section.rooms.filter { it.genreIndex == selectedGenre }.take(3) | ||
| val cards = section.rooms.filter { it.genreIndex == selectedGenre }.take(4) |
There was a problem hiding this comment.
최대 4개만 보여줘서 4로 하긴 했는데 아마도 서버에서 4개만 보내줄 것 같아서 삭제하겠습니다!
| .padding(horizontal = 20.dp), | ||
| horizontalAlignment = Alignment.CenterHorizontally | ||
| ) { | ||
| Spacer(modifier = Modifier.height(160.dp)) |
There was a problem hiding this comment.
디자인 상으로 화면 중앙은 아니어서 이렇게 배치했습니다!
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (5)
app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRecentSearchScreen.kt (2)
3-3: 중복된 import 제거 필요
androidx.compose.foundation.layout.*가 이미 3번째 줄에서 import되어 있으므로 12번째 줄의androidx.compose.foundation.layout.FlowRowimport는 불필요합니다.import androidx.compose.foundation.layout.* import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.texthip.thip.R import com.texthip.thip.ui.common.buttons.GenreChipButton import com.texthip.thip.ui.theme.ThipTheme -import androidx.compose.foundation.layout.FlowRowAlso applies to: 12-12
40-40: 매직 넘버를 상수로 추출 권장
.take(9)에서 9는 매직 넘버입니다. 최대 표시할 검색어 수를 의미하므로 상수로 추출하는 것이 좋습니다.+private const val MAX_RECENT_SEARCHES = 9 + @Composable fun GroupRecentSearchScreen( recentSearches: List<String>, onSearchClick: (String) -> Unit, onRemove: (String) -> Unit ) { // ... existing code ... } else { FlowRow( verticalArrangement = Arrangement.spacedBy(12.dp), horizontalArrangement = Arrangement.spacedBy(16.dp), maxLines = 2, ) { - recentSearches.take(9).forEach { keyword -> + recentSearches.take(MAX_RECENT_SEARCHES).forEach { keyword -> GenreChipButton( text = keyword, onClick = { onSearchClick(keyword) }, onCloseClick = { onRemove(keyword) } ) } } }app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupFilteredSearchResultScreen.kt (1)
66-82: LazyColumn 사용을 통한 성능 개선 권장현재 forEach를 사용한 수동 리스트 렌더링보다는 LazyColumn을 사용하는 것이 더 나은 성능을 제공합니다.
- Column(verticalArrangement = Arrangement.spacedBy(16.dp)) { - roomList.forEach { room -> - CardItemRoomSmall( - title = room.title, - participants = room.participants, - maxParticipants = room.maxParticipants, - endDate = room.endDate, - imageRes = room.imageRes, - isWide = true, - isSecret = room.isSecret - ) - Spacer( - modifier = Modifier - .fillMaxWidth() - .height(1.dp) - .background(colors.DarkGrey02) - ) - } - } + LazyColumn( + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + items(roomList) { room -> + CardItemRoomSmall( + title = room.title, + participants = room.participants, + maxParticipants = room.maxParticipants, + endDate = room.endDate, + imageRes = room.imageRes, + isWide = true, + isSecret = room.isSecret + ) + Spacer( + modifier = Modifier + .fillMaxWidth() + .height(1.dp) + .background(colors.DarkGrey02) + ) + } + }app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupLiveSearchResultScreen.kt (2)
17-35: LazyColumn 사용을 통한 성능 개선 권장현재 forEach를 사용한 수동 리스트 렌더링보다는 LazyColumn을 사용하는 것이 더 나은 성능을 제공합니다.
+import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items + @Composable fun GroupLiveSearchResultScreen( roomList: List<GroupCardItemRoomData> ) { val colors = ThipTheme.colors - Column(verticalArrangement = Arrangement.spacedBy(16.dp)) { - roomList.forEach { room -> - CardItemRoomSmall( - title = room.title, - participants = room.participants, - maxParticipants = room.maxParticipants, - endDate = room.endDate, - imageRes = room.imageRes, - isWide = true, - isSecret = room.isSecret - ) - Spacer( - modifier = Modifier - .fillMaxWidth() - .height(1.dp) - .background(colors.DarkGrey02) - ) - } - } + LazyColumn( + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + items(roomList) { room -> + CardItemRoomSmall( + title = room.title, + participants = room.participants, + maxParticipants = room.maxParticipants, + endDate = room.endDate, + imageRes = room.imageRes, + isWide = true, + isSecret = room.isSecret + ) + Spacer( + modifier = Modifier + .fillMaxWidth() + .height(1.dp) + .background(colors.DarkGrey02) + ) + } + } }
28-33: 구분선 컴포넌트 재사용성 개선 제안구분선 Spacer 코드가 여러 파일에서 반복되고 있습니다. 공통 컴포넌트로 추출하는 것을 고려해보세요.
@Composable fun DividerLine( modifier: Modifier = Modifier, color: Color = ThipTheme.colors.DarkGrey02 ) { Spacer( modifier = modifier .fillMaxWidth() .height(1.dp) .background(color) ) }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (13)
app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoom.kt(5 hunks)app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt(5 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/SingleDigitTextBox.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupDeadlineRoomSection.kt(6 hunks)app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyCard.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupEmptyResultScreen.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupFilteredSearchResultScreen.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupLiveSearchResultScreen.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRecentSearchScreen.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupSearchScreen.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/group/screen/GroupDoneScreen.kt(1 hunks)app/src/main/res/values/strings.xml(4 hunks)
✅ Files skipped from review due to trivial changes (3)
- app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupEmptyResultScreen.kt
- app/src/main/java/com/texthip/thip/ui/common/forms/SingleDigitTextBox.kt
- app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupEmptyCard.kt
🚧 Files skipped from review as they are similar to previous changes (7)
- app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupDeadlineRoomSection.kt
- app/src/main/java/com/texthip/thip/ui/group/screen/GroupDoneScreen.kt
- app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt
- app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoom.kt
- app/src/main/res/values/strings.xml
- app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupSearchScreen.kt
- app/src/main/java/com/texthip/thip/ui/common/forms/SearchBookTextField.kt
🧰 Additional context used
🧠 Learnings (2)
📓 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/group/myroom/screen/GroupRecentSearchScreen.kt (1)
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.
🧬 Code Graph Analysis (2)
app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRecentSearchScreen.kt (1)
app/src/main/java/com/texthip/thip/ui/common/buttons/GenreChipButton.kt (1)
GenreChipButton(28-70)
app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupLiveSearchResultScreen.kt (1)
app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt (1)
CardItemRoomSmall(36-158)
🔇 Additional comments (4)
app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRecentSearchScreen.kt (1)
14-49: 전반적으로 잘 구현된 UI 컴포넌트최근 검색어 표시 화면이 깔끔하게 구현되었습니다. StringResource 사용, 테마 적용, 빈 상태 처리 등이 모두 적절히 처리되었습니다.
app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupFilteredSearchResultScreen.kt (2)
35-35: GenreChipRow의 width modifier 확인 필요
modifier = Modifier.width(20.dp)는 GenreChipRow에게 너무 작은 너비입니다. 이는 의도하지 않은 값일 가능성이 높습니다.GenreChipRow( - modifier = Modifier.width(20.dp), + modifier = Modifier.fillMaxWidth(), genres = genres, selectedIndex = selectedGenreIndex, onSelect = onGenreSelect )GenreChipRow의 올바른 크기 설정을 확인해주세요.
24-85: 기능적으로 잘 구현된 검색 결과 화면필터링, 빈 상태 처리, 결과 표시 등이 모두 적절히 구현되었습니다. UI 일관성과 테마 적용도 올바르게 되어 있습니다.
app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupLiveSearchResultScreen.kt (1)
12-36: 간단하고 명확한 구현실시간 검색 결과를 표시하는 기능이 깔끔하게 구현되었습니다. 코드가 간결하고 이해하기 쉽습니다.
There was a problem hiding this comment.
Pull Request Overview
This PR implements additional UI components and screens for the group meeting functionality, including completed meetings, search functionality, and enhanced room interaction features.
- Group search screen with real-time filtering and recent search history
- Completed meetings display screen and password-protected room entry
- Enhanced group room interactions with participation, cancellation, and recruitment closing features
Reviewed Changes
Copilot reviewed 28 out of 32 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| app/src/main/res/values/strings.xml | Added new string resources for group search, room interactions, and error messages |
| app/src/main/res/drawable/ic_thip_empty_room.xml | Added vector drawable for empty room state |
| app/src/main/res/drawable/ic_secret_cover.xml | Added vector drawable for password-protected room indicator |
| app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt | Updated main group screen to support search text input |
| app/src/main/java/com/texthip/thip/ui/group/screen/GroupDoneScreen.kt | New screen for displaying completed group meetings |
| app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupSearchScreen.kt | New comprehensive search screen with filtering and live results |
| app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomSecretScreen.kt | New screen for password input for secret rooms |
| app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomScreen.kt | Enhanced room detail screen with interaction buttons and modal dialogs |
| app/src/main/java/com/texthip/thip/ui/group/myroom/mock/GroupCardItemRoomData.kt | Updated data model to support optional endDate and secret room flag |
| app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoom.kt | Enhanced card component with improved layout and optional endDate handling |
Files not reviewed (3)
- .idea/codeStyles/Project.xml: Language not supported
- .idea/codeStyles/codeStyleConfig.xml: Language not supported
- .idea/misc.xml: Language not supported
Comments suppressed due to low confidence (1)
app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomSecretScreen.kt:82
- The endDate field is nullable (Int?) but sortedBy is called without null handling. This will cause a runtime exception if any room has null endDate. Use sortedWith with a nulls-safe comparator or filter out null values first.
isTitleVisible = false,
app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupFilteredSearchResultScreen.kt
Show resolved
Hide resolved
app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupRoomScreen.kt
Show resolved
Hide resolved
app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupPager.kt
Show resolved
Hide resolved
app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoom.kt
Outdated
Show resolved
Hide resolved
JJUYAAA
left a comment
There was a problem hiding this comment.
전체적으로 깔끔하게 잘 구현해주신 것 같슴니당
비밀번호 창은 신기하네요!! color랑 textstyle 변수설정하신 것만 수정해주세욥
| var value by rememberSaveable { mutableStateOf("") } | ||
| val textStyle = typography.menu_r400_s14_h24.copy(lineHeight = 20.sp) | ||
| val textStyle = typography.menu_r400_s14_h24.copy( | ||
| fontSize = 14.sp, |
There was a problem hiding this comment.
요 menu_r400_s14_h24 자체로 14.sp일텐데 한번 더 명시한 이유가 먼가요??
| } | ||
| } | ||
|
|
||
| @Preview(showBackground = true, backgroundColor = 0xFF000000, widthDp = 360) |
There was a problem hiding this comment.
요거 그냥 thiptheme 적용하는 걸루 바꿔주시면 조을듯
| val colors = ThipTheme.colors | ||
| val typography = ThipTheme.typography |
| val colors = ThipTheme.colors | ||
| val typography = ThipTheme.typography |
| val colors = ThipTheme.colors | ||
| val typography = ThipTheme.typography |
There was a problem hiding this comment.
지적하신 부분들은 다음 pr에서 전부 수정되어있습니다!
➕ 이슈 링크
🔎 작업 내용
📸 스크린샷
완료된 모임 방 페이지 구현

모임 검색 페이지 구현
https://github.com/user-attachments/assets/3fb564ac-45e5-4c18-9364-40275aa89578
모임방 페이지 구현
참여하기, 참여 취소하기
https://github.com/user-attachments/assets/95473ab2-2145-4918-88b1-d09833291125
모집 마감하기
https://github.com/user-attachments/assets/2d23aae8-1077-4f38-9537-b865e92bd4fa
비밀번호 입력
https://github.com/user-attachments/assets/e264e7b0-743c-43dd-a690-980436ba7a53
예외 처리 화면

😢 해결하지 못한 과제
[] 네비게이션
모달 창 터치했을 때 알림이 드는 거는 원래 그룹 페이지에서 보여줘야 하는데 네비게이션이 아직 구현되어있지 않아서 일단 해당 페이지에서 보여주게 구현 했습니다
📢 리뷰어들에게
Summary by CodeRabbit
신규 기능
UI/UX 개선
버그 수정
문서 및 리소스
테스트/프리뷰
환경설정
이 릴리즈로 그룹방 관련 다양한 신규 기능과 UI 개선, 안내 메시지 강화가 적용되었습니다.