58 lines
2.7 KiB
Swift
58 lines
2.7 KiB
Swift
@objc class PlacePageBuilder: NSObject {
|
|
@objc static func build(for data: PlacePageData) -> PlacePageViewController {
|
|
let storyboard = UIStoryboard.instance(.placePage)
|
|
guard let viewController = storyboard.instantiateInitialViewController() as? PlacePageViewController else {
|
|
fatalError()
|
|
}
|
|
viewController.isPreviewPlus = data.isPreviewPlus
|
|
let interactor = PlacePageInteractor(viewController: viewController,
|
|
data: data,
|
|
mapViewController: MapViewController.shared()!)
|
|
let layout: IPlacePageLayout
|
|
switch data.objectType {
|
|
case .POI, .bookmark:
|
|
layout = PlacePageCommonLayout(interactor: interactor, storyboard: storyboard, data: data)
|
|
case .track:
|
|
let trackLayout = PlacePageTrackLayout(interactor: interactor, storyboard: storyboard, data: data)
|
|
interactor.trackActivePointPresenter = trackLayout.elevationMapViewController?.presenter
|
|
layout = trackLayout
|
|
case .trackRecording:
|
|
layout = PlacePageTrackRecordingLayout(interactor: interactor, storyboard: storyboard, data: data)
|
|
@unknown default:
|
|
fatalError()
|
|
}
|
|
let presenter = PlacePagePresenter(view: viewController, headerView: layout.headerViewController)
|
|
viewController.setLayout(layout)
|
|
viewController.interactor = interactor
|
|
interactor.presenter = presenter
|
|
layout.presenter = presenter
|
|
return viewController
|
|
}
|
|
|
|
@objc static func update(_ viewController: PlacePageViewController, with data: PlacePageData) {
|
|
viewController.isPreviewPlus = data.isPreviewPlus
|
|
let interactor = PlacePageInteractor(viewController: viewController,
|
|
data: data,
|
|
mapViewController: MapViewController.shared()!)
|
|
let layout: IPlacePageLayout
|
|
let storyboard = viewController.storyboard!
|
|
switch data.objectType {
|
|
case .POI, .bookmark:
|
|
layout = PlacePageCommonLayout(interactor: interactor, storyboard: storyboard, data: data)
|
|
case .track:
|
|
let trackLayout = PlacePageTrackLayout(interactor: interactor, storyboard: storyboard, data: data)
|
|
interactor.trackActivePointPresenter = trackLayout.elevationMapViewController?.presenter
|
|
layout = trackLayout
|
|
case .trackRecording:
|
|
layout = PlacePageTrackRecordingLayout(interactor: interactor, storyboard: storyboard, data: data)
|
|
@unknown default:
|
|
fatalError()
|
|
}
|
|
let presenter = PlacePagePresenter(view: viewController, headerView: layout.headerViewController)
|
|
viewController.interactor = interactor
|
|
interactor.presenter = presenter
|
|
layout.presenter = presenter
|
|
viewController.updateWithLayout(layout)
|
|
viewController.updatePreviewOffset()
|
|
}
|
|
}
|