diff --git a/RiotSwiftUI/Modules/Room/UserSuggestion/Service/Mock/MockUserSuggestionScreenState.swift b/RiotSwiftUI/Modules/Room/UserSuggestion/Service/Mock/MockUserSuggestionScreenState.swift index 6c1796d45..7897c608d 100644 --- a/RiotSwiftUI/Modules/Room/UserSuggestion/Service/Mock/MockUserSuggestionScreenState.swift +++ b/RiotSwiftUI/Modules/Room/UserSuggestion/Service/Mock/MockUserSuggestionScreenState.swift @@ -23,6 +23,8 @@ import SwiftUI enum MockUserSuggestionScreenState: MockScreenState, CaseIterable { case multipleResults + static private var members: [RoomMembersProviderMember]! + var screenType: Any.Type { MockUserSuggestionScreenState.self } @@ -46,7 +48,11 @@ enum MockUserSuggestionScreenState: MockScreenState, CaseIterable { @available(iOS 14.0, *) extension MockUserSuggestionScreenState: RoomMembersProviderProtocol { func fetchMembers(_ members: ([RoomMembersProviderMember]) -> Void) { - members(generateUsersWithCount(10)) + if Self.members == nil { + Self.members = generateUsersWithCount(10) + } + + members(Self.members) } private func generateUsersWithCount(_ count: UInt) -> [RoomMembersProviderMember] { diff --git a/RiotSwiftUI/Modules/Room/UserSuggestion/Service/UserSuggestionService.swift b/RiotSwiftUI/Modules/Room/UserSuggestion/Service/UserSuggestionService.swift index e4f95c98e..fac8265ba 100644 --- a/RiotSwiftUI/Modules/Room/UserSuggestion/Service/UserSuggestionService.swift +++ b/RiotSwiftUI/Modules/Room/UserSuggestion/Service/UserSuggestionService.swift @@ -74,21 +74,13 @@ class UserSuggestionService: UserSuggestionServiceProtocol { // MARK: - UserSuggestionServiceProtocol func processTextMessage(_ textMessage: String?) { - self.items.send([]) - self.currentTextTriggerSubject.send(nil) - - guard let textMessage = textMessage, textMessage.count > 0 else { - return - } - - let components = textMessage.components(separatedBy: .whitespaces) - - guard let lastComponent = components.last else { - return - } - - // Partial username should start with one and only one "@" character - guard lastComponent.prefix(while: { $0 == "@" }).count == 1 else { + guard let textMessage = textMessage, + textMessage.count > 0, + let lastComponent = textMessage.components(separatedBy: .whitespaces).last, + lastComponent.prefix(while: { $0 == "@" }).count == 1 // Partial username should start with one and only one "@" character + else { + self.items.send([]) + self.currentTextTriggerSubject.send(nil) return } diff --git a/RiotSwiftUI/Modules/Room/UserSuggestion/View/UserSuggestionList.swift b/RiotSwiftUI/Modules/Room/UserSuggestion/View/UserSuggestionList.swift index 5693615ec..2e1d3c331 100644 --- a/RiotSwiftUI/Modules/Room/UserSuggestion/View/UserSuggestionList.swift +++ b/RiotSwiftUI/Modules/Room/UserSuggestion/View/UserSuggestionList.swift @@ -20,6 +20,11 @@ import SwiftUI @available(iOS 14.0, *) struct UserSuggestionList: View { + private struct Constants { + static let rowHeight: CGFloat = 60.0 + static let maxHeight: CGFloat = 300.0 + static let listItemPadding: CGFloat = 4.0 + } // MARK: - Properties @@ -30,9 +35,6 @@ struct UserSuggestionList: View { // MARK: Public @ObservedObject var viewModel: UserSuggestionViewModel.Context - // FIXME: This should be dynamic - let rowHeight: CGFloat = 60.0 - let maxHeight: CGFloat = 300.0 var body: some View { BackgroundView { @@ -45,13 +47,12 @@ struct UserSuggestionList: View { displayName: item.displayName, userId: item.id ) - .padding([.top, .bottom], 4.0) + .padding([.top, .bottom], Constants.listItemPadding) } } .listStyle(PlainListStyle()) - .environment(\.defaultMinListRowHeight, rowHeight) - .frame(height: min(maxHeight, rowHeight * CGFloat(viewModel.viewState.items.count))) -// .frame(maxHeight: maxHeight) + .environment(\.defaultMinListRowHeight, Constants.rowHeight) + .frame(height: min(Constants.maxHeight, Constants.rowHeight * CGFloat(viewModel.viewState.items.count))) .id(UUID()) // Rebuild the whole list on item changes. Fixes performance issues. } }