mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
Enable room list invites by default and remove old code paths
This commit is contained in:
committed by
Stefan Ceriu
parent
65310acc64
commit
a401976b2b
@@ -33,7 +33,6 @@ enum HomeScreenCoordinatorAction {
|
||||
case presentFeedbackScreen
|
||||
case presentSecureBackupSettings
|
||||
case presentStartChatScreen
|
||||
case presentInvitesScreen
|
||||
case presentGlobalSearch
|
||||
case presentRoomDirectorySearch
|
||||
case logout
|
||||
@@ -80,8 +79,6 @@ final class HomeScreenCoordinator: CoordinatorProtocol {
|
||||
actionsSubject.send(.logout)
|
||||
case .presentStartChatScreen:
|
||||
actionsSubject.send(.presentStartChatScreen)
|
||||
case .presentInvitesScreen:
|
||||
actionsSubject.send(.presentInvitesScreen)
|
||||
case .presentGlobalSearch:
|
||||
actionsSubject.send(.presentGlobalSearch)
|
||||
case .presentRoomDirectorySearch:
|
||||
|
||||
@@ -26,7 +26,6 @@ enum HomeScreenViewModelAction {
|
||||
case presentSettingsScreen
|
||||
case presentFeedbackScreen
|
||||
case presentStartChatScreen
|
||||
case presentInvitesScreen
|
||||
case presentGlobalSearch
|
||||
case presentRoomDirectorySearch
|
||||
case logout
|
||||
@@ -42,7 +41,6 @@ enum HomeScreenViewAction {
|
||||
case confirmRecoveryKey
|
||||
case skipRecoveryKeyConfirmation
|
||||
case updateVisibleItemRange(range: Range<Int>, isScrolling: Bool)
|
||||
case selectInvites
|
||||
case globalSearch
|
||||
case markRoomAsUnread(roomIdentifier: String)
|
||||
case markRoomAsRead(roomIdentifier: String)
|
||||
@@ -91,7 +89,6 @@ struct HomeScreenViewState: BindableState {
|
||||
var roomListMode: HomeScreenRoomListMode = .skeletons
|
||||
|
||||
var hasPendingInvitations = false
|
||||
var hasUnreadPendingInvitations = false
|
||||
|
||||
var isRoomDirectorySearchEnabled = false
|
||||
|
||||
@@ -129,10 +126,6 @@ struct HomeScreenViewState: BindableState {
|
||||
var shouldShowRecoveryKeyConfirmationBanner: Bool {
|
||||
securityBannerMode == .recoveryKeyConfirmation
|
||||
}
|
||||
|
||||
var shouldShowInvitesButton: Bool {
|
||||
!ServiceLocator.shared.settings.roomListInvitesEnabled && hasPendingInvitations && !bindings.isSearchFieldFocused
|
||||
}
|
||||
}
|
||||
|
||||
struct HomeScreenViewStateBindings {
|
||||
|
||||
@@ -27,7 +27,6 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
|
||||
private let userIndicatorController: UserIndicatorControllerProtocol
|
||||
|
||||
private let roomSummaryProvider: RoomSummaryProviderProtocol?
|
||||
private let inviteSummaryProvider: RoomSummaryProviderProtocol?
|
||||
|
||||
private var migrationCancellable: AnyCancellable?
|
||||
|
||||
@@ -50,7 +49,6 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
|
||||
self.userIndicatorController = userIndicatorController
|
||||
|
||||
roomSummaryProvider = userSession.clientProxy.roomSummaryProvider
|
||||
inviteSummaryProvider = userSession.clientProxy.inviteSummaryProvider
|
||||
|
||||
super.init(initialViewState: .init(userID: userSession.userID),
|
||||
imageProvider: userSession.mediaProvider)
|
||||
@@ -157,8 +155,6 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
|
||||
visibleItemRangePublisher.send((range, isScrolling))
|
||||
case .startChat:
|
||||
actionsSubject.send(.presentStartChatScreen)
|
||||
case .selectInvites:
|
||||
actionsSubject.send(.presentInvitesScreen)
|
||||
case .globalSearch:
|
||||
actionsSubject.send(.presentGlobalSearch)
|
||||
case .markRoomAsUnread(let roomIdentifier):
|
||||
@@ -233,7 +229,7 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
|
||||
}
|
||||
|
||||
private func setupRoomListSubscriptions() {
|
||||
guard let roomSummaryProvider, let inviteSummaryProvider else {
|
||||
guard let roomSummaryProvider else {
|
||||
MXLog.error("Room summary provider unavailable")
|
||||
return
|
||||
}
|
||||
@@ -280,28 +276,6 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
|
||||
self?.installListRangeModifiers()
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
|
||||
inviteSummaryProvider.roomListPublisher
|
||||
.combineLatest(appSettings.$seenInvites)
|
||||
.receive(on: DispatchQueue.main)
|
||||
.sink { [weak self] summaries, seenInvites in
|
||||
self?.state.hasPendingInvitations = !summaries.isEmpty
|
||||
|
||||
let invites = summaries.compactMap(\.id)
|
||||
|
||||
let unreadInvites = summaries.filter { summary in
|
||||
guard let roomID = summary.id else {
|
||||
return false
|
||||
}
|
||||
|
||||
return !seenInvites.contains(roomID)
|
||||
}
|
||||
|
||||
MXLog.info("Received invite list update - invites: \(invites), seenInvites: \(seenInvites), unreadInvites: \(unreadInvites)")
|
||||
|
||||
self?.state.hasUnreadPendingInvitations = !unreadInvites.isEmpty
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
||||
private func updateRoomListMode(with roomSummaryProviderState: RoomSummaryProviderState) {
|
||||
|
||||
@@ -32,11 +32,7 @@ enum RoomListFilter: Int, CaseIterable, Identifiable {
|
||||
case invites
|
||||
|
||||
static var availableFilters: [RoomListFilter] {
|
||||
if ServiceLocator.shared.settings.roomListInvitesEnabled {
|
||||
return RoomListFilter.allCases
|
||||
} else {
|
||||
return RoomListFilter.allCases.filter { !($0 == .invites) }
|
||||
}
|
||||
RoomListFilter.allCases
|
||||
}
|
||||
|
||||
var localizedName: String {
|
||||
|
||||
@@ -111,8 +111,7 @@ struct HomeScreenContent: View {
|
||||
private var topSection: some View {
|
||||
// An empty VStack causes glitches within the room list
|
||||
if context.viewState.shouldShowFilters ||
|
||||
context.viewState.shouldShowRecoveryKeyConfirmationBanner ||
|
||||
context.viewState.shouldShowInvitesButton {
|
||||
context.viewState.shouldShowRecoveryKeyConfirmationBanner {
|
||||
VStack(spacing: 0) {
|
||||
if context.viewState.shouldShowFilters {
|
||||
RoomListFiltersView(state: $context.filtersState)
|
||||
@@ -121,14 +120,6 @@ struct HomeScreenContent: View {
|
||||
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)
|
||||
}
|
||||
}
|
||||
.background(Color.compound.bgCanvasDefault)
|
||||
}
|
||||
|
||||
@@ -112,13 +112,11 @@ struct HomeScreenInviteCell: View {
|
||||
context.send(viewAction: .declineInvite(roomIdentifier: room.id))
|
||||
}
|
||||
.buttonStyle(.compound(.secondary, size: .medium))
|
||||
.accessibilityIdentifier(A11yIdentifiers.invitesScreen.decline)
|
||||
|
||||
Button(L10n.actionAccept) {
|
||||
context.send(viewAction: .acceptInvite(roomIdentifier: room.id))
|
||||
}
|
||||
.buttonStyle(.compound(.primary, size: .medium))
|
||||
.accessibilityIdentifier(A11yIdentifiers.invitesScreen.accept)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
//
|
||||
// Copyright 2023 New Vector Ltd
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct HomeScreenInvitesButton: View {
|
||||
let title: String
|
||||
let hasBadge: Bool
|
||||
let action: () -> Void
|
||||
|
||||
var body: some View {
|
||||
Button(action: action) {
|
||||
HStack(spacing: 8.0) {
|
||||
Text(title)
|
||||
.foregroundColor(.compound.textPrimary)
|
||||
.font(.compound.bodyMDSemibold)
|
||||
|
||||
if hasBadge {
|
||||
badge
|
||||
}
|
||||
}
|
||||
.padding(.trailing, 16.0)
|
||||
.padding(.leading, 64.0)
|
||||
.padding(.vertical, 8.0)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
private var badge: some View {
|
||||
Circle()
|
||||
.scaledFrame(size: 12)
|
||||
.foregroundColor(.compound.iconAccentTertiary)
|
||||
}
|
||||
}
|
||||
|
||||
struct HomeScreenInvitesButton_Previews: PreviewProvider, TestablePreview {
|
||||
static var previews: some View {
|
||||
HomeScreenInvitesButton(title: "Invites", hasBadge: true, action: { })
|
||||
.previewDisplayName("Badge on")
|
||||
|
||||
HomeScreenInvitesButton(title: "Invites", hasBadge: false, action: { })
|
||||
.previewDisplayName("Badge off")
|
||||
|
||||
HomeScreenInvitesButton(title: "Invites", hasBadge: true, action: { })
|
||||
.previewDisplayName("Badge on (AX1)")
|
||||
.dynamicTypeSize(.accessibility1)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user