diff --git a/assets/layers/artwork/artwork.json b/assets/layers/artwork/artwork.json index 173943bee..013e2e84c 100644 --- a/assets/layers/artwork/artwork.json +++ b/assets/layers/artwork/artwork.json @@ -875,8 +875,8 @@ } ], "filter": [ - - "has_image" + "has_image", + "artwork-artwork_type" ], "deletion": { "softDeletionTags": { diff --git a/src/Models/ThemeConfig/Conversion/PrepareLayer.ts b/src/Models/ThemeConfig/Conversion/PrepareLayer.ts index a95e0a9f3..fc3524108 100644 --- a/src/Models/ThemeConfig/Conversion/PrepareLayer.ts +++ b/src/Models/ThemeConfig/Conversion/PrepareLayer.ts @@ -64,11 +64,36 @@ class ExpandFilter extends DesugaringStep { } const newFilters: FilterConfigJson[] = [] - for (const filter of <(FilterConfigJson | string)[]>json.filter) { + const filters = <(FilterConfigJson | string)[]>json.filter + for (let i = 0; i < filters.length; i++){ + const filter = filters[i] if (typeof filter !== "string") { newFilters.push(filter) continue } + + const matchingTr = json.tagRenderings.find(tr => tr["id"] === filter) + if(matchingTr){ + if(!(matchingTr.mappings?.length >= 1)){ + context.enters("filter",i ).err("Found a matching tagRendering to base a filter on, but this tagRendering does not contain any mappings") + } + const options = matchingTr.mappings.map(mapping => ({ + question: mapping.then, + osmTags: mapping.if + })) + options.unshift({ + question: { + en:"All types" + }, + osmTags: undefined + }) + newFilters.push({ + id: filter, + options + }) + continue + } + if (filter.indexOf(".") > 0) { if (this._state.sharedLayers.size > 0) { const split = filter.split(".") diff --git a/src/Models/ThemeConfig/Conversion/Validation.ts b/src/Models/ThemeConfig/Conversion/Validation.ts index 520fd10ed..c2c544483 100644 --- a/src/Models/ThemeConfig/Conversion/Validation.ts +++ b/src/Models/ThemeConfig/Conversion/Validation.ts @@ -432,7 +432,7 @@ export class DetectConflictingAddExtraTags extends DesugaringStep