@@ -220,14 +220,15 @@ export const RawLogTable = memo(
220220 isLoading,
221221 logs,
222222 onInstructionsClick,
223- // onPropertySearchClick,
224223 onRowExpandClick,
225224 onScroll,
226225 onSettingsClick,
227226 onShowPatternsClick,
228227 wrapLines,
229228 columnNameMap,
230229 showServiceColumn = true ,
230+ order,
231+ setOrder,
231232 } : {
232233 wrapLines : boolean ;
233234 displayedColumns : string [ ] ;
@@ -244,10 +245,6 @@ export const RawLogTable = memo(
244245 isLoading : boolean ;
245246 fetchNextPage : ( arg0 ?: { cb ?: VoidFunction } ) => any ;
246247 onRowExpandClick : ( id : string , sortKey : string ) => void ;
247- // onPropertySearchClick: (
248- // name: string,
249- // value: string | number | boolean,
250- // ) => void;
251248 hasNextPage : boolean ;
252249 highlightedLineId : string | undefined ;
253250 onScroll : ( scrollTop : number ) => void ;
@@ -256,6 +253,8 @@ export const RawLogTable = memo(
256253 tableId ?: string ;
257254 columnNameMap ?: Record < string , string > ;
258255 showServiceColumn ?: boolean ;
256+ order ?: 'asc' | 'desc' ;
257+ setOrder ?: ( order : 'asc' | 'desc' ) => void ;
259258 } ) => {
260259 const dedupLogs = useMemo ( ( ) => {
261260 const lIds = new Set ( ) ;
@@ -324,10 +323,39 @@ export const RawLogTable = memo(
324323 } ,
325324 {
326325 accessorKey : 'timestamp' ,
327- header : ( ) =>
328- isSmallScreen
329- ? 'Time'
330- : `Timestamp${ isUTC ? ' (UTC)' : ' (Local)' } ` ,
326+ header : ( ) => (
327+ < div
328+ className = { cx ( 'd-flex align-items-center' , {
329+ 'cursor-pointer text-muted-hover' : ! isLive ,
330+ 'text-muted' : isLive ,
331+ } ) }
332+ title = {
333+ order
334+ ? isLive
335+ ? 'Sort order is fixed in live mode'
336+ : `Sort ${ order === 'desc' ? 'ascending' : 'descending' } `
337+ : ''
338+ }
339+ onClick = { ( ) => {
340+ setOrder ?.( order === 'desc' ? 'asc' : 'desc' ) ;
341+ } }
342+ >
343+ { isSmallScreen
344+ ? 'Time'
345+ : `Timestamp${ isUTC ? ' (UTC)' : ' (Local)' } ` }
346+ { order && (
347+ < i
348+ className = { `ms-2 fs-7 bi ${
349+ isLive
350+ ? 'bi-record-fill effect-pulse text-success'
351+ : order === 'desc'
352+ ? 'bi-arrow-down text-white'
353+ : 'bi-arrow-up text-white'
354+ } `}
355+ />
356+ ) }
357+ </ div >
358+ ) ,
331359 cell : info => {
332360 // FIXME: since original timestamp doesn't come with timezone info
333361 const date = new Date ( info . getValue < string > ( ) ) ;
@@ -429,6 +457,8 @@ export const RawLogTable = memo(
429457 columnSizeStorage ,
430458 showServiceColumn ,
431459 columnNameMap ,
460+ order ,
461+ setOrder ,
432462 ] ,
433463 ) ;
434464
@@ -829,10 +859,21 @@ export default function LogTable({
829859 const [ instructionsOpen , setInstructionsOpen ] = useState ( false ) ;
830860 const [ settingsOpen , setSettingsOpen ] = useState ( false ) ;
831861 const [ wrapLines , setWrapLines ] = useState ( false ) ;
862+ const [ _order , setOrder ] = useState < 'asc' | 'desc' > ( 'desc' ) ;
832863
833864 const prevQueryConfig = usePrevious ( { searchedQuery, isLive } ) ;
834865
835- const resultsKey = [ searchedQuery , displayedColumns , isLive ] . join ( ':' ) ;
866+ // Ensure order is always 'desc' in live mode
867+ const order = isLive ? 'desc' : _order ;
868+ useEffect ( ( ) => {
869+ // Force set to 'desc' after switching to live mode to ensure
870+ // scrolling down while in live mode doesn't reset the order to 'asc'
871+ if ( isLive && _order === 'asc' ) {
872+ setOrder ( 'desc' ) ;
873+ }
874+ } , [ _order , isLive , setOrder ] ) ;
875+
876+ const resultsKey = [ searchedQuery , displayedColumns , isLive , order ] . join ( ':' ) ;
836877
837878 const {
838879 userPreferences : { isUTC } ,
@@ -851,7 +892,7 @@ export default function LogTable({
851892 startDate : searchedTimeRange ?. [ 0 ] ?? new Date ( ) ,
852893 endDate : searchedTimeRange ?. [ 1 ] ?? new Date ( ) ,
853894 extraFields : displayedColumns ,
854- order : 'desc' ,
895+ order,
855896 onEnd,
856897 resultsKey,
857898 } ,
@@ -931,13 +972,14 @@ export default function LogTable({
931972 ( args : any ) => fetchNextPage ( { limit : 200 , ...args } ) ,
932973 [ fetchNextPage ] ,
933974 ) }
934- // onPropertySearchClick={onPropertySearchClick}
935975 hasNextPage = { hasNextPageWhenNotLive }
936976 onRowExpandClick = { onRowExpandClick }
937977 onScroll = { onScroll }
938978 onShowPatternsClick = { onShowPatternsClick }
939979 columnNameMap = { columnNameMap }
940980 showServiceColumn = { showServiceColumn }
981+ order = { order }
982+ setOrder = { setOrder }
941983 />
942984 </ >
943985 ) ;
0 commit comments