Skip to content

Commit 365cd9d

Browse files
authored
[MBL-2539] Open project page from PPO project details cell (#2639)
* Reroute backing details to open project page * Rename backingDetails to projectDetails * Open project page as pageSheet
1 parent ffcda02 commit 365cd9d

File tree

5 files changed

+35
-18
lines changed

5 files changed

+35
-18
lines changed

Kickstarter-iOS/Features/PledgedProjectsOverview/CardView/PPOProjectCard.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ struct PPOProjectCard: View {
88
@StateObject var viewModel: PPOProjectCardViewModel
99
var parentSize: CGSize
1010

11-
var onViewBackingDetails: ((PPOProjectCardModel) -> Void)? = nil
11+
var onViewProjectDetails: ((PPOProjectCardModel) -> Void)? = nil
1212
var onSendMessage: ((PPOProjectCardModel) -> Void)? = nil
1313
var onPerformAction: ((PPOProjectCardModel, PPOProjectCardModel.Action) -> Void)? = nil
1414

@@ -41,7 +41,7 @@ struct PPOProjectCard: View {
4141

4242
// Handle actions
4343
.onReceive(self.viewModel.viewBackingDetailsTapped) {
44-
self.onViewBackingDetails?(self.viewModel.card)
44+
self.onViewProjectDetails?(self.viewModel.card)
4545
}
4646
.onReceive(self.viewModel.sendMessageTapped) {
4747
self.onSendMessage?(self.viewModel.card)

Kickstarter-iOS/Features/PledgedProjectsOverview/PPOContainerViewController.swift

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import Foundation
33
import KDS
44
import KsApi
55
import Library
6+
import Prelude
67
import Stripe
78
import SwiftUI
89

@@ -74,7 +75,9 @@ public class PPOContainerViewController: PagedContainerViewController<PPOContain
7475
switch nav {
7576
case .backedProjects:
7677
tabBarController?.switchToProfile()
77-
case let .editAddress(url), let .survey(url), let .backingDetails(url), let .managePledge(url):
78+
case let .projectDetails(projectId):
79+
self?.openProjectPage(projectId)
80+
case let .editAddress(url), let .survey(url), let .managePledge(url):
7881
self?.openSurvey(url)
7982
case let .contactCreator(messageSubject):
8083
self?.messageCreator(messageSubject)
@@ -173,6 +176,20 @@ public class PPOContainerViewController: PagedContainerViewController<PPOContain
173176
self.navigationController?.present(nav, animated: true)
174177
}
175178

179+
private func openProjectPage(_ projectId: Int) {
180+
let projectParam = Either<Project, any ProjectPageParam>(right: Param.id(projectId))
181+
let vc = ProjectPageViewController.configuredWith(
182+
projectOrParam: projectParam,
183+
refInfo: nil
184+
)
185+
186+
let nav = UINavigationController(rootViewController: vc)
187+
nav.modalPresentationStyle = .pageSheet
188+
nav.presentationController?.delegate = self
189+
190+
self.present(nav, animated: true, completion: nil)
191+
}
192+
176193
private func messageCreator(_ messageSubject: MessageSubject) {
177194
let vc = MessageDialogViewController.configuredWith(messageSubject: messageSubject, context: .backerModal)
178195
let nav = UINavigationController(rootViewController: vc)

Kickstarter-iOS/Features/PledgedProjectsOverview/PPOView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ struct PPOView: View {
4949
PPOProjectCard(
5050
viewModel: card,
5151
parentSize: parentSize,
52-
onViewBackingDetails: { card in
53-
self.viewModel.viewBackingDetails(from: card)
52+
onViewProjectDetails: { card in
53+
self.viewModel.viewProjectDetails(from: card)
5454
},
5555
onSendMessage: { card in
5656
self.viewModel.contactCreator(from: card)

Kickstarter-iOS/Features/PledgedProjectsOverview/PPOViewModel.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ protocol PPOViewModelInputs {
2727
)
2828
func openSurvey(from: PPOProjectCardModel)
2929
func managePledge(from: PPOProjectCardModel)
30-
func viewBackingDetails(from: PPOProjectCardModel)
30+
func viewProjectDetails(from: PPOProjectCardModel)
3131
func editAddress(from: PPOProjectCardModel)
3232
func confirmAddress(from: PPOProjectCardModel, address: String, addressId: String)
3333
func contactCreator(from: PPOProjectCardModel)
@@ -44,7 +44,7 @@ enum PPONavigationEvent: Equatable {
4444
case fix3DSChallenge(clientSecret: String, onProgress: (PPOActionState) -> Void)
4545
case survey(url: String)
4646
case managePledge(url: String)
47-
case backingDetails(url: String)
47+
case projectDetails(projectId: Int)
4848
case editAddress(url: String)
4949
case confirmAddress(
5050
backingId: String,
@@ -60,8 +60,8 @@ enum PPONavigationEvent: Equatable {
6060
return lhsUrl == rhsUrl
6161
case let (.managePledge(lhsUrl), .managePledge(rhsUrl)):
6262
return lhsUrl == rhsUrl
63-
case let (.backingDetails(lhsUrl), .backingDetails(rhsUrl)):
64-
return lhsUrl == rhsUrl
63+
case let (.projectDetails(lhsId), .projectDetails(rhsId)):
64+
return lhsId == rhsId
6565
case let (.editAddress(lhsUrl), .editAddress(rhsUrl)):
6666
return lhsUrl == rhsUrl
6767
case let (.contactCreator(lhsSubject), .contactCreator(rhsSubject)):
@@ -168,8 +168,8 @@ final class PPOViewModel: ObservableObject, PPOViewModelInputs, PPOViewModelOutp
168168
self.managePledgeSubject
169169
.map { viewModel in PPONavigationEvent.managePledge(url: viewModel.backingDetailsUrl) }
170170
.eraseToAnyPublisher(),
171-
self.viewBackingDetailsSubject
172-
.map { viewModel in PPONavigationEvent.survey(url: viewModel.backingDetailsUrl) }
171+
self.viewProjectDetailsSubject
172+
.map { viewModel in PPONavigationEvent.projectDetails(projectId: viewModel.projectId) }
173173
.eraseToAnyPublisher(),
174174
self.editAddressSubject
175175
.map { viewModel in PPONavigationEvent.editAddress(url: viewModel.backingDetailsUrl) }
@@ -339,8 +339,8 @@ final class PPOViewModel: ObservableObject, PPOViewModelInputs, PPOViewModelOutp
339339
self.managePledgeSubject.send(from)
340340
}
341341

342-
func viewBackingDetails(from: PPOProjectCardModel) {
343-
self.viewBackingDetailsSubject.send(from)
342+
func viewProjectDetails(from: PPOProjectCardModel) {
343+
self.viewProjectDetailsSubject.send(from)
344344
}
345345

346346
func editAddress(from: PPOProjectCardModel) {
@@ -378,7 +378,7 @@ final class PPOViewModel: ObservableObject, PPOViewModelInputs, PPOViewModelOutp
378378
>()
379379
private let openSurveySubject = PassthroughSubject<PPOProjectCardModel, Never>()
380380
private let managePledgeSubject = PassthroughSubject<PPOProjectCardModel, Never>()
381-
private let viewBackingDetailsSubject = PassthroughSubject<PPOProjectCardModel, Never>()
381+
private let viewProjectDetailsSubject = PassthroughSubject<PPOProjectCardModel, Never>()
382382
private let editAddressSubject = PassthroughSubject<PPOProjectCardModel, Never>()
383383
private let confirmAddressSubject = PassthroughSubject<(PPOProjectCardModel, String, String), Never>()
384384
private let confirmAddressProgressSubject = PassthroughSubject<

Kickstarter-iOS/Features/PledgedProjectsOverview/PPOViewModelTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -325,11 +325,11 @@ class PPOViewModelTests: XCTestCase {
325325
)
326326
}
327327

328-
func testNavigationViewBackingDetails() {
328+
func testNavigationViewProjectDetails() {
329329
self.verifyNavigationEvent(
330-
// This could be tested with any template. All cards allow the user to view backing details.
331-
{ self.viewModel.openSurvey(from: PPOProjectCardModel.fixPaymentTemplate) },
332-
event: .survey(url: PPOProjectCardModel.fixPaymentTemplate.backingDetailsUrl)
330+
// This could be tested with any template. All cards allow the user to view project details.
331+
{ self.viewModel.viewProjectDetails(from: PPOProjectCardModel.fixPaymentTemplate) },
332+
event: .projectDetails(projectId: PPOProjectCardModel.fixPaymentTemplate.projectId)
333333
)
334334
}
335335

0 commit comments

Comments
 (0)