Skip to content

[Chore] 짤막 QA 처리#191

Merged
Remaked-Swain merged 3 commits intodevelopfrom
chore/#190-alert-interaction
Mar 25, 2026
Merged

[Chore] 짤막 QA 처리#191
Remaked-Swain merged 3 commits intodevelopfrom
chore/#190-alert-interaction

Conversation

@Remaked-Swain
Copy link
Copy Markdown
Member

@Remaked-Swain Remaked-Swain commented Mar 24, 2026

🌴 작업한 브랜치

✅ 작업한 내용

  1. 만료된 QR 얼럿 문구를 수정했습니다.
  2. 얼럿 밖의 영역을 터치하여 얼럿을 닫을 수 있도록 수정했습니다.

❗️PR Point

얼럿에 따라 onCancel() 클로저로 얼럿을 닫을 때 상태의 변경이 같이 이루어져야 하는 것들도 있을텐데 단순히 isPresented.toggle()을 해도 무방한지 모르겠습니다!

📸 스크린샷

생략합니다!

📟 관련 이슈

Summary by CodeRabbit

릴리스 노트

  • 개선 사항
    • 만료된 QR 코드 알림 메시지를 더 명확하고 자세하게 업데이트했습니다.
    • 만료된 QR 알림의 확인 버튼을 누르면 알림을 닫고 바로 갤러리에서 사진을 추가할 수 있도록 동작을 개선했습니다.
    • 알림의 어두운 배경(디머)을 터치해 알림을 닫을 수 있도록 동작을 조정했습니다.

@Remaked-Swain Remaked-Swain added this to the 3차 스프린트 milestone Mar 24, 2026
@Remaked-Swain Remaked-Swain requested a review from OneTen19 March 24, 2026 15:01
@Remaked-Swain Remaked-Swain self-assigned this Mar 24, 2026
@Remaked-Swain Remaked-Swain added Chore 🪡 자잘한 코드 수정 Style 🖼️ UI 작업 금용 🐲 금용 작업 labels Mar 24, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Mar 24, 2026

Walkthrough

만료된 QR 알림의 문구를 변경하고, 알림의 배경 탭으로 닫을 수 있도록 수정했으며, 알림 확인(갤러리에서 추가하기) 동작이 알림 닫힘 후 갤러리 추가 액션을 트리거하도록 흐름을 변경했습니다.

Changes

Cohort / File(s) Summary
QR 스캐너 뷰 — 얼럿 문구 및 버튼 텍스트
Neki-iOS/Features/QRCodeScanner/Sources/Presentation/Sources/Views/QRCodeScannerView.swift
만료 QR 알림의 제목·부제목·확인 버튼 텍스트를 사용자 안내 문구로 변경(확인 → '갤러리에서 추가하기').
QRCodeScanFeature — 알림 닫힘 처리 흐름 변경
Neki-iOS/Features/QRCodeScanner/Sources/Presentation/Sources/Features/QRCodeScanFeature.swift
.closeExpiredAlertButtonTapped 처리 시 state.isExpiredAlertPresented = false에 더해 .addPhotoFromGalleryButtonTapped 액션을 디스패치하도록 제어 흐름 추가.
DesignSystem — Alert modifier API 및 동작 변경
Neki-iOS/Shared/DesignSystem/Sources/Modifier/NekiAlertModifier.swift
알림 콜백 파라미터를 선택형((() -> Void)? = nil)으로 변경하고, 버튼 핸들러에서 옵셔널 호출 사용. 배경(dim) 탭 시 제공된 onCancel이 있으면 호출하고, 없으면 바인딩 토글로 닫히도록 동작 조정.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 분

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

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.
Title check ❓ Inconclusive PR 제목은 "[Chore] 짤막 QA 처리"로 매우 일반적이고 모호하여 구체적인 변경 사항을 전달하지 못합니다. 제목을 "[Chore] 만료된 QR 얼럿 문구 수정 및 배경 영역 터치로 닫기 기능" 같이 변경 내용을 더 구체적으로 설명하도록 수정하세요.
✅ Passed checks (3 passed)
Check name Status Explanation
Description check ✅ Passed PR 설명이 템플릿을 대부분 따르고 있으며, 작업 내용과 PR 포인트, 관련 이슈가 기재되어 있습니다.
Linked Issues check ✅ Passed PR의 코드 변경사항들이 #190 이슈의 두 가지 요구사항(만료된 QR 얼럿 문구 수정, 얼럿 외부 영역 터치로 닫기)을 모두 충족하고 있습니다.
Out of Scope Changes check ✅ Passed NekiAlertModifier의 옵션 클로저 변경은 얼럿 외부 영역 터치 기능 구현을 위한 필수 변경이며, 모든 수정사항이 #190 이슈 범위 내에 있습니다.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/#190-alert-interaction

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
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

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@Neki-iOS/Shared/DesignSystem/Sources/Modifier/NekiAlertModifier.swift`:
- Line 40: The background tap currently calls isPresented.toggle() which
bypasses the onCancel() closure and direct-binding semantics; change the
.onTapGesture handler in NekiAlertModifier to invoke the same onCancel() closure
used by the cancel button (instead of toggling isPresented) so any cancel logic
and TCA action flow runs consistently; after this change ensure every consumer
of nekiAlert provides an onCancel implementation that sets isPresented = false
(or dispatches the appropriate action) so dismissal still updates state.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 0e7f76d9-c90e-4a91-b834-e9b9197fe88f

📥 Commits

Reviewing files that changed from the base of the PR and between 0565565 and 4cf0f49.

📒 Files selected for processing (3)
  • Neki-iOS/Features/QRCodeScanner/Sources/Presentation/Sources/Features/QRCodeScanFeature.swift
  • Neki-iOS/Features/QRCodeScanner/Sources/Presentation/Sources/Views/QRCodeScannerView.swift
  • Neki-iOS/Shared/DesignSystem/Sources/Modifier/NekiAlertModifier.swift

Comment thread Neki-iOS/Shared/DesignSystem/Sources/Modifier/NekiAlertModifier.swift Outdated
Copy link
Copy Markdown
Member

@OneTen19 OneTen19 left a comment

Choose a reason for hiding this comment

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

👍

Comment thread Neki-iOS/Shared/DesignSystem/Sources/Modifier/NekiAlertModifier.swift Outdated
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.

♻️ Duplicate comments (1)
Neki-iOS/Shared/DesignSystem/Sources/Modifier/NekiAlertModifier.swift (1)

40-45: ⚠️ Potential issue | 🟠 Major

onCancel이 없을 때 취소 버튼이 얼럿을 닫지 못합니다.

현재 구현은 nil fallback 경로에서 배경 탭과 취소 버튼이 다시 갈립니다. Line 40-45는 onCancel == nil이면 dismiss fallback을 타지만, Line 105-106은 그대로 no-op이라 style: .cancelable + 기본 인자 조합에서 배경 탭으로만 닫히고 취소 버튼은 먹지 않습니다. Line 143의 기본값 때문에 이 경로는 실제로 열려 있으니, 취소 버튼도 동일한 fallback을 타게 맞추고 dismiss 의도는 toggle()보다 isPresented = false로 고정하는 편이 안전합니다.

🔧 제안 수정
                     .onTapGesture {
                         if let onCancel = onCancel {
                             onCancel()
                         } else {
-                            isPresented.toggle()
+                            isPresented = false
                         }
                     }
@@
     private var cancelButton: some View {
         Button {
-            onCancel?()
+            if let onCancel = onCancel {
+                onCancel()
+            } else {
+                isPresented = false
+            }
         } label: {

Also applies to: 104-106, 142-144

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Neki-iOS/Shared/DesignSystem/Sources/Modifier/NekiAlertModifier.swift` around
lines 40 - 45, The cancel action currently toggles isPresented in some places
and is a no-op in others when onCancel is nil; update all cancel paths (the
.onTapGesture closure, the cancel button action, and any other cancel-style
handlers in NekiAlertModifier) to call onCancel() when non-nil otherwise set
isPresented = false (do not use toggle()), so background-tap and cancel-button
behavior share the same fallback dismiss logic.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@Neki-iOS/Shared/DesignSystem/Sources/Modifier/NekiAlertModifier.swift`:
- Around line 40-45: The cancel action currently toggles isPresented in some
places and is a no-op in others when onCancel is nil; update all cancel paths
(the .onTapGesture closure, the cancel button action, and any other cancel-style
handlers in NekiAlertModifier) to call onCancel() when non-nil otherwise set
isPresented = false (do not use toggle()), so background-tap and cancel-button
behavior share the same fallback dismiss logic.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 00366e2e-0e8d-4447-94a7-0866781ea8d7

📥 Commits

Reviewing files that changed from the base of the PR and between 4cf0f49 and 9086d9b.

📒 Files selected for processing (1)
  • Neki-iOS/Shared/DesignSystem/Sources/Modifier/NekiAlertModifier.swift

@Remaked-Swain Remaked-Swain merged commit a8b27b7 into develop Mar 25, 2026
1 check passed
@Remaked-Swain Remaked-Swain deleted the chore/#190-alert-interaction branch March 25, 2026 12:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Chore 🪡 자잘한 코드 수정 Style 🖼️ UI 작업 금용 🐲 금용 작업

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Chore] 짤막 QA 처리

2 participants