Skip to content

Commit ce9db73

Browse files
author
Achyut Kumar M
committed
modify getUndoItems and delete element after undo operation
1 parent 70fd558 commit ce9db73

File tree

2 files changed

+26
-11
lines changed

2 files changed

+26
-11
lines changed

GoInfoGame/GoInfoGame/UI/Utils/UndoSidebarView.swift

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,11 @@ struct UndoSidebarView: View {
2626
.foregroundColor(.gray)
2727
}
2828
}
29-
30-
Button("Undo") {
31-
MapUndoManager.shared.undo(for: 44, type: .node)
32-
}
33-
.foregroundColor(.blue)
34-
.padding(.top, 4)
35-
36-
29+
3730
ScrollView {
3831
ForEach(undoItems) { item in
3932
VStack(alignment: .leading, spacing: 4) {
40-
Text("\(item.type == .way ? "Way" : "Node") #\(item.elementId)")
33+
Text("\(item.type == .way ? "Way" : "Node") #\(String(item.elementId))")
4134
.font(.subheadline)
4235
.bold()
4336

GoInfoGame/GoInfoGame/quests/QuestUndoManager.swift

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@ class MapUndoManager {
4949
realm.delete(changeset)
5050
}
5151
}
52+
53+
if let edited = DatabaseConnector.shared.getWay(id: Int(id), version: .edited) {
54+
try? realm.write {
55+
realm.delete(edited)
56+
}
57+
}
5258

5359
case .node:
5460
guard let original = DatabaseConnector.shared.getNode(id: Int(id), version: .original),
@@ -72,6 +78,12 @@ class MapUndoManager {
7278
realm.delete(changeset)
7379
}
7480
}
81+
82+
if let edited = DatabaseConnector.shared.getNode(id: Int(id), version: .edited) {
83+
try? realm.write {
84+
realm.delete(edited)
85+
}
86+
}
7587

7688
default:
7789
print(" Unknown element type")
@@ -81,12 +93,22 @@ class MapUndoManager {
8193
func getUndoItems() -> [UndoItem] {
8294
let changesets = DatabaseConnector.shared.getChangesets(synced: true)
8395

96+
var seen = Set<String>()
97+
8498
return changesets.compactMap { cs in
8599
guard let type = cs.elementType.toElementType() else { return nil }
86-
let changedKeys = cs.tags.map { $0.key }
87-
return UndoItem(elementId: Int(cs.elementId) ?? -1, type: type, changedKeys: changedKeys)
100+
let key = "\(cs.elementId)-\(type)"
101+
102+
if seen.contains(key) {
103+
return nil // Skip duplicates
104+
} else {
105+
seen.insert(key)
106+
let changedKeys = cs.tags.map { $0.key }
107+
return UndoItem(elementId: Int(cs.elementId) ?? -1, type: type, changedKeys: changedKeys)
108+
}
88109
}
89110
}
111+
90112
}
91113

92114
extension Map where Key == String, Value == String {

0 commit comments

Comments
 (0)