• 
      

    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)