Hide fieldsets without visible fields, and support dynamic fieldsets.

Review Request #12291 — Created May 20, 2022 and submitted

Information

Review Board
release-4.0.x

Reviewers

Registered fieldsets with registered fields were always being shown,
even if none of the fields inside were visible. This was because we only
determined visibility based on registered classes, and didn't even
instantiate fields until we had begun rendering the fieldset template.

This was prominent when installing Power Pack 5, which registers a
fieldset for SOS. This is shown but empty on any review request not
backed by SOS.

This change moves field construction out of the template rendering and
into the fieldset itself. A new build_fields() method is responsible
for instantiating all the fields, and a fields property returns a
cached view of that. This is combined with a new should_render
property, which considers visibility of the contained fields.

That simplifies templates and fixes visibility, but it also opens the
door to dynamic fields/fieldsets. A long-term project we've had is a
field editor for Power Pack, and that requires a way to dynamically
create new fieldsets and fields without first registering them globally.
This change enables the dynamic fields part, leaving only dynamic
fieldset generation remaining.

There are also some documentation fixes and a few fixes for state
assumptions noticed during testing.

Verified that the SOS fieldset wasn't being shown outside of SOS-based
review requests.

Added new unit tests, which all pass.

Tested all the current fields we show on review requests.

Summary ID
Hide fieldsets without visible fields, and support dynamic fieldsets.
Registered fieldsets with registered fields were always being shown, even if none of the fields inside were visible. This was because we only determined visibility based on registered classes, and didn't even instantiate fields until we had begun rendering the fieldset template. This was prominent when installing Power Pack 5, which registers a fieldset for SOS. This is shown but empty on any review request not backed by SOS. This change moves field construction out of the template rendering and into the fieldset itself. A new `build_fields()` method is responsible for instantiating all the fields, and a `fields` property returns a cached view of that. This is combined with a new `should_render` property, which considers visibility of the contained fields. That simplifies templates and fixes visibility, but it also opens the door to dynamic fields/fieldsets. A long-term project we've had is a field editor for Power Pack, and that requires a way to dynamically create new fieldsets and fields without first registering them globally. This change enables the dynamic fields part, leaving only dynamic fieldset generation remaining.
f1bedb4401c32860e5fc6314e25b7a795bad4c48
Description From Last Updated

F401 'django.utils.six' imported but unused

reviewbotreviewbot
Checks run (1 failed, 1 succeeded)
flake8 failed.
JSHint passed.

flake8

chipx86
david
  1. Ship It!
  2. 
      
chipx86
Review request changed
Status:
Completed
Change Summary:
Pushed to release-4.0.x (935bc01)