Files
comaps/iphone/Maps/UI/PlacePage/PlacePageBuilder.swift
Kiryl Kaveryn b79724f248 [ios] implement TrackRecording place page
1. add an new screen (layout)
2. add TR icon for the bottom tabbar
3. share current location from the TR PP
4. refactor TR manager to properly handle state updates and pass them to the LiveActivityManager and PlacePage
5. add init/update with TrackInfo/EleInfo methods to the PlacePageData and PlacePagePreviewData to update the PP state
Signed-off-by: Kiryl Kaveryn <kirylkaveryn@gmail.com>
2025-06-17 11:36:04 +02:00

55 lines
2.5 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:
layout = PlacePageTrackLayout(interactor: interactor, storyboard: storyboard, data: data)
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:
layout = PlacePageTrackLayout(interactor: interactor, storyboard: storyboard, data: data)
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()
}
}