Skip to content

Commit

Permalink
Fix #2652 - Room list looping and fighting scrolling after filtering
Browse files Browse the repository at this point in the history
- also fixes filtering empty state vertical centering
  • Loading branch information
stefanceriu committed Apr 23, 2024
1 parent 23d5089 commit 440a6ac
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 23 deletions.
12 changes: 12 additions & 0 deletions ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,18 @@ struct HomeScreenViewState: BindableState {
var shouldShowEmptyFilterState: Bool {
!bindings.isSearchFieldFocused && bindings.filtersState.isFiltering && visibleRooms.isEmpty
}

var shouldShowFilters: Bool {
!bindings.isSearchFieldFocused
}

var shouldShowRecoveryKeyConfirmationBanner: Bool {
securityBannerMode == .recoveryKeyConfirmation
}

var shouldShowInvitesButton: Bool {
!ServiceLocator.shared.settings.roomListInvitesEnabled && hasPendingInvitations && !bindings.isSearchFieldFocused
}
}

struct HomeScreenViewStateBindings {
Expand Down
56 changes: 33 additions & 23 deletions ElementX/Sources/Screens/HomeScreen/View/HomeScreenContent.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
// limitations under the License.
//

import Compound
import SwiftUI

struct HomeScreenContent: View {
Expand Down Expand Up @@ -54,10 +55,7 @@ struct HomeScreenContent: View {
case .rooms:
LazyVStack(spacing: 0) {
Section {
if context.viewState.shouldShowEmptyFilterState {
RoomListFiltersEmptyStateView(state: context.filtersState)
.frame(height: geometry.size.height)
} else {
if !context.viewState.shouldShowEmptyFilterState {
HomeScreenRoomList(context: context)
}
} header: {
Expand Down Expand Up @@ -88,12 +86,19 @@ struct HomeScreenContent: View {
.onChange(of: context.viewState.visibleRooms) { _ in
updateVisibleRange()
}
.background(
Button("", action: {
.background {
Button("") {
context.send(viewAction: .globalSearch)
})
}
.keyboardShortcut(KeyEquivalent("k"), modifiers: [.command])
)
}
.overlay {
if context.viewState.shouldShowEmptyFilterState {
RoomListFiltersEmptyStateView(state: context.filtersState)
.background(.compound.bgCanvasDefault)
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
.scrollDismissesKeyboard(.immediately)
.scrollDisabled(context.viewState.roomListMode == .skeletons)
.scrollBounceBehavior(context.viewState.roomListMode == .empty ? .basedOnSize : .automatic)
Expand All @@ -104,24 +109,29 @@ struct HomeScreenContent: View {

@ViewBuilder
private var topSection: some View {
VStack(spacing: 0) {
if !context.isSearchFieldFocused {
RoomListFiltersView(state: $context.filtersState)
}

if context.viewState.securityBannerMode == .recoveryKeyConfirmation {
HomeScreenRecoveryKeyConfirmationBanner(context: context)
}

if context.viewState.hasPendingInvitations, !context.isSearchFieldFocused, !ServiceLocator.shared.settings.roomListInvitesEnabled {
HomeScreenInvitesButton(title: L10n.actionInvitesList, hasBadge: context.viewState.hasUnreadPendingInvitations) {
context.send(viewAction: .selectInvites)
// An empty VStack causes glitches within the room list
if context.viewState.shouldShowFilters ||
context.viewState.shouldShowRecoveryKeyConfirmationBanner ||
context.viewState.shouldShowInvitesButton {
VStack(spacing: 0) {
if context.viewState.shouldShowFilters {
RoomListFiltersView(state: $context.filtersState)
}

if context.viewState.shouldShowRecoveryKeyConfirmationBanner {
HomeScreenRecoveryKeyConfirmationBanner(context: context)
}

if context.viewState.shouldShowInvitesButton {
HomeScreenInvitesButton(title: L10n.actionInvitesList, hasBadge: context.viewState.hasUnreadPendingInvitations) {
context.send(viewAction: .selectInvites)
}
.accessibilityIdentifier(A11yIdentifiers.homeScreen.invites)
.frame(maxWidth: .infinity, alignment: .trailing)
}
.accessibilityIdentifier(A11yIdentifiers.homeScreen.invites)
.frame(maxWidth: .infinity, alignment: .trailing)
}
.background(Color.compound.bgCanvasDefault)
}
.background(Color.compound.bgCanvasDefault)
}

@ViewBuilder
Expand Down

0 comments on commit 440a6ac

Please sign in to comment.