diff options
Diffstat (limited to 'iosApp/iosApp/Units/UnitsView.swift')
-rw-r--r-- | iosApp/iosApp/Units/UnitsView.swift | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/iosApp/iosApp/Units/UnitsView.swift b/iosApp/iosApp/Units/UnitsView.swift new file mode 100644 index 0000000..0ad84d9 --- /dev/null +++ b/iosApp/iosApp/Units/UnitsView.swift @@ -0,0 +1,87 @@ +/** + * 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 SwiftUI +import SwiftUIX +import shared + +struct UnitsView: View { + @StateObject var unitsViewModel = UnitsViewModel() + @State var shouldShowMenu = false + + var body: some View { + NavigationView { + TabView(selection: $unitsViewModel.unitsDisplayMode, content: { + MapView(unitsViewModel: unitsViewModel) + .tabItem { + Image(systemName: "map") + Text("map") + } + .tag(UnitsViewModel.UnitsDisplayMode.map) + DevicesView(unitsViewModel: unitsViewModel) + .tabItem { + Image(systemName: "list.bullet") + Text("devices") + } + .tag(UnitsViewModel.UnitsDisplayMode.list) + }) + .navigationTitle(getNavigationTitle(unitsViewModel.unitsDisplayMode)) + .navigationBarTitleDisplayMode(.inline) + .navigationSearchBar { + SearchBar(NSLocalizedString("search", comment: ""), + text: $unitsViewModel.searchQuery, + isEditing: $unitsViewModel.isEditing, + onCommit: {}) + .showsCancelButton(unitsViewModel.isEditing) + .onCancel { + unitsViewModel.searchQuery = "" + } + } + .navigationSearchBarHiddenWhenScrolling(false) + .toolbar { + ToolbarItem(placement: .navigationBarTrailing) { + Menu { + Picker (selection: $unitsViewModel.mapLayerType, label: Text("map-layer")) { + Text("openstreetmap") + .tag(MapLayer.companion.layers[MapLayer.Type_.streets]!) + Text("satellite") + .tag(MapLayer.companion.layers[MapLayer.Type_.satellite]!) + } + } label: { + Image(systemName: "square.stack.3d.up") + } + .visible(unitsViewModel.unitsDisplayMode == .map) + } + ToolbarItem(placement: .navigationBarTrailing) { + Button(action: {}) { + Image(systemName: "person") + } + } + } + } + .navigationViewStyle(StackNavigationViewStyle()) + } + + private func getNavigationTitle(_ unitDisplayMode: UnitsViewModel.UnitsDisplayMode) -> LocalizedStringKey { + switch unitDisplayMode { + case .list: + return "devices" + case .map: + return "map" + } + } +} |