Public Search View (#2585)

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>
This commit is contained in:
Mauro
2024-03-21 15:34:35 +01:00
committed by GitHub
parent a62c96f1c5
commit 562e5e739d
44 changed files with 954 additions and 35 deletions
@@ -35,6 +35,7 @@ enum HomeScreenCoordinatorAction {
case presentStartChatScreen
case presentInvitesScreen
case presentGlobalSearch
case presentRoomDirectorySearch
case logout
}
@@ -83,6 +84,8 @@ final class HomeScreenCoordinator: CoordinatorProtocol {
actionsSubject.send(.presentInvitesScreen)
case .presentGlobalSearch:
actionsSubject.send(.presentGlobalSearch)
case .presentRoomDirectorySearch:
actionsSubject.send(.presentRoomDirectorySearch)
}
}
.store(in: &cancellables)
@@ -28,6 +28,7 @@ enum HomeScreenViewModelAction {
case presentStartChatScreen
case presentInvitesScreen
case presentGlobalSearch
case presentRoomDirectorySearch
case logout
}
@@ -46,6 +47,7 @@ enum HomeScreenViewAction {
case markRoomAsUnread(roomIdentifier: String)
case markRoomAsRead(roomIdentifier: String)
case markRoomAsFavourite(roomIdentifier: String, isFavourite: Bool)
case selectRoomDirectorySearch
}
enum HomeScreenRoomListMode: CustomStringConvertible {
@@ -88,6 +90,8 @@ struct HomeScreenViewState: BindableState {
var hasPendingInvitations = false
var hasUnreadPendingInvitations = false
var isRoomDirectorySearchEnabled = false
var selectedRoomID: String?
var visibleRooms: [HomeScreenRoom] {
@@ -94,6 +94,10 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
.sink { [weak self] _ in self?.updateRooms() }
.store(in: &cancellables)
appSettings.$publicSearchEnabled
.weakAssign(to: \.state.isRoomDirectorySearchEnabled, on: self)
.store(in: &cancellables)
let isSearchFieldFocused = context.$viewState.map(\.bindings.isSearchFieldFocused)
let searchQuery = context.$viewState.map(\.bindings.searchQuery)
let activeFilters = context.$viewState.map(\.bindings.filtersState.activeFilters)
@@ -177,6 +181,8 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
Task {
await markRoomAsFavourite(roomIdentifier, isFavourite: isFavourite)
}
case .selectRoomDirectorySearch:
actionsSubject.send(.presentRoomDirectorySearch)
}
}
@@ -25,6 +25,10 @@ struct HomeScreenRoomList: View {
// avoids glitches when focusing the search bar
if !context.viewState.shouldHideRoomList {
content
} else if context.viewState.isRoomDirectorySearchEnabled {
RoomDirectorySearchView {
context.send(viewAction: .selectRoomDirectorySearch)
}
}
}
@@ -0,0 +1,37 @@
//
// Copyright 2024 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 Compound
import SwiftUI
struct RoomDirectorySearchView: View {
let onTap: () -> Void
var body: some View {
Button(action: onTap) {
Label(L10n.screenRoomlistRoomDirectoryButtonTitle, icon: \.listBulleted)
}
.buttonStyle(.compound(.secondary))
.padding(.horizontal, 16)
.padding(.vertical, 8)
}
}
struct RoomDirectorySearchView_Previews: PreviewProvider, TestablePreview {
static var previews: some View {
RoomDirectorySearchView { }
}
}