aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2022-02-08 22:44:45 -0600
committerIván Ávalos <avalos@disroot.org>2022-02-08 22:44:45 -0600
commitaa8dd06acac37244420d5dcb6b83c74153563ae5 (patch)
tree84dfb94af224c4c3e82d68f2502ef81a6a152ea2
parent27dbbfbe9bb98391b3f74ffd7d22465984df2237 (diff)
downloadetbsa-trackermap-mobile-aa8dd06acac37244420d5dcb6b83c74153563ae5.tar.gz
etbsa-trackermap-mobile-aa8dd06acac37244420d5dcb6b83c74153563ae5.tar.bz2
etbsa-trackermap-mobile-aa8dd06acac37244420d5dcb6b83c74153563ae5.zip
Avoid refetching position in DetailsView on every init
-rw-r--r--iosApp/iosApp.xcodeproj/project.pbxproj4
-rw-r--r--iosApp/iosApp/Details/DetailsView.swift37
-rw-r--r--iosApp/iosApp/Details/DetailsViewModel.swift31
-rw-r--r--iosApp/iosApp/Units/UnitsView.swift2
-rw-r--r--iosApp/iosApp/Units/UnitsViewModel.swift4
5 files changed, 18 insertions, 60 deletions
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 = "<group>"; };
E396281B27AF56BA005D070E /* WhirlyGlobe.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = WhirlyGlobe.xcframework; sourceTree = "<group>"; };
E396281F27AF59F2005D070E /* DetailsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailsView.swift; sourceTree = "<group>"; };
- E396282127AF66A3005D070E /* DetailsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailsViewModel.swift; sourceTree = "<group>"; };
E396282327AFBD3D005D070E /* UnitInformationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnitInformationView.swift; sourceTree = "<group>"; };
E396282527AFBD4E005D070E /* UnitReportsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnitReportsView.swift; sourceTree = "<group>"; };
E396282727AFBD72005D070E /* UnitCommandsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnitCommandsView.swift; sourceTree = "<group>"; };
@@ -172,7 +170,6 @@
E35A078627AB619000F24D71 /* Information */,
E35A078527AB618700F24D71 /* Commands */,
E396281F27AF59F2005D070E /* DetailsView.swift */,
- E396282127AF66A3005D070E /* DetailsViewModel.swift */,
);
path = Details;
sourceTree = "<group>";
@@ -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<Bool>, action: DeviceRow.Action, forId id: Int32?) {
+ init(isPresented: Binding<Bool>, 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 <avalos@disroot.org>, Henoch Ojeda <imhenoch@protonmail.com>
- *
- * 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 <http://www.gnu.org/licenses/>.
- */
-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
}
}