Skip to content

Commit 9828308

Browse files
committed
feat: Allow to sort logs by timestamp in ASC direction
1 parent bedee44 commit 9828308

File tree

2 files changed

+56
-13
lines changed

2 files changed

+56
-13
lines changed

packages/app/src/LogTable.tsx

+54-12
Original file line numberDiff line numberDiff line change
@@ -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
);

packages/app/styles/LogTable.module.scss

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
@import './variables';
22

33
.tableHead {
4-
background: inherit;
4+
background: $bg-hdx-dark;
5+
outline: 1px solid $slate-950;
56
position: sticky;
67
top: 0;
78
}

0 commit comments

Comments
 (0)