Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Embeddables Rebuild] Meta #167429

Open
31 of 38 tasks
ThomThomson opened this issue Sep 27, 2023 · 1 comment
Open
31 of 38 tasks

[Embeddables Rebuild] Meta #167429

ThomThomson opened this issue Sep 27, 2023 · 1 comment
Assignees
Labels
Feature:Embeddables Relating to the Embeddable system impact:critical This issue should be addressed immediately due to a critical level of impact on the product. Meta project:embeddableRebuild Team:Presentation Presentation Team for Dashboard, Input Controls, and Canvas

Comments

@ThomThomson
Copy link
Contributor

ThomThomson commented Sep 27, 2023

Embeddables Rebuild

Kibana’s Embeddables system is responsible for much of the behavior we see in Kibana today. Our Embeddable infrastructure underpins: Dashboards & Portable Dashboards, the Save and Return flow, drilldowns, Triggers & Actions, Portable Lens and Maps in solutions, the New Controls, much of Canvas, and a lot more.

This system is fundamental to Kibana, but is not well-liked by the engineers who maintain it, or adopt it. This is because it is over-engineered, boilerplate heavy and prescriptive. The Presentation team is planning to:

  • Build a new Embeddables system with the goal of making it adhere to well-known modern React paradigms.
  • Rework each of the 15 existing Embeddable implementations to use the new system
  • Completely remove the old Embeddables system from Kibana.

Investment here can pay major dividends for the future in terms of performance, stability, and expanding which features are possible.

(Prep work) Decouple Embeddables from Kibana

  1. Feature:Embeddables Team:Presentation impact:critical loe:medium project:embeddableRebuild
    ThomThomson
  2. Feature:Embeddables Team:Presentation impact:critical loe:medium project:embeddableRebuild
    ThomThomson
  3. Feature:Embeddables Team:Presentation impact:critical loe:medium project:embeddableRebuild
    nreese
  4. 25 of 36
    Feature:Embeddables Team:Presentation impact:critical loe:medium project:embeddableRebuild

Build the new engine

  1. Feature:Embeddables Team:Presentation impact:critical loe:large project:embeddableRebuild
    ThomThomson
  2. Feature:Embeddables Team:Presentation impact:critical loe:medium project:embeddableRebuild
    ThomThomson
  3. Feature:Embeddables Team:Presentation impact:high loe:medium project:embeddableRebuild
    ThomThomson
  4. Feature:Embeddables Team:Presentation impact:critical loe:medium project:embeddableRebuild
    ThomThomson
  5. Feature:Embeddables Team:Presentation impact:high loe:medium project:embeddableRebuild
    ThomThomson

React Embeddable review checklist

  • test react embeddable factory deserializeState method where rawState: undefined.
  • If embeddable type is "Add to library" menu, remove embeddable type from registerSavedObjectToPanelMethod registry. Register embeddable type in new ??. Also take into account managed state.

Migrate all Embeddables

  1. Feature:Embeddables Team:Presentation impact:critical loe:large project:embeddableRebuild
    Zacqary
  2. Feature:Embeddables Team:Presentation Team:Visualizations impact:critical loe:x-large project:embeddableRebuild
    dej611
  3. Feature:Embeddables Team:Presentation impact:critical loe:large project:embeddableRebuild
    Heenawter
  4. Feature:Embeddables Team:Presentation impact:critical loe:x-large project:embeddableRebuild
    nreese
  5. 7 of 7
    Feature:Embeddables Team:Presentation impact:critical loe:x-large project:embeddableRebuild
    Heenawter nreese
  6. Feature:Embeddables Team:Presentation impact:critical loe:small project:embeddableRebuild
    Heenawter
  7. :ml Feature:Embeddables Team:Presentation impact:critical loe:medium project:embeddableRebuild v8.15.0
    darnautov
  8. :ml Feature:Embeddables Team:Presentation impact:critical loe:medium project:embeddableRebuild v8.15.0
    qn895
  9. :ml Feature:Embeddables Team:Presentation impact:critical loe:medium project:embeddableRebuild v8.15.0
    qn895
  10. 4 of 4
    :ml Feature:Embeddables Team:Presentation impact:critical loe:medium project:embeddableRebuild v8.14.0
    darnautov
  11. Feature:Embeddables Team:Presentation impact:critical loe:medium project:embeddableRebuild
  12. Feature:Embeddables Team:Presentation impact:critical loe:medium project:embeddableRebuild
    nickpeihl
  13. Feature:Embeddables Team:Presentation impact:critical loe:medium project:embeddableRebuild
    nreese
  14. :ml Feature:Embeddables Team:ML Team:Presentation impact:critical loe:medium project:embeddableRebuild v8.15.0
    alvarezmelissa87
  15. Feature:Embeddables Team:Presentation impact:critical loe:small project:embeddableRebuild
    nickpeihl
  16. Feature:Embeddables Team:Presentation impact:critical loe:small project:embeddableRebuild
    nickpeihl
  17. Feature:Embeddables Team:Presentation impact:critical loe:small project:embeddableRebuild
    nickpeihl
  18. Feature:Embeddables Team:Presentation impact:critical loe:small project:embeddableRebuild
    nickpeihl
  19. Feature:Embeddables Team:Presentation impact:critical loe:medium project:embeddableRebuild
    mgiota
  20. Feature:Embeddables Team:Presentation impact:critical loe:medium project:embeddableRebuild
    mgiota
  21. Feature:Embeddables Team:Presentation impact:critical loe:medium project:embeddableRebuild
    mgiota

Cleanup

  1. Feature:Embeddables Team:Presentation blocked impact:critical loe:medium project:embeddableRebuild
    nreese
  2. Feature:Embeddables Team:Presentation impact:critical loe:large project:embeddableRebuild
    nreese
  3. Feature:Embeddables Team:Presentation impact:high project:embeddableRebuild
  4. Feature:Embeddables Team:Presentation blocked impact:critical loe:small project:embeddableRebuild
  5. Feature:Dashboard Feature:Embeddables Team:Presentation bug impact:medium loe:medium
  6. Team:Presentation impact:low loe:medium project:embeddableRebuild
  7. Feature:Embeddables Team:Presentation bug impact:medium loe:medium project:embeddableRebuild technical debt
  8. Feature:Embeddables Team:Presentation project:embeddableRebuild
    nreese
@ThomThomson ThomThomson added Meta Team:Presentation Presentation Team for Dashboard, Input Controls, and Canvas impact:critical This issue should be addressed immediately due to a critical level of impact on the product. Feature:Embeddables Relating to the Embeddable system labels Sep 27, 2023
@elasticmachine
Copy link
Contributor

Pinging @elastic/kibana-presentation (Team:Presentation)

Heenawter added a commit that referenced this issue Jan 30, 2024
)

Closes #174703

## Summary

Currently, the burden of determining unsaved changes is handled entirely
by the Dashboard - this means that we need special logic for comparing
the state of every piece of a dashboard, including the controls and the
panels. Once the [embeddable
refactor](#167429) work is
complete, this will no longer be the case; instead, each component will
be responsible for handling its **own** unsaved changes, and the
Dashboard will simply listen for updates.

As an intermediate step, this PR separates out the control group logic
from the Dashboard plugin so that, when it comes time, the transition to
the new embeddable framework will be much smoother. This PR also
unblocks #170396 since, now that
the control group is responsible for handling its own unsaved changes, I
should be able to determine when to enable/disable the "reset changes"
button.


### Checklist

- [x] [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
- [x] This was checked for [cross-browser
compatibility](https://www.elastic.co/support/matrix#matrix_browsers)

### For maintainers

- [ ] This was checked for breaking API changes and was [labeled
appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)

---------

Co-authored-by: kibanamachine <[email protected]>
CoenWarmer pushed a commit to CoenWarmer/kibana that referenced this issue Feb 15, 2024
…tic#175146)

Closes elastic#174703

## Summary

Currently, the burden of determining unsaved changes is handled entirely
by the Dashboard - this means that we need special logic for comparing
the state of every piece of a dashboard, including the controls and the
panels. Once the [embeddable
refactor](elastic#167429) work is
complete, this will no longer be the case; instead, each component will
be responsible for handling its **own** unsaved changes, and the
Dashboard will simply listen for updates.

As an intermediate step, this PR separates out the control group logic
from the Dashboard plugin so that, when it comes time, the transition to
the new embeddable framework will be much smoother. This PR also
unblocks elastic#170396 since, now that
the control group is responsible for handling its own unsaved changes, I
should be able to determine when to enable/disable the "reset changes"
button.


### Checklist

- [x] [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
- [x] This was checked for [cross-browser
compatibility](https://www.elastic.co/support/matrix#matrix_browsers)

### For maintainers

- [ ] This was checked for breaking API changes and was [labeled
appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)

---------

Co-authored-by: kibanamachine <[email protected]>
fkanout pushed a commit to fkanout/kibana that referenced this issue Mar 4, 2024
…tic#175146)

Closes elastic#174703

## Summary

Currently, the burden of determining unsaved changes is handled entirely
by the Dashboard - this means that we need special logic for comparing
the state of every piece of a dashboard, including the controls and the
panels. Once the [embeddable
refactor](elastic#167429) work is
complete, this will no longer be the case; instead, each component will
be responsible for handling its **own** unsaved changes, and the
Dashboard will simply listen for updates.

As an intermediate step, this PR separates out the control group logic
from the Dashboard plugin so that, when it comes time, the transition to
the new embeddable framework will be much smoother. This PR also
unblocks elastic#170396 since, now that
the control group is responsible for handling its own unsaved changes, I
should be able to determine when to enable/disable the "reset changes"
button.


### Checklist

- [x] [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
- [x] This was checked for [cross-browser
compatibility](https://www.elastic.co/support/matrix#matrix_browsers)

### For maintainers

- [ ] This was checked for breaking API changes and was [labeled
appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)

---------

Co-authored-by: kibanamachine <[email protected]>
nickpeihl added a commit that referenced this issue Jun 13, 2024
…legacy embeddable factory (#184466)

Fixes #179290, #179291, #179292, #179293

Part of #167429

## Summary

Decouples the legacy embeddable factory from O11y profiling plugin.

The class-based embeddable factory is being removed in preference to a
[React embeddable
factory](#167429). The profiling
plugin was using the legacy embeddable factory to register profiling
components that could be shared to other observability plugins. While
not strictly enforced, the embeddable registry is expected to be used
_only_ for embedding components into Dashboards and Canvas. The
embeddables registered by the Profiling plugin were never made available
to Dashboards or Canvas. And based on offline discussions with
Observability leadership, it is not expected that Profiling components
will be made available for embedding on Dashboards or Canvas in the near
future.

In this PR, I have removed the legacy embeddable usage from the
Profiling plugin. The Observability shared plugin now includes a custom
registration method for the profiling plugin to register React
components so they can be shared to other plugins. This avoids any
circular dependency concerns while still allowing other Observability
plugins to "embed" profiling components in their pages.
nreese added a commit that referenced this issue Dec 12, 2024
…#203853)

Part of #167429

Remove `setCustomEmbeddableFactoryProvider` from embeddable setup API.
`setCustomEmbeddableFactoryProvider` only used in `embeddable_enhanced`
plugin. Replaced with `initializeReactEmbeddableDynamicActions` in react
embeddable system.

---------

Co-authored-by: kibanamachine <[email protected]>
Co-authored-by: Elastic Machine <[email protected]>
kibanamachine pushed a commit to kibanamachine/kibana that referenced this issue Dec 12, 2024
…elastic#203853)

Part of elastic#167429

Remove `setCustomEmbeddableFactoryProvider` from embeddable setup API.
`setCustomEmbeddableFactoryProvider` only used in `embeddable_enhanced`
plugin. Replaced with `initializeReactEmbeddableDynamicActions` in react
embeddable system.

---------

Co-authored-by: kibanamachine <[email protected]>
Co-authored-by: Elastic Machine <[email protected]>
(cherry picked from commit 7218d01)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Feature:Embeddables Relating to the Embeddable system impact:critical This issue should be addressed immediately due to a critical level of impact on the product. Meta project:embeddableRebuild Team:Presentation Presentation Team for Dashboard, Input Controls, and Canvas
Projects
None yet
Development

No branches or pull requests

3 participants