44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
import { ChangeDescription } from "./ChangeDescription"
|
|
import OsmChangeAction from "./OsmChangeAction"
|
|
import { Changes } from "../Changes"
|
|
|
|
export default class ChangeLocationAction extends OsmChangeAction {
|
|
private readonly _id: number
|
|
private readonly _newLonLat: [number, number]
|
|
private readonly _meta: { theme: string; reason: string }
|
|
|
|
constructor(
|
|
id: string,
|
|
newLonLat: [number, number],
|
|
meta: {
|
|
theme: string
|
|
reason: string
|
|
}
|
|
) {
|
|
super(id, true)
|
|
if (!id.startsWith("node/")) {
|
|
throw "Invalid ID: only 'node/number' is accepted"
|
|
}
|
|
this._id = Number(id.substring("node/".length))
|
|
this._newLonLat = newLonLat
|
|
this._meta = meta
|
|
}
|
|
|
|
protected async CreateChangeDescriptions(changes: Changes): Promise<ChangeDescription[]> {
|
|
const d: ChangeDescription = {
|
|
changes: {
|
|
lat: this._newLonLat[1],
|
|
lon: this._newLonLat[0],
|
|
},
|
|
type: "node",
|
|
id: this._id,
|
|
meta: {
|
|
changeType: "move",
|
|
theme: this._meta.theme,
|
|
specialMotivation: this._meta.reason,
|
|
},
|
|
}
|
|
|
|
return [d]
|
|
}
|
|
}
|