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 constructor( id: string, softDeletionTags: TagsFilter, meta: { theme: string specialMotivation: string }, hardDelete: boolean ) { 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})` ), ]) } public async CreateChangeDescriptions(changes: Changes): Promise { const osmObject = await OsmObject.DownloadObjectAsync(this._id) if (this._hardDelete) { return [ { meta: this.meta, doDelete: true, type: osmObject.type, id: osmObject.id, }, ] } else { return await new ChangeTagAction(this._id, this._softDeletionTags, osmObject.tags, { ...this.meta, changeType: "soft-delete", }).CreateChangeDescriptions(changes) } } }