added view poll in timeline button

This commit is contained in:
Flavio Alescio 2023-01-25 10:27:21 +01:00
parent 4567e5476d
commit 96538f80e7
7 changed files with 39 additions and 10 deletions

View file

@ -2311,7 +2311,7 @@ Tap the + to start adding people.";
"poll_history_no_past_poll_text" = "There are no past polls in this room";
"poll_history_no_active_poll_period_text" = "There are no active polls for the past %@ days. Load more polls to view polls for previous months";
"poll_history_no_past_poll_period_text" = "There are no past polls for the past %@ days. Load more polls to view polls for previous months";
"poll_history_detail_view_in_timeline" = "View poll in timeline";
// MARK: - Polls
"poll_edit_form_create_poll" = "Create poll";

View file

@ -4851,6 +4851,10 @@ public class VectorL10n: NSObject {
public static var pollHistoryActiveSegmentTitle: String {
return VectorL10n.tr("Vector", "poll_history_active_segment_title")
}
/// View poll in timeline
public static var pollHistoryDetailViewInTimeline: String {
return VectorL10n.tr("Vector", "poll_history_detail_view_in_timeline")
}
/// Displaying polls
public static var pollHistoryLoadingText: String {
return VectorL10n.tr("Vector", "poll_history_loading_text")

View file

@ -69,6 +69,10 @@ final class PollHistoryCoordinator: NSObject, Coordinator, Presentable {
case .dismiss:
self.toPresentable().dismiss(animated: true)
self.remove(childCoordinator: coordinator)
case .viewInTimeline:
self.toPresentable().dismiss(animated: true)
self.remove(childCoordinator: coordinator)
// TODO: go back in timeline
}
}

View file

@ -41,6 +41,7 @@ final class PollHistoryDetailCoordinator: Coordinator, Presentable {
init(parameters: PollHistoryDetailCoordinatorParameters) throws {
self.parameters = parameters
let timelinePollCoordinator = try TimelinePollCoordinator(parameters: .init(session: parameters.session, room: parameters.room, pollEvent: parameters.event))
let viewModel = PollHistoryDetailViewModel(pollHistoryDetails: parameters.pollHistoryDetails, timelineViewModel: timelinePollCoordinator.viewModel)
let view = PollHistoryDetail(viewModel: viewModel.context)
pollHistoryDetailViewModel = viewModel
@ -48,12 +49,14 @@ final class PollHistoryDetailCoordinator: Coordinator, Presentable {
pollHistoryDetailHostingController = VectorHostingController(rootView: view)
indicatorPresenter = UserIndicatorTypePresenter(presentingViewController: pollHistoryDetailHostingController)
self.add(childCoordinator: timelinePollCoordinator)
viewModel.completion = { [weak self] result in
guard let self = self else { return }
switch result {
case .dismiss:
self.completion?(.dismiss)
case .viewInTimeline:
self.completion?(.viewInTimeline)
}
}
}

View file

@ -22,6 +22,7 @@ typealias PollHistoryDetailViewModelCallback = (PollHistoryDetailViewModelResult
enum PollHistoryDetailViewModelResult {
case dismiss
case viewInTimeline
}
// MARK: View model
@ -37,4 +38,5 @@ struct PollHistoryDetailViewState: BindableState {
enum PollHistoryDetailViewAction {
case dismiss
case viewInTimeline
}

View file

@ -39,6 +39,8 @@ class PollHistoryDetailViewModel: PollHistoryDetailViewModelType, PollHistoryDet
switch viewAction {
case .dismiss:
completion?(.dismiss)
case .viewInTimeline:
completion?(.viewInTimeline)
}
}

View file

@ -47,21 +47,35 @@ struct PollHistoryDetail: View {
}
private var content: some View {
let timelineViewModel = viewModel.viewState.timelineViewModel
return TimelinePollView(viewModel: timelineViewModel.context)
.navigationTitle(navigationTitle)
.navigationBarTitleDisplayMode(.inline)
.navigationBarBackButtonHidden(true)
.navigationBarItems(leading: btnBack)
return VStack {
TimelinePollView(viewModel: timelineViewModel.context)
.navigationTitle(navigationTitle)
.navigationBarTitleDisplayMode(.inline)
.navigationBarBackButtonHidden(true)
.navigationBarItems(leading: btnBack)
viewInTimeline
}
}
private var btnBack : some View { Button(action: {
viewModel.send(viewAction: .dismiss)
private var btnBack : some View {
Button(action: {
viewModel.send(viewAction: .dismiss)
}) {
HStack {
Image(systemName: "xmark") //"chevron.left"
.aspectRatio(contentMode: .fit)
.foregroundColor(theme.colors.accent)
}
}
private var viewInTimeline: some View {
HStack {
Button {
viewModel.send(viewAction: .viewInTimeline)
} label: {
Text(VectorL10n.pollHistoryDetailViewInTimeline)
}
.accentColor(theme.colors.accent)
Spacer()
}
}