Implement swipe to reply on timeline items (#1148)

This commit is contained in:
Stefan Ceriu
2023-06-29 11:31:46 +03:00
committed by GitHub
parent 10e167732b
commit 93022dd7f2
6 changed files with 190 additions and 18 deletions
@@ -49,7 +49,7 @@ extension View {
}
}
struct FakeContextMenu_Previews: PreviewProvider {
struct LongPressWithFeedback_Previews: PreviewProvider {
static var previews: some View { Preview() }
struct Preview: View {
@@ -115,6 +115,13 @@ struct TimelineItemBubbledStylerView<Content: View>: View {
.longPressWithFeedback {
context.send(viewAction: .timelineItemMenu(itemID: timelineItem.id))
}
.swipeRightAction {
Image(systemName: "arrowshape.turn.up.left")
} shouldStartAction: {
context.viewState.timelineItemMenuActionProvider?(timelineItem.id)?.canReply ?? false
} action: {
context.send(viewAction: .timelineItemMenuAction(itemID: timelineItem.id, action: .reply))
}
.padding(.top, messageBubbleTopPadding)
}
@@ -71,13 +71,15 @@ struct TimelineItemPlainStylerView<Content: View>: View {
}
// We need a tap gesture before this long one so that it doesn't
// steal away the gestures from the scroll view
.onLongPressGesture(minimumDuration: 0.25) {
.longPressWithFeedback {
context.send(viewAction: .timelineItemMenu(itemID: timelineItem.id))
feedbackGenerator.impactOccurred()
} onPressingChanged: { pressing in
if pressing {
feedbackGenerator.prepare()
}
}
.swipeRightAction {
Image(systemName: "arrowshape.turn.up.left")
} shouldStartAction: {
context.viewState.timelineItemMenuActionProvider?(timelineItem.id)?.canReply ?? false
} action: {
context.send(viewAction: .timelineItemMenuAction(itemID: timelineItem.id, action: .reply))
}
}