Feature/direct user selection and refactor - #6
Open
antonio-rodriguez-tam wants to merge 5 commits into
Open
Conversation
…d of hardcoding "Storage Quota (TB)" The attribute name can be "Storage Quota (TiB)" depending on the resource, so we now dynamically build it from the resource's quantity_label property.
… undefined is_direct bug Add "Select Users" mode to compose: staff can hand-pick recipients by username/email search or bulk paste instead of using the filter cascade. Includes RecipientResolver direct-mode support, UserSearchView, UserBulkResolveView, compose_direct_select.js, and updated tests. Refactor filters, models, views, and JS for improved readability and reduced duplication. Fix undefined `is_direct` variable in ValidateView that caused a 500 error in direct selection mode.
…iews Bulk resolve now splits on commas, semicolons, tabs, and spaces in addition to newlines, supporting CSV paste and spreadsheet copy. Batch DB queries replace per-identifier lookups (N queries → 2). Extract _parse_json, _normalize_filter_keys, and _serialize_user as module-level helpers to eliminate cross-class static method calls and duplicate code.
antonio-rodriguez-tam
marked this pull request as ready for review
July 21, 2026 18:18
…rch, and fix draft body race condition - Sort PI-role rows first in recipient enumeration so deduped users receive their PI-context email by default - Add per-row include/exclude checkboxes on all multi-email recipient rows with dedupe_selections dict for granular control - Replace client-side recipient search with debounced server-side search across all pages - Fix TinyMCE race condition where draft body appeared blank because setBodyContent was called before the editor finished initializing
…e-all at allocation scope Recipients are now resolved through ProjectUser membership only — AllocationUser is no longer used to determine who receives emails. Allocation filters identify which projects have matching allocations, then all ProjectUsers on those projects are included. This fixes both missing recipients (ProjectUsers who weren't AllocationUsers) and wrong recipients (AllocationUsers who weren't ProjectUsers). "Dedupe all" now keeps exactly one email per user regardless of scope by using the legacy first-tuple-only path instead of per-project selections. Per-row checkboxes still allow fine-grained control by transitioning individual users to the selections path. Also adds a loading spinner to the validation feedback bar while the request is in flight.
claire-peters
self-requested a review
August 13, 2026 19:15
claire-peters
approved these changes
Aug 18, 2026
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.
Add direct user selection with CSV bulk paste support
Description:
Summary
Test plan
Security Checklist
Additional Notes
Checklist