Skip to content

Rework cascade internal store initialization to be data-driven from the provider#257220

Merged
eokoneyo merged 4 commits into
elastic:mainfrom
eokoneyo:chore/rework-cascade-store
Mar 16, 2026
Merged

Rework cascade internal store initialization to be data-driven from the provider#257220
eokoneyo merged 4 commits into
elastic:mainfrom
eokoneyo:chore/rework-cascade-store

Conversation

@eokoneyo
Copy link
Copy Markdown
Contributor

Summary

  • Lifts the data prop from DataCascadeImpl up to DataCascadeProvider, making the store the single source of truth for cascade group nodes from initialization onward.
  • Introduces a useEffect synchronization in the provider that detects external changes to data or cascadeGroups and resets the store (clearing derived table/leaf state) via a new internal _setStoreState action, ensuring the cascade re-renders correctly when its input data changes.
  • Renames the setInitialState reducer to setInitialGroupNodes for clarity, and adds a _setStoreState reducer (hidden from context consumers) that performs a full state reset when the source data shape changes.

Changes

  • DataCascadeProvider (store_provider/index.tsx): Now accepts a required data prop, builds the initial store state via useMemo, and synchronizes external prop changes through useEffect. The context value is memoized, and the _setStoreState action is excluded from the consumer-facing type.
  • DataCascadeImpl / types.ts: Removed the data prop from the impl component and its type definition; the table hook now reads groupNodes directly from the store.
  • components/index.tsx: Passes data to DataCascadeProvider instead of DataCascadeImpl; adds data to the memoization dependency array.
  • store_provider/reducers.ts: Added _setStoreState reducer (resets table, leafNodes, groupNodes, columns); renamed setInitialState to setInitialGroupNodes; removed an unnecessary spread in setRowGroupNodeData.
  • store_provider/store.ts: Relaxed the store state type constraint from Record<string, unknown> to object; simplified the state return (removed getter indirection).
  • useCascadeTable (lib/core/table/index.tsx): Removed the initialData parameter; data is now read from the store via useDataCascadeState.
  • Tests: Updated all test files to pass the required data prop to DataCascadeProvider; updated reducer test to use the renamed setInitialGroupNodes.

@eokoneyo
Copy link
Copy Markdown
Contributor Author

/ci

@eokoneyo eokoneyo self-assigned this Mar 11, 2026
@eokoneyo eokoneyo added Team:SharedUX Platform AppEx-SharedUX (formerly Global Experience) t// release_note:skip Skip the PR/issue when compiling release notes labels Mar 11, 2026
@eokoneyo
Copy link
Copy Markdown
Contributor Author

/ci

@eokoneyo
Copy link
Copy Markdown
Contributor Author

@elasticmachine merge upstream

@eokoneyo
Copy link
Copy Markdown
Contributor Author

/ci

@elasticmachine
Copy link
Copy Markdown
Contributor

💚 Build Succeeded

Metrics [docs]

Async chunks

Total size of all lazy-loaded chunks that will be downloaded as the user navigates the app

id before after diff
discover 1.6MB 1.6MB +1.1KB

History

cc @eokoneyo

@eokoneyo eokoneyo marked this pull request as ready for review March 12, 2026 13:10
@eokoneyo eokoneyo requested a review from a team as a code owner March 12, 2026 13:10
@elasticmachine
Copy link
Copy Markdown
Contributor

Pinging @elastic/appex-sharedux (Team:SharedUX)

@eokoneyo eokoneyo added backport:skip This PR does not require backporting backport:version Backport to applied version labels and removed backport:skip This PR does not require backporting backport:version Backport to applied version labels labels Mar 16, 2026
@eokoneyo
Copy link
Copy Markdown
Contributor Author

@elasticmachine merge upstream

@eokoneyo eokoneyo merged commit 4251df5 into elastic:main Mar 16, 2026
18 checks passed
@eokoneyo eokoneyo deleted the chore/rework-cascade-store branch March 16, 2026 16:34
sorenlouv pushed a commit that referenced this pull request Mar 17, 2026
…he provider (#257220)

### Summary

- Lifts the `data` prop from `DataCascadeImpl` up to
`DataCascadeProvider`, making the store the single source of truth for
cascade group nodes from initialization onward.
- Introduces a `useEffect` synchronization in the provider that detects
external changes to `data` or `cascadeGroups` and resets the store
(clearing derived table/leaf state) via a new internal `_setStoreState`
action, ensuring the cascade re-renders correctly when its input data
changes.
- Renames the `setInitialState` reducer to `setInitialGroupNodes` for
clarity, and adds a `_setStoreState` reducer (hidden from context
consumers) that performs a full state reset when the source data shape
changes.

### Changes

- **`DataCascadeProvider` (`store_provider/index.tsx`)**: Now accepts a
required `data` prop, builds the initial store state via `useMemo`, and
synchronizes external prop changes through `useEffect`. The context
value is memoized, and the `_setStoreState` action is excluded from the
consumer-facing type.
- **`DataCascadeImpl` / `types.ts`**: Removed the `data` prop from the
impl component and its type definition; the table hook now reads
`groupNodes` directly from the store.
- **`components/index.tsx`**: Passes `data` to `DataCascadeProvider`
instead of `DataCascadeImpl`; adds `data` to the memoization dependency
array.
- **`store_provider/reducers.ts`**: Added `_setStoreState` reducer
(resets table, leafNodes, groupNodes, columns); renamed
`setInitialState` to `setInitialGroupNodes`; removed an unnecessary
spread in `setRowGroupNodeData`.
- **`store_provider/store.ts`**: Relaxed the store state type constraint
from `Record<string, unknown>` to `object`; simplified the `state`
return (removed getter indirection).
- **`useCascadeTable` (`lib/core/table/index.tsx`)**: Removed the
`initialData` parameter; data is now read from the store via
`useDataCascadeState`.
- **Tests**: Updated all test files to pass the required `data` prop to
`DataCascadeProvider`; updated reducer test to use the renamed
`setInitialGroupNodes`.

<!--
### Test plan

- [ ] Existing unit tests pass (`yarn test:jest` for the
`document_data_cascade` package)
- [ ] Verify cascade renders correctly with initial data provided
through the provider
- [ ] Verify cascade re-renders when external `data` or `cascadeGroups`
props change (store resets derived state)
- [ ] Verify `_setStoreState` is not accessible to context consumers
outside the provider
### Checklist

Check the PR satisfies following conditions. 

Reviewers should verify this PR satisfies this list as well.

- [ ] Any text added follows [EUI's writing
guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses
sentence case text and includes [i18n
support](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md)
- [ ]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
- [ ] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
- [ ] If a plugin configuration key changed, check if it needs to be
allowlisted in the cloud and added to the [docker
list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)
- [ ] This was checked for breaking HTTP API changes, and any breaking
changes have been approved by the breaking-change committee. The
`release_note:breaking` label should be applied in these situations.
- [ ] [Flaky Test
Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was
used on any tests changed
- [ ] The PR description includes the appropriate Release Notes section,
and the correct `release_note:*` label is applied per the
[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)
- [ ] Review the [backport
guidelines](https://docs.google.com/document/d/1VyN5k91e5OVumlc0Gb9RPa3h1ewuPE705nRtioPiTvY/edit?usp=sharing)
and apply applicable `backport:*` labels.

### Identify risks

Does this PR introduce any risks? For example, consider risks like hard
to test bugs, performance regression, potential of data loss.

Describe the risk, its severity, and mitigation for each identified
risk. Invite stakeholders and evaluate how to proceed before merging.

- [ ] [See some risk
examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx)
- [ ] ...


-->

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
qn895 pushed a commit to qn895/kibana that referenced this pull request Mar 18, 2026
…he provider (elastic#257220)

### Summary

- Lifts the `data` prop from `DataCascadeImpl` up to
`DataCascadeProvider`, making the store the single source of truth for
cascade group nodes from initialization onward.
- Introduces a `useEffect` synchronization in the provider that detects
external changes to `data` or `cascadeGroups` and resets the store
(clearing derived table/leaf state) via a new internal `_setStoreState`
action, ensuring the cascade re-renders correctly when its input data
changes.
- Renames the `setInitialState` reducer to `setInitialGroupNodes` for
clarity, and adds a `_setStoreState` reducer (hidden from context
consumers) that performs a full state reset when the source data shape
changes.

### Changes

- **`DataCascadeProvider` (`store_provider/index.tsx`)**: Now accepts a
required `data` prop, builds the initial store state via `useMemo`, and
synchronizes external prop changes through `useEffect`. The context
value is memoized, and the `_setStoreState` action is excluded from the
consumer-facing type.
- **`DataCascadeImpl` / `types.ts`**: Removed the `data` prop from the
impl component and its type definition; the table hook now reads
`groupNodes` directly from the store.
- **`components/index.tsx`**: Passes `data` to `DataCascadeProvider`
instead of `DataCascadeImpl`; adds `data` to the memoization dependency
array.
- **`store_provider/reducers.ts`**: Added `_setStoreState` reducer
(resets table, leafNodes, groupNodes, columns); renamed
`setInitialState` to `setInitialGroupNodes`; removed an unnecessary
spread in `setRowGroupNodeData`.
- **`store_provider/store.ts`**: Relaxed the store state type constraint
from `Record<string, unknown>` to `object`; simplified the `state`
return (removed getter indirection).
- **`useCascadeTable` (`lib/core/table/index.tsx`)**: Removed the
`initialData` parameter; data is now read from the store via
`useDataCascadeState`.
- **Tests**: Updated all test files to pass the required `data` prop to
`DataCascadeProvider`; updated reducer test to use the renamed
`setInitialGroupNodes`.

<!--
### Test plan

- [ ] Existing unit tests pass (`yarn test:jest` for the
`document_data_cascade` package)
- [ ] Verify cascade renders correctly with initial data provided
through the provider
- [ ] Verify cascade re-renders when external `data` or `cascadeGroups`
props change (store resets derived state)
- [ ] Verify `_setStoreState` is not accessible to context consumers
outside the provider
### Checklist

Check the PR satisfies following conditions. 

Reviewers should verify this PR satisfies this list as well.

- [ ] Any text added follows [EUI's writing
guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses
sentence case text and includes [i18n
support](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md)
- [ ]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
- [ ] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
- [ ] If a plugin configuration key changed, check if it needs to be
allowlisted in the cloud and added to the [docker
list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)
- [ ] This was checked for breaking HTTP API changes, and any breaking
changes have been approved by the breaking-change committee. The
`release_note:breaking` label should be applied in these situations.
- [ ] [Flaky Test
Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was
used on any tests changed
- [ ] The PR description includes the appropriate Release Notes section,
and the correct `release_note:*` label is applied per the
[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)
- [ ] Review the [backport
guidelines](https://docs.google.com/document/d/1VyN5k91e5OVumlc0Gb9RPa3h1ewuPE705nRtioPiTvY/edit?usp=sharing)
and apply applicable `backport:*` labels.

### Identify risks

Does this PR introduce any risks? For example, consider risks like hard
to test bugs, performance regression, potential of data loss.

Describe the risk, its severity, and mitigation for each identified
risk. Invite stakeholders and evaluate how to proceed before merging.

- [ ] [See some risk
examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx)
- [ ] ...


-->

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
jeramysoucy pushed a commit to jeramysoucy/kibana that referenced this pull request Mar 26, 2026
…he provider (elastic#257220)

### Summary

- Lifts the `data` prop from `DataCascadeImpl` up to
`DataCascadeProvider`, making the store the single source of truth for
cascade group nodes from initialization onward.
- Introduces a `useEffect` synchronization in the provider that detects
external changes to `data` or `cascadeGroups` and resets the store
(clearing derived table/leaf state) via a new internal `_setStoreState`
action, ensuring the cascade re-renders correctly when its input data
changes.
- Renames the `setInitialState` reducer to `setInitialGroupNodes` for
clarity, and adds a `_setStoreState` reducer (hidden from context
consumers) that performs a full state reset when the source data shape
changes.

### Changes

- **`DataCascadeProvider` (`store_provider/index.tsx`)**: Now accepts a
required `data` prop, builds the initial store state via `useMemo`, and
synchronizes external prop changes through `useEffect`. The context
value is memoized, and the `_setStoreState` action is excluded from the
consumer-facing type.
- **`DataCascadeImpl` / `types.ts`**: Removed the `data` prop from the
impl component and its type definition; the table hook now reads
`groupNodes` directly from the store.
- **`components/index.tsx`**: Passes `data` to `DataCascadeProvider`
instead of `DataCascadeImpl`; adds `data` to the memoization dependency
array.
- **`store_provider/reducers.ts`**: Added `_setStoreState` reducer
(resets table, leafNodes, groupNodes, columns); renamed
`setInitialState` to `setInitialGroupNodes`; removed an unnecessary
spread in `setRowGroupNodeData`.
- **`store_provider/store.ts`**: Relaxed the store state type constraint
from `Record<string, unknown>` to `object`; simplified the `state`
return (removed getter indirection).
- **`useCascadeTable` (`lib/core/table/index.tsx`)**: Removed the
`initialData` parameter; data is now read from the store via
`useDataCascadeState`.
- **Tests**: Updated all test files to pass the required `data` prop to
`DataCascadeProvider`; updated reducer test to use the renamed
`setInitialGroupNodes`.

<!--
### Test plan

- [ ] Existing unit tests pass (`yarn test:jest` for the
`document_data_cascade` package)
- [ ] Verify cascade renders correctly with initial data provided
through the provider
- [ ] Verify cascade re-renders when external `data` or `cascadeGroups`
props change (store resets derived state)
- [ ] Verify `_setStoreState` is not accessible to context consumers
outside the provider
### Checklist

Check the PR satisfies following conditions. 

Reviewers should verify this PR satisfies this list as well.

- [ ] Any text added follows [EUI's writing
guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses
sentence case text and includes [i18n
support](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md)
- [ ]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
- [ ] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
- [ ] If a plugin configuration key changed, check if it needs to be
allowlisted in the cloud and added to the [docker
list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)
- [ ] This was checked for breaking HTTP API changes, and any breaking
changes have been approved by the breaking-change committee. The
`release_note:breaking` label should be applied in these situations.
- [ ] [Flaky Test
Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was
used on any tests changed
- [ ] The PR description includes the appropriate Release Notes section,
and the correct `release_note:*` label is applied per the
[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)
- [ ] Review the [backport
guidelines](https://docs.google.com/document/d/1VyN5k91e5OVumlc0Gb9RPa3h1ewuPE705nRtioPiTvY/edit?usp=sharing)
and apply applicable `backport:*` labels.

### Identify risks

Does this PR introduce any risks? For example, consider risks like hard
to test bugs, performance regression, potential of data loss.

Describe the risk, its severity, and mitigation for each identified
risk. Invite stakeholders and evaluate how to proceed before merging.

- [ ] [See some risk
examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx)
- [ ] ...


-->

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport:skip This PR does not require backporting release_note:skip Skip the PR/issue when compiling release notes Team:SharedUX Platform AppEx-SharedUX (formerly Global Experience) t// v9.4.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants