// // LocationsAddViewModel.swift // Locations // // Created by Javier Cicchelli on 11/04/2023. // Copyright © 2023 Röck+Cöde. All rights reserved. // import Combine import Core class LocationsAddViewModel: ObservableObject { // MARK: Properties weak var coordinator: LocationsAddCoordination? @Published private var location: Location? @Published private var locationExists: Bool = false private let saveLocalLocation = SaveLocalLocationUseCase() // MARK: Initialisers init(coordinator: LocationsAddCoordination) { self.coordinator = coordinator setupBindings() } } // MARK: - LocationsAddViewModeling extension LocationsAddViewModel: LocationsAddViewModeling { // MARK: Properties var locationExistsPublisher: Published.Publisher { $locationExists } // MARK: Functions func cleanLocation() { location = nil } func saveLocation() { guard let location else { return } saveLocalLocation( latitude: location.latitude, longitude: location.longitude ) coordinator?.closeLocationsAddScreen() } func setLocation(latitude: Float, longitude: Float) { if location == nil { location = .init(latitude: latitude, longitude: longitude) } else { location?.latitude = latitude location?.longitude = longitude } } } // MARK: - Helpers private extension LocationsAddViewModel { // MARK: Functions func setupBindings() { $location .map { $0 != nil } .assign(to: &$locationExists) } } // MARK: - Structs private extension LocationsAddViewModel { struct Location { var latitude: Float var longitude: Float } }