feat(users): extend search to include external ID in user tables#8407
Open
LWS49 wants to merge 2 commits into
Open
feat(users): extend search to include external ID in user tables#8407LWS49 wants to merge 2 commits into
LWS49 wants to merge 2 commits into
Conversation
…itations
Allows institutions to link Coursemology enrolments to their own student
records or LMS identifiers. The field is stored on CourseUser and
Course::UserInvitation and validated unique per course across both tables
via a cross-table concern and partial DB index - a pending invitation holds
its ext_id until confirmed, preventing collisions with direct enrolments.
Surfaces:
- Individual invite form: ext_id input field
- Bulk CSV invite: ext_id column in both template variants (with and without
Timeline column); set on new records only - existing pending invitations
and enrolled users are read-only in this flow
- Manage users table: inline editable ext_id column (always visible)
- Score summary export: ext_id column included when any student has one
- Statistics > Students table: ext_id column, sortable and searchable,
shown only when at least one student has a non-null ext_id
View-only tables suppress the ext_id column when no course members have
one set, consistent with how group manager, gamification, and video columns
are conditionally shown. Edit tables always show it.
Also changes error responses from the invitations controller from a single
concatenated string to an array of per-record strings, enabling the frontend
to render overflow counts without truncating meaningful error detail.
22a2eec to
3712743
Compare
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 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.
3712743 to
31430da
Compare
6226857 to
9c27231
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.