Skip to content

Commit 8eae0dd

Browse files
committed
Merge branch 'develop' into swift-6
2 parents 6b78288 + 546e6c7 commit 8eae0dd

File tree

7 files changed

+46
-12
lines changed

7 files changed

+46
-12
lines changed

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
55

66
### ✅ Added
77
- Add extra data to user display info [#819](https://github.com/GetStream/stream-chat-swiftui/pull/819)
8+
### 🐞 Fixed
9+
- Fix swipe to reply enabled when quoting a message is disabled [#824](https://github.com/GetStream/stream-chat-swiftui/pull/824)
10+
- Fix mark unread action not removed when read events are disabled [#823](https://github.com/GetStream/stream-chat-swiftui/pull/823)
811

912
# [4.78.0](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.78.0)
1013
_April 24, 2025_

Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageContainerView.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public struct MessageContainerView<Factory: ViewFactory>: View {
3636
private let paddingValue: CGFloat = 8
3737

3838
var isSwipeToReplyPossible: Bool {
39-
message.isInteractionEnabled && channel.config.repliesEnabled
39+
message.isInteractionEnabled && channel.canQuoteMessage
4040
}
4141

4242
public init(

Sources/StreamChatSwiftUI/ChatChannel/Reactions/MessageActions/DefaultMessageActions.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ public extension MessageAction {
131131
)
132132
messageActions.append(markThreadUnreadAction)
133133
}
134-
} else if !message.isSentByCurrentUser {
134+
} else if !message.isSentByCurrentUser && channel.canReceiveReadEvents {
135135
if !message.isPartOfThread || message.showReplyInChannel {
136136
let markUnreadAction = markAsUnreadAction(
137137
for: message,

StreamChatSwiftUITests/Tests/ChatChannel/MessageActionsViewModel_Tests.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import XCTest
2020
text: "test",
2121
author: .mock(id: .unique)
2222
),
23-
channel: .mockDMChannel(ownCapabilities: [.sendMessage, .uploadFile, .pinMessage]),
23+
channel: .mockDMChannel(ownCapabilities: [.sendMessage, .uploadFile, .pinMessage, .readEvents]),
2424
chatClient: chatClient,
2525
onFinish: { _ in },
2626
onError: { _ in }

StreamChatSwiftUITests/Tests/ChatChannel/MessageActions_Tests.swift

+33-2
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,38 @@ import XCTest
7272
XCTAssert(messageActions[4].title == "Mark Unread")
7373
XCTAssert(messageActions[5].title == "Mute User")
7474
}
75-
75+
76+
func test_messageActions_otherUserDefaultReadEventsDisabled() {
77+
// Given
78+
let channel = ChatChannel.mockDMChannel(ownCapabilities: [.sendMessage, .uploadFile, .pinMessage])
79+
let message = ChatMessage.mock(
80+
id: .unique,
81+
cid: channel.cid,
82+
text: "Test",
83+
author: .mock(id: .unique),
84+
isSentByCurrentUser: false
85+
)
86+
let factory = DefaultViewFactory.shared
87+
88+
// When
89+
let messageActions = MessageAction.defaultActions(
90+
factory: factory,
91+
for: message,
92+
channel: channel,
93+
chatClient: chatClient,
94+
onFinish: { _ in },
95+
onError: { _ in }
96+
)
97+
98+
// Then
99+
XCTAssert(messageActions.count == 5)
100+
XCTAssert(messageActions[0].title == "Reply")
101+
XCTAssert(messageActions[1].title == "Thread Reply")
102+
XCTAssert(messageActions[2].title == "Pin to conversation")
103+
XCTAssert(messageActions[3].title == "Copy Message")
104+
XCTAssert(messageActions[4].title == "Mute User")
105+
}
106+
76107
func test_messageActions_otherUserDefaultBlockingEnabled() {
77108
// Given
78109
streamChat = StreamChat(
@@ -297,7 +328,7 @@ import XCTest
297328

298329
private var mockDMChannel: ChatChannel {
299330
ChatChannel.mockDMChannel(
300-
ownCapabilities: [.sendMessage, .uploadFile, .pinMessage]
331+
ownCapabilities: [.sendMessage, .uploadFile, .pinMessage, .readEvents]
301332
)
302333
}
303334
}

StreamChatSwiftUITests/Tests/ChatChannel/MessageContainerView_Tests.swift

+6-6
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ import XCTest
403403
waitForExpectations(timeout: 1)
404404
}
405405

406-
func test_isSwipeToReplyPossible_whenRepliesEnabled_whenMessageInteractable_shouldBeTrue() {
406+
func test_isSwipeToReplyPossible_whenCanQuoteReply_whenMessageInteractable_shouldBeTrue() {
407407
let message = ChatMessage.mock(
408408
id: .unique,
409409
cid: .unique,
@@ -414,7 +414,7 @@ import XCTest
414414

415415
let view = MessageContainerView(
416416
factory: DefaultViewFactory.shared,
417-
channel: .mockDMChannel(config: .mock(repliesEnabled: true)),
417+
channel: .mockDMChannel(ownCapabilities: [.quoteMessage]),
418418
message: message,
419419
width: defaultScreenSize.width,
420420
showsAllInfo: true,
@@ -428,7 +428,7 @@ import XCTest
428428
XCTAssertTrue(view.isSwipeToReplyPossible)
429429
}
430430

431-
func test_isSwipeToReplyPossible_whenRepliesDisabled_whenMessageInteractable_shouldBeFalse() {
431+
func test_isSwipeToReplyPossible_whenCanNotQuoteReply_whenMessageInteractable_shouldBeFalse() {
432432
let message = ChatMessage.mock(
433433
id: .unique,
434434
cid: .unique,
@@ -439,7 +439,7 @@ import XCTest
439439

440440
let view = MessageContainerView(
441441
factory: DefaultViewFactory.shared,
442-
channel: .mockDMChannel(config: .mock(repliesEnabled: false)),
442+
channel: .mockDMChannel(ownCapabilities: []),
443443
message: message,
444444
width: defaultScreenSize.width,
445445
showsAllInfo: true,
@@ -453,7 +453,7 @@ import XCTest
453453
XCTAssertFalse(view.isSwipeToReplyPossible)
454454
}
455455

456-
func test_isSwipeToReplyPossible_whenRepliesEnabled_whenMessageNotInteractable_shouldBeFalse() {
456+
func test_isSwipeToReplyPossible_whenCanQuoteReply_whenMessageNotInteractable_shouldBeFalse() {
457457
let message = ChatMessage.mock(
458458
id: .unique,
459459
cid: .unique,
@@ -465,7 +465,7 @@ import XCTest
465465

466466
let view = MessageContainerView(
467467
factory: DefaultViewFactory.shared,
468-
channel: .mockDMChannel(config: .mock(repliesEnabled: true)),
468+
channel: .mockDMChannel(ownCapabilities: [.quoteMessage]),
469469
message: message,
470470
width: defaultScreenSize.width,
471471
showsAllInfo: true,

StreamChatSwiftUITests/Tests/ChatChannel/ReactionsOverlayView_Tests.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ import XCTest
136136
let view = VerticallyCenteredView {
137137
ReactionsOverlayView(
138138
factory: DefaultViewFactory.shared,
139-
channel: .mockDMChannel(ownCapabilities: [.sendMessage, .uploadFile, .pinMessage]),
139+
channel: .mockDMChannel(ownCapabilities: [.sendMessage, .uploadFile, .pinMessage, .readEvents]),
140140
currentSnapshot: self.overlayImage,
141141
messageDisplayInfo: messageDisplayInfo,
142142
onBackgroundTap: {},

0 commit comments

Comments
 (0)