diff --git a/packages/text-editor/src/components/MentionPopup.svelte b/packages/text-editor/src/components/MentionPopup.svelte index d285afc93f..15f726a92d 100644 --- a/packages/text-editor/src/components/MentionPopup.svelte +++ b/packages/text-editor/src/components/MentionPopup.svelte @@ -38,10 +38,15 @@ const client = getClient() - client.findAll(presentation.class.ObjectSearchCategory, { context: 'mention' }).then(async (results) => { - categories = results - updateItems(query) - }) + client + .findAll(presentation.class.ObjectSearchCategory, { context: 'mention' }) + .then(async (results) => { + categories = results + await updateItems(query) + }) + .catch((e) => { + console.error(e) + }) const dispatch = createEventDispatcher() @@ -76,8 +81,8 @@ if (key.key === 'Enter' || key.key === 'Tab') { key.preventDefault() key.stopPropagation() - const searchItem = items[selection] - if (searchItem) { + if (selection < items.length) { + const searchItem = items[selection] dispatchItem(searchItem.item) return true } else { @@ -87,8 +92,6 @@ return false } - export function done () {} - function packSearchResultsForListView (sections: SearchSection[]): SearchItem[] { let results: SearchItem[] = [] for (const section of sections) { @@ -161,10 +164,11 @@ const sections = await doFulltextSearch(classesToSearch, query) items = packSearchResultsForListView(sections) } - $: updateItems(query) + $: void updateItems(query) {#if (items.length === 0 && query !== '') || items.length > 0} +
dispatch('changeSize')}>
@@ -185,6 +189,7 @@ {@const item = items[num]} {@const doc = item.item} +
{ diff --git a/server/core/src/mapper.ts b/server/core/src/mapper.ts index ba606885d2..ddb4c1a111 100644 --- a/server/core/src/mapper.ts +++ b/server/core/src/mapper.ts @@ -34,15 +34,15 @@ function createIndexedReader ( } } -function readAndMapProps (reader: IndexedReader, props: ClassSearchConfigProps[]): Record { - const res: Record = {} +function readAndMapProps (reader: IndexedReader, props: ClassSearchConfigProps[]): Record { + const res: Record = {} for (const prop of props) { if (typeof prop === 'string') { res[prop] = reader.get(prop) } else { for (const [propName, rest] of Object.entries(prop)) { if (rest.length > 1) { - const val = reader.getDoc(rest[0])?.get(rest[1]) ?? '' + const val = reader.getDoc(rest[0])?.get(rest[1]) res[propName] = Array.isArray(val) ? val[0] : val } } @@ -135,6 +135,6 @@ export function mapSearchResultDoc (hierarchy: Hierarchy, raw: IndexedDoc): Sear return doc } -function fillTemplate (tmpl: string, props: Record): string { +function fillTemplate (tmpl: string, props: Record): string { return tmpl.replace(/{(.*?)}/g, (_, key: string) => props[key]) }