diff --git a/public/app/features/logs/components/panel/LogLine.test.tsx b/public/app/features/logs/components/panel/LogLine.test.tsx index 6a2152b2e9f..bdbbf74b2f2 100644 --- a/public/app/features/logs/components/panel/LogLine.test.tsx +++ b/public/app/features/logs/components/panel/LogLine.test.tsx @@ -6,7 +6,7 @@ import { CoreApp, createTheme, LogsDedupStrategy, LogsSortOrder } from '@grafana import { LOG_LINE_BODY_FIELD_NAME } from '../LogDetailsBody'; import { createLogLine } from '../__mocks__/logRow'; -import { getStyles, LogLine, Props } from './LogLine'; +import { getGridTemplateColumns, getStyles, LogLine, Props } from './LogLine'; import { LogListFontSize } from './LogList'; import { LogListContextProvider } from './LogListContext'; import { LogListSearchContext } from './LogListSearchContext'; @@ -36,7 +36,7 @@ describe.each(fontSizes)('LogLine', (fontSize: LogListFontSize) => { beforeEach(() => { log = createLogLine( { labels: { place: 'luna' }, entry: `log message 1` }, - { escape: false, order: LogsSortOrder.Descending, timeZone: 'browser', virtualization } + { escape: false, order: LogsSortOrder.Descending, timeZone: 'browser', virtualization, wrapLogMessage: true } ); contextProps.logs = [log]; contextProps.fontSize = fontSize; @@ -226,7 +226,7 @@ describe.each(fontSizes)('LogLine', (fontSize: LogListFontSize) => { jest.spyOn(virtualization, 'getTruncationLength').mockReturnValue(5); log = createLogLine( { labels: { place: 'luna' }, entry: `log message 1` }, - { escape: false, order: LogsSortOrder.Descending, timeZone: 'browser', virtualization } + { escape: false, order: LogsSortOrder.Descending, timeZone: 'browser', virtualization, wrapLogMessage: true } ); }); @@ -425,3 +425,89 @@ describe.each(fontSizes)('LogLine', (fontSize: LogListFontSize) => { }); }); }); + +describe('getGridTemplateColumns', () => { + test('Gets the template columns for the default visualization mode', () => { + expect( + getGridTemplateColumns( + [ + { + field: 'timestamp', + width: 23, + }, + { + field: 'level', + width: 4, + }, + ], + [] + ) + ).toBe('23px 4px 1fr'); + }); + + test('Gets the template columns when displayed fields are used', () => { + expect( + getGridTemplateColumns( + [ + { + field: 'timestamp', + width: 23, + }, + { + field: 'level', + width: 4, + }, + ], + ['field'] + ) + ).toBe('23px 4px'); + }); + + test('Gets the template columns when displayed fields are used', () => { + expect( + getGridTemplateColumns( + [ + { + field: 'timestamp', + width: 23, + }, + { + field: 'level', + width: 4, + }, + { + field: 'field', + width: 4, + }, + ], + ['field'] + ) + ).toBe('23px 4px 4px'); + }); + + test('Gets the template columns when displayed fields are used', () => { + expect( + getGridTemplateColumns( + [ + { + field: 'timestamp', + width: 23, + }, + { + field: 'level', + width: 4, + }, + { + field: 'field', + width: 4, + }, + { + field: LOG_LINE_BODY_FIELD_NAME, + width: 20, + }, + ], + ['field'] + ) + ).toBe('23px 4px 4px 20px'); + }); +}); diff --git a/public/app/features/logs/components/panel/LogLine.tsx b/public/app/features/logs/components/panel/LogLine.tsx index c6e1d4c2314..9de0f165956 100644 --- a/public/app/features/logs/components/panel/LogLine.tsx +++ b/public/app/features/logs/components/panel/LogLine.tsx @@ -350,9 +350,10 @@ const LogLineBody = ({ log, styles }: { log: LogListModel; styles: LogLineStyles return ; }; -export function getGridTemplateColumns(dimensions: LogFieldDimension[]) { +export function getGridTemplateColumns(dimensions: LogFieldDimension[], displayedFields: string[]) { const columns = dimensions.map((dimension) => dimension.width).join('px '); - return `${columns}px 1fr`; + const logLineWidth = displayedFields.length > 0 ? '' : ' 1fr'; + return `${columns}px${logLineWidth}`; } export type LogLineStyles = ReturnType; @@ -525,10 +526,6 @@ export const getStyles = (theme: GrafanaTheme2, virtualization?: LogLineVirtuali gridColumnGap: theme.spacing(FIELD_GAP_MULTIPLIER), whiteSpace: 'pre', paddingBottom: theme.spacing(0.75), - '& .field': { - overflow: 'hidden', - whiteSpace: 'nowrap', - }, }), wrappedLogLine: css({ alignSelf: 'flex-start', diff --git a/public/app/features/logs/components/panel/LogList.tsx b/public/app/features/logs/components/panel/LogList.tsx index 960f19b2b25..acdbc0dc593 100644 --- a/public/app/features/logs/components/panel/LogList.tsx +++ b/public/app/features/logs/components/panel/LogList.tsx @@ -248,7 +248,7 @@ const LogListComponent = ({ () => (wrapLogMessage ? [] : virtualization.calculateFieldDimensions(processedLogs, displayedFields)), [displayedFields, processedLogs, virtualization, wrapLogMessage] ); - const styles = useStyles2(getStyles, dimensions, { showTime }); + const styles = useStyles2(getStyles, dimensions, displayedFields, { showTime }); const widthContainer = wrapperRef.current ?? containerElement; const { closePopoverMenu, @@ -469,13 +469,18 @@ const LogListComponent = ({ ); }; -function getStyles(theme: GrafanaTheme2, dimensions: LogFieldDimension[], { showTime }: { showTime: boolean }) { +function getStyles( + theme: GrafanaTheme2, + dimensions: LogFieldDimension[], + displayedFields: string[], + { showTime }: { showTime: boolean } +) { const columns = showTime ? dimensions : dimensions.filter((_, index) => index > 0); return { logList: css({ '& .unwrapped-log-line': { display: 'grid', - gridTemplateColumns: getGridTemplateColumns(columns), + gridTemplateColumns: getGridTemplateColumns(columns, displayedFields), }, }), logListContainer: css({