Skip to content

Commit 22a2eec

Browse files
committed
feat(users): extend search to include external ID in user tables
Update the search placeholder and filter logic in ManageUsersTable and UserInvitationsTable to match against external ID in addition to name and email. The existing shouldInclude in ManageUsersTable was refactored to pre-compute the query string and add the externalId check. UserInvitationsTable gains a search prop with a matching shouldInclude and a localised placeholder, plus sets searchable: true on the conditionally-rendered externalId column so TanStack's column-level filter also covers it. Add a searchText translation key to user-invitations/translations.ts mirroring the wording used in the users bundle.
1 parent d6e1808 commit 22a2eec

4 files changed

Lines changed: 27 additions & 10 deletions

File tree

client/app/bundles/course/user-invitations/components/tables/UserInvitationsTable.tsx

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ const UserInvitationsTable: FC<Props> = (props) => {
168168
of: 'externalId',
169169
title: t(tableTranslations.externalId ?? null),
170170
sortable: false,
171-
searchable: false,
171+
searchable: true,
172172
cell: (datum) => datum.externalId ?? null,
173173
} satisfies ColumnTemplate<InvitationRowData>,
174174
]
@@ -278,6 +278,23 @@ const UserInvitationsTable: FC<Props> = (props) => {
278278
data={processedInvitations}
279279
getRowId={(datum) => datum.id.toString()}
280280
indexing={{ indices: true }}
281+
search={{
282+
searchPlaceholder: t(translations.searchText),
283+
searchProps: {
284+
shouldInclude: (invitation, filterValue?: string): boolean => {
285+
if (!invitation.name && !invitation.email) return false;
286+
if (!filterValue?.length) return true;
287+
288+
const query = filterValue.toLowerCase().trim();
289+
return (
290+
invitation.name.toLowerCase().trim().includes(query) ||
291+
invitation.email.toLowerCase().trim().includes(query) ||
292+
(invitation.externalId?.toLowerCase().trim().includes(query) ??
293+
false)
294+
);
295+
},
296+
},
297+
}}
281298
sort={{
282299
initially: { by: 'status', order: 'asc' },
283300
}}

client/app/bundles/course/user-invitations/translations.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ const translations = defineMessages({
2222
id: 'course.userInvitations.UserInvitationsTable.noInvitations',
2323
defaultMessage: 'There are no invitations.',
2424
},
25+
searchText: {
26+
id: 'course.userInvitations.UserInvitationsTable.searchText',
27+
defaultMessage: 'Search by name, email or External ID',
28+
},
2529
pending: {
2630
id: 'course.userInvitations.UserInvitationsTable.pending',
2731
defaultMessage: 'Pending',

client/app/bundles/course/users/components/tables/ManageUsersTable/index.tsx

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -195,15 +195,11 @@ const ManageUsersTable = (props: ManageUsersTableProps): JSX.Element => {
195195
if (!user.name && !user.email) return false;
196196
if (!filterValue?.length) return true;
197197

198+
const query = filterValue.toLowerCase().trim();
198199
return (
199-
user.name
200-
.toLowerCase()
201-
.trim()
202-
.includes(filterValue.toLowerCase().trim()) ||
203-
user.email
204-
.toLowerCase()
205-
.trim()
206-
.includes(filterValue.toLowerCase().trim())
200+
user.name.toLowerCase().trim().includes(query) ||
201+
user.email.toLowerCase().trim().includes(query) ||
202+
(user.externalId?.toLowerCase().trim().includes(query) ?? false)
207203
);
208204
},
209205
},

client/app/bundles/course/users/translations.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const translations = defineMessages({
77
},
88
searchText: {
99
id: 'course.users.ManageUsersTable.ManageUsersTable.searchText',
10-
defaultMessage: 'Search by name or email',
10+
defaultMessage: 'Search by name, email or External ID',
1111
},
1212
renameSuccess: {
1313
id: 'course.users.ManageUsersTable.renameSuccess',

0 commit comments

Comments
 (0)