Skip to content

Commit 22da860

Browse files
committed
FE: Refactor topic messages next page codebase (kafbat#550)
1 parent 273e64c commit 22da860

File tree

3 files changed

+16
-25
lines changed

3 files changed

+16
-25
lines changed

frontend/src/components/Topics/Topic/Messages/MessagesTable.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { TopicMessage } from 'generated-sources';
55
import React, { useState } from 'react';
66
import { Button } from 'components/common/Button/Button';
77
import * as S from 'components/common/NewTable/Table.styled';
8-
import { usePaginateTopics, useIsLiveMode } from 'lib/hooks/useMessagesFilters';
8+
import { useGoToNextPage, useIsLiveMode } from 'lib/hooks/useMessagesFilters';
99
import { useMessageFiltersStore } from 'lib/hooks/useMessageFiltersStore';
1010

1111
import PreviewModal from './PreviewModal';
@@ -20,7 +20,7 @@ const MessagesTable: React.FC<MessagesTableProps> = ({
2020
messages,
2121
isFetching,
2222
}) => {
23-
const paginate = usePaginateTopics();
23+
const goToNextPage = useGoToNextPage();
2424
const [previewFor, setPreviewFor] = useState<string | null>(null);
2525

2626
const [keyFilters, setKeyFilters] = useState<PreviewFilter[]>([]);
@@ -101,7 +101,7 @@ const MessagesTable: React.FC<MessagesTableProps> = ({
101101
disabled={isLive || isFetching || !nextCursor}
102102
buttonType="secondary"
103103
buttonSize="L"
104-
onClick={paginate}
104+
onClick={goToNextPage}
105105
>
106106
Next →
107107
</Button>

frontend/src/lib/hooks/api/topicMessages.tsx

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { useMutation, useQuery } from '@tanstack/react-query';
1414
import { messagesApiClient } from 'lib/api';
1515
import { useSearchParams } from 'react-router-dom';
1616
import {
17-
getCursorValue,
17+
getPageValue,
1818
MessagesFilterKeys,
1919
} from 'lib/hooks/useMessagesFilters';
2020
import { convertStrToPollingMode } from 'lib/hooks/filterUtils';
@@ -38,7 +38,7 @@ export const useTopicMessages = ({
3838
React.useState<TopicMessageConsuming>();
3939
const [isFetching, setIsFetching] = React.useState(false);
4040
const abortController = useRef(new AbortController());
41-
const prevCursor = useRef(0);
41+
const currentPage = useRef(1);
4242

4343
// get initial properties
4444

@@ -103,17 +103,13 @@ export const useTopicMessages = ({
103103
}
104104
const { nextCursor, setNextCursor } = useMessageFiltersStore.getState();
105105

106-
const tempCompareUrl = new URLSearchParams(requestParams);
107-
tempCompareUrl.delete(MessagesFilterKeys.cursor);
108106

109-
const currentCursor = getCursorValue(searchParams);
110-
111-
// filters stay the same and we have cursor set cursor
112-
if (nextCursor && prevCursor.current < currentCursor) {
107+
const searchParamPage = getPageValue(searchParams);
108+
if (currentPage.current < searchParamPage && nextCursor) {
113109
requestParams.set(MessagesFilterKeys.cursor, nextCursor);
114110
}
111+
currentPage.current = searchParamPage;
115112

116-
prevCursor.current = currentCursor;
117113
await fetchEventSource(`${url}?${requestParams.toString()}`, {
118114
method: 'GET',
119115
signal: abortController.current.signal,

frontend/src/lib/hooks/useMessagesFilters.ts

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export const MessagesFilterKeys = {
2828
activeFilterId: 'activeFilterId',
2929
activeFilterNPId: 'activeFilterNPId', // not persisted filter name to indicate the refresh
3030
cursor: 'cursor',
31+
page: 'page',
3132
r: 'r', // used tp force refresh of the data
3233
} as const;
3334

@@ -52,28 +53,22 @@ export function useRefreshData(initSearchParams?: URLSearchParams) {
5253
};
5354
}
5455

55-
export function getCursorValue(urlSearchParam: URLSearchParams) {
56-
const cursor = parseInt(
57-
urlSearchParam.get(MessagesFilterKeys.cursor) || '0',
58-
10
59-
);
56+
export function getPageValue(urlSearchParam: URLSearchParams) {
57+
const page = parseInt(urlSearchParam.get(MessagesFilterKeys.page) || '1', 10);
6058

61-
if (Number.isNaN(cursor)) {
59+
if (Number.isNaN(page)) {
6260
return 0;
6361
}
6462

65-
return cursor;
63+
return page;
6664
}
6765

68-
export function usePaginateTopics(initSearchParams?: URLSearchParams) {
66+
export function useGoToNextPage(initSearchParams?: URLSearchParams) {
6967
const [, setSearchParams] = useSearchParams(initSearchParams);
7068
return () => {
7169
setSearchParams((params) => {
72-
const cursor = getCursorValue(params) + 1;
73-
74-
if (cursor) {
75-
params.set(MessagesFilterKeys.cursor, cursor.toString());
76-
}
70+
const nextPage = getPageValue(params) + 1;
71+
params.set(MessagesFilterKeys.page, nextPage.toString());
7772

7873
return params;
7974
});

0 commit comments

Comments
 (0)