diff --git a/src/apps/admin/src/lib/services/user.service.ts b/src/apps/admin/src/lib/services/user.service.ts index 54d774ec8..4a61ad015 100644 --- a/src/apps/admin/src/lib/services/user.service.ts +++ b/src/apps/admin/src/lib/services/user.service.ts @@ -46,11 +46,23 @@ export const getMemberSuggestionsByHandle = async ( maxRating?: unknown } - const response = await xhrGetAsync( - `${EnvironmentConfig.API.V6}/members/autocomplete/${sanitizedHandle}`, + type MemberAutocompletePagedResponse = { + result?: MemberAutocompleteResponse[] + } + + // Prefer the query-param autocomplete endpoint: any authenticated member can + // call it. The path-param variant historically required copilot/admin only. + const response = await xhrGetAsync< + MemberAutocompleteResponse[] | MemberAutocompletePagedResponse + >( + `${EnvironmentConfig.API.V6}/members/autocomplete?term=${sanitizedHandle}`, ) - return response.map(member => ({ + const members = Array.isArray(response) + ? response + : (response?.result ?? []) + + return members.map(member => ({ firstName: member.firstName ?? undefined, handle: member.handle, lastName: member.lastName ?? undefined, diff --git a/src/apps/reports/src/pages/bulk-member-lookup/BulkMemberLookupPage.tsx b/src/apps/reports/src/pages/bulk-member-lookup/BulkMemberLookupPage.tsx index 7e1b9c439..1c5138552 100644 --- a/src/apps/reports/src/pages/bulk-member-lookup/BulkMemberLookupPage.tsx +++ b/src/apps/reports/src/pages/bulk-member-lookup/BulkMemberLookupPage.tsx @@ -1,4 +1,12 @@ -import { Dispatch, FC, SetStateAction, useCallback, useMemo, useState } from 'react' +import { + Dispatch, + FC, + MouseEvent, + SetStateAction, + useCallback, + useMemo, + useState, +} from 'react' import { InputHandlesSelector } from '~/apps/admin/src/lib/components/InputHandlesSelector' import { SearchUserInfo } from '~/apps/admin/src/lib/models' @@ -40,6 +48,14 @@ const buildDownloadName = (extension: 'json' | 'csv'): string => ( `bulk-member-lookup.${extension}` ) +/** + * Stops table-row click handling so profile links can navigate. + * Table rows call preventDefault on click by default. + */ +function handleProfileLinkClick(event: MouseEvent): void { + event.stopPropagation() +} + /** * Parses the blob response from the reports API into lookup rows. * @param blob JSON blob returned from `/identity/users-by-handles`. @@ -178,9 +194,10 @@ export const BulkMemberLookupPage: FC = () => { data.handle ? ( {data.handle} @@ -348,7 +365,11 @@ export const BulkMemberLookupPage: FC = () => {
{results.length ? ( - +
) : (
No members were returned for the provided handles.