Skip to content

Conversation

@rbqks529
Copy link
Contributor

@rbqks529 rbqks529 commented Sep 30, 2025

🚀 이슈번호

✏️ 변경사항

  • 로그인 화면 뒤로가기 아이콘 수정(svg로)
  • 코드 입력 화면 중간에 선택했을 경우 숫자를 수정 할 수 있도록 수정

📷 스크린샷

✍️ 사용법

🎸 기타

Summary by CodeRabbit

  • 신규 기능
    • 없음
  • 버그 수정
    • 인증 코드 입력 시 여러 숫자를 붙여넣거나 빠르게 입력해도 마지막 숫자가 정확히 반영되도록 입력 처리 개선.
    • 인증 코드 화면에서 숫자 입력 시 포커스 이동과 현재 위치 동기화 안정성 향상.
  • 리팩터링
    • 여러 인증/로그인 화면의 뒤로가기 아이콘 표시 방식을 개선하여 SVG 아이콘 로딩 안정화 및 시각적 일관성 향상.

@rbqks529 rbqks529 self-assigned this Sep 30, 2025
@rbqks529 rbqks529 added UI UI 구현 작업 OK Merge 완료된 PR labels Sep 30, 2025
@coderabbitai
Copy link

coderabbitai bot commented Sep 30, 2025

Walkthrough

여러 인증/로그인 관련 Compose 화면에서 뒤로가기 아이콘을 painterResource 기반 Icon에서 URI 기반 AsyncImage로 교체했다. EmailVerificationScreen의 포커스 갱신 로직이 조정되었고, NumberInputBox는 입력된 다중 숫자 중 마지막 숫자를 선택하도록 onValueChange 로직이 변경되었다.

Changes

Cohort / File(s) Change Summary
Auth 화면: 뒤로가기 아이콘 AsyncImage 전환
composeApp/.../auth/clubcode/ClubCodeInputScreen.kt, composeApp/.../auth/login/EmailVerificationScreen.kt, composeApp/.../auth/login/FindPasswordScreen.kt, composeApp/.../auth/login/NicknameInputScreen.kt, composeApp/.../auth/login/PasswordInputScreen.kt, composeApp/.../auth/login/SignupEmailInputScreen.kt
Icon(painterResource, tint) 제거 → AsyncImage(model = Res.getUri("files/ic_back.svg"))로 교체. 관련 import 정리(coil3.compose.AsyncImage 추가, painterResource 및 ic_back 리소스 import 제거). 크기/모디파이어 최소 조정.
EmailVerification 입력 포커스 조정
composeApp/.../auth/login/EmailVerificationScreen.kt
숫자 입력 시 currentFocusIndex를 명시적으로 현재 인덱스로 설정하도록 포커스 관리 로직 보완.
숫자 입력 처리 로직 변경
composeApp/.../auth/login/component/NumberInputBox.kt
onValueChange에서 다중 입력 시 첫 번째 숫자 대신 마지막 숫자를 추출해 반영. 빈 입력/백스페이스 처리 유지.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User
  participant NumberInputBox
  participant FocusManager as Focus Manager
  participant Screen as EmailVerificationScreen

  User->>NumberInputBox: 입력(여러 문자 가능)
  Note over NumberInputBox: 숫자 필터링 후 "마지막 숫자" 선택
  NumberInputBox-->>Screen: onValueChange(선택된 숫자 또는 빈 문자열)

  alt 숫자 입력됨
    Screen->>Screen: 코드 상태 업데이트
    Screen->>FocusManager: 현재 인덱스로 포커스 설정/다음 칸 이동
  else 빈 입력/백스페이스
    Screen->>FocusManager: 이전 칸으로 이동(필요 시)
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • casper-jr
  • Nico1eKim
  • ikseong00
  • alswlekk

Poem

작은 화살표, SVG로 빛나네 ⬅️
코일에 실려 부드럽게 돌아오고,
숫자는 마지막 한 점에 착— 안기고,
포커스는 차분히 자리 찾는다.
한 글자, 한 걸음. 오늘도 UI는 멋지다.

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed 제목 “[UI] 로그인 화면 아이콘, 코드 입력 로직 수정”은 UI 관련 변경임을 명시하면서 로그인 화면의 뒤로가기 아이콘 교체와 인증 코드 입력 로직 개선이라는 두 가지 주요 변경 사항을 간결하고 명확하게 요약하고 있어 PR의 핵심을 잘 드러냅니다.
✨ 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
🧪 Early access (Sonnet 4.5): enabled

We are currently testing the Sonnet 4.5 model, which is expected to improve code review quality. However, this model may lead to increased noise levels in the review comments. Please disable the early access features if the noise level causes any inconvenience.

Note:

  • Public repositories are always opted into early access features.
  • You can enable or disable early access features from the CodeRabbit UI or by updating the CodeRabbit configuration file.

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (3)
composeApp/src/commonMain/kotlin/org/whosin/client/presentation/auth/login/NicknameInputScreen.kt (1)

61-65: AsyncImage로 백 버튼 전환이 깔끔하게 처리되었습니다.

SVG를 URI로 로드하는 방식으로 변경되었고, contentDescription도 잘 유지되고 있습니다. AsyncImage는 로드 실패 시 빈 공간을 표시하는데, 백 버튼이 중요한 네비게이션 요소이니 필요하다면 error나 placeholder 파라미터로 폴백 처리를 고려해볼 수 있습니다. 다만 현재 패턴이 다른 화면들과 일관되게 적용되고 있으니 선택적으로 개선하시면 됩니다.

composeApp/src/commonMain/kotlin/org/whosin/client/presentation/auth/clubcode/ClubCodeInputScreen.kt (1)

35-35: AsyncImage 적용 일관성 확인 및 error/placeholder 파라미터 추가 권장
모든 auth 화면에서 AsyncImage(model = Res.getUri("files/ic_back.svg"), contentDescription = …)로 일관 적용되었으며 composeApp/src/commonMain/composeResources/files/ic_back.svg 파일도 정상 존재합니다. 로딩 실패 시 아이콘이 보이지 않는 문제를 방지하기 위해 error = /* fallback */ (필요 시 placeholder = /* loader */) 파라미터 추가를 검토해주세요.

composeApp/src/commonMain/kotlin/org/whosin/client/presentation/auth/login/EmailVerificationScreen.kt (1)

87-91: 정적 리소스에는 painterResource가 더 적합할 수 있습니다.

AsyncImage는 주로 네트워크 이미지나 동적 로딩이 필요한 경우에 사용됩니다. 단순한 정적 아이콘의 경우:

  • painterResource가 더 가벼우며 동기적으로 로드되어 깜빡임이 없습니다.
  • Coil 의존성 없이 처리 가능합니다.
  • AsyncImage는 비동기 로딩 오버헤드와 잠재적인 플랫폼 호환성 이슈가 있을 수 있습니다.

현재 에러 처리나 placeholder도 없어서 로딩 실패 시 아이콘이 보이지 않을 수 있습니다.

AI summary에 따르면 여러 화면에서 동일한 패턴으로 변경되었다고 하니, 이 접근 방식이 프로젝트 전체에서 의도된 것인지 확인해주세요.

필요하다면 다음과 같이 되돌리는 것을 고려해보세요:

-                AsyncImage(
-                    model = Res.getUri("files/ic_back.svg"),
+                Icon(
+                    painter = painterResource(Res.drawable.ic_back),
                     contentDescription = stringResource(Res.string.back_button),
                     modifier = Modifier.size(18.dp)
                 )
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 973f69f and a378135.

⛔ Files ignored due to path filters (1)
  • composeApp/src/commonMain/composeResources/files/ic_back.svg is excluded by !**/*.svg
📒 Files selected for processing (7)
  • composeApp/src/commonMain/kotlin/org/whosin/client/presentation/auth/clubcode/ClubCodeInputScreen.kt (2 hunks)
  • composeApp/src/commonMain/kotlin/org/whosin/client/presentation/auth/login/EmailVerificationScreen.kt (3 hunks)
  • composeApp/src/commonMain/kotlin/org/whosin/client/presentation/auth/login/FindPasswordScreen.kt (2 hunks)
  • composeApp/src/commonMain/kotlin/org/whosin/client/presentation/auth/login/NicknameInputScreen.kt (2 hunks)
  • composeApp/src/commonMain/kotlin/org/whosin/client/presentation/auth/login/PasswordInputScreen.kt (2 hunks)
  • composeApp/src/commonMain/kotlin/org/whosin/client/presentation/auth/login/SignupEmailInputScreen.kt (2 hunks)
  • composeApp/src/commonMain/kotlin/org/whosin/client/presentation/auth/login/component/NumberInputBox.kt (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (4)
composeApp/src/commonMain/kotlin/org/whosin/client/presentation/auth/login/FindPasswordScreen.kt (1)
composeApp/src/commonMain/kotlin/org/whosin/client/presentation/mypage/component/MyPageTopAppBar.kt (2)
  • MyPageTopAppBar (19-29)
  • AsyncImage (21-28)
composeApp/src/commonMain/kotlin/org/whosin/client/presentation/auth/clubcode/ClubCodeInputScreen.kt (2)
composeApp/src/commonMain/kotlin/org/whosin/client/presentation/mypage/component/MyPageTopAppBar.kt (2)
  • AsyncImage (21-28)
  • MyPageTopAppBar (19-29)
composeApp/src/commonMain/kotlin/org/whosin/client/presentation/home/HomeScreen.kt (1)
  • Image (99-247)
composeApp/src/commonMain/kotlin/org/whosin/client/presentation/auth/login/SignupEmailInputScreen.kt (2)
composeApp/src/commonMain/kotlin/org/whosin/client/presentation/mypage/component/MyPageTopAppBar.kt (1)
  • MyPageTopAppBar (19-29)
composeApp/src/commonMain/kotlin/org/whosin/client/presentation/home/HomeScreen.kt (2)
  • AsyncImage (117-139)
  • Image (99-247)
composeApp/src/commonMain/kotlin/org/whosin/client/presentation/auth/login/NicknameInputScreen.kt (2)
composeApp/src/commonMain/kotlin/org/whosin/client/presentation/mypage/component/MyPageTopAppBar.kt (1)
  • MyPageTopAppBar (19-29)
composeApp/src/commonMain/kotlin/org/whosin/client/presentation/home/HomeScreen.kt (1)
  • AsyncImage (117-139)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: android-build
  • GitHub Check: ios-build
🔇 Additional comments (6)
composeApp/src/commonMain/kotlin/org/whosin/client/presentation/auth/login/component/NumberInputBox.kt (1)

73-83: 중간 숫자 편집 로직이 잘 구현되었습니다.

입력된 숫자 중 마지막 문자를 선택하도록 변경한 로직이 정확합니다. 여러 숫자가 입력되거나 붙여넣기 되었을 때 마지막 숫자를 가져오고, 숫자가 없으면 빈 문자열을 전달하는 방식이 의도한 동작과 일치합니다.

composeApp/src/commonMain/kotlin/org/whosin/client/presentation/auth/login/FindPasswordScreen.kt (1)

60-64: 백 버튼 전환이 잘 적용되었습니다.

다른 화면들과 동일한 패턴으로 AsyncImage를 사용하여 일관성이 유지되고 있습니다.

composeApp/src/commonMain/kotlin/org/whosin/client/presentation/auth/login/PasswordInputScreen.kt (1)

66-70: 백 버튼 변경사항이 정확합니다.

AsyncImage 적용이 일관되게 이루어졌습니다.

composeApp/src/commonMain/kotlin/org/whosin/client/presentation/auth/login/SignupEmailInputScreen.kt (1)

60-64: 백 버튼 변경이 완료되었습니다.

모든 로그인 관련 화면에서 AsyncImage를 사용한 백 버튼이 일관되게 적용되어 코드 통일성이 향상되었습니다.

composeApp/src/commonMain/kotlin/org/whosin/client/presentation/auth/login/EmailVerificationScreen.kt (2)

31-31: LGTM!

AsyncImage를 사용하기 위한 적절한 import입니다.


123-125: 마지막 박스 포커스 유지 로직이 추가되었습니다.

새로운 else-if 분기는 마지막 인증번호 박스(index 5)에 숫자를 입력했을 때 포커스가 해당 박스에 유지되도록 합니다. 이는 합리적인 변경입니다.

다만 PR 목표에서 언급된 "중간 숫자를 선택한 경우 해당 숫자를 수정할 수 있도록" 기능이 제대로 작동하는지 확인해주세요. 현재 코드만으로는 중간 박스 편집 시 여전히 다음 박스로 포커스가 이동하는 것으로 보입니다. AI summary에 따르면 NumberInputBox 컴포넌트에서 입력 처리 로직이 변경되었다고 하니, 해당 변경사항과 함께 동작을 테스트해보시기 바랍니다.

다음 시나리오를 테스트해주세요:

  1. 여섯 자리를 모두 입력
  2. 세 번째 박스를 클릭
  3. 새로운 숫자 입력
  4. 예상: 세 번째 박스의 숫자만 변경되고 네 번째 박스로 포커스 이동

@Nico1eKim Nico1eKim merged commit 112c245 into WhosInRoom:develop Oct 2, 2025
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

OK Merge 완료된 PR UI UI 구현 작업

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants