@@ -8,14 +8,22 @@ import React, {
8
8
useState ,
9
9
} from "react" ;
10
10
11
+ import SettingsOutlinedIcon from "@mui/icons-material/SettingsOutlined" ;
12
+
11
13
import LogExportManager , {
12
14
EXPORT_LOG_PROGRESS_VALUE_MAX ,
13
15
EXPORT_LOG_PROGRESS_VALUE_MIN ,
14
16
} from "../services/LogExportManager" ;
15
17
import { Nullable } from "../typings/common" ;
16
18
import { CONFIG_KEY } from "../typings/config" ;
17
- import { LogLevelFilter } from "../typings/logs" ;
18
- import { DEFAULT_AUTO_DISMISS_TIMEOUT_MILLIS } from "../typings/notifications" ;
19
+ import {
20
+ LOG_LEVEL ,
21
+ LogLevelFilter ,
22
+ } from "../typings/logs" ;
23
+ import {
24
+ DEFAULT_AUTO_DISMISS_TIMEOUT_MILLIS ,
25
+ LONG_AUTO_DISMISS_TIMEOUT_MILLIS ,
26
+ } from "../typings/notifications" ;
19
27
import { UI_STATE } from "../typings/states" ;
20
28
import { SEARCH_PARAM_NAMES } from "../typings/url" ;
21
29
import {
@@ -56,8 +64,9 @@ import {
56
64
57
65
interface StateContextType {
58
66
beginLineNumToLogEventNum : BeginLineNumToLogEventNumMap ,
59
- fileName : string ,
60
67
exportProgress : Nullable < number > ,
68
+ fileName : string ,
69
+ isSettingsModalOpen : boolean ,
61
70
uiState : UI_STATE ,
62
71
logData : string ,
63
72
numEvents : number ,
@@ -70,7 +79,8 @@ interface StateContextType {
70
79
exportLogs : ( ) => void ,
71
80
loadFile : ( fileSrc : FileSrcType , cursor : CursorType ) => void ,
72
81
loadPageByAction : ( navAction : NavigationAction ) => void ,
73
- setLogLevelFilter : ( newLogLevelFilter : LogLevelFilter ) => void ,
82
+ setIsSettingsModalOpen : ( isOpen : boolean ) => void ,
83
+ setLogLevelFilter : ( filter : LogLevelFilter ) => void ,
74
84
startQuery : ( queryString : string , isRegex : boolean , isCaseSensitive : boolean ) => void ,
75
85
}
76
86
const StateContext = createContext < StateContextType > ( { } as StateContextType ) ;
@@ -82,6 +92,7 @@ const STATE_DEFAULT: Readonly<StateContextType> = Object.freeze({
82
92
beginLineNumToLogEventNum : new Map < number , number > ( ) ,
83
93
exportProgress : null ,
84
94
fileName : "" ,
95
+ isSettingsModalOpen : false ,
85
96
logData : "No file is open." ,
86
97
numEvents : 0 ,
87
98
numPages : 0 ,
@@ -94,6 +105,7 @@ const STATE_DEFAULT: Readonly<StateContextType> = Object.freeze({
94
105
exportLogs : ( ) => null ,
95
106
loadFile : ( ) => null ,
96
107
loadPageByAction : ( ) => null ,
108
+ setIsSettingsModalOpen : ( ) => null ,
97
109
setLogLevelFilter : ( ) => null ,
98
110
startQuery : ( ) => null ,
99
111
} ) ;
@@ -236,6 +248,8 @@ const StateContextProvider = ({children}: StateContextProviderProps) => {
236
248
// States
237
249
const [ exportProgress , setExportProgress ] =
238
250
useState < Nullable < number > > ( STATE_DEFAULT . exportProgress ) ;
251
+ const [ isSettingsModalOpen , setIsSettingsModalOpen ] =
252
+ useState < boolean > ( STATE_DEFAULT . isSettingsModalOpen ) ;
239
253
const [ fileName , setFileName ] = useState < string > ( STATE_DEFAULT . fileName ) ;
240
254
const [ logData , setLogData ] = useState < string > ( STATE_DEFAULT . logData ) ;
241
255
const [ numEvents , setNumEvents ] = useState < number > ( STATE_DEFAULT . numEvents ) ;
@@ -270,6 +284,20 @@ const StateContextProvider = ({children}: StateContextProviderProps) => {
270
284
}
271
285
}
272
286
break ;
287
+ case WORKER_RESP_CODE . FORMAT_POPUP :
288
+ postPopUp ( {
289
+ level : LOG_LEVEL . INFO ,
290
+ message : "Adding a format string can enhance the readability of your" +
291
+ " structured logs by customizing how fields are displayed." ,
292
+ primaryAction : {
293
+ children : "Settings" ,
294
+ startDecorator : < SettingsOutlinedIcon /> ,
295
+ onClick : ( ) => { setIsSettingsModalOpen ( true ) ; } ,
296
+ } ,
297
+ timeoutMillis : LONG_AUTO_DISMISS_TIMEOUT_MILLIS ,
298
+ title : "A format string has not been configured" ,
299
+ } ) ;
300
+ break ;
273
301
case WORKER_RESP_CODE . LOG_FILE_INFO :
274
302
setFileName ( args . fileName ) ;
275
303
setNumEvents ( args . numEvents ) ;
@@ -418,14 +446,14 @@ const StateContextProvider = ({children}: StateContextProviderProps) => {
418
446
loadPageByCursor ( mainWorkerRef . current , cursor ) ;
419
447
} , [ ] ) ;
420
448
421
- const setLogLevelFilter = useCallback ( ( newLogLevelFilter : LogLevelFilter ) => {
449
+ const setLogLevelFilter = useCallback ( ( filter : LogLevelFilter ) => {
422
450
if ( null === mainWorkerRef . current ) {
423
451
return ;
424
452
}
425
453
setUiState ( UI_STATE . FAST_LOADING ) ;
426
454
workerPostReq ( mainWorkerRef . current , WORKER_REQ_CODE . SET_FILTER , {
427
455
cursor : { code : CURSOR_CODE . EVENT_NUM , args : { eventNum : logEventNumRef . current ?? 1 } } ,
428
- logLevelFilter : newLogLevelFilter ,
456
+ logLevelFilter : filter ,
429
457
} ) ;
430
458
} , [ ] ) ;
431
459
@@ -510,6 +538,7 @@ const StateContextProvider = ({children}: StateContextProviderProps) => {
510
538
beginLineNumToLogEventNum : beginLineNumToLogEventNumRef . current ,
511
539
exportProgress : exportProgress ,
512
540
fileName : fileName ,
541
+ isSettingsModalOpen : isSettingsModalOpen ,
513
542
logData : logData ,
514
543
numEvents : numEvents ,
515
544
numPages : numPages ,
@@ -522,6 +551,7 @@ const StateContextProvider = ({children}: StateContextProviderProps) => {
522
551
exportLogs : exportLogs ,
523
552
loadFile : loadFile ,
524
553
loadPageByAction : loadPageByAction ,
554
+ setIsSettingsModalOpen : setIsSettingsModalOpen ,
525
555
setLogLevelFilter : setLogLevelFilter ,
526
556
startQuery : startQuery ,
527
557
} }
0 commit comments