forked from MapComplete/MapComplete
		
	Add option to deleteConfig to remove the default delete options
This commit is contained in:
		
							parent
							
								
									e5d67d42c8
								
							
						
					
					
						commit
						fe1cd0f120
					
				
					 3 changed files with 27 additions and 18 deletions
				
			
		| 
						 | 
					@ -5,7 +5,7 @@ import Translations from "../../UI/i18n/Translations"
 | 
				
			||||||
import { TagUtils } from "../../Logic/Tags/TagUtils"
 | 
					import { TagUtils } from "../../Logic/Tags/TagUtils"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class DeleteConfig {
 | 
					export default class DeleteConfig {
 | 
				
			||||||
    public static readonly defaultDeleteReasons: {
 | 
					    private static readonly defaultDeleteReasons: {
 | 
				
			||||||
        changesetMessage: string
 | 
					        changesetMessage: string
 | 
				
			||||||
        explanation: Translation
 | 
					        explanation: Translation
 | 
				
			||||||
    }[] = [
 | 
					    }[] = [
 | 
				
			||||||
| 
						 | 
					@ -27,8 +27,8 @@ export default class DeleteConfig {
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public readonly extraDeleteReasons?: {
 | 
					    public readonly deleteReasons?: {
 | 
				
			||||||
        explanation: TypedTranslation<object>
 | 
					        explanation: TypedTranslation<object> | Translation
 | 
				
			||||||
        changesetMessage: string
 | 
					        changesetMessage: string
 | 
				
			||||||
    }[]
 | 
					    }[]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,7 +38,7 @@ export default class DeleteConfig {
 | 
				
			||||||
    public readonly neededChangesets?: number
 | 
					    public readonly neededChangesets?: number
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    constructor(json: DeleteConfigJson, context: string) {
 | 
					    constructor(json: DeleteConfigJson, context: string) {
 | 
				
			||||||
        this.extraDeleteReasons = (json.extraDeleteReasons ?? []).map((reason, i) => {
 | 
					        this.deleteReasons = (json.extraDeleteReasons ?? []).map((reason, i) => {
 | 
				
			||||||
            const ctx = `${context}.extraDeleteReasons[${i}]`
 | 
					            const ctx = `${context}.extraDeleteReasons[${i}]`
 | 
				
			||||||
            if ((reason.changesetMessage ?? "").length <= 5) {
 | 
					            if ((reason.changesetMessage ?? "").length <= 5) {
 | 
				
			||||||
                throw `${ctx}.explanation is too short, needs at least 4 characters`
 | 
					                throw `${ctx}.explanation is too short, needs at least 4 characters`
 | 
				
			||||||
| 
						 | 
					@ -48,6 +48,16 @@ export default class DeleteConfig {
 | 
				
			||||||
                changesetMessage: reason.changesetMessage,
 | 
					                changesetMessage: reason.changesetMessage,
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(!json.omitDefaultDeleteReasons ){
 | 
				
			||||||
 | 
					            for (const defaultDeleteReason of DeleteConfig.defaultDeleteReasons) {
 | 
				
			||||||
 | 
					                this.deleteReasons.push({
 | 
				
			||||||
 | 
					                    changesetMessage: defaultDeleteReason.changesetMessage,
 | 
				
			||||||
 | 
					                    explanation: defaultDeleteReason.explanation.Clone(/*Must clone, hides translation otherwise*/)
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.nonDeleteMappings = (json.nonDeleteMappings ?? []).map((nonDelete, i) => {
 | 
					        this.nonDeleteMappings = (json.nonDeleteMappings ?? []).map((nonDelete, i) => {
 | 
				
			||||||
            const ctx = `${context}.extraDeleteReasons[${i}]`
 | 
					            const ctx = `${context}.extraDeleteReasons[${i}]`
 | 
				
			||||||
            return {
 | 
					            return {
 | 
				
			||||||
| 
						 | 
					@ -56,6 +66,10 @@ export default class DeleteConfig {
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(this.nonDeleteMappings.length + this.deleteReasons.length == 0){
 | 
				
			||||||
 | 
					            throw "At "+context+": a deleteconfig should have some reasons to delete: either the default delete reasons or a nonDeleteMapping or extraDeletereason should be given"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.softDeletionTags = undefined
 | 
					        this.softDeletionTags = undefined
 | 
				
			||||||
        if (json.softDeletionTags !== undefined) {
 | 
					        if (json.softDeletionTags !== undefined) {
 | 
				
			||||||
            this.softDeletionTags = TagUtils.Tag(
 | 
					            this.softDeletionTags = TagUtils.Tag(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -72,4 +72,10 @@ export interface DeleteConfigJson {
 | 
				
			||||||
     * For some small features (e.g. bicycle racks) this is too much and this requirement can be lowered or dropped, which can be done here.
 | 
					     * For some small features (e.g. bicycle racks) this is too much and this requirement can be lowered or dropped, which can be done here.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    neededChangesets?: number
 | 
					    neededChangesets?: number
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Set this flag if the default delete reasons should be omitted from the dialog.
 | 
				
			||||||
 | 
					     * This requires at least one extraDeleteReason or nonDeleteMapping
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    omitDefaultDeleteReasons?: false | boolean
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -235,7 +235,7 @@ export default class DeleteWizard extends Toggle {
 | 
				
			||||||
                                    return t.explanations.hardDelete
 | 
					                                    return t.explanations.hardDelete
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
                                // This is a soft deletion: we explain _why_ the deletion is soft
 | 
					                                // This is a soft deletion: we explain _why_ the deletion is soft
 | 
				
			||||||
                                return t.explanations.softDelete.Subs({ reason: reason })
 | 
					                                return t.explanations.softDelete.Subs({ reason: reason})
 | 
				
			||||||
                            })
 | 
					                            })
 | 
				
			||||||
                        )
 | 
					                        )
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
| 
						 | 
					@ -263,7 +263,7 @@ export default class DeleteWizard extends Toggle {
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for (const extraDeleteReason of config.extraDeleteReasons ?? []) {
 | 
					        for (const extraDeleteReason of config.deleteReasons ?? []) {
 | 
				
			||||||
            elements.push(
 | 
					            elements.push(
 | 
				
			||||||
                new FixedInputElement(
 | 
					                new FixedInputElement(
 | 
				
			||||||
                    new SubstitutedTranslation(extraDeleteReason.explanation, tagsSource, state),
 | 
					                    new SubstitutedTranslation(extraDeleteReason.explanation, tagsSource, state),
 | 
				
			||||||
| 
						 | 
					@ -274,17 +274,6 @@ export default class DeleteWizard extends Toggle {
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for (const extraDeleteReason of DeleteConfig.defaultDeleteReasons) {
 | 
					 | 
				
			||||||
            elements.push(
 | 
					 | 
				
			||||||
                new FixedInputElement(
 | 
					 | 
				
			||||||
                    extraDeleteReason.explanation.Clone(/*Must clone here, as this explanation might be used on many locations*/),
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        deleteReason: extraDeleteReason.changesetMessage,
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                )
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return new RadioButton(elements, { selectFirstAsDefault: false })
 | 
					        return new RadioButton(elements, { selectFirstAsDefault: false })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -453,7 +442,7 @@ class DeleteabilityChecker {
 | 
				
			||||||
                return
 | 
					                return
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (waysOrRelations) {
 | 
					            if (waysOrRelations) {
 | 
				
			||||||
                // not deleteble by mapcomplete
 | 
					                // not deleteable by mapcomplete
 | 
				
			||||||
                state.setData({
 | 
					                state.setData({
 | 
				
			||||||
                    canBeDeleted: false,
 | 
					                    canBeDeleted: false,
 | 
				
			||||||
                    reason: t.partOfOthers,
 | 
					                    reason: t.partOfOthers,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue