diff --git a/SodaLive/Sources/Live/Room/V2/LiveRoomViewV2.swift b/SodaLive/Sources/Live/Room/V2/LiveRoomViewV2.swift index c410f4f..ad34ef7 100644 --- a/SodaLive/Sources/Live/Room/V2/LiveRoomViewV2.swift +++ b/SodaLive/Sources/Live/Room/V2/LiveRoomViewV2.swift @@ -39,6 +39,22 @@ struct LiveRoomViewV2: View { return max(keyboardHandler.keyboardHeight, 0) } + + private var isChatInputDisabled: Bool { + viewModel.isChatFrozenForCurrentUser || viewModel.isNoChatting + } + + private var chatInputBlockedMessage: String { + if viewModel.isChatFrozenForCurrentUser { + return I18n.LiveRoom.chatFreezeBlockedMessage + } + + if viewModel.isNoChatting { + return "\(viewModel.remainingNoChattingTime)초 동안 채팅하실 수 없습니다" + } + + return I18n.LiveRoom.chatFreezeBlockedMessage + } var body: some View { ZStack { @@ -356,7 +372,7 @@ struct LiveRoomViewV2: View { } LiveRoomInputChatView( - isInputDisabled: viewModel.isChatFrozenForCurrentUser, + isInputDisabled: isChatInputDisabled, sendMessage: { viewModel.sendMessage(chatMessage: $0) { viewModel.isShowingNewChat = false @@ -366,7 +382,7 @@ struct LiveRoomViewV2: View { return true }, onDisabledInputTap: { - viewModel.errorMessage = I18n.LiveRoom.chatFreezeBlockedMessage + viewModel.errorMessage = chatInputBlockedMessage viewModel.isShowErrorPopup = true } ) diff --git a/docs/20260319_채팅금지상태알림방식수정.md b/docs/20260319_채팅금지상태알림방식수정.md new file mode 100644 index 0000000..201b804 --- /dev/null +++ b/docs/20260319_채팅금지상태알림방식수정.md @@ -0,0 +1,41 @@ +# 20260319_채팅금지상태알림방식수정.md + +## 개요 +- 라이브룸 V2에서 `채팅 금지` 상태 알림 방식을 `채팅창 얼림` 상태와 동일한 UX로 맞춘다. +- 현재는 입력 후 전송 시점에만 차단 안내가 표시되므로, 입력창 터치 시점 안내로 변경한다. + +## 완료 기준 (Acceptance Criteria) +- [x] AC1: `채팅 금지` 상태에서 입력창을 터치하면 즉시 토스트가 노출된다. +- [x] AC2: `채팅 금지` 상태에서 전송 버튼을 눌러도 입력창 터치와 동일한 차단 안내가 일관되게 동작한다. +- [x] AC3: 기존 `채팅창 얼림` 상태의 토스트 문구/노출 방식과 동일한 경로를 재사용한다. +- [x] AC4: 빌드 검증(`SodaLive`, `SodaLive-dev`)이 통과한다. + +## 구현 체크리스트 +- [x] `LiveRoomViewV2`와 입력 컴포넌트 연결 지점에서 `채팅 금지` 상태를 입력 비활성 조건에 포함한다. +- [x] `LiveRoomInputChatView`의 비활성 입력 터치 콜백 경로를 `채팅 금지` 상태에도 동일 적용한다. +- [x] 차단 안내 토스트 노출 경로를 단일화해 입력창 터치 시점 피드백이 보장되도록 조정한다. +- [x] `lsp_diagnostics` 및 `xcodebuild` 검증 결과를 기록한다. + +## 검증 기록 +- 2026-03-19 (초안 작성) + - 무엇/왜/어떻게: 사용자 요청(채팅 금지 알림 시점을 입력 터치 시점으로 변경)에 맞춘 최소 범위 작업 계획을 수립했다. + - 실행 명령/도구: + - `read(LiveRoomViewV2.swift, LiveRoomInputChatView.swift)` + - `grep("onDisabledInputTap|isInputDisabled|chatFreezeBlockedMessage", include:"*.swift")` + - 결과: + - 변경 지점 후보를 `LiveRoomViewV2` 입력 바인딩과 `LiveRoomInputChatView` 비활성 터치 처리로 식별했다. + +- 2026-03-19 (구현 및 검증) + - 무엇/왜/어떻게: `채팅 금지` 상태를 `LiveRoomInputChatView` 비활성 조건에 포함하고, 비활성 입력 터치 시 토스트 메시지가 `채팅창 얼림`과 동일 경로(`isShowErrorPopup`)로 노출되도록 수정했다. + - 실행 명령/도구: + - `apply_patch(LiveRoomViewV2.swift)` + - `lsp_diagnostics(LiveRoomViewV2.swift)` + - `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build` + - `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build` + - `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" test` + - `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" test` + - 결과: + - `LiveRoomViewV2`에서 `isChatFrozenForCurrentUser || isNoChatting`를 입력 비활성 조건으로 적용. + - 비활성 입력 터치 시 `chatInputBlockedMessage`를 통해 얼림/채팅금지 각각 맞는 문구를 토스트로 노출하도록 반영. + - 빌드: `SodaLive`, `SodaLive-dev` 모두 `** BUILD SUCCEEDED **` 확인. + - 테스트: 두 스킴 모두 `Scheme ... is not currently configured for the test action.`으로 자동 테스트 미구성 상태 확인.