Summary
Follow-up to #409. Batch set/clear level landed in multi-select via PR #422. This issue tracks extending the Collection multi-select "batch edit" affordance to the remaining per-dance metadata that make sense to bulk-edit.
Background
#409 originally read as "bulk-add tags," but batch tag add/remove already shipped in #93, and the genuinely new ask ("add metadata like level in multi-select") was scoped down to level for one atomic, reviewable PR (#422). The remaining metadata fields were deliberately deferred here.
Scope
Add batch edit for the following, each as its own atomic PR where practical, reusing the setLevelForMany transactional pattern (one transaction, idempotent skip, changed-count, Undo, AT announcements, empty no-op):
Guardrails (carry over from #409)
- core stays Flutter-free; new batch mutations go through a single transaction in
DanceRepository (no half-updates).
- Idempotent (skip dances already at target), return changed count, Undo restores prior per-dance values, AT announcements, empty-selection no-op/disabled.
- a11y: pickers expose role + text label (never color alone), mirroring
batch_level_dialog.dart.
Out of scope
Anything already shipped (tag add/remove #93, level #422).
Summary
Follow-up to #409. Batch set/clear level landed in multi-select via PR #422. This issue tracks extending the Collection multi-select "batch edit" affordance to the remaining per-dance metadata that make sense to bulk-edit.
Background
#409 originally read as "bulk-add tags," but batch tag add/remove already shipped in #93, and the genuinely new ask ("add metadata like level in multi-select") was scoped down to
levelfor one atomic, reviewable PR (#422). The remaining metadata fields were deliberately deferred here.Scope
Add batch edit for the following, each as its own atomic PR where practical, reusing the
setLevelForManytransactional pattern (one transaction, idempotent skip, changed-count, Undo, AT announcements, empty no-op):Dance.rating, clearRating).Guardrails (carry over from #409)
DanceRepository(no half-updates).batch_level_dialog.dart.Out of scope
Anything already shipped (tag add/remove #93, level #422).