forked from MapComplete/MapComplete
Add themes to search functionality, including quickswitch between recent themes
This commit is contained in:
parent
b4866cdbac
commit
329865a15e
22 changed files with 679 additions and 431 deletions
|
@ -7,21 +7,20 @@ import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"
|
|||
|
||||
export class RecentSearch {
|
||||
|
||||
private readonly _recentSearches: UIEventSource<string[]>
|
||||
public readonly recentSearches: Store<string[]>
|
||||
|
||||
private readonly _seenThisSession: UIEventSource<GeoCodeResult[]> = new UIEventSource<GeoCodeResult[]>([])
|
||||
public readonly seenThisSession: Store<GeoCodeResult[]> = this._seenThisSession
|
||||
private readonly _seenThisSession: UIEventSource<GeoCodeResult[]>
|
||||
public readonly seenThisSession: Store<GeoCodeResult[]>
|
||||
|
||||
constructor(state: { layout: LayoutConfig, osmConnection: OsmConnection, selectedElement: Store<Feature> }) {
|
||||
const longPref = state.osmConnection.preferencesHandler.GetLongPreference("recent-searches")
|
||||
this._recentSearches = longPref.sync(str => !str ? [] : <string[]>JSON.parse(str), [], strs => JSON.stringify(strs))
|
||||
this.recentSearches = this._recentSearches
|
||||
// const prefs = state.osmConnection.preferencesHandler.GetLongPreference("previous-searches")
|
||||
this._seenThisSession = new UIEventSource<GeoCodeResult[]>([])//UIEventSource.asObject<GeoCodeResult[]>(prefs, [])
|
||||
this.seenThisSession = this._seenThisSession
|
||||
|
||||
|
||||
state.selectedElement.addCallbackAndRunD(selected => {
|
||||
const [osm_type, osm_id] = selected.properties.id.split("/")
|
||||
const [lon, lat] = GeoOperations.centerpointCoordinates(selected)
|
||||
const entry = <GeoCodeResult> {
|
||||
const entry = <GeoCodeResult>{
|
||||
feature: selected,
|
||||
osm_id, osm_type,
|
||||
description: "Viewed recently",
|
||||
|
@ -33,7 +32,7 @@ export class RecentSearch {
|
|||
}
|
||||
|
||||
addSelected(entry: GeoCodeResult) {
|
||||
const arr = [...this.seenThisSession.data.slice(0, 20), entry]
|
||||
const arr = [...(this.seenThisSession.data ?? []).slice(0, 20), entry]
|
||||
|
||||
const seenIds = new Set<string>()
|
||||
for (let i = arr.length - 1; i >= 0; i--) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue