LogListControls: show levels from displayed logs

This commit is contained in:
Matias Chomicki
2025-09-17 17:26:16 +02:00
parent e8cdf23e13
commit 89a0948de0
3 changed files with 13 additions and 3 deletions
@@ -31,7 +31,7 @@ import { LogListContextProvider, LogListState, useLogListContext } from './LogLi
import { LogListControls } from './LogListControls';
import { LOG_LIST_SEARCH_HEIGHT, LogListSearch } from './LogListSearch';
import { LogListSearchContextProvider, useLogListSearchContext } from './LogListSearchContext';
import { preProcessLogs, LogListModel } from './processing';
import { preProcessLogs, LogListModel, getLevelsFromLogs } from './processing';
import { useKeyBindings } from './useKeyBindings';
import { usePopoverMenu } from './usePopoverMenu';
import { LogLineVirtualization, getLogLineSize, LogFieldDimension, ScrollToLogsEvent } from './virtualization';
@@ -410,6 +410,8 @@ const LogListComponent = ({
[debouncedScrollToItem, filteredLogs]
);
const logLevels = useMemo(() => getLevelsFromLogs(processedLogs), [processedLogs]);
if (!containerElement || listHeight == null) {
// Wait for container to be rendered
return null;
@@ -417,7 +419,7 @@ const LogListComponent = ({
return (
<div className={styles.logListContainer}>
{showControls && <LogListControls eventBus={eventBus} />}
{showControls && <LogListControls logLevels={logLevels} eventBus={eventBus} />}
{detailsMode === 'sidebar' && showDetails.length > 0 && (
<LogLineDetails
containerElement={containerElement}
@@ -220,7 +220,7 @@ export const LogListControls = ({ eventBus, logLevels = FILTER_LEVELS, visualisa
))}
</Menu>
),
[filterLevels, onFilterLevelClick, styles.menuItemActive]
[filterLevels, logLevels, onFilterLevelClick, styles.menuItemActive]
);
const downloadMenu = useMemo(
@@ -326,3 +326,11 @@ function countNewLines(log: string, limit = Infinity) {
}
return count;
}
export function getLevelsFromLogs(logs: LogListModel[]) {
const levels = new Set<LogLevel>();
for (const log of logs) {
levels.add(log.logLevel);
}
return Array.from(levels).filter(level => level != null);
}