MapComplete/Logic/Osm/Actions/DeleteAction.ts

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

62 lines
1.9 KiB
TypeScript
Raw Normal View History

import { OsmObject } from "../OsmObject"
import OsmChangeAction from "./OsmChangeAction"
import { Changes } from "../Changes"
import { ChangeDescription } from "./ChangeDescription"
import ChangeTagAction from "./ChangeTagAction"
import { TagsFilter } from "../../Tags/TagsFilter"
import { And } from "../../Tags/And"
import { Tag } from "../../Tags/Tag"
export default class DeleteAction extends OsmChangeAction {
private readonly _softDeletionTags: TagsFilter
private readonly meta: {
theme: string
specialMotivation: string
changeType: "deletion"
}
private readonly _id: string
private _hardDelete: boolean
2022-09-08 21:40:48 +02:00
constructor(
id: string,
softDeletionTags: TagsFilter,
meta: {
theme: string
specialMotivation: string
},
hardDelete: boolean
) {
2022-01-26 21:40:38 +01:00
super(id, true)
this._id = id
this._hardDelete = hardDelete
this.meta = { ...meta, changeType: "deletion" }
this._softDeletionTags = new And([
softDeletionTags,
new Tag(
"fixme",
`A mapcomplete user marked this feature to be deleted (${meta.specialMotivation})`
2022-09-08 21:40:48 +02:00
),
])
}
2021-12-23 03:36:03 +01:00
public async CreateChangeDescriptions(changes: Changes): Promise<ChangeDescription[]> {
const osmObject = await OsmObject.DownloadObjectAsync(this._id)
if (this._hardDelete) {
return [
{
meta: this.meta,
doDelete: true,
type: osmObject.type,
id: osmObject.id,
2022-09-08 21:40:48 +02:00
},
]
} else {
return await new ChangeTagAction(this._id, this._softDeletionTags, osmObject.tags, {
2022-01-26 21:40:38 +01:00
...this.meta,
changeType: "soft-delete",
}).CreateChangeDescriptions(changes)
}
}
}