Render groups back as selector-ish text — NOT a full inverse of
parseSelector/selectorToFilterRules (most rule kinds have no single
canonical spelling; a regex Name rule and a typed-in contains rule
both become Rule.name, and only one of those round-trips through text).
What this DOES round-trip exactly is the shape the selector's own union
syntax cares about: class names (IfcWall, IfcDoor, …) and GlobalIds,
+-joined across groups. Used by the Selector field to echo back what
the CURRENT filter state reads as, so adding a second group in the
builder is visible as a second +-joined clause without leaving the
builder (#4904).
All-or-nothing: an empty group, or a group whose rules do not reduce to
exactly ONE renderable clause, makes the WHOLE echo '' rather than a
partial rendering — review (PR #4987) caught that joining per-group
fragments with + regardless produced text that read as a DIFFERENT
query than what evaluation actually runs: an empty group left a
dangling +, and several ifcType/globalId rules AND'd within one
group rendered as comma-separated union terms (selector-text unions use
, to ADD classes, not narrow them), so a two-rule AND group echoed as
something the evaluator would read as broader than what it actually
matches. Silently showing a narrower or broader query back to the user
is the same "matched nothing, said nothing" defect class #4091 exists to
avoid, so this omits the echo entirely rather than guess.
Render
groupsback as selector-ish text — NOT a full inverse ofparseSelector/selectorToFilterRules(most rule kinds have no single canonical spelling; a regexNamerule and a typed-incontainsrule both becomeRule.name, and only one of those round-trips through text). What this DOES round-trip exactly is the shape the selector's own union syntax cares about: class names (IfcWall,IfcDoor, …) and GlobalIds,+-joined across groups. Used by the Selector field to echo back what the CURRENT filter state reads as, so adding a second group in the builder is visible as a second+-joined clause without leaving the builder (#4904).All-or-nothing: an empty group, or a group whose rules do not reduce to exactly ONE renderable clause, makes the WHOLE echo
''rather than a partial rendering — review (PR #4987) caught that joining per-group fragments with+regardless produced text that read as a DIFFERENT query than what evaluation actually runs: an empty group left a dangling+, and severalifcType/globalIdrules AND'd within one group rendered as comma-separated union terms (selector-text unions use,to ADD classes, not narrow them), so a two-rule AND group echoed as something the evaluator would read as broader than what it actually matches. Silently showing a narrower or broader query back to the user is the same "matched nothing, said nothing" defect class #4091 exists to avoid, so this omits the echo entirely rather than guess.