diff --git a/CHANGELOG.md b/CHANGELOG.md index 30f77fd00b8..dd4ec6f347d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - Bump OUI to `1.1.2` to make `anomalyDetection` icon available ([#4408](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4408)) - Add `color-scheme` to the root styling ([#4477](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4477)) - [Multiple DataSource] Frontend support for adding sample data ([#4412](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4412)) +- Dashboard De-Angularization ([#4502](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/4502)) ### 🐛 Bug Fixes diff --git a/src/plugins/dashboard/public/application/components/dashboard_editor.tsx b/src/plugins/dashboard/public/application/components/dashboard_editor.tsx index 3a608947044..24f635ad673 100644 --- a/src/plugins/dashboard/public/application/components/dashboard_editor.tsx +++ b/src/plugins/dashboard/public/application/components/dashboard_editor.tsx @@ -39,7 +39,7 @@ export const DashboardEditor = () => { savedDashboardInstance ); - const { dashboardContainer, indexPatterns } = useDashboardContainer( + const { dashboardContainer, indexPatterns, setLastReloadRequestTime } = useDashboardContainer( services, dashboard, savedDashboardInstance, @@ -99,6 +99,7 @@ export const DashboardEditor = () => { indexPatterns={indexPatterns} dashboardContainer={dashboardContainer} dashboardIdFromUrl={dashboardIdFromUrl} + setLastReloadRequestTime={setLastReloadRequestTime} /> )} diff --git a/src/plugins/dashboard/public/application/components/dashboard_top_nav.tsx b/src/plugins/dashboard/public/application/components/dashboard_top_nav.tsx index d4fb223e6f7..21e1ee86b02 100644 --- a/src/plugins/dashboard/public/application/components/dashboard_top_nav.tsx +++ b/src/plugins/dashboard/public/application/components/dashboard_top_nav.tsx @@ -22,6 +22,7 @@ interface DashboardTopNavProps { currentAppState: DashboardAppState; isEmbeddableRendered: boolean; indexPatterns: IndexPattern[]; + setLastReloadRequestTime: React.Dispatch>; dashboardContainer?: DashboardContainer; dashboardIdFromUrl?: string; } @@ -44,6 +45,7 @@ const TopNav = ({ dashboardContainer, indexPatterns, dashboardIdFromUrl, + setLastReloadRequestTime, }: DashboardTopNavProps) => { const [topNavMenu, setTopNavMenu] = useState(); const [isFullScreenMode, setIsFullScreenMode] = useState(); @@ -58,10 +60,11 @@ const TopNav = ({ const handleRefresh = useCallback( (_payload: any, isUpdate?: boolean) => { if (!isUpdate && dashboardContainer) { + setLastReloadRequestTime(new Date().getTime()); dashboardContainer.reload(); } }, - [dashboardContainer] + [dashboardContainer, setLastReloadRequestTime] ); const isEmbeddedExternally = Boolean(queryParameters.get('embed')); diff --git a/src/plugins/dashboard/public/application/embeddable/grid/_dashboard_grid.scss b/src/plugins/dashboard/public/application/embeddable/grid/_dashboard_grid.scss index c7f801102ca..019667bec13 100644 --- a/src/plugins/dashboard/public/application/embeddable/grid/_dashboard_grid.scss +++ b/src/plugins/dashboard/public/application/embeddable/grid/_dashboard_grid.scss @@ -82,7 +82,7 @@ &:hover, &:focus { // TODO: this is a sass error, $embEditingModeHoverColor is undefined, comment it out for now - //background-color: $embEditingModeHoverColor; + // background-color: $embEditingModeHoverColor; } } diff --git a/src/plugins/dashboard/public/application/utils/get_dashboard_instance.tsx b/src/plugins/dashboard/public/application/utils/get_dashboard_instance.tsx index 3385aadbe73..d2a1a1a4f3e 100644 --- a/src/plugins/dashboard/public/application/utils/get_dashboard_instance.tsx +++ b/src/plugins/dashboard/public/application/utils/get_dashboard_instance.tsx @@ -30,10 +30,11 @@ export const getDashboardInstance = async ( // Get the existing dashboard/default new dashboard from saved object loader const savedDashboard: SavedObjectDashboard = await savedDashboards.get(opts); + // Serialized the saved object dashboard const serializedDashboard = convertToSerializedDashboard(savedDashboard); + // Create a Dashboard class using the serialized dashboard - // const dashboard = (await dashboards.createDashboard(serializedDashboard)) as Dashboard; const dashboard = new Dashboard(serializedDashboard); await dashboard.setState(serializedDashboard); diff --git a/src/plugins/dashboard/public/application/utils/use/use_dashboard_container.tsx b/src/plugins/dashboard/public/application/utils/use/use_dashboard_container.tsx index 27d7094784d..c723e142a07 100644 --- a/src/plugins/dashboard/public/application/utils/use/use_dashboard_container.tsx +++ b/src/plugins/dashboard/public/application/utils/use/use_dashboard_container.tsx @@ -60,6 +60,7 @@ export const useDashboardContainer = ( ) => { const [dashboardContainer, setDashboardContainer] = useState(); const [indexPatterns, setIndexPatterns] = useState([]); + const [lastReloadRequestTime, setLastReloadRequestTime] = useState(0); useEffect(() => { const getDashboardContainer = async () => { @@ -70,7 +71,8 @@ export const useDashboardContainer = ( services, appState, dashboard, - setIndexPatterns + setIndexPatterns, + lastReloadRequestTime ); setDashboardContainer(dashboardContainerEmbeddable); @@ -86,7 +88,7 @@ export const useDashboardContainer = ( }; getDashboardContainer(); - }, [savedDashboardInstance, appState, services, dashboard]); + }, [savedDashboardInstance, appState, services, dashboard, lastReloadRequestTime]); useEffect(() => { const incomingEmbeddable = services.embeddable @@ -104,7 +106,7 @@ export const useDashboardContainer = ( } }, [dashboardContainer, services]); - return { dashboardContainer, indexPatterns }; + return { dashboardContainer, indexPatterns, setLastReloadRequestTime }; }; const createDashboardEmbeddable = ( @@ -112,7 +114,8 @@ const createDashboardEmbeddable = ( dashboardServices: DashboardServices, appState: DashboardAppStateContainer, dashboard: Dashboard, - setIndexPatterns: React.Dispatch> + setIndexPatterns: React.Dispatch>, + lastReloadRequestTime: number ) => { let dashboardContainer: DashboardContainer; let inputSubscription: Subscription | undefined; @@ -217,7 +220,6 @@ const createDashboardEmbeddable = ( embeddablesMap[panel.panelIndex] = convertSavedDashboardPanelToPanelState(panel); }); - const lastReloadRequestTime = 0; return { id: savedDash.id || '', filters: data.query.filterManager.getFilters(), diff --git a/src/plugins/dashboard/public/dashboard.ts b/src/plugins/dashboard/public/dashboard.ts index 31c9224aa5c..ef54348da76 100644 --- a/src/plugins/dashboard/public/dashboard.ts +++ b/src/plugins/dashboard/public/dashboard.ts @@ -16,6 +16,8 @@ import { cloneDeep } from 'lodash'; import { Filter, ISearchSource, Query, RefreshInterval } from '../../data/public'; import { SavedDashboardPanel } from './types'; + +// TODO: This class can be revisited and clean up more export interface SerializedDashboard { id?: string; timeRestore: boolean;