@@ -15,6 +15,7 @@ import {
15
15
Button ,
16
16
Pagination ,
17
17
Loader ,
18
+ Group ,
18
19
} from '@mantine/core' ;
19
20
import { useCallback , useEffect , useMemo , useRef } from 'react' ;
20
21
import type { FC } from 'react' ;
@@ -33,12 +34,14 @@ import FilterPills from './FilterPills';
33
34
import { useHeaderContext } from '@/layouts/MainLayout/Context' ;
34
35
import dayjs from 'dayjs' ;
35
36
import { SortOrder } from '@/@types/parseable/api/query' ;
37
+ import { usePagination } from '@mantine/hooks' ;
36
38
37
39
const skipFields = [ 'p_metadata' , 'p_tags' ] ;
40
+ const loadLimit = 9000 ;
38
41
39
42
const LogTable : FC = ( ) => {
40
43
const {
41
- state : { subLogStreamError, subGapTime } ,
44
+ state : { subLogStreamError } ,
42
45
} = useLogsPageContext ( ) ;
43
46
const {
44
47
state : { subLogSearch, subLogQuery, subRefreshInterval, subLogSelectedTimeRange } ,
@@ -48,6 +51,7 @@ const LogTable: FC = () => {
48
51
const [ logStreamError , setLogStreamError ] = useMountedState < string | null > ( null ) ;
49
52
const [ columnToggles , setColumnToggles ] = useMountedState < Map < string , boolean > > ( new Map ( ) ) ;
50
53
const [ pinnedColumns , setPinnedColumns ] = useMountedState < Set < string > > ( new Set ( ) ) ;
54
+ const [ pageOffset , setPageOffset ] = useMountedState ( 0 ) ;
51
55
52
56
const {
53
57
data : logsSchema ,
@@ -140,61 +144,122 @@ const LogTable: FC = () => {
140
144
setPinnedColumns ( new Set ( ) ) ;
141
145
setColumnToggles ( new Map ( ) ) ;
142
146
} ;
143
-
144
147
const onRetry = ( ) => {
145
148
const query = subLogQuery . get ( ) ;
146
- const data = subGapTime . get ( ) ;
149
+ resetStreamData ( ) ;
150
+ resetLogsData ( ) ;
151
+ resetColumns ( ) ;
152
+ setPageOffset ( 0 ) ;
147
153
148
- if ( logsSchema ) {
149
- resetStreamData ( ) ;
150
- resetLogsData ( ) ;
151
- }
152
- if ( data ) {
154
+ if ( query ) {
153
155
getQueryData ( {
154
- streamName : subLogQuery . get ( ) . streamName ,
155
- startTime : data . startTime ,
156
- endTime : data . endTime ,
157
- access : subLogQuery . get ( ) . access ,
156
+ streamName : query . streamName ,
157
+ startTime : query . startTime ,
158
+ endTime : query . endTime ,
159
+ limit : loadLimit ,
160
+ pageOffset : 0 ,
158
161
} ) ;
162
+ getDataSchema ( query . streamName ) ;
159
163
}
160
-
161
- getDataSchema ( query . streamName ) ;
162
- setColumnToggles ( new Map ( ) ) ;
163
164
} ;
165
+ // const onRetry = () => {
166
+ // const query = subLogQuery.get();
167
+ // const data = subGapTime.get();
168
+
169
+ // if (logsSchema) {
170
+ // resetStreamData();
171
+ // resetLogsData();
172
+ // setPageOffset(0);
173
+ // }
174
+ // if (data) {
175
+ // getQueryData({
176
+ // streamName: subLogQuery.get().streamName,
177
+ // startTime: data.startTime,
178
+ // endTime: data.endTime,
179
+ // access: subLogQuery.get().access,
180
+ // });
181
+ // }
182
+
183
+ // getDataSchema(query.streamName);
184
+ // setColumnToggles(new Map());
185
+ // };
164
186
165
187
useEffect ( ( ) => {
166
- const streamErrorListener = subLogStreamError . subscribe ( setLogStreamError ) ;
167
- const logSearchListener = subLogSearch . subscribe ( setQuerySearch ) ;
168
- const refreshIntervalListener = subRefreshInterval . subscribe ( setRefreshInterval ) ;
169
- const subID = subGapTime . subscribe ( ( data ) => {
170
- if ( data ) {
188
+ if ( subLogQuery . get ( ) ) {
189
+ const query = subLogQuery . get ( ) ;
190
+ resetColumns ( ) ;
191
+ setPageOffset ( 0 ) ;
192
+ resetStreamData ( ) ;
193
+ resetLogsData ( ) ;
194
+ if ( query ) {
171
195
getQueryData ( {
172
- streamName : subLogQuery . get ( ) . streamName ,
173
- startTime : data . startTime ,
174
- endTime : data . endTime ,
175
- access : subLogQuery . get ( ) . access ,
196
+ streamName : query . streamName ,
197
+ startTime : query . startTime ,
198
+ endTime : query . endTime ,
199
+ limit : loadLimit ,
200
+ pageOffset : 0 ,
176
201
} ) ;
177
- getDataSchema ( subLogQuery . get ( ) . streamName ) ;
178
- setColumnToggles ( new Map ( ) ) ;
179
- setPinnedColumns ( new Set ( ) ) ;
202
+ getDataSchema ( query . streamName ) ;
180
203
}
181
- } ) ;
204
+ }
205
+ } , [ ] ) ;
182
206
183
- const subLogQueryListener = subLogQuery . subscribe ( ( ) => {
207
+ useEffect ( ( ) => {
208
+ const streamErrorListener = subLogStreamError . subscribe ( setLogStreamError ) ;
209
+ const logSearchListener = subLogSearch . subscribe ( setQuerySearch ) ;
210
+ const refreshIntervalListener = subRefreshInterval . subscribe ( setRefreshInterval ) ;
211
+ // const subID = subGapTime.subscribe((data) => {
212
+ // if (data) {
213
+ // getQueryData({
214
+ // streamName: subLogQuery.get().streamName,
215
+ // startTime: data.startTime,
216
+ // endTime: data.endTime,
217
+ // access: subLogQuery.get().access,
218
+ // });
219
+ // getDataSchema(subLogQuery.get().streamName);
220
+ // setColumnToggles(new Map());
221
+ // setPinnedColumns(new Set());
222
+ // }
223
+ // });
224
+
225
+ const subLogQueryListener = subLogQuery . subscribe ( ( state ) => {
226
+ setPageOffset ( 0 ) ;
184
227
resetLogsData ( ) ;
185
228
resetStreamData ( ) ;
186
229
resetColumns ( ) ;
230
+
231
+ if ( state ) {
232
+ getQueryData ( {
233
+ streamName : state . streamName ,
234
+ startTime : state . startTime ,
235
+ endTime : state . endTime ,
236
+ limit : loadLimit ,
237
+ pageOffset : 0 ,
238
+ } ) ;
239
+ getDataSchema ( state . streamName ) ;
240
+ }
187
241
} ) ;
188
242
189
243
return ( ) => {
190
244
streamErrorListener ( ) ;
191
245
subLogQueryListener ( ) ;
192
- subID ( ) ;
246
+ // subID();
193
247
refreshIntervalListener ( ) ;
194
248
logSearchListener ( ) ;
195
249
} ;
196
250
} , [ logsSchema ] ) ;
197
251
252
+ useEffect ( ( ) => {
253
+ const state = subLogQuery . get ( ) ;
254
+ getQueryData ( {
255
+ streamName : state . streamName ,
256
+ startTime : state . startTime ,
257
+ endTime : state . endTime ,
258
+ limit : loadLimit ,
259
+ pageOffset : pageOffset ,
260
+ } ) ;
261
+ } , [ pageOffset ] ) ;
262
+
198
263
useEffect ( ( ) => {
199
264
if ( subRefreshInterval . get ( ) ) {
200
265
const interval = setInterval ( ( ) => {
@@ -277,6 +342,7 @@ const LogTable: FC = () => {
277
342
const rightRef = useRef < HTMLDivElement > ( null ) ;
278
343
const pinnedContianerRef = useRef < HTMLDivElement > ( null ) ;
279
344
const [ pinnedColumnsWidth , setPinnedColumnsWidth ] = useMountedState ( 0 ) ;
345
+ const pagination = usePagination ( { total : pageLogData ?. totalPages ?? 1 , initialPage : 1 } ) ;
280
346
281
347
useEffect ( ( ) => {
282
348
if (
@@ -298,10 +364,6 @@ const LogTable: FC = () => {
298
364
299
365
return (
300
366
< Box className = { container } >
301
- < Box
302
- sx = { {
303
- borderBottom : '1px solid #D4D4D4' ,
304
- } } > </ Box >
305
367
< FilterPills />
306
368
{ ! ( logStreamError || logStreamSchemaError || logsError ) ? (
307
369
Boolean ( logsSchema ?. fields . length ) && Boolean ( pageLogData ?. data . length ) ? (
@@ -390,12 +452,58 @@ const LogTable: FC = () => {
390
452
< Box className = { footerContainer } >
391
453
< Box > </ Box >
392
454
{ ! loading && ! logsLoading ? (
393
- < Pagination
455
+ // <Pagination
456
+ // total={pageLogData?.totalPages || 1}
457
+ // value={pageLogData?.page || 1}
458
+ // onChange={(page) => {
459
+ // goToPage(page, pageLogData?.limit || 1);
460
+ // }}></Pagination>
461
+
462
+ < Pagination . Root
394
463
total = { pageLogData ?. totalPages || 1 }
395
464
value = { pageLogData ?. page || 1 }
396
465
onChange = { ( page ) => {
397
466
goToPage ( page , pageLogData ?. limit || 1 ) ;
398
- } } > </ Pagination >
467
+ pagination . setPage ( page ) ;
468
+ } } >
469
+ < Group spacing = { 5 } position = "center" >
470
+ < Pagination . First
471
+ onClick = { ( ) => {
472
+ if ( pageOffset !== 0 ) setPageOffset ( ( value ) => value - loadLimit ) ;
473
+ } }
474
+ disabled = { pageOffset === 0 }
475
+ />
476
+ < Pagination . Previous />
477
+ { pagination . range . map ( ( page ) => {
478
+ if ( page === 'dots' ) {
479
+ return < Pagination . Dots key = { page } /> ;
480
+ } else {
481
+ return (
482
+ < Pagination . Control
483
+ value = { page }
484
+ key = { page }
485
+ active = { pageLogData ?. page === page }
486
+ onClick = { ( ) => {
487
+ goToPage ( page ) ;
488
+ pagination . setPage ( page ) ;
489
+ } } >
490
+ { pageLogData ?. limit ? page + pageOffset / pageLogData ?. limit ?? 1 : page }
491
+ </ Pagination . Control >
492
+ ) ;
493
+ }
494
+ } ) }
495
+
496
+ < Pagination . Next />
497
+ < Pagination . Last
498
+ onClick = { ( ) => {
499
+ setPageOffset ( ( value ) => {
500
+ return value + loadLimit ;
501
+ } ) ;
502
+ } }
503
+ disabled = { false }
504
+ />
505
+ </ Group >
506
+ </ Pagination . Root >
399
507
) : (
400
508
< Loader variant = "dots" />
401
509
) }
0 commit comments