@@ -3,20 +3,32 @@ import { useLogsStore, logsStoreReducers } from '@/pages/Stream/providers/LogsPr
3
3
import { useSearchParams } from 'react-router-dom' ;
4
4
import _ from 'lodash' ;
5
5
import { FIXED_DURATIONS } from '@/constants/timeConstants' ;
6
- import { LOG_QUERY_LIMITS } from '@/pages/Stream/providers/LogsProvider' ;
6
+ import { LOG_QUERY_LIMITS , columnsToSkip } from '@/pages/Stream/providers/LogsProvider' ;
7
7
import dayjs from 'dayjs' ;
8
8
import timeRangeUtils from '@/utils/timeRangeUtils' ;
9
9
import moment from 'moment-timezone' ;
10
10
import { filterStoreReducers , QueryType , useFilterStore } from '../providers/FilterProvider' ;
11
11
import { generateQueryBuilderASTFromSQL } from '../utils' ;
12
12
import { appStoreReducers , TimeRange , useAppStore } from '@/layouts/MainLayout/providers/AppProvider' ;
13
+ import { getOffset , joinOrSplit } from '@/utils' ;
13
14
14
15
const { getRelativeStartAndEndDate, formatDateWithTimezone, getLocalTimezone } = timeRangeUtils ;
15
- const { onToggleView , setPerPage , setCustQuerySearchState , setRowNumber } = logsStoreReducers ;
16
+
16
17
const { setTimeRange, syncTimeRange } = appStoreReducers ;
17
- const { applySavedFilters } = filterStoreReducers ;
18
+ const {
19
+ onToggleView,
20
+ setPerPage,
21
+ setCustQuerySearchState,
22
+ setTargetPage,
23
+ setCurrentOffset,
24
+ setTargetColumns,
25
+ setRowNumber,
26
+ } = logsStoreReducers ;
27
+ const { toogleQueryParamsFlag, setAppliedFilterQuery, applySavedFilters, updateQuery, updateAppliedQuery } =
28
+ filterStoreReducers ;
29
+
18
30
const timeRangeFormat = 'DD-MMM-YYYY_HH-mmz' ;
19
- const keys = [ 'view' , 'rows' , 'interval' , 'from' , 'to' , 'query' , 'filterType' , 'rowNumber' ] ;
31
+ const keys = [ 'view' , 'rows' , 'page' , ' interval', 'from' , 'to' , 'query' , 'filterType' , 'fields ', 'rowNumber' ] ;
20
32
21
33
const dateToParamString = ( date : Date ) => {
22
34
return formatDateWithTimezone ( date , timeRangeFormat ) ;
@@ -63,23 +75,24 @@ const deriveRowNumber = (rowNumber: string) => {
63
75
const storeToParamsObj = ( opts : {
64
76
timeRange : TimeRange ;
65
77
view : string ;
66
- offset : string ;
67
78
page : string ;
68
79
rows : string ;
69
80
query : string ;
70
81
filterType : string ;
82
+ fields : string ;
71
83
rowNumber : string ;
72
84
} ) : Record < string , string > => {
73
- const { timeRange, offset, page, view, rows, query, filterType, rowNumber } = opts ;
85
+ const { timeRange, page, view, rows, query, filterType, fields, rowNumber } = opts ;
86
+
74
87
const params : Record < string , string > = {
75
88
...deriveTimeRangeParams ( timeRange ) ,
76
89
...deriveRowNumber ( rowNumber ) ,
77
90
view,
78
- offset,
79
91
rows,
80
92
page,
81
93
query,
82
94
filterType : query ? filterType : '' ,
95
+ fields,
83
96
} ;
84
97
return _ . pickBy ( params , ( val , key ) => ! _ . isEmpty ( val ) && _ . includes ( keys , key ) ) ;
85
98
} ;
@@ -104,8 +117,12 @@ const useParamsController = () => {
104
117
const [ , setLogsStore ] = useLogsStore ( ( ) => null ) ;
105
118
const [ , setFilterStore ] = useFilterStore ( ( store ) => store ) ;
106
119
107
- const { currentOffset, currentPage, perPage, rowNumber } = tableOpts ;
120
+ const { currentOffset, currentPage, targetPage, perPage, headers, disabledColumns, targetColumns, rowNumber } =
121
+ tableOpts ;
122
+
123
+ const visibleHeaders = headers . filter ( ( el ) => ! columnsToSkip . includes ( el ) ) ;
108
124
125
+ const activeHeaders = visibleHeaders . filter ( ( el ) => ! disabledColumns . includes ( el ) ) ;
109
126
const [ searchParams , setSearchParams ] = useSearchParams ( ) ;
110
127
111
128
const syncRowNumber = useCallback ( ( storeAsParams : Record < string , string > , presentParams : Record < string , string > ) => {
@@ -115,35 +132,62 @@ const useParamsController = () => {
115
132
}
116
133
}
117
134
} , [ ] ) ;
135
+ const pageOffset = Math . ceil ( currentOffset / perPage ) ;
118
136
119
137
useEffect ( ( ) => {
120
138
const storeAsParams = storeToParamsObj ( {
121
139
timeRange,
122
- offset : `${ currentOffset } ` ,
123
- page : `${ currentPage } ` ,
140
+ page : `${ targetPage ? targetPage : Math . ceil ( currentPage + pageOffset ) } ` ,
124
141
view : viewMode ,
125
142
rows : `${ perPage } ` ,
126
143
query : custQuerySearchState . custSearchQuery ,
127
144
filterType : custQuerySearchState . viewMode ,
145
+ fields : `${ joinOrSplit ( ! _ . isEmpty ( targetColumns ) ? targetColumns : activeHeaders ) } ` ,
128
146
rowNumber,
129
147
} ) ;
130
148
const presentParams = paramsStringToParamsObj ( searchParams ) ;
149
+ if ( storeAsParams . query !== presentParams . query ) {
150
+ if ( presentParams . filterType === 'filters' ) {
151
+ setFilterStore ( ( store ) => updateQuery ( store , generateQueryBuilderASTFromSQL ( presentParams . query ) as QueryType ) ) ;
152
+ setFilterStore ( ( store ) => updateAppliedQuery ( store , store . query ) ) ;
153
+
154
+ setFilterStore ( ( store ) => setAppliedFilterQuery ( store , presentParams . query ) ) ;
155
+ setFilterStore ( ( store ) => toogleQueryParamsFlag ( store , true ) ) ;
156
+ }
157
+ setAppStore ( ( store ) => syncTimeRange ( store ) ) ;
158
+ setLogsStore ( ( store ) => setCustQuerySearchState ( store , presentParams . query , presentParams . filterType ) ) ;
159
+ }
160
+
161
+ syncTimeRangeToStore ( storeAsParams , presentParams ) ;
162
+
131
163
if ( [ 'table' , 'json' ] . includes ( presentParams . view ) && presentParams . view !== storeAsParams . view ) {
132
164
setLogsStore ( ( store ) => onToggleView ( store , presentParams . view as 'table' | 'json' ) ) ;
133
165
}
134
166
if ( storeAsParams . rows !== presentParams . rows && LOG_QUERY_LIMITS . includes ( _ . toNumber ( presentParams . rows ) ) ) {
135
167
setLogsStore ( ( store ) => setPerPage ( store , _ . toNumber ( presentParams . rows ) ) ) ;
136
168
}
137
169
138
- if ( storeAsParams . query !== presentParams . query ) {
139
- setAppStore ( ( store ) => syncTimeRange ( store ) ) ;
140
- setLogsStore ( ( store ) => setCustQuerySearchState ( store , presentParams . query , presentParams . filterType ) ) ;
141
- if ( presentParams . filterType === 'filters' )
142
- setFilterStore ( ( store ) =>
143
- applySavedFilters ( store , generateQueryBuilderASTFromSQL ( presentParams . query ) as QueryType ) ,
170
+ if ( storeAsParams . fields !== presentParams . fields ) {
171
+ setLogsStore ( ( store ) => setTargetColumns ( store , joinOrSplit ( presentParams . fields ) as string [ ] ) ) ;
172
+ }
173
+
174
+ if ( storeAsParams . page !== presentParams . page && ! _ . isEmpty ( presentParams . page ) ) {
175
+ setLogsStore ( ( store ) => setTargetPage ( store , _ . toNumber ( presentParams . page ) ) ) ;
176
+
177
+ const offset = getOffset ( _ . toNumber ( presentParams . page ) , _ . toNumber ( presentParams . rows ) ) ;
178
+
179
+ if ( offset > 0 ) {
180
+ setLogsStore ( ( store ) => setCurrentOffset ( store , offset ) ) ;
181
+
182
+ setLogsStore ( ( store ) =>
183
+ setTargetPage (
184
+ store ,
185
+ Math . abs ( _ . toNumber ( presentParams . page ) - Math . ceil ( offset / _ . toNumber ( presentParams . rows ) ) ) ,
186
+ ) ,
144
187
) ;
188
+ }
145
189
}
146
- syncTimeRangeToStore ( storeAsParams , presentParams ) ;
190
+
147
191
syncRowNumber ( storeAsParams , presentParams ) ;
148
192
setStoreSynced ( true ) ;
149
193
} , [ ] ) ;
@@ -152,31 +196,39 @@ const useParamsController = () => {
152
196
if ( isStoreSynced ) {
153
197
const storeAsParams = storeToParamsObj ( {
154
198
timeRange,
155
- offset : `${ currentOffset } ` ,
156
- page : `${ currentPage } ` ,
199
+ page : `${ targetPage ? targetPage : Math . ceil ( currentPage + pageOffset ) } ` ,
157
200
view : viewMode ,
158
201
rows : `${ perPage } ` ,
159
202
query : custQuerySearchState . custSearchQuery ,
160
203
filterType : custQuerySearchState . viewMode ,
204
+ fields : `${ joinOrSplit ( ! _ . isEmpty ( targetColumns ) ? targetColumns : activeHeaders ) } ` ,
161
205
rowNumber,
162
206
} ) ;
207
+
163
208
const presentParams = paramsStringToParamsObj ( searchParams ) ;
164
209
if ( _ . isEqual ( storeAsParams , presentParams ) ) return ;
165
210
setSearchParams ( storeAsParams ) ;
166
211
}
167
- } , [ tableOpts , viewMode , timeRange . startTime . toISOString ( ) , timeRange . endTime . toISOString ( ) , custQuerySearchState ] ) ;
212
+ } , [
213
+ tableOpts ,
214
+ targetPage ,
215
+ viewMode ,
216
+ timeRange . startTime . toISOString ( ) ,
217
+ timeRange . endTime . toISOString ( ) ,
218
+ custQuerySearchState ,
219
+ ] ) ;
168
220
169
221
useEffect ( ( ) => {
170
222
if ( ! isStoreSynced ) return ;
171
223
172
224
const storeAsParams = storeToParamsObj ( {
173
225
timeRange,
174
- offset : `${ currentOffset } ` ,
175
- page : `${ currentPage } ` ,
226
+ page : `${ targetPage ? targetPage : Math . ceil ( currentPage + pageOffset ) } ` ,
176
227
view : viewMode ,
177
228
rows : `${ perPage } ` ,
178
229
query : custQuerySearchState . custSearchQuery ,
179
230
filterType : custQuerySearchState . viewMode ,
231
+ fields : `${ joinOrSplit ( ! _ . isEmpty ( targetColumns ) ? targetColumns : activeHeaders ) } ` ,
180
232
rowNumber,
181
233
} ) ;
182
234
const presentParams = paramsStringToParamsObj ( searchParams ) ;
0 commit comments