From f26cdce696cd297d0fc1a295330a631ba29bc9b9 Mon Sep 17 00:00:00 2001 From: Matias Chomicki Date: Wed, 21 May 2025 12:37:54 +0200 Subject: [PATCH] LogList: add version with no scroll --- .../logs/components/panel/LogList.test.tsx | 3 +- .../logs/components/panel/LogList.tsx | 111 ++++++++++++------ 2 files changed, 75 insertions(+), 39 deletions(-) diff --git a/public/app/features/logs/components/panel/LogList.test.tsx b/public/app/features/logs/components/panel/LogList.test.tsx index 02607301496..9f9eb986055 100644 --- a/public/app/features/logs/components/panel/LogList.test.tsx +++ b/public/app/features/logs/components/panel/LogList.test.tsx @@ -7,7 +7,7 @@ import { createLogRow } from '../__mocks__/logRow'; import { LogList, Props } from './LogList'; -describe('LogList', () => { +describe.each([false, true])('LogList with scroll = %s', (noScroll: boolean) => { let logs: LogRowModel[], defaultProps: Props; beforeEach(() => { logs = [ @@ -21,6 +21,7 @@ describe('LogList', () => { displayedFields: [], enableLogDetails: false, logs, + noScroll, showControls: false, showTime: false, sortOrder: LogsSortOrder.Descending, diff --git a/public/app/features/logs/components/panel/LogList.tsx b/public/app/features/logs/components/panel/LogList.tsx index f55a670b526..d895002889b 100644 --- a/public/app/features/logs/components/panel/LogList.tsx +++ b/public/app/features/logs/components/panel/LogList.tsx @@ -18,11 +18,11 @@ import { store, TimeRange, } from '@grafana/data'; -import { PopoverContent, useTheme2 } from '@grafana/ui'; +import { PopoverContent, useStyles2, useTheme2 } from '@grafana/ui'; import { GetFieldLinksFn } from 'app/plugins/panel/logs/types'; import { InfiniteScroll } from './InfiniteScroll'; -import { getGridTemplateColumns } from './LogLine'; +import { getGridTemplateColumns, LogLine, getStyles as getLogLineStyles } from './LogLine'; import { LogLineDetails } from './LogLineDetails'; import { GetRowContextQueryFn } from './LogLineMenu'; import { LogListContextProvider, LogListState, useLogListContext } from './LogListContext'; @@ -57,6 +57,7 @@ export interface Props { logs: LogRowModel[]; logsMeta?: LogsMetaItem[]; logSupportsContext?: (row: LogRowModel) => boolean; + noScroll?: boolean; onClickFilterLabel?: (key: string, value: string, frame?: DataFrame) => void; onClickFilterOutLabel?: (key: string, value: string, frame?: DataFrame) => void; onClickFilterString?: (value: string, refId?: string) => void; @@ -113,6 +114,7 @@ export const LogList = ({ logs, logsMeta, logSupportsContext, + noScroll, onClickFilterLabel, onClickFilterOutLabel, onClickFilterString, @@ -178,6 +180,7 @@ export const LogList = ({ loading={loading} loadMore={loadMore} logs={logs} + noScroll={noScroll} showControls={showControls} timeRange={timeRange} timeZone={timeZone} @@ -195,6 +198,7 @@ const LogListComponent = ({ loading, loadMore, logs, + noScroll, showControls, timeRange, timeZone, @@ -320,42 +324,46 @@ const LogListComponent = ({ return (
- - {({ getItemKey, itemCount, onItemsRendered, Renderer }) => ( - - {Renderer} - - )} - + {!noScroll ? ( + + {({ getItemKey, itemCount, onItemsRendered, Renderer }) => ( + + {Renderer} + + )} + + ) : ( + + )}
{showDetails.length > 0 && ( void; +} + +const LogListNoScroll = ({ logs, onClick }: LogListNoScrollProps) => { + const { displayedFields, showTime, wrapLogMessage } = useLogListContext(); + const styles = useStyles2(getLogLineStyles); + return ( + <> + {logs.map((log, index) => ( + + ))} + + ); +}; + function getStyles(dimensions: LogFieldDimension[], { showTime }: { showTime: boolean }) { const columns = showTime ? dimensions : dimensions.filter((_, index) => index > 0); return {