Skip to content

Commit 5af4840

Browse files
Fix saving multiple metrics to SOpanels (#407) (#408)
* fix saving multiple metrics to SOpanels Signed-off-by: Shenoy Pratik <sgguruda@amazon.com> * remove unused variable Signed-off-by: Shenoy Pratik <sgguruda@amazon.com> --------- Signed-off-by: Shenoy Pratik <sgguruda@amazon.com> (cherry picked from commit a4cb6d1) Co-authored-by: Shenoy Pratik <sgguruda@amazon.com>
1 parent 64a01d0 commit 5af4840

File tree

3 files changed

+50
-7
lines changed

3 files changed

+50
-7
lines changed

public/components/custom_panels/helpers/add_visualization_helper.ts

+27
Original file line numberDiff line numberDiff line change
@@ -96,3 +96,30 @@ export const addVisualizationPanel = (
9696
throw new Error('Add/Replace Visualization Error:' + error);
9797
}
9898
};
99+
100+
// Add Multiple visualizations in a Panel
101+
export const addMultipleVisualizations = (
102+
savedVisualizationIds: string[],
103+
allPanelVisualizations: VisualizationType[]
104+
) => {
105+
try {
106+
let newDimensions;
107+
let visualizationsList = [...allPanelVisualizations];
108+
109+
savedVisualizationIds.map((savedVisualizationId) => {
110+
newDimensions = getNewVizDimensions(visualizationsList);
111+
visualizationsList = [
112+
...visualizationsList,
113+
{
114+
id: 'panel_viz_' + uuidv4(),
115+
savedVisualizationId,
116+
...newDimensions,
117+
},
118+
];
119+
});
120+
121+
return visualizationsList;
122+
} catch (error) {
123+
throw new Error('Add Multiple Visualization Error:' + error);
124+
}
125+
};

public/components/custom_panels/redux/panel_slice.ts

+21-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ import {
1717
import { coreRefs } from '../../../framework/core_refs';
1818
import { SavedObject, SimpleSavedObject } from '../../../../../../src/core/public';
1919
import { isNameValid } from '../helpers/utils';
20-
import { addVisualizationPanel } from '../helpers/add_visualization_helper';
20+
import {
21+
addMultipleVisualizations,
22+
addVisualizationPanel,
23+
} from '../helpers/add_visualization_helper';
2124

2225
interface InitialState {
2326
id: string;
@@ -163,6 +166,23 @@ export const addVizToPanels = (panels, vizId) => async (dispatch, getState) => {
163166
});
164167
};
165168

169+
export const addMultipleVizToPanels = (panels, vizIds) => async (dispatch, getState) => {
170+
forEach(panels, (oldPanel) => {
171+
const panel = getState().customPanel.panelList.find((p) => p.id === oldPanel.panel.id);
172+
173+
const allVisualizations = panel!.visualizations;
174+
175+
const visualizationsWithNewPanel = addMultipleVisualizations(vizIds, allVisualizations);
176+
177+
const updatedPanel = { ...panel, visualizations: visualizationsWithNewPanel };
178+
try {
179+
dispatch(updatePanel(updatedPanel));
180+
} catch (err) {
181+
console.error(err?.body?.message || err);
182+
}
183+
});
184+
};
185+
166186
export const replaceVizInPanel = (oldPanel, oldVizId, vizId) => async (dispatch, getState) => {
167187
const panel = getState().customPanel.panelList.find((p) => p.id === oldPanel.id);
168188

public/components/metrics/top_menu/top_menu.tsx

+2-6
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import { resolutionOptions } from '../../../../common/constants/metrics';
2727
import { MetricType } from '../../../../common/types/metrics';
2828
import { uiSettingsService } from '../../../../common/utils';
2929
import SavedObjects from '../../../services/saved_objects/event_analytics/saved_objects';
30-
import { addVizToPanels, uuidRx } from '../../custom_panels/redux/panel_slice';
3130
import { sortMetricLayout, updateMetricsWithSelections } from '../helpers/utils';
3231
import {
3332
allAvailableMetricsSelector,
@@ -37,6 +36,7 @@ import {
3736
import { SearchBar } from '../sidebar/search_bar';
3837
import { MetricsExportPanel } from './metrics_export_panel';
3938
import './top_menu.scss';
39+
import { addMultipleVizToPanels, uuidRx } from '../../custom_panels/redux/panel_slice';
4040

4141
interface TopMenuProps {
4242
http: CoreStart['http'];
@@ -158,7 +158,6 @@ export const TopMenu = ({
158158

159159
const handleSavingObjects = async () => {
160160
let savedMetricIds = [];
161-
const savedMetricsInPanels = [];
162161

163162
try {
164163
savedMetricIds = await Promise.all(
@@ -194,6 +193,7 @@ export const TopMenu = ({
194193
const soPanels = selectedPanelOptions.filter((panel) => uuidRx.test(panel.panel.id));
195194
const opsPanels = selectedPanelOptions.filter((panel) => !uuidRx.test(panel.panel.id));
196195

196+
dispatch(addMultipleVizToPanels(soPanels, allMetricIds));
197197
const savedMetricsInOpsPanels = await Promise.all(
198198
opsPanels.map((panel) => {
199199
return http.post(`${CUSTOM_PANELS_API_PREFIX}/visualizations/multiple`, {
@@ -204,10 +204,6 @@ export const TopMenu = ({
204204
});
205205
})
206206
);
207-
208-
allMetricIds.forEach((metricId) => {
209-
dispatch(addVizToPanels(soPanels, metricId));
210-
});
211207
} catch (e) {
212208
const message = 'Issue in saving metrics to panels';
213209
console.error(message, e);

0 commit comments

Comments
 (0)