forked from MapComplete/MapComplete
80 lines
2.5 KiB
TypeScript
80 lines
2.5 KiB
TypeScript
import * as all_layers from "../../../public/assets/generated/themes/personal.json"
|
|
import ThemeConfig from "../../Models/ThemeConfig/ThemeConfig"
|
|
import { OsmObject } from "../../Logic/Osm/OsmObject"
|
|
|
|
export class HistoryUtils {
|
|
public static readonly personalTheme = new ThemeConfig(<any>all_layers, true)
|
|
private static ignoredLayers = new Set<string>(["fixme"])
|
|
public static determineLayer(properties: Record<string, string>) {
|
|
return this.personalTheme.getMatchingLayer(properties, this.ignoredLayers)
|
|
}
|
|
|
|
public static tagHistoryDiff(
|
|
step: OsmObject,
|
|
history: OsmObject[]
|
|
): {
|
|
key: string
|
|
value?: string
|
|
oldValue?: string
|
|
step: OsmObject
|
|
}[] {
|
|
const previous = history[step.version - 2]
|
|
if (!previous) {
|
|
return Object.keys(step.tags)
|
|
.filter((key) => !key.startsWith("_") && key !== "id")
|
|
.map((key) => ({
|
|
key,
|
|
value: step.tags[key],
|
|
step,
|
|
}))
|
|
}
|
|
const previousTags = previous.tags
|
|
return Object.keys(step.tags)
|
|
.filter((key) => !key.startsWith("_"))
|
|
.map((key) => {
|
|
const value = step.tags[key]
|
|
const oldValue = previousTags[key]
|
|
return {
|
|
key,
|
|
value,
|
|
oldValue,
|
|
step,
|
|
}
|
|
})
|
|
.filter((ch) => ch.oldValue !== ch.value)
|
|
}
|
|
|
|
public static fullHistoryDiff(
|
|
histories: OsmObject[][],
|
|
onlyShowUsername?: Set<string>
|
|
): {
|
|
key: string
|
|
value?: string
|
|
oldValue?: string
|
|
step: OsmObject
|
|
}[] {
|
|
const allDiffs: {
|
|
key: string
|
|
value?: string
|
|
oldValue?: string
|
|
step: OsmObject
|
|
}[] = []
|
|
for (const history of histories) {
|
|
const filtered = history.filter(
|
|
(step) =>
|
|
!onlyShowUsername || onlyShowUsername?.has(step.tags["_last_edit:contributor"])
|
|
)
|
|
for (const step of filtered) {
|
|
const diff: {
|
|
key: string
|
|
value?: string
|
|
oldValue?: string
|
|
step: OsmObject
|
|
}[] = HistoryUtils.tagHistoryDiff(step, history)
|
|
allDiffs.push(...diff)
|
|
}
|
|
}
|
|
|
|
return allDiffs
|
|
}
|
|
}
|