void;
log: LogListModel;
search: string;
onSearch(newSearch: string): void;
}
-export const LogLineDetailsHeader = ({ log, search, onSearch }: Props) => {
+export const LogLineDetailsHeader = ({ focusLogLine, log, search, onSearch }: Props) => {
const {
closeDetails,
detailsMode,
@@ -53,6 +54,10 @@ export const LogLineDetailsHeader = ({ log, search, onSearch }: Props) => {
[noInteractions]
);
+ const scrollToLogLine = useCallback(() => {
+ focusLogLine?.(log);
+ }, [focusLogLine, log]);
+
const copyLogLine = useCallback(() => {
copyText(log.entry, containerRef);
reportInteractionWrapper('logs_log_line_details_header_copy_clicked');
@@ -143,22 +148,32 @@ export const LogLineDetailsHeader = ({ log, search, onSearch }: Props) => {
ref={inputRef}
suffix={search !== '' ? clearSearch : undefined}
/>
- {showLogLineToggle && (
-
- )}
+ {focusLogLine && (
+
+ )}
+ {showLogLineToggle && (
+
+ )}
{
- if (showDetails.length) {
- removeDetailsScrollPosition(showDetails[0]);
- }
+ showDetails.forEach((log) => removeDetailsScrollPosition(log));
setShowDetails([]);
}, [showDetails]);
@@ -477,12 +475,13 @@ export const LogListContextProvider = ({
if (!enableLogDetails) {
return;
}
- const found = showDetails.findIndex((stateLog) => stateLog === log || stateLog.uid === log.uid);
- if (found >= 0) {
+ const found = showDetails.find((stateLog) => stateLog === log || stateLog.uid === log.uid);
+ if (found) {
+ removeDetailsScrollPosition(found);
setShowDetails(showDetails.filter((stateLog) => stateLog !== log && stateLog.uid !== log.uid));
} else {
// Supporting one displayed details for now
- setShowDetails([log]);
+ setShowDetails([...showDetails, log]);
}
},
[enableLogDetails, showDetails]
diff --git a/public/locales/en-US/grafana.json b/public/locales/en-US/grafana.json
index 8d5e7f0702a..e0453c80fb6 100644
--- a/public/locales/en-US/grafana.json
+++ b/public/locales/en-US/grafana.json
@@ -8912,6 +8912,8 @@
"no-details": "No fields to display.",
"pin-line": "Pin log",
"remove-displayed-field": "Remove field",
+ "remove-log": "Remove log",
+ "scroll-to-logline": "Scroll to log line",
"search": {
"no-results": "No results to display."
},