Themes: disable 'disused' from delete config, delete less fast for shops but use softdeletion instead

This commit is contained in:
Pieter Vander Vennet 2024-01-29 17:51:12 +01:00
parent 53ea4273df
commit 28e737ed2e
5 changed files with 37 additions and 13 deletions

View file

@ -637,12 +637,27 @@
"softDeletionTags": { "softDeletionTags": {
"and": [ "and": [
"shop=", "shop=",
"phone=",
"website=",
"email=",
"opening_hours=",
"disused:shop:={shop}" "disused:shop:={shop}"
] ]
}, },
"extraDeleteReasons": [ "omitDefaultDeleteReasons": ["disused"],
"nonDeleteMappings": [
{ {
"explanation": { "if": {
"and": [
"shop=",
"phone=",
"website=",
"email=",
"opening_hours=",
"disused:shop:={shop}"
]
},
"then": {
"nl": "{title()} is permanent gestopt", "nl": "{title()} is permanent gestopt",
"en": "{title()} has closed down permanently", "en": "{title()} has closed down permanently",
"de": "{title()} wurde dauerhaft geschlossen", "de": "{title()} wurde dauerhaft geschlossen",
@ -650,8 +665,7 @@
"fr": "{title()} a fermé définitivement", "fr": "{title()} a fermé définitivement",
"ca": "{title()} ha tancat permanentment", "ca": "{title()} ha tancat permanentment",
"cs": "{title()} je trvale uzavřen" "cs": "{title()} je trvale uzavřen"
}, }
"changesetMessage": "shop_closed"
} }
] ]
}, },

View file

@ -35,11 +35,9 @@ export default class DeleteConfig {
explanation: TypedTranslation<object> | Translation explanation: TypedTranslation<object> | Translation
changesetMessage: string changesetMessage: string
}[] }[]
private readonly nonDeleteMappings?: { if: TagConfigJson; then: Translation }[]
public readonly softDeletionTags?: TagsFilter public readonly softDeletionTags?: TagsFilter
public readonly neededChangesets?: number public readonly neededChangesets?: number
private readonly nonDeleteMappings?: { if: TagConfigJson; then: Translation }[]
constructor(json: DeleteConfigJson, context: string) { constructor(json: DeleteConfigJson, context: string) {
this.deleteReasons = (json.extraDeleteReasons ?? []).map((reason, i) => { this.deleteReasons = (json.extraDeleteReasons ?? []).map((reason, i) => {
@ -53,8 +51,17 @@ export default class DeleteConfig {
} }
}) })
if (!json.omitDefaultDeleteReasons) { {
for (const defaultDeleteReason of DeleteConfig.defaultDeleteReasons) { let deleteReasons = DeleteConfig.defaultDeleteReasons
if (json.omitDefaultDeleteReasons === true) {
deleteReasons = []
} else if (json.omitDefaultDeleteReasons) {
const forbidden = <string[]>json.omitDefaultDeleteReasons
deleteReasons = deleteReasons.filter(
(dl) => forbidden.indexOf(dl.changesetMessage) < 0
)
}
for (const defaultDeleteReason of deleteReasons) {
this.deleteReasons.push({ this.deleteReasons.push({
changesetMessage: defaultDeleteReason.changesetMessage, changesetMessage: defaultDeleteReason.changesetMessage,
explanation: explanation:
@ -117,6 +124,7 @@ export default class DeleteConfig {
mappings, mappings,
id: "why-delete", id: "why-delete",
} }
console.log("Delete config", config)
return new TagRenderingConfig(config) return new TagRenderingConfig(config)
} }
} }

View file

@ -1,4 +1,5 @@
import { TagConfigJson } from "./TagConfigJson" import { TagConfigJson } from "./TagConfigJson"
import { UploadableTag } from "../../../Logic/Tags/TagUtils"
export interface DeleteConfigJson { export interface DeleteConfigJson {
/*** /***
@ -100,5 +101,5 @@ export interface DeleteConfigJson {
* iffalse: Show the default delete reasons * iffalse: Show the default delete reasons
* ifunset: Show the default delete reasons (default behaviour) * ifunset: Show the default delete reasons (default behaviour)
*/ */
omitDefaultDeleteReasons?: false | boolean omitDefaultDeleteReasons?: false | boolean | ("disused" | string)[]
} }

View file

@ -10,8 +10,8 @@
import type { Feature } from "geojson" import type { Feature } from "geojson"
import { UIEventSource } from "../../../Logic/UIEventSource" import { UIEventSource } from "../../../Logic/UIEventSource"
import LayerConfig from "../../../Models/ThemeConfig/LayerConfig" import LayerConfig from "../../../Models/ThemeConfig/LayerConfig"
import { TagsFilter } from "../../../Logic/Tags/TagsFilter"
import { TagUtils } from "../../../Logic/Tags/TagUtils" import { TagUtils } from "../../../Logic/Tags/TagUtils"
import type { UploadableTag } from "../../../Logic/Tags/TagUtils"
import OsmChangeAction from "../../../Logic/Osm/Actions/OsmChangeAction" import OsmChangeAction from "../../../Logic/Osm/Actions/OsmChangeAction"
import DeleteAction from "../../../Logic/Osm/Actions/DeleteAction" import DeleteAction from "../../../Logic/Osm/Actions/DeleteAction"
import ChangeTagAction from "../../../Logic/Osm/Actions/ChangeTagAction" import ChangeTagAction from "../../../Logic/Osm/Actions/ChangeTagAction"
@ -42,7 +42,7 @@
const t = Translations.t.delete const t = Translations.t.delete
let selectedTags: TagsFilter let selectedTags: UploadableTag
let changedProperties = undefined let changedProperties = undefined
$: changedProperties = TagUtils.changeAsProperties(selectedTags?.asChange(tags?.data ?? {}) ?? []) $: changedProperties = TagUtils.changeAsProperties(selectedTags?.asChange(tags?.data ?? {}) ?? [])
let isHardDelete = undefined let isHardDelete = undefined

View file

@ -988,6 +988,7 @@ export default class SpecialVisualizations {
return undefined return undefined
} }
return new SvelteUIElement(SpecialTranslation, { return new SvelteUIElement(SpecialTranslation, {
t: title,
tags: tagsSource, tags: tagsSource,
state, state,
feature, feature,