diff --git a/src/components/NewConversationDialog/NewConversationContactsPage.vue b/src/components/NewConversationDialog/NewConversationContactsPage.vue index c48b661b158..fc8ca66ee3f 100644 --- a/src/components/NewConversationDialog/NewConversationContactsPage.vue +++ b/src/components/NewConversationDialog/NewConversationContactsPage.vue @@ -208,7 +208,10 @@ export default { const { request, cancel } = CancelableRequest(autocompleteQuery) this.cancelSearchPossibleConversations = cancel - const response = await request({ searchText: this.searchText }) + const response = await request({ + searchText: this.searchText, + token: 'pending', + }) this.searchResults = response?.data?.ocs?.data || [] if (this.searchResults.length === 0) { diff --git a/src/components/NewConversationDialog/NewConversationDialog.vue b/src/components/NewConversationDialog/NewConversationDialog.vue index 3d9d880200e..7c4ac3cc64d 100644 --- a/src/components/NewConversationDialog/NewConversationDialog.vue +++ b/src/components/NewConversationDialog/NewConversationDialog.vue @@ -109,6 +109,7 @@ import { provide, ref } from 'vue' import AlertCircle from 'vue-material-design-icons/AlertCircle.vue' import Check from 'vue-material-design-icons/Check.vue' +import { showSuccess } from '@nextcloud/dialogs' import { t } from '@nextcloud/l10n' import NcButton from '@nextcloud/vue/dist/Components/NcButton.js' @@ -121,7 +122,7 @@ import LoadingComponent from '../LoadingComponent.vue' import { useId } from '../../composables/useId.ts' import { useIsInCall } from '../../composables/useIsInCall.js' -import { CONVERSATION } from '../../constants.js' +import { ATTENDEE, CONVERSATION } from '../../constants.js' import { setConversationPassword } from '../../services/conversationsService.js' import { addParticipant } from '../../services/participantsService.js' import { copyConversationLinkToClipboard } from '../../utils/handleUrl.ts' @@ -328,6 +329,11 @@ export default { } await Promise.all(promises) + + this.selectedParticipants.filter(participant => participant?.source === ATTENDEE.ACTOR_TYPE.EMAILS) + .forEach(participant => { + showSuccess(t('spreed', 'Invitation was sent to {actorId}', { actorId: participant.id })) + }) } catch (exception) { console.error('Error creating new conversation: ', exception) this.isLoading = false diff --git a/src/services/coreService.ts b/src/services/coreService.ts index b41d023f694..406ae196b1d 100644 --- a/src/services/coreService.ts +++ b/src/services/coreService.ts @@ -15,7 +15,7 @@ const canInviteToFederation = hasTalkFeature('local', 'federation-v1') type SearchPayload = { searchText: string - token?: string + token?: string | 'new' | 'pending' onlyUsers?: boolean } @@ -24,7 +24,8 @@ type SearchPayload = { * * @param payload the wrapping object; * @param payload.searchText The string that will be used in the search query. - * @param [payload.token] The token of the conversation (if any), or "new" for a new one + * @param [payload.token] The token of the conversation (if any) + * | 'new' for new conversations | 'pending' for new, but token will be known by the time of using autocomplete results * @param [payload.onlyUsers] Whether to return only registered users * @param options options */ @@ -38,13 +39,14 @@ const autocompleteQuery = async function({ searchText, token = 'new', onlyUsers token !== 'new' ? SHARE.TYPE.EMAIL : null, canInviteToFederation ? SHARE.TYPE.REMOTE : null, ].filter(type => type !== null) + const itemId = token === 'pending' ? 'new' : token return axios.get(generateOcsUrl('core/autocomplete/get'), { ...options, params: { search: searchText, itemType: 'call', - itemId: token, + itemId, shareTypes, }, })