From 6454f11ac2a06f3ae0affdafcfbf323fa8a187ad Mon Sep 17 00:00:00 2001 From: Candid Dauth Date: Sat, 15 May 2021 22:05:07 +0200 Subject: [PATCH] Add search field to POI dialog --- .../src/lib/components/overpass/overpass.ts | 18 +++++++++++++----- .../src/lib/components/overpass/overpass.vue | 13 ++++++++++++- leaflet/src/overpass/overpass-layer.ts | 3 +++ 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/frontend/src/lib/components/overpass/overpass.ts b/frontend/src/lib/components/overpass/overpass.ts index 16aa06a6..5ae3dbfa 100644 --- a/frontend/src/lib/components/overpass/overpass.ts +++ b/frontend/src/lib/components/overpass/overpass.ts @@ -2,7 +2,7 @@ import WithRender from "./overpass.vue"; import Vue from "vue"; import { Component, Prop } from "vue-property-decorator"; import { Client, InjectClient, InjectContext, InjectMapComponents, InjectMapContext } from "../../utils/decorators"; -import { overpassPresets, validateOverpassQuery } from "facilmap-leaflet"; +import { OverpassPreset, overpassPresets, validateOverpassQuery } from "facilmap-leaflet"; import FormModal from "../ui/form-modal/form-modal"; import { MapComponents, MapContext } from "../leaflet-map/leaflet-map"; import { Context } from "../facilmap/facilmap"; @@ -28,6 +28,10 @@ export default class Overpass extends Vue { @Prop({ type: String, required: true }) id!: string; activeTab = 0; + selectedPresets: string[] = []; + customQuery = ""; + searchTerm = ""; + isCustomQueryMode = false; get categories(): (typeof overpassPresets) { return overpassPresets.map((cat) => { @@ -40,10 +44,6 @@ export default class Overpass extends Vue { }); } - selectedPresets: string[] = []; - customQuery = ""; - isCustomQueryMode = false; - get isModified(): boolean { if (this.isCustomQueryMode) return !!this.customQuery != !!this.mapContext.overpassCustom || this.customQuery != this.mapContext.overpassCustom; @@ -51,6 +51,14 @@ export default class Overpass extends Vue { return !isEqual(new Set(this.selectedPresets), new Set(this.mapContext.overpassPresets.map((preset) => preset.key))); } + get filteredPresets(): OverpassPreset[] { + if (!this.searchTerm) + return []; + + const lowerTerm = this.searchTerm.toLowerCase(); + return this.categories.map((cat) => cat.presets).flat().flat().filter((preset) => preset.label.toLowerCase().includes(lowerTerm)); + } + initialize(): void { this.selectedPresets = this.mapContext.overpassPresets.map((p) => p.key); this.customQuery = this.mapContext.overpassCustom || ""; diff --git a/frontend/src/lib/components/overpass/overpass.vue b/frontend/src/lib/components/overpass/overpass.vue index 6f435099..75193678 100644 --- a/frontend/src/lib/components/overpass/overpass.vue +++ b/frontend/src/lib/components/overpass/overpass.vue @@ -8,7 +8,18 @@ ok-title="Apply" >