From a10916fc1415d8f8d6c6ab4fd5c12f9b18cccf38 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 25 Apr 2023 02:15:16 +0200 Subject: [PATCH 01/15] remove falsy values, but do not limit characters --- backend/src/schema/resolvers/searches/queryString.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/schema/resolvers/searches/queryString.js b/backend/src/schema/resolvers/searches/queryString.js index 5ef84cdce..0045f1c22 100644 --- a/backend/src/schema/resolvers/searches/queryString.js +++ b/backend/src/schema/resolvers/searches/queryString.js @@ -33,7 +33,7 @@ const matchSomeWordsExactly = (str, boost = 2) => { const matchBeginningOfWords = (str) => { return str .split(' ') - .filter((s) => s.length > 3) + .filter((s) => s) // remove falsy values .map((s) => s + '*') .join(' ') } From ca24cf44050342415baef54da3fe86ab9f7ea0e4 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 25 Apr 2023 02:19:15 +0200 Subject: [PATCH 02/15] simplyfy logic, use language ahortcuts --- backend/src/schema/resolvers/searches.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/backend/src/schema/resolvers/searches.js b/backend/src/schema/resolvers/searches.js index 3fdf22da3..3001a28b3 100644 --- a/backend/src/schema/resolvers/searches.js +++ b/backend/src/schema/resolvers/searches.js @@ -223,8 +223,7 @@ export default { }, searchResults: async (_parent, args, context, _resolveInfo) => { const { query, limit } = args - let userId = null - if (context.user) userId = context.user.id + let userId = context.user?.id || null const searchType = query.replace(/^([!@#&]?).*$/, '$1') const searchString = query.replace(/^([!@#&])/, '') From 6025706b4b2c2bfc8cbb51658f2b40d081698222 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 25 Apr 2023 02:19:50 +0200 Subject: [PATCH 03/15] fix searchableInput field component to properly retrigger search on delete, clear properly etc --- .../generic/SearchableInput/SearchableInput.vue | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/webapp/components/generic/SearchableInput/SearchableInput.vue b/webapp/components/generic/SearchableInput/SearchableInput.vue index 2149732c5..8397cccbf 100644 --- a/webapp/components/generic/SearchableInput/SearchableInput.vue +++ b/webapp/components/generic/SearchableInput/SearchableInput.vue @@ -14,9 +14,8 @@ :auto-reset-search="!searchValue" :placeholder="$t('search.placeholder')" @focus.capture.native="onFocus" - @input.native="handleInput" + @input.native="onInput" @keyup.enter.native="onEnter" - @keyup.delete.native="onDelete" @keyup.esc.native="clear" @blur.capture.native="onBlur" @input.exact="onSelect" @@ -103,11 +102,14 @@ export default { onFocus(event) { clearTimeout(this.searchProcess) }, - handleInput(event) { + onInput(event) { + console.log('input', event) clearTimeout(this.searchProcess) this.value = event.target ? event.target.value.replace(/\s+/g, ' ').trim() : '' + console.log('input', this.value) this.unprocessedSearchInput = this.value if (isEmpty(this.value) || this.value.replace(/\s+/g, '').length < 3) { + this.clear() return } this.searchProcess = setTimeout(() => { @@ -122,15 +124,6 @@ export default { }) this.$emit('clearSearch') }, - onDelete(event) { - clearTimeout(this.searchProcess) - const value = event.target ? event.target.value.trim() : '' - if (isEmpty(value)) { - this.clear() - } else { - this.handleInput(event) - } - }, clear() { this.unprocessedSearchInput = '' this.previousSearchTerm = '' From 33d5758686722128d411450680cefa6af52a5a67 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 25 Apr 2023 02:35:43 +0200 Subject: [PATCH 04/15] removed comments --- webapp/components/generic/SearchableInput/SearchableInput.vue | 2 -- 1 file changed, 2 deletions(-) diff --git a/webapp/components/generic/SearchableInput/SearchableInput.vue b/webapp/components/generic/SearchableInput/SearchableInput.vue index 8397cccbf..45ea33bab 100644 --- a/webapp/components/generic/SearchableInput/SearchableInput.vue +++ b/webapp/components/generic/SearchableInput/SearchableInput.vue @@ -103,10 +103,8 @@ export default { clearTimeout(this.searchProcess) }, onInput(event) { - console.log('input', event) clearTimeout(this.searchProcess) this.value = event.target ? event.target.value.replace(/\s+/g, ' ').trim() : '' - console.log('input', this.value) this.unprocessedSearchInput = this.value if (isEmpty(this.value) || this.value.replace(/\s+/g, '').length < 3) { this.clear() From c7fbe9beef8c1dca3549b673e4111dccaa7d9fb5 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 25 Apr 2023 02:36:01 +0200 Subject: [PATCH 05/15] removed test for onDelete event --- .../generic/SearchableInput/SearchableInput.spec.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/webapp/components/generic/SearchableInput/SearchableInput.spec.js b/webapp/components/generic/SearchableInput/SearchableInput.spec.js index cda9150b8..223ee6186 100644 --- a/webapp/components/generic/SearchableInput/SearchableInput.spec.js +++ b/webapp/components/generic/SearchableInput/SearchableInput.spec.js @@ -63,13 +63,6 @@ describe('SearchableInput.vue', () => { expect(select.element.value).toBe('abcd') }) - it('calls onDelete when the delete key is pressed', () => { - const spy = jest.spyOn(wrapper.vm, 'onDelete') - select.trigger('input') - select.trigger('keyup.delete') - expect(spy).toHaveBeenCalledTimes(1) - }) - describe('navigating to resource', () => { beforeEach(() => { propsData = { options: searchResults } From 4a5c56203b877d166f5667c5e5f9e8ddc488727c Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 25 Apr 2023 02:44:46 +0200 Subject: [PATCH 06/15] simplified searchableInput further - fixed on Enter --- .../components/generic/SearchableInput/SearchableInput.vue | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/webapp/components/generic/SearchableInput/SearchableInput.vue b/webapp/components/generic/SearchableInput/SearchableInput.vue index 45ea33bab..bc349c9f6 100644 --- a/webapp/components/generic/SearchableInput/SearchableInput.vue +++ b/webapp/components/generic/SearchableInput/SearchableInput.vue @@ -78,7 +78,6 @@ export default { return { searchValue: '', value: '', - unprocessedSearchInput: '', searchProcess: null, previousSearchTerm: '', delay: 300, @@ -105,7 +104,6 @@ export default { onInput(event) { clearTimeout(this.searchProcess) this.value = event.target ? event.target.value.replace(/\s+/g, ' ').trim() : '' - this.unprocessedSearchInput = this.value if (isEmpty(this.value) || this.value.replace(/\s+/g, '').length < 3) { this.clear() return @@ -118,12 +116,11 @@ export default { onEnter(event) { this.$router.push({ path: '/search/search-results', - query: { search: this.unprocessedSearchInput }, + query: { search: this.value }, }) this.$emit('clearSearch') }, clear() { - this.unprocessedSearchInput = '' this.previousSearchTerm = '' this.searchValue = '' this.$emit('clearSearch') From 536ef92132fba043d1add9225e56a81cf7765b3b Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 25 Apr 2023 03:44:51 +0200 Subject: [PATCH 07/15] more simplifications --- .../SearchableInput/SearchableInput.vue | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/webapp/components/generic/SearchableInput/SearchableInput.vue b/webapp/components/generic/SearchableInput/SearchableInput.vue index bc349c9f6..c27b16b66 100644 --- a/webapp/components/generic/SearchableInput/SearchableInput.vue +++ b/webapp/components/generic/SearchableInput/SearchableInput.vue @@ -1,9 +1,10 @@