Skip to content

Commit 8f37987

Browse files
authored
Merge pull request #165 from TaskarCenterAtUW/feature-hide-quest
Hide osw element
2 parents f4e6617 + 846b615 commit 8f37987

File tree

5 files changed

+53
-14
lines changed

5 files changed

+53
-14
lines changed

GoInfoGame/GoInfoGame/AppQuestManager.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class AppQuestManager {
7979
// Create a duplicate of the quest
8080
// Create a display Unit
8181
let duplicateQuest = quest.quest.copyWithElement(element: nodeElement!)
82-
let unit = DisplayUnitWithCoordinate(displayUnit: duplicateQuest.displayUnit, coordinateInfo: CLLocationCoordinate2D(latitude: nodeElement!.position.latitude, longitude: nodeElement!.position.longitude), id: nodeElement!.id)
82+
let unit = DisplayUnitWithCoordinate(displayUnit: duplicateQuest.displayUnit, coordinateInfo: CLLocationCoordinate2D(latitude: nodeElement!.position.latitude, longitude: nodeElement!.position.longitude), id: nodeElement!.id, isHidden: false)
8383
return unit
8484
}
8585
}
@@ -94,7 +94,7 @@ class AppQuestManager {
9494
// Need to add another here.
9595
let duplicateQuest = quest.quest.copyWithElement(element: wayElement!)
9696
let position = dbInstance.getCenterForWay(id: String(wayElement!.id)) ?? CLLocationCoordinate2D()
97-
let unit = DisplayUnitWithCoordinate(displayUnit: duplicateQuest.displayUnit, coordinateInfo: position, id: wayElement!.id)
97+
let unit = DisplayUnitWithCoordinate(displayUnit: duplicateQuest.displayUnit, coordinateInfo: position, id: wayElement!.id, isHidden: false)
9898
return unit
9999
}
100100
}
@@ -144,7 +144,7 @@ class AppQuestManager {
144144
// Create a duplicate of the quest
145145
// Create a display Unit
146146
let duplicateQuest = quest.quest.copyWithElement(element: node)
147-
let unit = DisplayUnitWithCoordinate(displayUnit: duplicateQuest.displayUnit, coordinateInfo: CLLocationCoordinate2D(latitude: node.position.latitude, longitude: node.position.longitude), id: node.id)
147+
let unit = DisplayUnitWithCoordinate(displayUnit: duplicateQuest.displayUnit, coordinateInfo: CLLocationCoordinate2D(latitude: node.position.latitude, longitude: node.position.longitude), id: node.id, isHidden: false)
148148
displayUnits.append(unit)
149149
nodeQuests.append(duplicateQuest)
150150
break
@@ -160,7 +160,7 @@ class AppQuestManager {
160160
// Need to add another here.
161161
let duplicateQuest = quest.quest.copyWithElement(element: way)
162162
let position = dbInstance.getCenterForWay(id: String(way.id)) ?? CLLocationCoordinate2D()
163-
let unit = DisplayUnitWithCoordinate(displayUnit: duplicateQuest.displayUnit, coordinateInfo: position, id: way.id)
163+
let unit = DisplayUnitWithCoordinate(displayUnit: duplicateQuest.displayUnit, coordinateInfo: position, id: way.id, isHidden: false)
164164
displayUnits.append(unit)
165165
// if(quest is SideWalkWidth){
166166
// if let q = quest as? SideWalkWidth {

GoInfoGame/GoInfoGame/UI/Map/CustomMap.swift

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ struct CustomMap: UIViewRepresentable {
1616
var region: MKCoordinateRegion
1717
var userLocation = CLLocationCoordinate2D(latitude: 17.4700, longitude: 78.3534)
1818
@Binding var trackingMode: MapUserTrackingMode
19-
var items: [DisplayUnitWithCoordinate]
19+
@Binding var items: [DisplayUnitWithCoordinate]
2020
@Binding var selectedQuest: DisplayUnit?
2121
@Binding var shouldShowPolyline: Bool
2222
@Binding var isPresented: Bool
@@ -274,19 +274,26 @@ struct CustomMap: UIViewRepresentable {
274274
context.coordinator.isRegionSet = true
275275

276276

277-
let annotations = items.map({$0.annotation})
277+
let visibleAnnotations = items
278+
.filter { !$0.isHidden }
279+
.map { $0.annotation }
278280

279281
if (existingCoordinates.isEmpty) {
280282
// print("Adding annotations completely")
281283

282284
// for (index, annotation) in annotations.enumerated() {
283285
// annotation.coordinate = adjustCoordinateForOverlap(annotation.coordinate, with: index)
284286
// }
285-
mapView.addAnnotations(annotations)
287+
mapView.addAnnotations(visibleAnnotations)
286288
}
287289

288290
let currentAnnotations = Set(mapView.annotations.compactMap { $0 as? DisplayUnitAnnotation })
289-
let newAnnotations = Set(items.map({$0.annotation}))
291+
292+
let currentVisibleAnnotations = items
293+
.filter { !$0.isHidden }
294+
.map { $0.annotation }
295+
296+
let newAnnotations = Set(currentVisibleAnnotations)
290297

291298
let annotationsToRemove = currentAnnotations.subtracting(newAnnotations)
292299
let annotationsToAdd = newAnnotations.subtracting(currentAnnotations)

GoInfoGame/GoInfoGame/UI/Map/MapView.swift

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,20 @@ struct MapView: View {
2424

2525
@State private var selectedDetent: PresentationDetent = .fraction(0.8)
2626

27+
@State private var showPopover = false
28+
2729
@AppStorage("baseUrl") var baseUrl = ""
2830

2931
var body: some View {
3032
ZStack{
3133
CustomMap(region: viewModel.region,
3234
userLocation: viewModel.userlocation,
3335
trackingMode: $trackingMode,
34-
items: viewModel.items,
36+
items: $viewModel.items,
3537
selectedQuest: $viewModel.selectedQuest,
3638
shouldShowPolyline: $shouldShowPolyline,
3739

38-
isPresented: $isPresented, contextualInfo: { contextualInfo in
40+
isPresented: $showPopover, contextualInfo: { contextualInfo in
3941
print(contextualInfo)
4042
selectedDetent = .fraction(0.8)
4143
self.setContextualInfo(contextualinfo: contextualInfo)
@@ -114,6 +116,28 @@ struct MapView: View {
114116
}
115117
.toolbarBackground(.visible, for: .navigationBar)
116118

119+
.popover(isPresented: $showPopover) {
120+
VStack {
121+
Button("Hide Quest") {
122+
viewModel.hideQuest(elementId: viewModel.selectedQuest!.parent!.displayUnit.id)
123+
showPopover = false
124+
}
125+
.padding()
126+
127+
Button("Answer Quest") {
128+
showPopover = false
129+
isPresented = true
130+
}
131+
.padding()
132+
}
133+
.onAppear {
134+
shouldShowPolyline = true
135+
}
136+
.frame(width: 200, height: 100)
137+
.presentationDetents([.fraction(0.5)])
138+
}
139+
140+
117141
.sheet(isPresented: $isPresented, content: {
118142
let selectedQuest = self.viewModel.selectedQuest
119143
CustomSheetView {
@@ -123,9 +147,7 @@ struct MapView: View {
123147
.scrollDisabled(false)
124148
.interactiveDismissDisabled()
125149
.environmentObject(contextualInfo)
126-
.onAppear {
127-
shouldShowPolyline = true
128-
}
150+
129151
})
130152
.onReceive(MapViewPublisher.shared.dismissSheet) { scenario in
131153

GoInfoGame/GoInfoGame/UI/Map/MapViewModel.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,15 @@ class MapViewModel: ObservableObject {
9595
}
9696
// }
9797
}
98+
99+
func hideQuest(elementId: String) {
100+
print(elementId)
101+
let questId = elementId.components(separatedBy: "-").first ?? ""
102+
if let toBeHidden = self.items.first(where: {$0.id == Int(questId)!}) {
103+
let index = self.items.firstIndex(where: {$0.id == Int(questId)!})
104+
items[index!].isHidden = true
105+
}
106+
}
98107

99108
private func boundingBoxAroundLocation(location: CLLocationCoordinate2D, distance: CLLocationDistance) -> BBox {
100109
let region = MKCoordinateRegion(center: location, latitudinalMeters: distance, longitudinalMeters: distance)

GoInfoGame/GoInfoGame/quests/QuestsRepository.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ class QuestsRepository: ObservableObject {
102102
return DisplayUnitWithCoordinate(
103103
displayUnit: quest.quest.displayUnit,
104104
coordinateInfo: randomCoordinate,
105-
id:Int64.random(in: 2...90000)
105+
id:Int64.random(in: 2...90000), isHidden: false
106106
)
107107
}
108108
}
@@ -165,6 +165,7 @@ struct DisplayUnitWithCoordinate: Identifiable {
165165
let displayUnit: DisplayUnit
166166
let coordinateInfo: CLLocationCoordinate2D
167167
let id: Int64
168+
var isHidden: Bool
168169

169170
var annotation: DisplayUnitAnnotation {
170171
return DisplayUnitAnnotation(displayUnit: displayUnit, coordinate: coordinateInfo)

0 commit comments

Comments
 (0)