Both lists need their own search and bulk actions
Aliases: per-column filter · dual search · bulk add and remove
What it is
Left and right are two independent rosters. Search and select-all/clear must be built twice; one box cannot filter “the whole shuttle.” Search on the left is for objects still joinable; search on the right is for objects already in the subset, ready to leave. Bulk is the same: select-all on the left means “add the currently visible candidates,” select-all on the right means “remove the currently chosen.” One toolbar on top with a fuzzy scope turns add and remove into accidents under the same button.
Independent is not two decorative search fields; filter state, bulk scope, and empty copy must not leak across.
Why it happens
The two columns point opposite ways. On the left, people hunt in the source; on the right, they check or peel the target. A keyword against the source hits candidates; against the target it may mean “confirm it is among the chosen.” A shared filter can empty one column with the other’s query: searching a role name blanks the right, and people think the grant vanished. If bulk follows the shared filter, “left under this keyword” can become “clear every chosen item.”
Independence also makes emptiness intelligible: empty left is “no joinable match,” empty right is “that name is not among the chosen.” One “no results” cannot split those two empties.
Where it stops holding
When both columns are short, search may be omitted; once it appears it must be paired and scoped. Whether select-all is “current filter” or “the column’s universe” must be written on the button, and the two columns may differ (left: current search; right: clear all chosen). After a move from left to right, the item should leave the left’s filtered view and appear on the right — even if the right’s current filter does not match the name, there should be a landing or a note “added, not in this filter.” Keyboard focus must move between columns; bulk shortcuts need column context, not a global select-all that lights both.
Applying it
- Give each column its own search, select-all, and clear, with titles or buttons naming the column.
- Do not let filter state clear the other side; emptying the left search must not touch the right keyword.
- After a move, the object leaves the source view and enters the target; if the target filter hides it, say where it landed.
- How to check: search different words on left and right, select-all on each. Moves must come only from that column’s current hits. Leakage means scope was not independent.
Related
- Within the group: E3.14.1 A transfer list is for picking from a large set and seeing the selection whole · E3.14.3 Whether order is kept after a move must be defined · E3.14.4 Scan cost stays high when the set is huge
- Adjacent: E3.17 In-List Search and Filtering · E3.06 Multi-Select Dropdowns
- Search terms:
dual list search·per-column filter·bulk transfer