Skip to content

Commit cfe2dc2

Browse files
authored
feat(dashboards): allow for optional rendering of columns in placehol… (#95268)
### Changes Added optional column related props to the loading placeholder in `TableWidgetVisualization`. Many of the tables that use `GridEditable` (ex. widget viewer modal) persist column headers between loads.
1 parent da0fdb4 commit cfe2dc2

File tree

2 files changed

+43
-2
lines changed

2 files changed

+43
-2
lines changed

static/app/views/dashboards/widgets/tableWidget/tableWidgetVisualization.stories.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,16 @@ function getRenderer(fieldName: string) {
405405
used as a loading placeholder
406406
</p>
407407
<TableWidgetVisualization.LoadingPlaceholder />
408+
<p>
409+
Optionally, you can pass the
410+
<code>columns</code>
411+
prop to render them in the loading placeholder. You can also pass
412+
<code>aliases</code> to apply custom names to columns. Note: sorting and
413+
resizing are disabled in the loading placeholder.
414+
</p>
415+
<TableWidgetVisualization.LoadingPlaceholder
416+
columns={customColumns.map(column => ({...column, width: -1}))}
417+
/>
408418
</Fragment>
409419
);
410420
});

static/app/views/dashboards/widgets/tableWidget/tableWidgetVisualization.tsx

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -280,9 +280,40 @@ export function TableWidgetVisualization(props: TableWidgetVisualizationProps) {
280280
);
281281
}
282282

283-
TableWidgetVisualization.LoadingPlaceholder = function () {
283+
TableWidgetVisualization.LoadingPlaceholder = function ({
284+
columns,
285+
aliases,
286+
}: {
287+
aliases?: Record<string, string>;
288+
columns?: TabularColumn[];
289+
}) {
290+
const columnsWithName = columns?.map(column => ({...column, name: column.key})) ?? [];
284291
return (
285-
<GridEditable isLoading columnOrder={[]} columnSortBy={[]} data={[]} grid={{}} />
292+
<GridEditable
293+
isLoading
294+
columnOrder={columnsWithName}
295+
columnSortBy={[]}
296+
data={[]}
297+
resizable={false}
298+
grid={{
299+
renderHeadCell: (_tableColumn, columnIndex) => {
300+
if (!columns) return null;
301+
const column = columns[columnIndex]!;
302+
const align = fieldAlignment(column.key, column.type as ColumnValueType);
303+
const name = aliases?.[column.key] || column.key;
304+
305+
return (
306+
<SortLink
307+
canSort={false}
308+
align={align}
309+
title={<StyledTooltip title={name}>{name}</StyledTooltip>}
310+
direction={undefined}
311+
generateSortLink={() => undefined}
312+
/>
313+
);
314+
},
315+
}}
316+
/>
286317
);
287318
};
288319

0 commit comments

Comments
 (0)