Join room by address (#3840)

* Implemented join room by address

* improved the text field typing

* some improvements to how the text is edited

* remove navigation link

* moved room directory search to the start chat flow

* updated preview tests

* added unit tests and improved the code

* updated strings

* some pr suggestions:

- moving the file
- changing the name of the action
- reintroduce the debounce text queries
- add comments

* renamed the auth text field style to Element

updated tests
This commit is contained in:
Mauro
2025-02-28 13:35:15 +01:00
committed by GitHub
parent 2b58f57483
commit 7f6ea1c2ae
54 changed files with 611 additions and 340 deletions
@@ -12,16 +12,18 @@ enum StartChatScreenErrorType: Error {
case unknown
}
enum StartChatScreenViewModelAction {
enum StartChatScreenViewModelAction: Equatable {
case close
case createRoom
case openRoom(withIdentifier: String)
case showRoom(withIdentifier: String)
case openRoomDirectorySearch
}
struct StartChatScreenViewState: BindableState {
let userID: String
var bindings = StartChatScreenViewStateBindings()
var usersSection: UserDiscoverySection = .init(type: .suggestions, users: [])
var isRoomDirectoryEnabled = false
var isSearching: Bool {
!bindings.searchQuery.isEmpty
@@ -30,15 +32,19 @@ struct StartChatScreenViewState: BindableState {
var hasEmptySearchResults: Bool {
isSearching && usersSection.type == .searchResult && usersSection.users.isEmpty
}
var joinByAddressState: JoinByAddressState = .example
}
struct StartChatScreenViewStateBindings {
var searchQuery = ""
var roomAddress = ""
/// Information describing the currently displayed alert.
var alertInfo: AlertInfo<StartChatScreenErrorType>?
var selectedUserToInvite: UserProfileProxy?
var isJoinRoomByAddressSheetPresented = false
}
enum StartChatScreenViewAction {
@@ -46,4 +52,13 @@ enum StartChatScreenViewAction {
case createRoom
case createDM(user: UserProfileProxy)
case selectUser(UserProfileProxy)
case joinRoomByAddress
case openRoomDirectorySearch
}
enum JoinByAddressState: Equatable {
case example
case invalidAddress
case addressNotFound
case addressFound(address: String, roomID: String)
}