UX: styling, fix import, hide brands immediately, sort brands by frequency, see #2071

This commit is contained in:
Pieter Vander Vennet 2024-08-09 14:43:30 +02:00
parent 6c6f988f3c
commit a70dbf0043
3 changed files with 24 additions and 12 deletions

View file

@ -142,9 +142,15 @@ export default class NameSuggestionIndex {
type: string, type: string,
tags: Record<string, string>, tags: Record<string, string>,
country: string[], country: string[],
location?: [number, number] location?: [number, number],
options?:{
/**
* If set, sort by frequency instead of alphabetically
*/
sortByFrequency: boolean
}
): Promise<Mapping[]> { ): Promise<Mapping[]> {
const mappings: Mapping[] = [] const mappings: (Mapping & {frequency: number})[] = []
const frequencies = await NameSuggestionIndex.fetchFrequenciesFor(type, country) const frequencies = await NameSuggestionIndex.fetchFrequenciesFor(type, country)
for (const key in tags) { for (const key in tags) {
if (key.startsWith("_")) { if (key.startsWith("_")) {
@ -180,7 +186,7 @@ export default class NameSuggestionIndex {
addExtraTags: Object.keys(tags) addExtraTags: Object.keys(tags)
.filter((k) => k !== type) .filter((k) => k !== type)
.map((k) => new Tag(k, tags[k])), .map((k) => new Tag(k, tags[k])),
then: new TypedTranslation<Record<string, never>>({ "*": nsiItem.displayName }), then: new TypedTranslation<Record<string, never>>({ "*": nsiItem.displayName +" "+(frequency) }),
hideInAnswer: false, hideInAnswer: false,
ifnot: undefined, ifnot: undefined,
alsoShowIf: undefined, alsoShowIf: undefined,
@ -190,9 +196,14 @@ export default class NameSuggestionIndex {
// As such, it should be "true" but this is not supported // As such, it should be "true" but this is not supported
priorityIf: frequency > 0 ? new RegexTag("id", /.*/) : undefined, priorityIf: frequency > 0 ? new RegexTag("id", /.*/) : undefined,
searchTerms: { "*": [nsiItem.displayName, nsiItem.id] }, searchTerms: { "*": [nsiItem.displayName, nsiItem.id] },
frequency: frequency ?? -1
}) })
} }
} }
if(options?.sortByFrequency){
mappings.sort((a, b) => b.frequency - a.frequency)
}
return mappings return mappings
} }

View file

@ -1,11 +1,10 @@
import { Translation, TypedTranslation } from "../../UI/i18n/Translation" import { Translation, TypedTranslation } from "../../UI/i18n/Translation"
import { TagsFilter } from "../../Logic/Tags/TagsFilter" import { TagsFilter } from "../../Logic/Tags/TagsFilter"
import Translations from "../../UI/i18n/Translations" import Translations from "../../UI/i18n/Translations"
import { TagUtils, UploadableTag } from "../../Logic/Tags/TagUtils" import { TagUtils } from "../../Logic/Tags/TagUtils"
import { And } from "../../Logic/Tags/And" import { And } from "../../Logic/Tags/And"
import { Utils } from "../../Utils" import { Utils } from "../../Utils"
import { Tag } from "../../Logic/Tags/Tag" import { Tag } from "../../Logic/Tags/Tag"
import Link from "../../UI/Base/Link"
import { import {
MappingConfigJson, MappingConfigJson,
QuestionableTagRenderingConfigJson, QuestionableTagRenderingConfigJson,
@ -18,6 +17,7 @@ import NameSuggestionIndex from "../../Logic/Web/NameSuggestionIndex"
import { GeoOperations } from "../../Logic/GeoOperations" import { GeoOperations } from "../../Logic/GeoOperations"
import { Feature } from "geojson" import { Feature } from "geojson"
import MarkdownUtils from "../../Utils/MarkdownUtils" import MarkdownUtils from "../../Utils/MarkdownUtils"
import { UploadableTag } from "../../Logic/Tags/TagTypes"
export interface Mapping { export interface Mapping {
readonly if: UploadableTag readonly if: UploadableTag
@ -928,9 +928,7 @@ export default class TagRenderingConfig {
* The keys that should be erased if one has to revert to 'unknown'. * The keys that should be erased if one has to revert to 'unknown'.
* Might give undefined * Might give undefined
*/ */
public public settableKeys(): string[] | undefined {
settableKeys(): string[] | undefined {
const toDelete = new Set<string>() const toDelete = new Set<string>()
if (this.freeform) { if (this.freeform) {
toDelete.add(this.freeform.key) toDelete.add(this.freeform.key)
@ -966,7 +964,8 @@ export class TagRenderingConfigUtils {
config.freeform.key, config.freeform.key,
tags, tags,
country.split(";"), country.split(";"),
center center,
{sortByFrequency: true}
) )
) )
}) })

View file

@ -21,7 +21,6 @@
import { Unit } from "../../../Models/Unit" import { Unit } from "../../../Models/Unit"
import UserRelatedState from "../../../Logic/State/UserRelatedState" import UserRelatedState from "../../../Logic/State/UserRelatedState"
import { twJoin } from "tailwind-merge" import { twJoin } from "tailwind-merge"
import type { UploadableTag } from "../../../Logic/Tags/TagUtils"
import { TagUtils } from "../../../Logic/Tags/TagUtils" import { TagUtils } from "../../../Logic/Tags/TagUtils"
import Search from "../../../assets/svg/Search.svelte" import Search from "../../../assets/svg/Search.svelte"
@ -33,6 +32,7 @@
import { get } from "svelte/store" import { get } from "svelte/store"
import Markdown from "../../Base/Markdown.svelte" import Markdown from "../../Base/Markdown.svelte"
import { Utils } from "../../../Utils" import { Utils } from "../../../Utils"
import type { UploadableTag } from "../../../Logic/Tags/TagTypes"
export let config: TagRenderingConfig export let config: TagRenderingConfig
export let tags: UIEventSource<Record<string, string>> export let tags: UIEventSource<Record<string, string>>
@ -303,8 +303,10 @@
let numberOfCs = state?.osmConnection?.userDetails?.data?.csCount ?? 0 let numberOfCs = state?.osmConnection?.userDetails?.data?.csCount ?? 0
let question = config.question let question = config.question
let hideMappingsUnlessSearchedFor = let hideMappingsUnlessSearchedFor =
config.mappings.length > 8 && config.mappings.some((m) => m.priorityIf) config.mappings.length > 8 && config.mappings.some((m) => m.priorityIf !== undefined)
$: question = config.question $: question = config.question
$: hideMappingsUnlessSearchedFor = config.mappings.length > 8 && config.mappings.some((m) => m.priorityIf !== undefined)
if (state?.osmConnection) { if (state?.osmConnection) {
onDestroy( onDestroy(
state.osmConnection?.userDetails?.addCallbackAndRun((ud) => { state.osmConnection?.userDetails?.addCallbackAndRun((ud) => {
@ -359,7 +361,7 @@
/> />
</div> </div>
{#if hideMappingsUnlessSearchedFor} {#if hideMappingsUnlessSearchedFor}
<div class="m-1 rounded border border-dashed border-black p-1 px-2"> <div class="m-1 rounded border border-dashed border-black p-1 px-2 flex items-center">
<Tr t={Translations.t.general.mappingsAreHidden} /> <Tr t={Translations.t.general.mappingsAreHidden} />
</div> </div>
{/if} {/if}