Skip to content

[FIX#145] 2차 QA 수정 사항 반영#146

Merged
nhyeonii merged 3 commits intodevelopfrom
fix/#145-qa2-procedure
Jan 22, 2026
Merged

[FIX#145] 2차 QA 수정 사항 반영#146
nhyeonii merged 3 commits intodevelopfrom
fix/#145-qa2-procedure

Conversation

@usuuhyn
Copy link
Contributor

@usuuhyn usuuhyn commented Jan 22, 2026

Related issue 🛠

Work Description ✏️

  • 2차 QA 수정사항을 반영했습니다.

Screenshot 📸

image

Uncompleted Tasks 😅

N/A

To Reviewers 📢

초성으로 ㄱㄱ 검색 시 엠티 뷰 적용이 안되길래 이 로직도 추가해서 리팩했습니도 !

Summary by CodeRabbit

릴리스 노트

  • New Features

    • 검색 아이콘을 클릭 가능하게 변경하여 검색 작업 트리거 및 키보드 자동 숨김
    • 이름과 카테고리를 기준으로 시술 항목 필터링 기능 추가
  • Improvements

    • 화면 외부 터치 시 키보드 자동 닫힘 기능 개선

✏️ Tip: You can customize this high-level summary in your review settings.

@usuuhyn usuuhyn self-assigned this Jan 22, 2026
@usuuhyn usuuhyn requested a review from a team as a code owner January 22, 2026 15:44
@usuuhyn usuuhyn added the FIX🐛 오류 및 버그 수정 label Jan 22, 2026
@usuuhyn usuuhyn linked an issue Jan 22, 2026 that may be closed by this pull request
3 tasks
@usuuhyn usuuhyn added the 수현🍒 수현 담당 label Jan 22, 2026
@usuuhyn usuuhyn changed the title [FIX#145] 2차 QA 수정사항 반영 [FIX#145] 2차 QA 수정 사항 반영 Jan 22, 2026
@coderabbitai
Copy link

coderabbitai bot commented Jan 22, 2026

개요

검색 기능을 구현하여 검색 아이콘을 클릭 가능하게 변경하고, 검색된 쿼리 상태를 상태 관리 계층을 통해 전파하며, 클라이언트 측 필터링 로직을 추가하고 포커스 외부 탭에서 키보드를 자동으로 숨기도록 수정합니다.

변경 사항

그룹 / 파일 요약
검색 입력 및 상호작용
app/src/main/java/com/cherrish/android/presentation/calendar/component/ProcedureSearchTextField.kt
검색 아이콘에 noRippleClickable 추가하여 탭 시 onSearchAction() 호출 및 키보드 숨김 기능 구현
상태 관리
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/ProcedureUiState.kt, ProcedureViewModel.kt
searchedQuery 상태 필드 추가 및 onSearchAction에서 searchedQuery 업데이트 로직 추가; 검색 키워드 기반 프로시저 필터링 로직 구현
필터링 및 표시
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/FilteringWithSearchContent.kt
searchedQuery 파라미터 추가; 정규화된 검색어에 따라 이름 또는 카테고리별 클라이언트 측 필터링 구현; 빈 결과 상태 표시
데이터 흐름
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/ProcedureScreen.kt
FilteringWithSearchContent 호출 시 searchedQuery = uiState.searchedQuery 파라미터 추가
키보드 관리
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/RecoveryScheduleContent.kt
Column에 전역 포인터 입력 핸들러 추가하여 포커스 가능 요소 외부 탭 감지 시 키보드 숨김 기능 구현

시퀀스 다이어그램

sequenceDiagram
    participant User
    participant SearchTextField
    participant ViewModel
    participant UiState
    participant FilteringContent
    participant Display

    User->>SearchTextField: 검색 아이콘 탭
    SearchTextField->>ViewModel: onSearchAction(query)
    ViewModel->>UiState: searchedQuery 업데이트
    ViewModel->>ViewModel: 키워드 기반 필터링
    UiState->>FilteringContent: searchedQuery 전달
    FilteringContent->>FilteringContent: 검색어로 아이템 필터링
    FilteringContent->>Display: 필터링된 결과 또는 빈 상태 렌더링
    Display->>User: 검색 결과 표시
Loading

예상 코드 리뷰 시간

🎯 3 (중간) | ⏱️ ~20분

관련 가능성 있는 PR

  • PR #137: ProcedureSearchTextField 컴포저블 수정사항과 코드 수준에서 관련 있음 (검색 아이콘 클릭 기능 추가)
  • PR #84: 동일한 ProcedureScreen/ProcedureViewModel/FilteringWithSearchContent 컴포넌트에 대한 직접적인 수정으로 관련 있음
  • PR #122: FilteringWithSearchContent 시그니처 및 호출 지점 수정사항과 코드 수준에서 관련 있음 (파라미터 추가)

제안 검토자

  • sohee6989
  • nhyeonii
  • hyeminililo
🚥 Pre-merge checks | ✅ 4 | ❌ 1
❌ 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%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description check ✅ Passed PR 설명이 템플릿 구조를 따르고 관련 이슈, 작업 내용, 스크린샷, 검토자 노트를 포함하고 있습니다.
Linked Issues check ✅ Passed 모든 연결된 이슈 #145의 요구사항이 충족되었습니다: 검색 텍스트필드 포커스 수정, 초성 검색 시 엠티뷰 표시, 목표디데이 필드 외부 터치 시 포커스 해제 및 키보드 숨김이 구현되었습니다.
Out of Scope Changes check ✅ Passed 모든 코드 변경사항이 이슈 #145의 명시된 요구사항과 일치하며, 범위를 벗어난 변경사항이 없습니다.
Title check ✅ Passed 제목은 한국어로 작성되었으며, 이슈 #145와 연결된 2차 QA 수정사항을 반영하는 것임을 명확히 나타냅니다. 검색 필터링, 키보드 해제, 포커스 처리 등 PR의 주요 변경사항들을 종합적으로 대표합니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

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

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
app/src/main/java/com/cherrish/android/presentation/calendar/component/ProcedureSearchTextField.kt (1)

78-87: 클릭 가능한 검색 아이콘에 접근성 라벨이 필요합니다.

현재 contentDescription = null으로 설정되어 있어 스크린리더가 이 버튼의 용도를 인지하지 못합니다. 아이콘이 .noRippleClickable 수정자로 상호작용 가능하므로 적절한 라벨을 제공해야 합니다.

✅ 접근성 라벨 추가 예시
 Icon(
     imageVector = ImageVector.vectorResource(id = R.drawable.ic_search),
-    contentDescription = null,
+    contentDescription = "검색",
     tint = CherrishTheme.colors.gray500,
     modifier = Modifier
         .align(Alignment.CenterEnd)
         .noRippleClickable {
             onSearchAction()
             keyboardController?.hide()
         }
 )
🧹 Nitpick comments (2)
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/FilteringWithSearchContent.kt (1)

99-118: 필터링 결과 계산은 remember/derivedStateOf로 캐싱 권장합니다.
현재 매 recomposition마다 리스트 필터링/할당이 발생합니다. derivedStateOf로 계산을 메모이즈하면 비용을 줄일 수 있어요.

♻️ 캐싱 적용 예시
+import androidx.compose.runtime.derivedStateOf
 ...
-    val normalizedQuery = searchedQuery.trim()
-    val filteredItems = if (normalizedQuery.isEmpty()) {
-        cardItems
-    } else {
-        cardItems.filter { item ->
-            item.name.contains(normalizedQuery, ignoreCase = true) ||
-                item.category.contains(normalizedQuery, ignoreCase = true)
-        }.toPersistentList()
-    }
+    val normalizedQuery = searchedQuery.trim()
+    val filteredItems by remember(cardItems, normalizedQuery) {
+        derivedStateOf {
+            if (normalizedQuery.isEmpty()) {
+                cardItems
+            } else {
+                cardItems.filter { item ->
+                    item.name.contains(normalizedQuery, ignoreCase = true) ||
+                        item.category.contains(normalizedQuery, ignoreCase = true)
+                }.toPersistentList()
+            }
+        }
+    }

Also applies to: 143-151

app/src/main/java/com/cherrish/android/presentation/calendar/procedure/ProcedureViewModel.kt (1)

437-453: 검색 필터링 로직이 ViewModel/UI에 중복되어 있어 정리가 필요합니다.
두 군데에서 필터링하면 매칭 규칙이 달라질 때 결과 불일치가 생길 수 있습니다. 한 곳으로 통일하거나 공용 matcher로 추출하는 방향을 권장합니다.

Copy link
Contributor

@sohee6989 sohee6989 left a comment

Choose a reason for hiding this comment

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

수고하셨습니다!!!!!
스크린샷 2026-01-23 오전 1 37 14

Copy link
Contributor

@nhyeonii nhyeonii left a comment

Choose a reason for hiding this comment

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

LGTM ~~ 🚀

@nhyeonii nhyeonii merged commit dfa69dc into develop Jan 22, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

FIX🐛 오류 및 버그 수정 수현🍒 수현 담당

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FIX] 2차 QA 수정사항 반영

3 participants