forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			46 lines
		
	
	
		
			No EOL
		
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			No EOL
		
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import {Translation} from "../../UI/i18n/Translation";
 | |
| import {TagsFilter} from "../../Logic/Tags/TagsFilter";
 | |
| import FilterConfigJson from "./Json/FilterConfigJson";
 | |
| import Translations from "../../UI/i18n/Translations";
 | |
| import {TagUtils} from "../../Logic/Tags/TagUtils";
 | |
| 
 | |
| export default class FilterConfig {
 | |
|     public readonly id: string
 | |
|     public readonly options: {
 | |
|         question: Translation;
 | |
|         osmTags: TagsFilter;
 | |
|     }[];
 | |
| 
 | |
|     constructor(json: FilterConfigJson, context: string) {
 | |
|         if (json.options === undefined) {
 | |
|             throw `A filter without options was given at ${context}`
 | |
|         }
 | |
|         if (json.id === undefined) {
 | |
|             throw `A filter without id was found at ${context}`
 | |
|         }
 | |
|         if(json.id.match(/^[a-zA-Z0-9_-]*$/) === null){
 | |
|             throw `A filter with invalid id was found at ${context}. Ids should only contain letters, numbers or - _`
 | |
| 
 | |
|         }
 | |
| 
 | |
|         if (json.options.map === undefined) {
 | |
|             throw `A filter was given where the options aren't a list at ${context}`
 | |
|         }
 | |
|         this.id = json.id;
 | |
|         this.options = json.options.map((option, i) => {
 | |
|             const question = Translations.T(
 | |
|                 option.question,
 | |
|                 context + ".options-[" + i + "].question"
 | |
|             );
 | |
|             const osmTags = TagUtils.Tag(
 | |
|                 option.osmTags ?? {and: []},
 | |
|                 `${context}.options-[${i}].osmTags`
 | |
|             );
 | |
|             if (question === undefined) {
 | |
|                 throw `Invalid filter: no question given at ${context}[${i}]`
 | |
|             }
 | |
| 
 | |
|             return {question: question, osmTags: osmTags};
 | |
|         });
 | |
|     }
 | |
| } |