Search: fix slow search on home screen
This commit is contained in:
parent
644552b88d
commit
2db7ef872c
1 changed files with 13 additions and 11 deletions
|
@ -10,7 +10,7 @@
|
|||
import LoginToggle from "./Base/LoginToggle.svelte"
|
||||
import Pencil from "../assets/svg/Pencil.svelte"
|
||||
import Constants from "../Models/Constants"
|
||||
import { Store, Stores, UIEventSource } from "../Logic/UIEventSource"
|
||||
import { ImmutableStore, Store, Stores, UIEventSource } from "../Logic/UIEventSource"
|
||||
import ThemesList from "./BigComponents/ThemesList.svelte"
|
||||
import { MinimalLayoutInformation } from "../Models/ThemeConfig/LayoutConfig"
|
||||
import Eye from "../assets/svg/Eye.svelte"
|
||||
|
@ -22,9 +22,9 @@
|
|||
import { Utils } from "../Utils"
|
||||
import { ArrowTrendingUp } from "@babeard/svelte-heroicons/solid/ArrowTrendingUp"
|
||||
import Searchbar from "./Base/Searchbar.svelte"
|
||||
import ChevronDoubleRight from "@babeard/svelte-heroicons/mini/ChevronDoubleRight"
|
||||
import ThemeSearch from "../Logic/Search/ThemeSearch"
|
||||
import SearchUtils from "../Logic/Search/SearchUtils"
|
||||
import ChevronDoubleRight from "@babeard/svelte-heroicons/mini/ChevronDoubleRight"
|
||||
|
||||
const featureSwitches = new OsmConnectionFeatureSwitches()
|
||||
const osmConnection = new OsmConnection({
|
||||
|
@ -54,26 +54,28 @@
|
|||
const customThemes: Store<MinimalLayoutInformation[]> = Stores.ListStabilized<string>(state.installedUserThemes)
|
||||
.mapD(stableIds => Utils.NoNullInplace(stableIds.map(id => state.getUnofficialTheme(id))))
|
||||
|
||||
function filtered(themes: MinimalLayoutInformation[]): Store<MinimalLayoutInformation[]> {
|
||||
const prefiltered = themes.filter(th => th.id !== "personal")
|
||||
function filtered(themes: Store<MinimalLayoutInformation[]>): Store<MinimalLayoutInformation[]> {
|
||||
return searchStable.map(search => {
|
||||
if (!search) {
|
||||
return themes
|
||||
return themes.data
|
||||
}
|
||||
|
||||
const scores = ThemeSearch.sortedByLowestScores(search, prefiltered)
|
||||
const start = new Date().getTime()
|
||||
const scores = ThemeSearch.sortedByLowestScores(search, themes.data)
|
||||
const end = new Date().getTime()
|
||||
console.trace("Scores for", search , "are", scores, "searching took", end - start,"ms")
|
||||
const strict = scores.filter(sc => sc.lowest < 2)
|
||||
if (strict.length > 0) {
|
||||
return strict.map(sc => sc.theme)
|
||||
}
|
||||
return scores.filter(sc => sc.lowest < 4).slice(0, 6).map(sc => sc.theme)
|
||||
})
|
||||
}, [themes])
|
||||
}
|
||||
|
||||
|
||||
let officialSearched = filtered(officialThemes)
|
||||
let hiddenSearched = visitedHiddenThemes.bindD(visited => filtered(visited))
|
||||
let customSearched = customThemes.bindD(customThemes => filtered(customThemes))
|
||||
let officialSearched : Store<MinimalLayoutInformation[]>= filtered(new ImmutableStore(officialThemes))
|
||||
let hiddenSearched: Store<MinimalLayoutInformation[]> = filtered(visitedHiddenThemes)
|
||||
let customSearched: Store<MinimalLayoutInformation[]> = filtered(customThemes)
|
||||
|
||||
|
||||
let searchIsFocussed = new UIEventSource(false)
|
||||
|
@ -133,7 +135,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<Searchbar value={search} placeholder={tr.searchForATheme} on:search={() => applySearch()} isFocused={searchIsFocussed} />
|
||||
<Searchbar value={search} placeholder={tr.searchForATheme} on:search={() => applySearch()} />
|
||||
|
||||
<ThemesList {search} {state} themes={$officialSearched} />
|
||||
|
||||
|
|
Loading…
Reference in a new issue