/** * TrackerMap * Copyright (C) 2021-2022 Iván Ávalos , Henoch Ojeda * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ import SwiftUI import Combine import WhirlyGlobeMaplyComponent import shared struct MapView: UIViewControllerRepresentable { typealias UIViewControllerType = MapViewController @Binding var layer: MapLayer @Binding var markers: [Marker] @Binding var selected: Marker? var markerCallback: MarkerCallback? class Coordinator { var shouldCenter: Bool = true } func makeCoordinator() -> Coordinator { return Coordinator() } func makeUIViewController(context: Context) -> MapViewController { let mapVC = MapViewController() mapVC.markerCallback = markerCallback mapVC.mapLayer = layer return mapVC } func updateUIViewController(_ uiViewController: MapViewController, context: Context) { // MARK: - Set map layer uiViewController.setMapLayer(layer) // MARK: - Set markers uiViewController.display(markers: markers, isReport: false, center: context.coordinator.shouldCenter) context.coordinator.shouldCenter = false // MARK: - Center selected marker if let selected = selected { uiViewController.focusOn(marker: selected) self.selected = nil } } static func dismantleUIViewController(_ uiViewController: MapViewController, coordinator: Coordinator) { uiViewController.dismantle() } }