From aa8dd06acac37244420d5dcb6b83c74153563ae5 Mon Sep 17 00:00:00 2001 From: Iván Ávalos Date: Tue, 8 Feb 2022 22:44:45 -0600 Subject: Avoid refetching position in DetailsView on every init --- iosApp/iosApp.xcodeproj/project.pbxproj | 4 --- iosApp/iosApp/Details/DetailsView.swift | 37 +++++++++++----------------- iosApp/iosApp/Details/DetailsViewModel.swift | 31 ----------------------- iosApp/iosApp/Units/UnitsView.swift | 2 +- iosApp/iosApp/Units/UnitsViewModel.swift | 4 +-- 5 files changed, 18 insertions(+), 60 deletions(-) delete mode 100644 iosApp/iosApp/Details/DetailsViewModel.swift diff --git a/iosApp/iosApp.xcodeproj/project.pbxproj b/iosApp/iosApp.xcodeproj/project.pbxproj index f18e5b2..2be5d57 100644 --- a/iosApp/iosApp.xcodeproj/project.pbxproj +++ b/iosApp/iosApp.xcodeproj/project.pbxproj @@ -31,7 +31,6 @@ E396281D27AF5723005D070E /* WhirlyGlobe.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E396281B27AF56BA005D070E /* WhirlyGlobe.xcframework */; }; E396281E27AF5723005D070E /* WhirlyGlobe.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E396281B27AF56BA005D070E /* WhirlyGlobe.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; E396282027AF59F2005D070E /* DetailsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E396281F27AF59F2005D070E /* DetailsView.swift */; }; - E396282227AF66A3005D070E /* DetailsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E396282127AF66A3005D070E /* DetailsViewModel.swift */; }; E396282427AFBD3D005D070E /* UnitInformationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E396282327AFBD3D005D070E /* UnitInformationView.swift */; }; E396282627AFBD4E005D070E /* UnitReportsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E396282527AFBD4E005D070E /* UnitReportsView.swift */; }; E396282827AFBD72005D070E /* UnitCommandsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E396282727AFBD72005D070E /* UnitCommandsView.swift */; }; @@ -80,7 +79,6 @@ E38F241F27A27B550069FC45 /* LoadingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadingView.swift; sourceTree = ""; }; E396281B27AF56BA005D070E /* WhirlyGlobe.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = WhirlyGlobe.xcframework; sourceTree = ""; }; E396281F27AF59F2005D070E /* DetailsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailsView.swift; sourceTree = ""; }; - E396282127AF66A3005D070E /* DetailsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailsViewModel.swift; sourceTree = ""; }; E396282327AFBD3D005D070E /* UnitInformationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnitInformationView.swift; sourceTree = ""; }; E396282527AFBD4E005D070E /* UnitReportsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnitReportsView.swift; sourceTree = ""; }; E396282727AFBD72005D070E /* UnitCommandsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnitCommandsView.swift; sourceTree = ""; }; @@ -172,7 +170,6 @@ E35A078627AB619000F24D71 /* Information */, E35A078527AB618700F24D71 /* Commands */, E396281F27AF59F2005D070E /* DetailsView.swift */, - E396282127AF66A3005D070E /* DetailsViewModel.swift */, ); path = Details; sourceTree = ""; @@ -357,7 +354,6 @@ E33A236727A64E4500DD647F /* MarkerTransformations.swift in Sources */, E38F241527A242870069FC45 /* Inject.swift in Sources */, E39ABC4827A4EDEC00965D05 /* DeviceRow.swift in Sources */, - E396282227AF66A3005D070E /* DetailsViewModel.swift in Sources */, E396282827AFBD72005D070E /* UnitCommandsView.swift in Sources */, E38F241C27A26DD70069FC45 /* RootViewModel.swift in Sources */, E3385A4F27B0D8A10025311C /* UnitCommandsViewModel.swift in Sources */, diff --git a/iosApp/iosApp/Details/DetailsView.swift b/iosApp/iosApp/Details/DetailsView.swift index 25c8611..2c7418b 100644 --- a/iosApp/iosApp/Details/DetailsView.swift +++ b/iosApp/iosApp/Details/DetailsView.swift @@ -19,37 +19,30 @@ import SwiftUI import shared struct DetailsView: View { - @ObservedObject var detailsViewModel = DetailsViewModel() - @Binding var isPresented: Bool @State var action: DeviceRow.Action - var id: Int32? + var unit: UnitInformation? - init(isPresented: Binding, action: DeviceRow.Action, forId id: Int32?) { + init(isPresented: Binding, action: DeviceRow.Action, for unit: UnitInformation?) { self._isPresented = isPresented self.action = action - self.id = id - if let id = id { - self.detailsViewModel.fetchUnit(id: id) - } + self.unit = unit } var body: some View { NavigationView { VStack { - if id != nil { - if let unit = detailsViewModel.unit { - switch action { - case .details: - UnitInformationView(unit: unit) - case .reports: - UnitReportsView(unit: unit) - case .commands: - UnitCommandsView(unit: unit) - } - } else { - LoadingView() + if let unit = unit { + switch action { + case .details: + UnitInformationView(unit: unit) + case .reports: + UnitReportsView(unit: unit) + case .commands: + UnitCommandsView(unit: unit) } + } else { + LoadingView() } } .navigationBarTitleView( @@ -61,11 +54,11 @@ struct DetailsView: View { EmptyView() }.pickerStyle(SegmentedPickerStyle()) ) - .navigationTitle(detailsViewModel.unit?.device.name ?? NSLocalizedString("loading", comment: "")) + .navigationTitle(unit?.device.name ?? NSLocalizedString("loading", comment: "")) .navigationBarTitleDisplayMode(.large) .toolbar { ToolbarItem(placement: .navigationBarLeading) { - if let category = detailsViewModel.unit?.device.category { + if let category = unit?.device.category { let type = Marker.companion .categoryToMarkerType(category: category) Image(MarkerTransformations.markerTypeToImageName(markerType: type)) diff --git a/iosApp/iosApp/Details/DetailsViewModel.swift b/iosApp/iosApp/Details/DetailsViewModel.swift deleted file mode 100644 index ce9165c..0000000 --- a/iosApp/iosApp/Details/DetailsViewModel.swift +++ /dev/null @@ -1,31 +0,0 @@ -/** - * 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 Foundation -import shared - -class DetailsViewModel: ObservableObject { - @Inject var unitsController: UnitsController - - @Published var unit: UnitInformation? - - func fetchUnit(id: Int32) { - unitsController.getUnit(deviceId: id) { unit, _ in - self.unit = unit - } - } -} diff --git a/iosApp/iosApp/Units/UnitsView.swift b/iosApp/iosApp/Units/UnitsView.swift index c0899df..d813c6d 100644 --- a/iosApp/iosApp/Units/UnitsView.swift +++ b/iosApp/iosApp/Units/UnitsView.swift @@ -79,7 +79,7 @@ struct UnitsView: View { } content: { DetailsView(isPresented: $unitsViewModel.showDetails, action: unitsViewModel.detailsAction, - forId: unitsViewModel.detailsId) + for: unitsViewModel.detailsUnit) } } diff --git a/iosApp/iosApp/Units/UnitsViewModel.swift b/iosApp/iosApp/Units/UnitsViewModel.swift index 878ccc9..7ffcfd1 100644 --- a/iosApp/iosApp/Units/UnitsViewModel.swift +++ b/iosApp/iosApp/Units/UnitsViewModel.swift @@ -41,7 +41,7 @@ class UnitsViewModel: ObservableObject { } } - var detailsId: Int32? = nil + var detailsUnit: UnitInformation? = nil var detailsAction = DeviceRow.Action.details @Published var searchQuery = "" { @@ -128,7 +128,7 @@ class UnitsViewModel: ObservableObject { func show(action: DeviceRow.Action, for unit: UnitInformation) { detailsAction = action - detailsId = unit.device.id + detailsUnit = unit showDetails = true } } -- cgit v1.2.3