Skip to content

Add dynamic detailCellRendererParams support for Master/Detail detail-grid columns#455

Open
Copilot wants to merge 9 commits intov35from
copilot/provide-dynamic-columns-detail-grid
Open

Add dynamic detailCellRendererParams support for Master/Detail detail-grid columns#455
Copilot wants to merge 9 commits intov35from
copilot/provide-dynamic-columns-detail-grid

Conversation

Copy link
Copy Markdown

Copilot AI commented Apr 22, 2026

Master/Detail in Dash AG Grid documented static detailCellRendererParams, but did not cover AG Grid’s dynamic detail-grid definitions. Users attempting to update detail params dynamically could end up with already-open detail grids stuck in a loading/blank state.

  • Runtime support: dynamic detail params

    • Updated the grid prop conversion path to accept detailCellRendererParams as a function ({"function": "..."}) in addition to a static object.
    • Dynamic function results are now normalized through the same path as static params, including:
      • suppressCallbackgetDetailRowData wiring
      • detailGridOptions recursive conversion/component injection
      • nested Dash/AG Grid function conversion behavior
  • Prop contract update

    • Expanded detailCellRendererParams PropTypes to support both:
      • existing static object shape
      • { function: string } dynamic form
  • Docs: dynamic columns example

    • Extended the enterprise Master/Detail example with a dedicated dynamic-columns section showing per-row detail column definitions via JS function return values.
  • Focused test coverage

    • Added a regression test for dynamic detailCellRendererParams in Master/Detail to validate per-row detail column behavior.
detailCellRendererParams={
    "function": """params.data.region === "Asia"
        ? {detailGridOptions: {columnDefs: %s}, detailColName: "cities", suppressCallback: true}
        : {detailGridOptions: {columnDefs: %s}, detailColName: "cities", suppressCallback: true}"""
    % (detailColumnDefsSimple, detailColumnDefs)
}

Copilot AI changed the title [WIP] Add support for dynamic columns in master/detail grid Add dynamic detailCellRendererParams support for Master/Detail detail-grid columns Apr 22, 2026
Copilot AI requested a review from BSd3v April 22, 2026 18:56
@BSd3v
Copy link
Copy Markdown
Collaborator

BSd3v commented Apr 23, 2026

@copilot

Add a test for this. Check the headers of the detail grid.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds runtime + API + documentation support for dynamic detailCellRendererParams (function form) in Dash AG Grid Master/Detail, ensuring returned params are normalized/converted the same way as static params to avoid blank/loading detail grids when rows are expanded.

Changes:

  • Updated prop conversion to allow detailCellRendererParams to be provided as { function: "..." }, normalizing the returned object (including suppressCallback wiring + recursive detailGridOptions conversion).
  • Expanded detailCellRendererParams PropTypes to accept either a static params object or { function: string }.
  • Added docs + a regression test demonstrating per-row dynamic detail column definitions.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

File Description
src/lib/fragments/AgGrid.react.js Implements dynamic detailCellRendererParams handling + shared normalization/conversion of returned params.
src/lib/components/AgGrid.react.js Updates PropTypes contract to allow dynamic { function: string } form.
docs/examples/enterprise/master_detail.py Adds a dynamic-detail-columns example using a JS function returning per-row detail grid columnDefs.
tests/test_recursive_functions.py Adds a regression test validating dynamic per-row detail grid columns in Master/Detail.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/lib/fragments/AgGrid.react.js
Comment thread src/lib/fragments/AgGrid.react.js
Copy link
Copy Markdown
Author

Copilot AI commented Apr 23, 2026

@copilot

Add a test for this. Check the headers of the detail grid.

Added header checks to the dynamic Master/Detail regression test in commit 8813c63. The test now asserts the detail grid headers are ['City', 'Pop. (City proper)'] for Asia rows and ['City', 'Pop. (City proper)', 'Pop. (Metro area)'] for Americas rows. Screenshot: https://github.com/user-attachments/assets/1bc3d8f6-febf-46f5-8d3c-5c776f9bc724

@BSd3v
Copy link
Copy Markdown
Collaborator

BSd3v commented Apr 23, 2026

@copilot

Add changelog entry

Copy link
Copy Markdown
Author

Copilot AI commented Apr 23, 2026

@copilot

Add changelog entry

Added in commit e864f33: CHANGELOG.md now includes an [unreleased] entry for PR #455. Screenshot: https://github.com/user-attachments/assets/1bc3d8f6-febf-46f5-8d3c-5c776f9bc724

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • accounts.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=4409 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.MkxZoe --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,4598328645886789876,6974741826646480437,262144 --disable-features=IgnoreDuplicateNavs,PaintHolding,Prewarm --variations-seed-version --pseudonymization-salt-handle=7,i,2876512050437374030,7262218260078121923,4 --trace-process-track-uuid=3190708989122997041 --enable-logging (dns block)
    • Triggering command: /opt/google/chrome/chrome /opt/google/chrome/chrome --allow-pre-commit-input --disable-REDACTED-networking --disable-REDACTED-timer-throttling --disable-REDACTEDing-occluded-windows --disable-client-side-phishing-detection --disable-default-apps --disable-dev-shm-usage --disable-features=IgnoreDuplicateNavs,Prewarm --disable-gpu --disable-hang-monitor --disable-popup-blocking --disable-prompt-on-repost --disable-sync --enable-automation --enable-logging --headless --log-level=0 --no-first-run --no-sandbox (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=4546 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.etb88D --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,16073162739647705996,17399028199164014649,262144 --disable-features=IgnoreDuplicateNavs,PaintHolding,Prewarm --variations-seed-version --pseudonymization-salt-handle=7,i,18410301360964166528,1191152107082569436,4 --trace-process-track-uuid=3190708989122997041 --enable-logging (dns block)
  • clients2.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=4409 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.MkxZoe --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,4598328645886789876,6974741826646480437,262144 --disable-features=IgnoreDuplicateNavs,PaintHolding,Prewarm --variations-seed-version --pseudonymization-salt-handle=7,i,2876512050437374030,7262218260078121923,4 --trace-process-track-uuid=3190708989122997041 --enable-logging (dns block)
    • Triggering command: /opt/google/chrome/chrome /opt/google/chrome/chrome --allow-pre-commit-input --disable-REDACTED-networking --disable-REDACTED-timer-throttling --disable-REDACTEDing-occluded-windows --disable-client-side-phishing-detection --disable-default-apps --disable-dev-shm-usage --disable-features=IgnoreDuplicateNavs,Prewarm --disable-gpu --disable-hang-monitor --disable-popup-blocking --disable-prompt-on-repost --disable-sync --enable-automation --enable-logging --headless --log-level=0 --no-first-run --no-sandbox (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=4546 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.etb88D --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,16073162739647705996,17399028199164014649,262144 --disable-features=IgnoreDuplicateNavs,PaintHolding,Prewarm --variations-seed-version --pseudonymization-salt-handle=7,i,18410301360964166528,1191152107082569436,4 --trace-process-track-uuid=3190708989122997041 --enable-logging (dns block)
  • www.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=4409 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.MkxZoe --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,4598328645886789876,6974741826646480437,262144 --disable-features=IgnoreDuplicateNavs,PaintHolding,Prewarm --variations-seed-version --pseudonymization-salt-handle=7,i,2876512050437374030,7262218260078121923,4 --trace-process-track-uuid=3190708989122997041 --enable-logging (dns block)
    • Triggering command: /opt/google/chrome/chrome /opt/google/chrome/chrome --allow-pre-commit-input --disable-REDACTED-networking --disable-REDACTED-timer-throttling --disable-REDACTEDing-occluded-windows --disable-client-side-phishing-detection --disable-default-apps --disable-dev-shm-usage --disable-features=IgnoreDuplicateNavs,Prewarm --disable-gpu --disable-hang-monitor --disable-popup-blocking --disable-prompt-on-repost --disable-sync --enable-automation --enable-logging --headless --log-level=0 --no-first-run --no-sandbox (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=4546 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.etb88D --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,16073162739647705996,17399028199164014649,262144 --disable-features=IgnoreDuplicateNavs,PaintHolding,Prewarm --variations-seed-version --pseudonymization-salt-handle=7,i,18410301360964166528,1191152107082569436,4 --trace-process-track-uuid=3190708989122997041 --enable-logging (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

@BSd3v
Copy link
Copy Markdown
Collaborator

BSd3v commented Apr 23, 2026

@copilot

Fix the failing test

Copy link
Copy Markdown
Author

Copilot AI commented Apr 23, 2026

@copilot

Fix the failing test

Fixed in commit 94f7f7e: updated the test to collapse the first master row with get_cell_collapsable(...) and wait for the detail grid to be removed before expanding the second row, resolving the CI interaction failure. Screenshot: https://github.com/user-attachments/assets/1bc3d8f6-febf-46f5-8d3c-5c776f9bc724

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • accounts.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=4642 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.eDvifo --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,26534642617407754,14491670401810411381,262144 --disable-features=IgnoreDuplicateNavs,PaintHolding,Prewarm --variations-seed-version --pseudonymization-salt-handle=7,i,4272549905482673132,14308983868950830581,4 --trace-process-track-uuid=3190708989122997041 --enable-logging (dns block)
    • Triggering command: /opt/google/chrome/chrome /opt/google/chrome/chrome --allow-pre-commit-input --disable-REDACTED-networking --disable-REDACTED-timer-throttling --disable-REDACTEDing-occluded-windows --disable-client-side-phishing-detection --disable-default-apps --disable-dev-shm-usage --disable-features=IgnoreDuplicateNavs,Prewarm --disable-gpu --disable-hang-monitor --disable-popup-blocking --disable-prompt-on-repost --disable-sync --enable-automation --enable-logging --headless --log-level=0 --no-first-run --no-sandbox (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=4799 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.aPvLpD --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,15090240026262963273,4357858048360726897,262144 --disable-features=IgnoreDuplicateNavs,PaintHolding,Prewarm --variations-seed-version --pseudonymization-salt-handle=7,i,4736287341360953545,14771285397609558352,4 --trace-process-track-uuid=3190708989122997041 --enable-logging (dns block)
  • clients2.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=4642 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.eDvifo --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,26534642617407754,14491670401810411381,262144 --disable-features=IgnoreDuplicateNavs,PaintHolding,Prewarm --variations-seed-version --pseudonymization-salt-handle=7,i,4272549905482673132,14308983868950830581,4 --trace-process-track-uuid=3190708989122997041 --enable-logging (dns block)
    • Triggering command: /opt/google/chrome/chrome /opt/google/chrome/chrome --allow-pre-commit-input --disable-REDACTED-networking --disable-REDACTED-timer-throttling --disable-REDACTEDing-occluded-windows --disable-client-side-phishing-detection --disable-default-apps --disable-dev-shm-usage --disable-features=IgnoreDuplicateNavs,Prewarm --disable-gpu --disable-hang-monitor --disable-popup-blocking --disable-prompt-on-repost --disable-sync --enable-automation --enable-logging --headless --log-level=0 --no-first-run --no-sandbox (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=4799 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.aPvLpD --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,15090240026262963273,4357858048360726897,262144 --disable-features=IgnoreDuplicateNavs,PaintHolding,Prewarm --variations-seed-version --pseudonymization-salt-handle=7,i,4736287341360953545,14771285397609558352,4 --trace-process-track-uuid=3190708989122997041 --enable-logging (dns block)
  • www.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=4642 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.eDvifo --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,26534642617407754,14491670401810411381,262144 --disable-features=IgnoreDuplicateNavs,PaintHolding,Prewarm --variations-seed-version --pseudonymization-salt-handle=7,i,4272549905482673132,14308983868950830581,4 --trace-process-track-uuid=3190708989122997041 --enable-logging (dns block)
    • Triggering command: /opt/google/chrome/chrome /opt/google/chrome/chrome --allow-pre-commit-input --disable-REDACTED-networking --disable-REDACTED-timer-throttling --disable-REDACTEDing-occluded-windows --disable-client-side-phishing-detection --disable-default-apps --disable-dev-shm-usage --disable-features=IgnoreDuplicateNavs,Prewarm --disable-gpu --disable-hang-monitor --disable-popup-blocking --disable-prompt-on-repost --disable-sync --enable-automation --enable-logging --headless --log-level=0 --no-first-run --no-sandbox (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --crashpad-handler-pid=4799 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/org.chromium.Chromium.scoped_dir.aPvLpD --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,15090240026262963273,4357858048360726897,262144 --disable-features=IgnoreDuplicateNavs,PaintHolding,Prewarm --variations-seed-version --pseudonymization-salt-handle=7,i,4736287341360953545,14771285397609558352,4 --trace-process-track-uuid=3190708989122997041 --enable-logging (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated no new comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@BSd3v BSd3v marked this pull request as ready for review April 24, 2026 19:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Provide Dynamic Columns for the Master / Detail Grid

4 participants