From 70d0e9006bf9a2a8800798b97143fe7e347c142a Mon Sep 17 00:00:00 2001 From: L2D2Grafana Date: Thu, 11 Dec 2025 12:28:03 -0800 Subject: [PATCH] Logs: fix logs table reset --- public/app/features/explore/Logs/Logs.tsx | 6 ++++-- .../app/features/explore/Logs/LogsTableWrap.tsx | 16 ++++++++++------ .../logs/components/ControlledLogRows.tsx | 1 + .../logs/components/ControlledLogsTable.tsx | 2 ++ 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/public/app/features/explore/Logs/Logs.tsx b/public/app/features/explore/Logs/Logs.tsx index 8a7c86edc97..86934cf59d9 100644 --- a/public/app/features/explore/Logs/Logs.tsx +++ b/public/app/features/explore/Logs/Logs.tsx @@ -596,9 +596,9 @@ const UnthemedLogs: React.FunctionComponent = (props: Props) => { const clearDisplayedFields = useCallback(() => { updatePanelState({ - displayedFields: [], + displayedFields: defaultDisplayedFields, }); - }, [updatePanelState]); + }, [defaultDisplayedFields, updatePanelState]); // Wrapper function for setDisplayedFields prop - updates Redux directly const setDisplayedFields = useCallback( @@ -1047,6 +1047,7 @@ const UnthemedLogs: React.FunctionComponent = (props: Props) => { updatePanelState={updatePanelState} datasourceType={props.datasourceType} displayedFields={displayedFields} + defaultDisplayedFields={defaultDisplayedFields} exploreId={props.exploreId} absoluteRange={props.absoluteRange} logRows={props.logRows} @@ -1086,6 +1087,7 @@ const UnthemedLogs: React.FunctionComponent = (props: Props) => { getFieldLinks={getFieldLinks} logsSortOrder={logsSortOrder} displayedFields={displayedFields} + defaultDisplayedFields={defaultDisplayedFields} onClickShowField={showField} onClickHideField={hideField} app={CoreApp.Explore} diff --git a/public/app/features/explore/Logs/LogsTableWrap.tsx b/public/app/features/explore/Logs/LogsTableWrap.tsx index 51a6ec9124b..a9edb7c006f 100644 --- a/public/app/features/explore/Logs/LogsTableWrap.tsx +++ b/public/app/features/explore/Logs/LogsTableWrap.tsx @@ -53,6 +53,7 @@ interface Props { datasourceType?: string; exploreId?: string; displayedFields?: string[]; + defaultDisplayedFields?: string[]; absoluteRange?: AbsoluteTimeRange; logRows?: LogRowModel[]; } @@ -78,7 +79,7 @@ type FieldName = string; export type FieldNameMetaStore = Record; export function LogsTableWrap(props: Props) { - const { logsFrames, updatePanelState, panelState } = props; + const { logsFrames, updatePanelState, panelState, defaultDisplayedFields } = props; const propsColumns = panelState?.displayedFields; // Save the normalized cardinality of each label const [columnsWithMeta, setColumnsWithMeta] = useState(undefined); @@ -124,14 +125,17 @@ export function LogsTableWrap(props: Props) { useEffect(() => { if (logsFrame?.timeField.name && logsFrame?.bodyField.name && !propsColumns) { - const defaultColumns = [logsFrame?.timeField.name, logsFrame?.bodyField.name]; + // Use defaultDisplayedFields if available, otherwise fall back to basic defaults + const columns = defaultDisplayedFields?.length + ? defaultDisplayedFields + : [logsFrame?.timeField.name, logsFrame?.bodyField.name]; updatePanelState({ - displayedFields: defaultColumns, + displayedFields: columns, visualisationType: 'table', labelFieldName: logsFrame?.getLabelFieldName() ?? undefined, }); } - }, [logsFrame, propsColumns, updatePanelState]); + }, [logsFrame, propsColumns, updatePanelState, defaultDisplayedFields]); /** * When logs frame updates (e.g. query|range changes), we need to set the selected frame to state @@ -399,9 +403,9 @@ export function LogsTableWrap(props: Props) { } }); setColumnsWithMeta(pendingLabelState); - // Reset displayedFields to empty array to trigger defaults logic + // Reset displayedFields to defaults updatePanelState({ - displayedFields: [], + displayedFields: defaultDisplayedFields?.length ? defaultDisplayedFields : [], }); }; diff --git a/public/app/features/logs/components/ControlledLogRows.tsx b/public/app/features/logs/components/ControlledLogRows.tsx index 38a579463ed..19a2f380ffb 100644 --- a/public/app/features/logs/components/ControlledLogRows.tsx +++ b/public/app/features/logs/components/ControlledLogRows.tsx @@ -43,6 +43,7 @@ export interface ControlledLogRowsProps extends Omit { width?: number; logsTableFrames?: DataFrame[]; displayedFields?: string[]; + defaultDisplayedFields?: string[]; exploreId?: string; absoluteRange?: AbsoluteTimeRange; logRows?: LogRowModel[]; diff --git a/public/app/features/logs/components/ControlledLogsTable.tsx b/public/app/features/logs/components/ControlledLogsTable.tsx index 0374928da8f..d75c37377f9 100644 --- a/public/app/features/logs/components/ControlledLogsTable.tsx +++ b/public/app/features/logs/components/ControlledLogsTable.tsx @@ -26,6 +26,7 @@ export const ControlledLogsTable = ({ logsTableFrames, visualisationType, displayedFields, + defaultDisplayedFields, exploreId, absoluteRange, logRows, @@ -63,6 +64,7 @@ export const ControlledLogsTable = ({ updatePanelState={updatePanelState} datasourceType={datasourceType} displayedFields={displayedFields} + defaultDisplayedFields={defaultDisplayedFields} exploreId={exploreId} absoluteRange={absoluteRange} logRows={logRows}