Skip to content

Commit

Permalink
fix: dont scroll channel while dragging sidebar
Browse files Browse the repository at this point in the history
  • Loading branch information
Zomatree committed Nov 18, 2024
1 parent 54779c7 commit 88d5512
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 5 deletions.
5 changes: 4 additions & 1 deletion Revolt/Pages/Channel/Messagable/MessageableChannel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ struct MessageableChannelView: View {

var toggleSidebar: () -> ()

@Binding var disableScroll: Bool

@FocusState var focused: Bool

var isCompactMode: Bool {
Expand Down Expand Up @@ -395,6 +397,7 @@ struct MessageableChannelView: View {
.environment(\.defaultMinListRowHeight, 0)
//.gesture(TapGesture().onEnded { focused = false }, isEnabled: focused)
.scrollDismissesKeyboard(.never)
.scrollDisabled(disableScroll)
}
.defaultScrollAnchor(.bottom)
.scrollDismissesKeyboard(.never)
Expand Down Expand Up @@ -454,6 +457,6 @@ struct MessageableChannelView: View {
@Previewable @StateObject var viewState = ViewState.preview()
let messages = Binding($viewState.channelMessages["0"])!

return MessageableChannelView(viewModel: .init(viewState: viewState, channel: viewState.channels["0"]!, server: viewState.servers[""], messages: messages), toggleSidebar: {})
return MessageableChannelView(viewModel: .init(viewState: viewState, channel: viewState.channels["0"]!, server: viewState.servers[""], messages: messages), toggleSidebar: {}, disableScroll: .constant(false))
.applyPreviewModifiers(withState: viewState)
}
18 changes: 14 additions & 4 deletions Revolt/Pages/Home/Home.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ struct MaybeChannelView: View {
@Binding var currentChannel: ChannelSelection
@Binding var currentSelection: MainSelection
var toggleSidebar: () -> ()
@Binding var disableScroll: Bool

var body: some View {
switch currentChannel {
Expand All @@ -26,7 +27,8 @@ struct MaybeChannelView: View {
server: currentSelection.id.map { viewState.servers[$0]! },
messages: messages
),
toggleSidebar: toggleSidebar
toggleSidebar: toggleSidebar,
disableScroll: $disableScroll
)

} else {
Expand Down Expand Up @@ -62,6 +64,7 @@ struct HomeRewritten: View {
@State var offset = CGFloat.zero
@State var forceOpen: Bool = false
@State var calculatedSize = CGFloat.zero
@State var disableScroll = false

func toggleSidebar() {
withAnimation {
Expand Down Expand Up @@ -89,7 +92,7 @@ struct HomeRewritten: View {
}
.frame(maxWidth: 300)

MaybeChannelView(currentChannel: $currentChannel, currentSelection: $currentSelection, toggleSidebar: toggleSidebar)
MaybeChannelView(currentChannel: $currentChannel, currentSelection: $currentSelection, toggleSidebar: toggleSidebar, disableScroll: $disableScroll)
.frame(maxWidth: .infinity)
}
} else {
Expand Down Expand Up @@ -119,7 +122,7 @@ struct HomeRewritten: View {
.frame(width: geo.size.width)
.ignoresSafeArea(.all)

MaybeChannelView(currentChannel: $currentChannel, currentSelection: $currentSelection, toggleSidebar: toggleSidebar)
MaybeChannelView(currentChannel: $currentChannel, currentSelection: $currentSelection, toggleSidebar: toggleSidebar, disableScroll: $disableScroll)
.disabled(offset != 0.0)
.offset(x: offset)
.frame(width: geo.size.width)
Expand All @@ -134,6 +137,10 @@ struct HomeRewritten: View {
.simultaneousGesture(
DragGesture(minimumDistance: 50.0)
.onChanged({ g in
if g.translation.width >= 50 {
disableScroll = true
}

if offset > snapSide {
forceOpen = true
} else if offset <= snapSide {
Expand All @@ -145,6 +152,8 @@ struct HomeRewritten: View {
}
})
.onEnded({ v in
disableScroll = false

withAnimation(.easeInOut) {
if forceOpen {
forceOpen = false
Expand All @@ -153,7 +162,8 @@ struct HomeRewritten: View {
offset = .zero
}
}
})
}),
including: .all
)
}
.task { calculatedSize = sidebarWidth }
Expand Down

0 comments on commit 88d5512

Please sign in to comment.