1
+ import React from "react" ;
2
+ import { LogResults , ListLogsPageProps } from "../interfaces" ;
3
+ import { getAppHelper } from "../Utils" ;
4
+
5
+ export const ListLogs : React . FC < ListLogsPageProps > = ( props ) => {
6
+ const { pageName = "" , csrfToken = "" } = props ;
7
+ const { setProps } = getAppHelper ( pageName ) ;
8
+ const [ results , setResults ] = React . useState < LogResults [ ] > ( [ ] ) ;
9
+
10
+ const onSubmit = ( ) => {
11
+ const data = { } as { logId : string } ;
12
+
13
+ Array . from ( document . querySelectorAll ( "input" ) ) . forEach ( input => {
14
+ const key = input . getAttribute ( "id" ) as string ;
15
+ data [ key ] = input . value ;
16
+ } ) ;
17
+
18
+ if ( ! data . logId ) {
19
+ setProps ( {
20
+ ...props ,
21
+ dialog : { className : "alert-danger" , message : "You must provide a log id" }
22
+ } ) ;
23
+ }
24
+
25
+ fetch ( `/admp/logs?logId=${ data . logId } ` , {
26
+ method : 'get' ,
27
+ headers : { "X-Apiker-Csrf" : csrfToken }
28
+ } )
29
+ . then ( r => r . json ( ) . then ( res => ( { status : r . status , body : res } ) ) )
30
+ . then ( data => {
31
+ const { status, body = { } } = data ;
32
+ const { entries = [ ] } = body ;
33
+ const isSucessful = status === 200 ;
34
+
35
+ const message = isSucessful ? "Action performed successfully" : "Failure returned by the endpoint." ;
36
+
37
+ setProps ( {
38
+ ...props ,
39
+ dialog : { className : isSucessful ? "alert-primary" : "alert-danger" , message }
40
+ } ) ;
41
+
42
+ setResults ( entries ) ;
43
+ } )
44
+ . catch ( error => {
45
+ setProps ( {
46
+ ...props ,
47
+ dialog : { className : "alert-danger" , message : error ?. message }
48
+ } ) ;
49
+ } )
50
+ } ;
51
+
52
+ return (
53
+ < div className = "action-wrapper" >
54
+ < form className = "login-form" onSubmit = { onSubmit } >
55
+ < input className = "form-control form-control-lg mt-2" id = "logId" type = "text" placeholder = "Log ID" />
56
+ < button className = "btn btn-primary mt-2 action-btn" type = "submit" > Submit</ button >
57
+ </ form >
58
+ { ( results && results . length ) ? results . map ( ( result ) => (
59
+ < div className = "results-container" >
60
+ < div className = "results-item" >
61
+ < ul >
62
+ { Object . keys ( result ) . map ( ( key ) => (
63
+ < li > < span className = "title" > { key } </ span > < span className = "text" title = { key === "time" ? new Date ( result [ key ] as string ) . toLocaleString ( ) : result [ key ] } >
64
+ { key === "time" ? new Date ( result [ key ] as string ) . toLocaleString ( ) : result [ key ] }
65
+ </ span > </ li >
66
+ ) ) }
67
+ </ ul >
68
+ </ div >
69
+ </ div >
70
+ ) ) : null }
71
+ </ div >
72
+ ) ;
73
+ }
0 commit comments