Skip to content

Commit 93c8a55

Browse files
dej611kibanamachine
andcommitted
[Lens] Make table and metric show on top Chart switcher (#96601)
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
1 parent 40d95e2 commit 93c8a55

4 files changed

Lines changed: 26 additions & 10 deletions

File tree

x-pack/plugins/lens/public/datatable_visualization/visualization.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ export const datatableVisualization: Visualization<DatatableVisualizationState>
6060
groupLabel: i18n.translate('xpack.lens.datatable.groupLabel', {
6161
defaultMessage: 'Tabular and single value',
6262
}),
63+
sortPriority: 1,
6364
},
6465
],
6566

x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/chart_switch.tsx

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -219,12 +219,15 @@ export const ChartSwitch = memo(function ChartSwitch(props: Props) {
219219
// reorganize visualizations in groups
220220
const grouped: Record<
221221
string,
222-
Array<
223-
VisualizationType & {
224-
visualizationId: string;
225-
selection: VisualizationSelection;
226-
}
227-
>
222+
{
223+
priority: number;
224+
visualizations: Array<
225+
VisualizationType & {
226+
visualizationId: string;
227+
selection: VisualizationSelection;
228+
}
229+
>;
230+
}
228231
> = {};
229232
// Will need it later on to quickly pick up the metadata from it
230233
const lookup: Record<
@@ -240,23 +243,29 @@ export const ChartSwitch = memo(function ChartSwitch(props: Props) {
240243
visualizationType.label.toLowerCase().includes(lowercasedSearchTerm) ||
241244
visualizationType.fullLabel?.toLowerCase().includes(lowercasedSearchTerm);
242245
if (isSearchMatch) {
243-
grouped[visualizationType.groupLabel] = grouped[visualizationType.groupLabel] || [];
246+
grouped[visualizationType.groupLabel] = grouped[visualizationType.groupLabel] || {
247+
priority: 0,
248+
visualizations: [],
249+
};
244250
const visualizationEntry = {
245251
...visualizationType,
246252
visualizationId,
247253
selection: getSelection(visualizationId, visualizationType.id),
248254
};
249-
grouped[visualizationType.groupLabel].push(visualizationEntry);
255+
grouped[visualizationType.groupLabel].priority += visualizationType.sortPriority || 0;
256+
grouped[visualizationType.groupLabel].visualizations.push(visualizationEntry);
250257
lookup[`${visualizationId}:${visualizationType.id}`] = visualizationEntry;
251258
}
252259
}
253260
});
254261

255262
return {
256263
visualizationTypes: Object.keys(grouped)
257-
.sort()
264+
.sort((groupA, groupB) => {
265+
return grouped[groupB].priority - grouped[groupA].priority;
266+
})
258267
.flatMap((group): SelectableEntry[] => {
259-
const visualizations = grouped[group];
268+
const { visualizations } = grouped[group];
260269
if (visualizations.length === 0) {
261270
return [];
262271
}

x-pack/plugins/lens/public/metric_visualization/visualization.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ export const metricVisualization: Visualization<MetricState> = {
5555
groupLabel: i18n.translate('xpack.lens.metric.groupLabel', {
5656
defaultMessage: 'Tabular and single value',
5757
}),
58+
sortPriority: 1,
5859
},
5960
],
6061

x-pack/plugins/lens/public/types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,11 @@ export interface VisualizationType {
550550
* The group the visualization belongs to
551551
*/
552552
groupLabel: string;
553+
/**
554+
* The priority of the visualization in the list (global priority)
555+
* Higher number means higher priority. When omitted defaults to 0
556+
*/
557+
sortPriority?: number;
553558
}
554559

555560
export interface Visualization<T = unknown> {

0 commit comments

Comments
 (0)