diff --git a/frontend/src/modules/member/components/member-autocomplete-input.vue b/frontend/src/modules/member/components/member-autocomplete-input.vue deleted file mode 100644 index 0923c50094..0000000000 --- a/frontend/src/modules/member/components/member-autocomplete-input.vue +++ /dev/null @@ -1,123 +0,0 @@ - - - - - diff --git a/frontend/src/modules/member/components/member-dropdown.vue b/frontend/src/modules/member/components/member-dropdown.vue index 50216bb348..50f5acec6b 100644 --- a/frontend/src/modules/member/components/member-dropdown.vue +++ b/frontend/src/modules/member/components/member-dropdown.vue @@ -324,6 +324,7 @@ export default { { username: {}, attributes: {} } ] this.isMergeDialogOpen = true + this.memberToMerge = null } else if (command.action === 'memberEnrich') { this.doEnrich(command.member.id) } else { diff --git a/frontend/src/modules/member/components/member-selection-dropdown.vue b/frontend/src/modules/member/components/member-selection-dropdown.vue index c237b9067a..c42b8e7e11 100644 --- a/frontend/src/modules/member/components/member-selection-dropdown.vue +++ b/frontend/src/modules/member/components/member-selection-dropdown.vue @@ -6,13 +6,14 @@
Select the member you want to merge with
- +
+ +
@@ -56,9 +57,18 @@ const fetchFn = async (query, limit) => { query, limit ) - return options.filter((m) => { + + // Remove primary member from members that can be merged with + const filteredOptions = options.filter((m) => { return m.id !== props.id }) + + // If the primary member was removed, add an empty object in replacement + if (options.length !== filteredOptions.length) { + filteredOptions.push({}) + } + + return filteredOptions } diff --git a/frontend/src/modules/member/member-module.js b/frontend/src/modules/member/member-module.js index c5a4f3a1d5..fe0611c347 100644 --- a/frontend/src/modules/member/member-module.js +++ b/frontend/src/modules/member/member-module.js @@ -1,11 +1,7 @@ import routes from '@/modules/member/member-routes' import store from '@/modules/member/store' -import MemberAutocompleteInput from '@/modules/member/components/member-autocomplete-input.vue' export default { - components: { - 'app-member-autocomplete-input': MemberAutocompleteInput - }, routes, store } diff --git a/frontend/src/modules/tag/components/tag-autocomplete-input.vue b/frontend/src/modules/tag/components/tag-autocomplete-input.vue index cb3d55babe..70033db67a 100644 --- a/frontend/src/modules/tag/components/tag-autocomplete-input.vue +++ b/frontend/src/modules/tag/components/tag-autocomplete-input.vue @@ -1,24 +1,13 @@ @@ -48,10 +37,6 @@ export default { placeholder: { type: String, default: null - }, - multiple: { - type: Boolean, - default: true } }, emits: ['update:modelValue'], diff --git a/frontend/src/shared/form/autocomplete-one-input.vue b/frontend/src/shared/form/autocomplete-one-input.vue index 78a1b487c5..9eeb3990c6 100644 --- a/frontend/src/shared/form/autocomplete-one-input.vue +++ b/frontend/src/shared/form/autocomplete-one-input.vue @@ -12,6 +12,7 @@ :remote="true" :reserve-keyword="false" :allow-create="allowCreate" + fit-input-width value-key="id" :class="inputClass" @change="onChange" @@ -25,14 +26,33 @@ {{ createPrefix }} {{ currentQuery }} - - + + + {{ record.label }} + + + +
+ Type to search for more results +
+
+ No matches found +
@@ -40,7 +60,7 @@ import isString from 'lodash/isString' import { onSelectMouseLeave } from '@/utils/select' -const AUTOCOMPLETE_SERVER_FETCH_SIZE = 100 +const AUTOCOMPLETE_SERVER_FETCH_SIZE = 20 export default { name: 'AppAutocompleteOneInput', @@ -58,10 +78,6 @@ export default { type: Function, default: () => {} }, - mapperFn: { - type: Function, - default: () => {} - }, createFn: { type: Function, default: () => {} @@ -96,7 +112,8 @@ export default { return { loading: false, localOptions: this.options ? this.options : [], - currentQuery: '' + currentQuery: '', + limit: AUTOCOMPLETE_SERVER_FETCH_SIZE } }, @@ -111,6 +128,16 @@ export default { o === this.currentQuery ) ) + }, + showEmptyMessage() { + // Show empty message if request is not loading, + // there are options or the only option is empty + return ( + !this.loading && + (!this.localOptions.length || + (this.localOptions.length === 1 && + !this.localOptions[0].id)) + ) } }, @@ -153,7 +180,10 @@ export default { this.loading = true try { - this.localOptions = await this.fetchFn() + this.localOptions = await this.fetchFn( + this.currentQuery, + AUTOCOMPLETE_SERVER_FETCH_SIZE + ) this.loading = false } catch (error) { console.error(error) @@ -187,5 +217,3 @@ export default { } } - - diff --git a/frontend/src/shared/form/platform-autocomplete-input.vue b/frontend/src/shared/form/platform-autocomplete-input.vue deleted file mode 100644 index ba1fc5f169..0000000000 --- a/frontend/src/shared/form/platform-autocomplete-input.vue +++ /dev/null @@ -1,59 +0,0 @@ - - -