62 lines
No EOL
1.9 KiB
TypeScript
62 lines
No EOL
1.9 KiB
TypeScript
import State from "../../../State";
|
|
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<ChangeDescription[]> {
|
|
|
|
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,
|
|
{
|
|
theme: State.state?.layoutToUse?.id ?? "unkown",
|
|
changeType: "soft-delete"
|
|
}
|
|
).CreateChangeDescriptions(changes)
|
|
}
|
|
}
|
|
|
|
} |