mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 01:20:12 +00:00
Introduced MemberDetailsProvider, caching user avatar urls and images. Various other tweaks and improvements.
This commit is contained in:
@@ -17,8 +17,8 @@
|
||||
import SwiftUI
|
||||
|
||||
struct RoomScreenCoordinatorParameters {
|
||||
let roomProxy: RoomProxyProtocol
|
||||
let mediaProvider: MediaProviderProtocol
|
||||
let timelineController: RoomTimelineControllerProtocol
|
||||
let roomName: String?
|
||||
}
|
||||
|
||||
final class RoomScreenCoordinator: Coordinator, Presentable {
|
||||
@@ -42,14 +42,10 @@ final class RoomScreenCoordinator: Coordinator, Presentable {
|
||||
init(parameters: RoomScreenCoordinatorParameters) {
|
||||
self.parameters = parameters
|
||||
|
||||
let timelineProvider = RoomTimelineProvider(roomProxy: parameters.roomProxy)
|
||||
let timelineController = RoomTimelineController(timelineProvider: timelineProvider,
|
||||
timelineItemFactory: RoomTimelineItemFactory(mediaProvider: parameters.mediaProvider),
|
||||
mediaProvider: parameters.mediaProvider)
|
||||
let viewModel = RoomScreenViewModel(timelineController: parameters.timelineController,
|
||||
timelineViewFactory: RoomTimelineViewFactory(),
|
||||
roomName: parameters.roomName)
|
||||
|
||||
let viewModel = RoomScreenViewModel(roomProxy: parameters.roomProxy,
|
||||
timelineController: timelineController,
|
||||
timelineViewFactory: RoomTimelineViewFactory())
|
||||
let view = RoomScreen(context: viewModel.context)
|
||||
roomScreenViewModel = viewModel
|
||||
roomScreenHostingController = UIHostingController(rootView: view)
|
||||
|
||||
@@ -18,8 +18,8 @@ import SwiftUI
|
||||
|
||||
@available(iOS 14, *)
|
||||
typealias RoomScreenViewModelType = StateStoreViewModel<RoomScreenViewState,
|
||||
Never,
|
||||
RoomScreenViewAction>
|
||||
Never,
|
||||
RoomScreenViewAction>
|
||||
@available(iOS 14, *)
|
||||
class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol {
|
||||
|
||||
@@ -27,22 +27,19 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
|
||||
static let backPaginationPageSize: UInt = 30
|
||||
}
|
||||
|
||||
private let roomProxy: RoomProxyProtocol
|
||||
private let timelineController: RoomTimelineControllerProtocol
|
||||
private let timelineViewFactory: RoomTimelineViewFactory
|
||||
|
||||
// MARK: - Setup
|
||||
|
||||
init(roomProxy: RoomProxyProtocol,
|
||||
timelineController: RoomTimelineControllerProtocol,
|
||||
timelineViewFactory: RoomTimelineViewFactory) {
|
||||
self.roomProxy = roomProxy
|
||||
|
||||
init(timelineController: RoomTimelineControllerProtocol,
|
||||
timelineViewFactory: RoomTimelineViewFactory,
|
||||
roomName: String?) {
|
||||
self.timelineController = timelineController
|
||||
self.timelineViewFactory = timelineViewFactory
|
||||
|
||||
super.init(initialViewState: RoomScreenViewState())
|
||||
super.init(initialViewState: RoomScreenViewState(roomTitle: roomName ?? "💥"))
|
||||
|
||||
state.roomTitle = roomProxy.name ?? ""
|
||||
buildTimelineViews()
|
||||
|
||||
timelineController.callbacks.sink { [weak self] callback in
|
||||
|
||||
@@ -240,9 +240,9 @@ private class TableViewObserver: NSObject, UITableViewDelegate {
|
||||
|
||||
struct RoomScreen_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
let viewModel = RoomScreenViewModel(roomProxy: MockRoomProxy(displayName: "Test"),
|
||||
timelineController: MockRoomTimelineController(),
|
||||
timelineViewFactory: RoomTimelineViewFactory())
|
||||
let viewModel = RoomScreenViewModel(timelineController: MockRoomTimelineController(),
|
||||
timelineViewFactory: RoomTimelineViewFactory(),
|
||||
roomName: "Preview room")
|
||||
|
||||
RoomScreen(context: viewModel.context)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user