Skip to content

Commit 95571c5

Browse files
committed
pause live on document open
1 parent 3db21a9 commit 95571c5

9 files changed

Lines changed: 132 additions & 102 deletions

File tree

frontend/dist/assets/index-6HePoESR.js

Lines changed: 91 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/dist/assets/index-C9B1ERkU.css

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/dist/assets/index-CmgSaOsV.css

Lines changed: 0 additions & 1 deletion
This file was deleted.

frontend/dist/assets/index-mTjSQW6I.js

Lines changed: 0 additions & 91 deletions
This file was deleted.

frontend/dist/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
<meta http-equiv="Pragma" content="no-cache" />
88
<meta http-equiv="Expires" content="0" />
99
<title>qwui</title>
10-
<script type="module" crossorigin src="/assets/index-mTjSQW6I.js"></script>
11-
<link rel="stylesheet" crossorigin href="/assets/index-CmgSaOsV.css">
10+
<script type="module" crossorigin src="/assets/index-6HePoESR.js"></script>
11+
<link rel="stylesheet" crossorigin href="/assets/index-C9B1ERkU.css">
1212
</head>
1313
<body>
1414
<div id="root"></div>

frontend/src/App.jsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ function App() {
3333
const [abortController, setAbortController] = useState(null)
3434
const [liveMode, setLiveMode] = useState(false) // Auto-refresh mode
3535
const [liveInterval, setLiveInterval] = useState(5) // Refresh interval in seconds
36+
const [documentOpen, setDocumentOpen] = useState(false) // A result document is expanded; pauses live refresh
3637
const [currentQuery, setCurrentQuery] = useState('*')
3738
const [filters, setFilters] = useState([])
3839
const filtersRef = useRef([]) // Ref to hold current filters for immediate access
@@ -2213,14 +2214,15 @@ function App() {
22132214
})
22142215
}
22152216

2216-
// Auto-refresh loop while live mode is active
2217+
// Auto-refresh loop while live mode is active.
2218+
// Paused (no interval) while a document is open, and resumes on close.
22172219
useEffect(() => {
2218-
if (!liveMode) return
2220+
if (!liveMode || documentOpen) return
22192221
const id = setInterval(() => {
22202222
if (liveRefreshRef.current) liveRefreshRef.current()
22212223
}, liveInterval * 1000)
22222224
return () => clearInterval(id)
2223-
}, [liveMode, liveInterval])
2225+
}, [liveMode, liveInterval, documentOpen])
22242226

22252227
const handleSetDefaultIndex = (indexId) => {
22262228
// This is just a callback for the FieldsSidebar
@@ -2542,6 +2544,7 @@ function App() {
25422544
requestTime={viewMode === 'visualize' ? visualizationStats.requestTime : requestTime}
25432545
onCancelSearch={handleCancelSearch}
25442546
liveMode={liveMode}
2547+
livePaused={liveMode && documentOpen}
25452548
liveInterval={liveInterval}
25462549
onToggleLiveMode={handleToggleLiveMode}
25472550
onLiveIntervalChange={setLiveInterval}
@@ -2683,6 +2686,7 @@ function App() {
26832686
results={searchResults}
26842687
loading={loading}
26852688
liveMode={liveMode}
2689+
onExpandedChange={setDocumentOpen}
26862690
searchQuery={lastSearchQuery}
26872691
timestampField={timestampField}
26882692
hasMoreResults={hasMoreResults}

frontend/src/components/ResultsTable.jsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ function highlightTextWithFieldTerms(text, highlightTerms, fieldName = '') {
7272
return highlightText(text, termsToUse)
7373
}
7474

75-
function ResultsTable({ results, loading, liveMode = false, timestampField = 'timestamp', hasMoreResults = false, loadingMore = false, onLoadMore, requestTime = null, selectedColumns = [], onRemoveColumn, onFilterChange, onToggleColumn, userPreferences, darkMode = false, searchQuery = '', sortOrder = 'newest', onSortOrderChange }) {
75+
function ResultsTable({ results, loading, liveMode = false, onExpandedChange, timestampField = 'timestamp', hasMoreResults = false, loadingMore = false, onLoadMore, requestTime = null, selectedColumns = [], onRemoveColumn, onFilterChange, onToggleColumn, userPreferences, darkMode = false, searchQuery = '', sortOrder = 'newest', onSortOrderChange }) {
7676
const [expandedRows, setExpandedRows] = useState(new Set())
7777
const [sortBy, setSortBy] = useState({ field: null, direction: 'asc' })
7878
const [expandedRowTabs, setExpandedRowTabs] = useState({}) // Track active tab for each expanded row
@@ -110,6 +110,11 @@ function ResultsTable({ results, loading, liveMode = false, timestampField = 'ti
110110
// Results logged in SearchBar component
111111
}, [results, requestTime])
112112

113+
// Notify parent when a document is opened/closed (used to pause live mode)
114+
useEffect(() => {
115+
if (onExpandedChange) onExpandedChange(expandedRows.size > 0)
116+
}, [expandedRows])
117+
113118
// Handle scroll to bottom for infinite loading
114119
useEffect(() => {
115120
const scrollContainer = scrollContainerRef.current

frontend/src/components/SearchBar.css

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,21 @@
363363
animation: live-pulse 1.2s ease-in-out infinite;
364364
}
365365

366+
.live-mode-button.active.paused {
367+
background: #d97706;
368+
border-color: #d97706;
369+
}
370+
371+
.live-mode-button.active.paused:hover {
372+
background: #b45309;
373+
border-color: #b45309;
374+
}
375+
376+
.live-mode-button.active.paused .live-mode-dot {
377+
animation: none;
378+
opacity: 0.7;
379+
}
380+
366381
@keyframes live-pulse {
367382
0%, 100% { opacity: 1; transform: scale(1); }
368383
50% { opacity: 0.4; transform: scale(0.7); }

frontend/src/components/SearchBar.jsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { useState, useRef, useEffect } from 'react'
22
import './SearchBar.css'
33

4-
function SearchBar({ onSearch, loading, timeRangePicker, fields = [], selectedIndex, onFetchFieldValues, firstEventTime, lastEventTime, histogramInterval, onHistogramIntervalChange, intervalError, totalHits, elapsedTimeMicros, requestTime, onCancelSearch, liveMode = false, liveInterval = 5, onToggleLiveMode, onLiveIntervalChange, defaultSearchFields = [], onSaveQuery, onLoadQuery, onShareQuery, externalQuery = '', selectedColumns = [], results = [], onExportCSV, onQueryChange, vrl, onVrlChange, vrlTime, vrlEnabled = false, filters = [], timeRange, onFiltersChange, onTimeRangeChange, onAnalyzePatterns, onRestoreHistoryState }) {
4+
function SearchBar({ onSearch, loading, timeRangePicker, fields = [], selectedIndex, onFetchFieldValues, firstEventTime, lastEventTime, histogramInterval, onHistogramIntervalChange, intervalError, totalHits, elapsedTimeMicros, requestTime, onCancelSearch, liveMode = false, livePaused = false, liveInterval = 5, onToggleLiveMode, onLiveIntervalChange, defaultSearchFields = [], onSaveQuery, onLoadQuery, onShareQuery, externalQuery = '', selectedColumns = [], results = [], onExportCSV, onQueryChange, vrl, onVrlChange, vrlTime, vrlEnabled = false, filters = [], timeRange, onFiltersChange, onTimeRangeChange, onAnalyzePatterns, onRestoreHistoryState }) {
55
const [query, setQuery] = useState('')
66

77
// Query history management
@@ -498,12 +498,18 @@ function SearchBar({ onSearch, loading, timeRangePicker, fields = [], selectedIn
498498
<div className="live-mode-controls">
499499
<button
500500
type="button"
501-
className={`live-mode-button ${liveMode ? 'active' : ''}`}
501+
className={`live-mode-button ${liveMode ? 'active' : ''} ${livePaused ? 'paused' : ''}`}
502502
onClick={onToggleLiveMode}
503-
title={liveMode ? 'Stop live refresh' : 'Enable live mode (auto-refresh the last 5 minutes)'}
503+
title={
504+
livePaused
505+
? 'Live mode paused (close the document to resume)'
506+
: liveMode
507+
? 'Stop live refresh'
508+
: 'Enable live mode (auto-refresh the last 5 minutes)'
509+
}
504510
>
505511
<span className="live-mode-dot"></span>
506-
Live
512+
{livePaused ? 'Paused' : 'Live'}
507513
</button>
508514
{liveMode && (
509515
<select

0 commit comments

Comments
 (0)