[Dashboards as code] remove client transform of panels array to map#224314
[Dashboards as code] remove client transform of panels array to map#224314nreese merged 49 commits intoelastic:mainfrom
Conversation
|
/ci |
|
/ci |
|
/ci |
|
/ci |
|
/ci |
ThomThomson
left a comment
There was a problem hiding this comment.
Changes LGTM! This is a great PR that aligns and cleans up a lot of Dashboard's panel management. Looked through the code, and ran some smoke tests locally. Left a few nits, the most urgent of which involve some seemingly missing jest tests.
Really clean set of changes!
|
|
||
| import type { DashboardAttributes, DashboardSection } from '../server/content_management'; | ||
|
|
||
| export const isDashboardSection = ( |
There was a problem hiding this comment.
Nit: Do we need this to be in a separate file? In the presentation_publishing package we usually combine type guards with their type definitions, so maybe we could do something similar here?
src/platform/plugins/shared/dashboard/common/lib/dashboard_panel_converters.ts
Show resolved
Hide resolved
src/platform/plugins/shared/dashboard/public/dashboard_api/get_serialized_state.test.ts
Show resolved
Hide resolved
src/platform/plugins/shared/dashboard/public/dashboard_api/layout_manager/deserialize_layout.ts
Show resolved
Hide resolved
src/platform/plugins/shared/dashboard/public/dashboard_api/unsaved_changes_manager.ts
Outdated
Show resolved
Hide resolved
src/platform/plugins/shared/dashboard/public/dashboard_renderer/grid/dashboard_grid.test.tsx
Show resolved
Hide resolved
|
@elasticmachine merge upstream |
|
@elasticmachine merge upstream |
⏳ Build in-progress, with failures
Failed CI Steps
Test Failures
History
|
|
@elasticmachine merge upstream |
|
Starting backport for target branches: 8.19 https://github.com/elastic/kibana/actions/runs/15853781043 |
💔 All backports failed
Manual backportTo create the backport manually run: Questions ?Please refer to the Backport tool documentation |
💚 All backports created successfully
Note: Successful backport PRs will be merged automatically after passing CI. Questions ?Please refer to the Backport tool documentation |
…lastic#224314) Closes elastic#224294 ### External team reviewers @elastic/kibana-presentation team is working on "Dashboards as code" project where we provide a human readable CRUD API for dashboards. Part of this work is aligning dashboard client code with the shape of dashboard server api. As such, we are changing the shape of `panels` from a Map to an Array - to directly consume what is being returned from the dashboard server api. ### PR Overview The goal of this PR is to update dashboard client-side state `panels` type to match the type from dashboard server api. The dashboard server api returns panels as an Array, while the dashboard client-side logic is expecting panels to be a Map keyed by panel id. This type change required the following changes: * Refactored dashboard client code to receive panels as an array and return panels as an array. Biggest work is in layout_manager `deserializeState` and `serializeState` methods. * Remove `convertPanelsArrayToPanelSectionMaps` from `loadDashboardState`. `convertPanelsArrayToPanelSectionMaps` performed 2 tasks 1) Convert panels array to map. This is no longer needed as now dashboard client code accepts panels in its native shape from the dashboard server api. 2) Move `id` and `title` fields into embeddable state. This is no longer needed as now dashboard server api does this transform before sending the dashboard to the client. * Remove `convertPanelSectionMapsToPanelsArray` from `getSerializedState`. `convertPanelSectionMapsToPanelsArray` performed 2 tasks. 1) Convert panels map into panels array. This is no longer needed as now panels is provided to `getSerializedState` in the shape required for the dashboard server api. 2) Lift `id` and `title` fields from into top level panel state. This is no longer needed as all embeddable state should remain under `panelConfig`. * Remove a bunch of code in `dashboard/common` as now the client and server are do not need to depend on shared logic as the client is much simpler and no longer needs to transform the server response. Much of this shared logic was copied into server saved object migrations in elastic#223980 but can now be removed from common since its no longer used in the client. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com> (cherry picked from commit 3d6954e) # Conflicts: # src/platform/plugins/shared/dashboard/public/dashboard_renderer/grid/dashboard_grid_item.tsx
…o map (#224314) (#225096) # Backport This will backport the following commits from `main` to `8.19`: - [[Dashboards as code] remove client transform of panels array to map (#224314)](#224314) <!--- Backport version: 10.0.1 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sorenlouv/backport) <!--BACKPORT [{"author":{"name":"Nathan Reese","email":"reese.nathan@elastic.co"},"sourceCommit":{"committedDate":"2025-06-24T14:48:08Z","message":"[Dashboards as code] remove client transform of panels array to map (#224314)\n\nCloses https://github.com/elastic/kibana/issues/224294\n\n### External team reviewers\n@elastic/kibana-presentation team is working on \"Dashboards as code\"\nproject where we provide a human readable CRUD API for dashboards. Part\nof this work is aligning dashboard client code with the shape of\ndashboard server api. As such, we are changing the shape of `panels`\nfrom a Map to an Array - to directly consume what is being returned from\nthe dashboard server api.\n\n### PR Overview\n\nThe goal of this PR is to update dashboard client-side state `panels`\ntype to match the type from dashboard server api. The dashboard server\napi returns panels as an Array, while the dashboard client-side logic is\nexpecting panels to be a Map keyed by panel id.\n\nThis type change required the following changes:\n* Refactored dashboard client code to receive panels as an array and\nreturn panels as an array. Biggest work is in layout_manager\n`deserializeState` and `serializeState` methods.\n* Remove `convertPanelsArrayToPanelSectionMaps` from\n`loadDashboardState`. `convertPanelsArrayToPanelSectionMaps` performed 2\ntasks\n1) Convert panels array to map. This is no longer needed as now\ndashboard client code accepts panels in its native shape from the\ndashboard server api.\n2) Move `id` and `title` fields into embeddable state. This is no longer\nneeded as now dashboard server api does this transform before sending\nthe dashboard to the client.\n* Remove `convertPanelSectionMapsToPanelsArray` from\n`getSerializedState`. `convertPanelSectionMapsToPanelsArray` performed 2\ntasks.\n1) Convert panels map into panels array. This is no longer needed as now\npanels is provided to `getSerializedState` in the shape required for the\ndashboard server api.\n2) Lift `id` and `title` fields from into top level panel state. This is\nno longer needed as all embeddable state should remain under\n`panelConfig`.\n* Remove a bunch of code in `dashboard/common` as now the client and\nserver are do not need to depend on shared logic as the client is much\nsimpler and no longer needs to transform the server response. Much of\nthis shared logic was copied into server saved object migrations in\nhttps://github.com//pull/223980 but can now be removed\nfrom common since its no longer used in the client.\n\n---------\n\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>\nCo-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>","sha":"3d6954e25284014527209cb8ba50db255cbfe41a","branchLabelMapping":{"^v9.1.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["Team:Presentation","release_note:skip","Team:obs-ux-infra_services","Team:obs-ux-management","backport:version","Project:Dashboards API","v9.1.0","v8.19.0"],"title":"[Dashboards as code] remove client transform of panels array to map","number":224314,"url":"https://github.com/elastic/kibana/pull/224314","mergeCommit":{"message":"[Dashboards as code] remove client transform of panels array to map (#224314)\n\nCloses https://github.com/elastic/kibana/issues/224294\n\n### External team reviewers\n@elastic/kibana-presentation team is working on \"Dashboards as code\"\nproject where we provide a human readable CRUD API for dashboards. Part\nof this work is aligning dashboard client code with the shape of\ndashboard server api. As such, we are changing the shape of `panels`\nfrom a Map to an Array - to directly consume what is being returned from\nthe dashboard server api.\n\n### PR Overview\n\nThe goal of this PR is to update dashboard client-side state `panels`\ntype to match the type from dashboard server api. The dashboard server\napi returns panels as an Array, while the dashboard client-side logic is\nexpecting panels to be a Map keyed by panel id.\n\nThis type change required the following changes:\n* Refactored dashboard client code to receive panels as an array and\nreturn panels as an array. Biggest work is in layout_manager\n`deserializeState` and `serializeState` methods.\n* Remove `convertPanelsArrayToPanelSectionMaps` from\n`loadDashboardState`. `convertPanelsArrayToPanelSectionMaps` performed 2\ntasks\n1) Convert panels array to map. This is no longer needed as now\ndashboard client code accepts panels in its native shape from the\ndashboard server api.\n2) Move `id` and `title` fields into embeddable state. This is no longer\nneeded as now dashboard server api does this transform before sending\nthe dashboard to the client.\n* Remove `convertPanelSectionMapsToPanelsArray` from\n`getSerializedState`. `convertPanelSectionMapsToPanelsArray` performed 2\ntasks.\n1) Convert panels map into panels array. This is no longer needed as now\npanels is provided to `getSerializedState` in the shape required for the\ndashboard server api.\n2) Lift `id` and `title` fields from into top level panel state. This is\nno longer needed as all embeddable state should remain under\n`panelConfig`.\n* Remove a bunch of code in `dashboard/common` as now the client and\nserver are do not need to depend on shared logic as the client is much\nsimpler and no longer needs to transform the server response. Much of\nthis shared logic was copied into server saved object migrations in\nhttps://github.com//pull/223980 but can now be removed\nfrom common since its no longer used in the client.\n\n---------\n\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>\nCo-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>","sha":"3d6954e25284014527209cb8ba50db255cbfe41a"}},"sourceBranch":"main","suggestedTargetBranches":["8.19"],"targetPullRequestStates":[{"branch":"main","label":"v9.1.0","branchLabelMappingKey":"^v9.1.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/224314","number":224314,"mergeCommit":{"message":"[Dashboards as code] remove client transform of panels array to map (#224314)\n\nCloses https://github.com/elastic/kibana/issues/224294\n\n### External team reviewers\n@elastic/kibana-presentation team is working on \"Dashboards as code\"\nproject where we provide a human readable CRUD API for dashboards. Part\nof this work is aligning dashboard client code with the shape of\ndashboard server api. As such, we are changing the shape of `panels`\nfrom a Map to an Array - to directly consume what is being returned from\nthe dashboard server api.\n\n### PR Overview\n\nThe goal of this PR is to update dashboard client-side state `panels`\ntype to match the type from dashboard server api. The dashboard server\napi returns panels as an Array, while the dashboard client-side logic is\nexpecting panels to be a Map keyed by panel id.\n\nThis type change required the following changes:\n* Refactored dashboard client code to receive panels as an array and\nreturn panels as an array. Biggest work is in layout_manager\n`deserializeState` and `serializeState` methods.\n* Remove `convertPanelsArrayToPanelSectionMaps` from\n`loadDashboardState`. `convertPanelsArrayToPanelSectionMaps` performed 2\ntasks\n1) Convert panels array to map. This is no longer needed as now\ndashboard client code accepts panels in its native shape from the\ndashboard server api.\n2) Move `id` and `title` fields into embeddable state. This is no longer\nneeded as now dashboard server api does this transform before sending\nthe dashboard to the client.\n* Remove `convertPanelSectionMapsToPanelsArray` from\n`getSerializedState`. `convertPanelSectionMapsToPanelsArray` performed 2\ntasks.\n1) Convert panels map into panels array. This is no longer needed as now\npanels is provided to `getSerializedState` in the shape required for the\ndashboard server api.\n2) Lift `id` and `title` fields from into top level panel state. This is\nno longer needed as all embeddable state should remain under\n`panelConfig`.\n* Remove a bunch of code in `dashboard/common` as now the client and\nserver are do not need to depend on shared logic as the client is much\nsimpler and no longer needs to transform the server response. Much of\nthis shared logic was copied into server saved object migrations in\nhttps://github.com//pull/223980 but can now be removed\nfrom common since its no longer used in the client.\n\n---------\n\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>\nCo-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>","sha":"3d6954e25284014527209cb8ba50db255cbfe41a"}},{"branch":"8.19","label":"v8.19.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"}]}] BACKPORT-->
…lastic#224314) Closes elastic#224294 ### External team reviewers @elastic/kibana-presentation team is working on "Dashboards as code" project where we provide a human readable CRUD API for dashboards. Part of this work is aligning dashboard client code with the shape of dashboard server api. As such, we are changing the shape of `panels` from a Map to an Array - to directly consume what is being returned from the dashboard server api. ### PR Overview The goal of this PR is to update dashboard client-side state `panels` type to match the type from dashboard server api. The dashboard server api returns panels as an Array, while the dashboard client-side logic is expecting panels to be a Map keyed by panel id. This type change required the following changes: * Refactored dashboard client code to receive panels as an array and return panels as an array. Biggest work is in layout_manager `deserializeState` and `serializeState` methods. * Remove `convertPanelsArrayToPanelSectionMaps` from `loadDashboardState`. `convertPanelsArrayToPanelSectionMaps` performed 2 tasks 1) Convert panels array to map. This is no longer needed as now dashboard client code accepts panels in its native shape from the dashboard server api. 2) Move `id` and `title` fields into embeddable state. This is no longer needed as now dashboard server api does this transform before sending the dashboard to the client. * Remove `convertPanelSectionMapsToPanelsArray` from `getSerializedState`. `convertPanelSectionMapsToPanelsArray` performed 2 tasks. 1) Convert panels map into panels array. This is no longer needed as now panels is provided to `getSerializedState` in the shape required for the dashboard server api. 2) Lift `id` and `title` fields from into top level panel state. This is no longer needed as all embeddable state should remain under `panelConfig`. * Remove a bunch of code in `dashboard/common` as now the client and server are do not need to depend on shared logic as the client is much simpler and no longer needs to transform the server response. Much of this shared logic was copied into server saved object migrations in elastic#223980 but can now be removed from common since its no longer used in the client. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
Closes #224294
External team reviewers
@elastic/kibana-presentation team is working on "Dashboards as code" project where we provide a human readable CRUD API for dashboards. Part of this work is aligning dashboard client code with the shape of dashboard server api. As such, we are changing the shape of
panelsfrom a Map to an Array - to directly consume what is being returned from the dashboard server api.PR Overview
The goal of this PR is to update dashboard client-side state
panelstype to match the type from dashboard server api. The dashboard server api returns panels as an Array, while the dashboard client-side logic is expecting panels to be a Map keyed by panel id.This type change required the following changes:
deserializeStateandserializeStatemethods.convertPanelsArrayToPanelSectionMapsfromloadDashboardState.convertPanelsArrayToPanelSectionMapsperformed 2 tasksidandtitlefields into embeddable state. This is no longer needed as now dashboard server api does this transform before sending the dashboard to the client.convertPanelSectionMapsToPanelsArrayfromgetSerializedState.convertPanelSectionMapsToPanelsArrayperformed 2 tasks.getSerializedStatein the shape required for the dashboard server api.idandtitlefields from into top level panel state. This is no longer needed as all embeddable state should remain underpanelConfig.dashboard/commonas now the client and server are do not need to depend on shared logic as the client is much simpler and no longer needs to transform the server response. Much of this shared logic was copied into server saved object migrations in [dashboard] revert 8.17 to 9.1 changes to dashboard/server/dashboard_saved_object/migrations folder #223980 but can now be removed from common since its no longer used in the client.