Skip to content

[pull] latest from ag-grid:latest - #945

Merged
pull[bot] merged 10 commits into
code:latestfrom
ag-grid:latest
Sep 17, 2026
Merged

pull[bot] merged 10 commits into
code:latestfrom
ag-grid:latest

Conversation

@pull

@pull pull Bot commented Sep 17, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

ag-jira-agent-ci Bot and others added 10 commits September 17, 2026 09:34
…a columns (#14740)

* AG-18094 fix row-group pill removal for groupHierarchy and object data

Removing a row-group pill left the grouping in place in two cases.

For a groupHierarchy source column, an explicit setColumns list was
expanded to re-seat all of the column's hierarchy virtuals, so a list
omitting one level re-expanded to include it. Route the explicit-list
path through a new seatProvidedCol hook, which seats virtuals only for
a source column that is not already active; the colDefs-extract path
keeps seating them unconditionally.

For a column whose callbacks throw during the resulting refresh, the
remove button dispatched before calling stopPropagation, so the click
fell through to the pill's sort listener, and the aborted update left a
stale pill in the drop zone. Stop propagation first, and refresh the
drop zone in a finally.

Also make the grouping-object-data example's keyCreator and
valueFormatter null-safe - they are called with an undefined value on
group rows.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* AG-18094 pin row-group hierarchy list semantics in tests

Address PR review feedback on the pill-removal fix.

The exception-path test asserted only the end state, so it stayed green
if the value formatter stopped throwing. Capture the window error and
assert the formatter's message, and replace the guessed delays with
waitFor polling.

Add a hierarchy test covering an explicit setRowGroupColumns list: a
round-trip of the current list is a no-op, while a list that omits an
already-grouped source column's levels drops them and stays dropped
under repetition.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* AG-18094 cover column-state restore of hierarchy levels

A restore is not an explicit column list, so applyColumnState re-seats a
groupHierarchy source column's levels even after an explicit list had
dropped them.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* AG-18094 remove row-group pills without re-deriving the column list

setRowGroupColumns/setPivotColumns stay a pure function of the list they
are given: a source col always seats its hierarchy levels, whatever the
current state. Pill removal now expresses a removal instead of a new full
list, so an individual hierarchy level can be dropped.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* AG-18094 cover hierarchy-level removal on the pivot drop zone

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* AG-18094 import TestGridsManager from ag-test-utils after the merge

latest moved the behavioural test helpers into the ag-test-utils workspace
package, so this branch's new test was the last '../test-utils' importer.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* AG-18094 record the thrown formatter error under happy-dom too

The behavioural environment moved from jsdom to happy-dom on latest, and happy-dom
rethrows a listener's exception out of dispatchEvent instead of surfacing it as a
window 'error' event. Capture both so the exception path stays asserted.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* AG-18094 carry pill-removal intent through the deferred commit

In apply-button mode a hierarchy pill removal was drafted as "the remaining
columns", and commit replayed that list through setColumns, which re-seats
every hierarchy virtual of the source columns that remain - so the pill
disappeared from the deferred UI and came back on Apply. The rowGroup/pivot
drafts now also carry the colIds the user explicitly removed, and commit
deactivates them after setColumns, matching the immediate strategy. A full-list
set still passes no removals, so setColumns stays a pure function of its list.

* AG-18094 honour an explicit hierarchy-level list on setColumns

Removing a row-group pill worked, but the next drop-zone add or reorder undid it: those
gestures commit a full-list set, and setColumns re-seated every configured level of any
source col in the list, so the level just removed came straight back.

seatActiveCol now seats a source col's levels only when the caller's list names none of
them. A bare ['date'] still expands to every level, idempotently, so the setter stays a
pure function of the list it is given; ['date-month', 'date'] is taken literally, which
is the only way to express grouping by one level and what the drop zone needs.

That leaves the deferred draft's removal carry load-bearing for just one state a colId
list cannot express - a source col with none of its levels - so its comment now says so
rather than claiming a purity it did not have.

---------

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Stephen Cooper <scooperdev@gmail.com>
Co-authored-by: Victor Musienko <8777372+sdwvit@users.noreply.github.com>
… event; retry far-edge scroll in continuous-auto-size (#15260)

* AG-18467 test(docs-e2e): retry the far-edge scroll in continuous-auto-size-in-action

`scrolling right fits the columns as they arrive` jumped the horizontal scroll
viewport to `scrollWidth` once and then waited on the "Gold" header. A
continuous auto-size pass landing while that scroll is in flight changes the
total column width and clamps `scrollLeft` back, so the last column group is
never rendered and the assertion waits out its full 20s timeout on a header
cell that is not in the DOM. Retrying the jump until the header is rendered
matches the idiom the next block in the same test already uses.

This is the one nightly failure in the cluster that recurs across runs
(webkit/vanilla on 16 Sep, chromium/typescript on 17 Sep); the three WebKit
tool-panel / sub-menu failures in the same run are a separate, unresolved
cause recorded on the ticket.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* AG-18467 fix(testing): stamp test IDs on popups opened without a grid event

The test-id service only re-stamped on grid events, so the Columns Tool Panel
context menu and hover-opened sub menus were stamped only when an unrelated
debounce happened to land after they opened. On Linux WebKit in the nightly
docs tests that never happened, so agIdFor.menu() found nothing while the menu
was plainly on screen. Observe the popup parent's child list instead.

---------

Co-authored-by: claude[bot] <noreply@anthropic.com>
Co-authored-by: Stephen Cooper <scooperdev@gmail.com>
…ustom layout (#15256)

* [AG-18218] Fix(columns-tool-panel): keep group expand state under a custom layout

`setColumnLayout` rebuilt the panel tree without applying any expansion state, so
every group reverted to its default. The restored `initialState` was also consumed
by the grid-derived tree, which may contain no groups at all - the saved group ids
were discarded before the custom layout that owns them existed.

Expansion is now captured and re-applied around a custom layout rebuild, and the
initial state stays pending until a tree with groups is built.

* fix(columns-tool-panel): keep restored group state for groups the grid layout lacks

The pending-state guard cleared the restored state as soon as any group was built,
so a grid whose own column groups differ from the custom layout's consumed it before
`setColumnLayout` ran and the custom group reverted to its default expansion.

Track the restored group ids as a set instead and use them as the fallback for group
ids the current tree does not contain, so there is no consumption point to get wrong:
live expansion wins for groups that exist, and the state still applies to whatever
layout eventually owns the rest.
…15197)

* AG-682 Log the AG package versions in the console under debug: true

Logs 'Version: AG Grid Community=<v>, AG Grid Enterprise=<v>, AG Charts
Enterprise=<v>' as the first debug line of grid creation, so mismatched
versions across the packages are visible without anyone having to ask.

The enterprise version is read from the registered EnterpriseCore module,
and the AG Charts version and edition are pushed into community from
IntegratedChartsModule.with() / SparklinesModule.with().

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* AG-682 Polish the debug version-logging comments and JSDoc wording

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* AG-682 Key the AG Charts version on the registered module, not a module-global

A grid now reports the AG Charts build of the charts modules it actually
registered. Previously the last `.with()` call anywhere in the application won,
so an app preparing IntegratedChartsModule.with(AgChartsEnterpriseModule) and
SparklinesModule.with(AgChartsCommunityModule) reported Community for a grid
using only the former.

* AG-682 Format the logVersion unit test

* AG-682 Cover differently configured charts modules in one process

* AG-682 Report the AG package versions in the dev validation overlay

The debug console line already lists the version of each AG package in use. The
validation overlay is where a reported problem is actually read, so show the same
versions in its footer and lead the copied diagnostics with them - a pasted
diagnostic now carries the build that produced it.

* AG-682 Keep the single-diagnostic markdown helper module-private

diagnosticsToMarkdown is now the only entry point the panels use, so the
per-diagnostic helper no longer needs exporting (knip).

* AG-682 Space the new overlay CSS rule per stylelint

* AG-682 Assert the overlay versions footer in the docs e2e examples

* AG-682 Report the versions from the grid's own module snapshot

The validation overlay derived its version list from the global module registry at the
moment the panel was built, which keeps changing as an application lazy-loads modules for
its other grids - so the footer and the copied diagnostics could name packages the grid
never instantiated, and disagree with each other and with the startup log. Capture the
text once in GridCoreCreator from the module list the grid is created from, and hand it to
every surface that reports it.

* AG-682 Report AG packages by npm name and open the hook to AG Studio

* AG-682 Buffer pre-init module errors so the overlay surfaces them

* AG-682 Replay a pre-init failure raised before capture was enabled

registerModules([IntegratedChartsModule, ValidationModule]) validates the
charts module while capture is still off, so error #257 was dropped and the
overlay's contents depended on the order the modules were passed in. Hold a
registration failure in a small pending list whatever the capture state, and
replay it when the ValidationModule turns capture on.

* Reduce comments

* AG-682 Apply suppression config before replaying pre-init diagnostics

---------

Co-authored-by: claude[bot] <noreply@anthropic.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Stephen Cooper <scooperdev@gmail.com>
…, not a columnResized event (#15261)

On Angular in Firefox and WebKit the spec read widths after the first
finished sizeColumnsToFit event, which could be a pass left over from the
previous action, and the click's own effect could land after the click
returned. Wait for the action's effect (column count or available width),
then for the columns to fill the grid again, before reading.
The ag-studio port in #15224 reinstated the substring ignore list that
RTI-3482 (#15222) had just removed, so `latest` again skips validation of
every `#reference-`, `#example-` and `#contact-section` anchor. Reference
anchors now render with static ids, so those fragments can and should be
resolved; only the footer's `#manage_cookies` is genuinely client-handled,
and it is matched exactly rather than as a substring.

Keeps the `stripQueryString` helper #15224 extracted — that part was a
refactor of the same query-stripping behaviour, not a revert.
…g a value (#15249)

* [AG-17609] Fix(columns): infer cellDataType from the first row holding a value

Inference read row 0 only, so a column whose leading row was empty resolved to
`false` and never recovered. Scan rows until a value is found instead, and read
the arriving rows from the row model during an update so transaction-populated
grids infer too.

* [AG-17609] Docs(cell-data-types): say which value the inferred type comes from

* [AG-17609] Refactor(columns): extract the per-column inference reset

* [AG-17609] Refactor(columns): carry row data on the rowDataUpdateStarted event

* [AG-17609] Docs(cell-data-types): drop the redundant inferred-value note

* [AG-17609] Refactor(columns): drop the comments added by this change
)

Every AG site emits the Organization node under the grid `@id`
(https://www.ag-grid.com/#organization), but the charts and studio pages
defined it as "AG Charts" / "AG Studio" with their own URL, logo and no
company details, while the grid home page defined it as AG Grid Ltd with
the Wikidata link. Move the company details into
`ag-website-shared/src/content/organization/agGridOrganization.json`,
emitted through a shared `buildAgGridOrganization`, so all three sites
emit the same node and there is one place to edit it.

The Organization `sameAs` now lists company-level profiles only (GitHub
organisation, X, YouTube, LinkedIn, Crunchbase, Wikidata) instead of the
footer's per-product social links; product profiles belong on the
SoftwareApplication node.
Adds the gh-triage-manual-construct-repro repository_dispatch event and
routes it to stage=construct-repro, mirroring the existing four manual
AITGH buttons. Consumer-side wiring for @ag-grid/dev-prompts' new
manual-dispatch-only construct-repro stage.
@pull pull Bot locked and limited conversation to collaborators Sep 17, 2026
@pull pull Bot added the ⤵️ pull label Sep 17, 2026
@pull
pull Bot merged commit a0074eb into code:latest Sep 17, 2026
3 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants