code restyle for poll detail

This commit is contained in:
Flavio Alescio
2023-01-31 16:03:38 +01:00
parent 2407ee9842
commit 2f51f66d5e
11 changed files with 80 additions and 105 deletions
@@ -14,10 +14,10 @@
// limitations under the License.
//
import CommonKit
import SwiftUI
import Combine
import CommonKit
import MatrixSDK
import SwiftUI
struct PollHistoryDetailCoordinatorParameters {
let event: MXEvent
@@ -28,8 +28,6 @@ final class PollHistoryDetailCoordinator: Coordinator, Presentable {
private let parameters: PollHistoryDetailCoordinatorParameters
private let pollHistoryDetailHostingController: UIViewController
private var pollHistoryDetailViewModel: PollHistoryDetailViewModelProtocol
private var indicatorPresenter: UserIndicatorTypePresenterProtocol
private var loadingIndicator: UserIndicator?
// Must be used only internally
var childCoordinators: [Coordinator] = []
@@ -42,12 +40,15 @@ final class PollHistoryDetailCoordinator: Coordinator, Presentable {
let viewModel = PollHistoryDetailViewModel(timelineViewModel: timelinePollCoordinator.viewModel)
let view = PollHistoryDetail(viewModel: viewModel.context)
pollHistoryDetailViewModel = viewModel
pollHistoryDetailHostingController = VectorHostingController(rootView: view)
indicatorPresenter = UserIndicatorTypePresenter(presentingViewController: pollHistoryDetailHostingController)
self.add(childCoordinator: timelinePollCoordinator)
viewModel.completion = { [weak self] result in
add(childCoordinator: timelinePollCoordinator)
}
// MARK: - Public
func start() {
MXLog.debug("[PollHistoryDetailCoordinator] did start.")
pollHistoryDetailViewModel.completion = { [weak self] result in
guard let self = self else { return }
switch result {
case .dismiss:
@@ -58,29 +59,7 @@ final class PollHistoryDetailCoordinator: Coordinator, Presentable {
}
}
// MARK: - Public
func start() {
MXLog.debug("[PollHistoryDetailCoordinator] did start.")
}
func toPresentable() -> UIViewController {
pollHistoryDetailHostingController
}
// MARK: - Private
/// Show an activity indicator whilst loading.
/// - Parameters:
/// - label: The label to show on the indicator.
/// - isInteractionBlocking: Whether the indicator should block any user interaction.
private func startLoading(label: String = VectorL10n.loading, isInteractionBlocking: Bool = true) {
loadingIndicator = indicatorPresenter.present(.loading(label: label, isInteractionBlocking: isInteractionBlocking))
}
/// Hide the currently displayed activity indicator.
private func stopLoading() {
loadingIndicator = nil
}
}
@@ -48,7 +48,6 @@ enum MockPollHistoryDetailScreenState: MockScreenState, CaseIterable {
}
var screenView: ([Any], AnyView) {
let viewModel = PollHistoryDetailViewModel(timelineViewModel: TimelinePollViewModel(timelinePollDetails: poll))
return ([viewModel], AnyView(PollHistoryDetail(viewModel: viewModel.context)))
@@ -25,19 +25,17 @@ enum PollHistoryDetailViewModelResult {
case viewInTimeline
}
// MARK: View model
// MARK: View
struct PollHistoryDetailViewState: BindableState {
var timelineViewModel: TimelinePollViewModelProtocol
var timelineViewModel: TimelinePollViewModelType.Context
var pollStartDate: Date {
timelineViewModel.context.viewState.poll.startDate
timelineViewModel.viewState.poll.startDate
}
var isPollClosed: Bool {
timelineViewModel.context.viewState.poll.closed
timelineViewModel.viewState.poll.closed
}
}
@@ -20,17 +20,14 @@ import SwiftUI
typealias PollHistoryDetailViewModelType = StateStoreViewModel<PollHistoryDetailViewState, PollHistoryDetailViewAction>
class PollHistoryDetailViewModel: PollHistoryDetailViewModelType, PollHistoryDetailViewModelProtocol {
// MARK: - Properties
// MARK: Private
// MARK: Public
var completion: PollHistoryDetailViewModelCallback?
// MARK: - Setup
init(timelineViewModel: TimelinePollViewModelProtocol) {
super.init(initialViewState: PollHistoryDetailViewState(timelineViewModel: timelineViewModel))
super.init(initialViewState: PollHistoryDetailViewState(timelineViewModel: timelineViewModel.context))
}
// MARK: - Public
@@ -43,8 +40,4 @@ class PollHistoryDetailViewModel: PollHistoryDetailViewModelType, PollHistoryDet
completion?(.viewInTimeline)
}
}
// MARK: - TimelinePollViewModelProtocol
}
@@ -17,5 +17,6 @@
import Foundation
protocol PollHistoryDetailViewModelProtocol {
var completion: PollHistoryDetailViewModelCallback? { get set }
var context: PollHistoryDetailViewModelType.Context { get }
}
@@ -23,11 +23,10 @@ class PollHistoryDetailViewModelTests: XCTestCase {
static let counterInitialValue = 0
}
var viewModel: PollHistoryDetailViewModelProtocol!
var viewModel: PollHistoryDetailViewModel!
var context: PollHistoryDetailViewModelType.Context!
override func setUpWithError() throws {
let answerOptions = [TimelinePollAnswerOption(id: "1", text: "1", count: 1, winner: false, selected: false),
TimelinePollAnswerOption(id: "2", text: "2", count: 1, winner: false, selected: false),
TimelinePollAnswerOption(id: "3", text: "3", count: 1, winner: false, selected: false)]
@@ -51,5 +50,18 @@ class PollHistoryDetailViewModelTests: XCTestCase {
func testInitialState() {
XCTAssertFalse(context.viewState.isPollClosed)
}
func testProcessAction() {
viewModel.completion = { result in
XCTAssertEqual(result, .viewInTimeline)
}
viewModel.process(viewAction: .viewInTimeline)
}
func testProcessDismiss() {
viewModel.completion = { result in
XCTAssertEqual(result, .dismiss)
}
viewModel.process(viewAction: .dismiss)
}
}
@@ -17,8 +17,6 @@
import SwiftUI
struct PollHistoryDetail: View {
// MARK: - Properties
// MARK: Private
@Environment(\.theme) private var theme: ThemeSwiftUI
@@ -29,9 +27,6 @@ struct PollHistoryDetail: View {
var body: some View {
navigation
.padding([.horizontal], 16)
.padding([.top, .bottom])
.background(theme.colors.background.ignoresSafeArea())
}
private var navigation: some View {
@@ -45,6 +40,7 @@ struct PollHistoryDetail: View {
}
}
}
private var content: some View {
let timelineViewModel = viewModel.viewState.timelineViewModel
return ScrollView {
@@ -54,17 +50,20 @@ struct PollHistoryDetail: View {
.font(theme.fonts.caption1)
.padding([.top])
.accessibilityIdentifier("PollHistoryDetail.date")
TimelinePollView(viewModel: timelineViewModel.context)
TimelinePollView(viewModel: timelineViewModel)
.navigationTitle(navigationTitle)
.navigationBarTitleDisplayMode(.inline)
.navigationBarBackButtonHidden(true)
.navigationBarItems(leading: btnBack, trailing: btnDone)
.navigationBarItems(leading: backButton, trailing: doneButton)
viewInTimeline
}
}
.padding([.horizontal], 16)
.padding([.top, .bottom])
.background(theme.colors.background.ignoresSafeArea())
}
private var btnBack: some View {
private var backButton: some View {
Button(action: {
viewModel.send(viewAction: .dismiss)
}) {
@@ -73,7 +72,8 @@ struct PollHistoryDetail: View {
.foregroundColor(theme.colors.accent)
}
}
private var btnDone: some View {
private var doneButton: some View {
Button {
viewModel.send(viewAction: .dismiss)
} label: {