1
- import { getAuditLogs } from "api/api"
1
+ import { getAuditLogs , getAuditLogsCount } from "api/api"
2
2
import { getErrorMessage } from "api/errors"
3
3
import { displayError } from "components/GlobalSnackbar/utils"
4
4
import { assign , createMachine } from "xstate"
@@ -9,31 +9,70 @@ export const auditMachine = createMachine(
9
9
{
10
10
id : "auditMachine" ,
11
11
schema : {
12
- context : { } as { auditLogs ?: AuditLogs } ,
12
+ context : { } as { auditLogs ?: AuditLogs ; count ?: number ; page : number ; limit : number } ,
13
13
services : { } as {
14
14
loadAuditLogs : {
15
15
data : AuditLogs
16
16
}
17
+ loadAuditLogsCount : {
18
+ data : number
19
+ }
17
20
} ,
21
+ events : { } as
22
+ | {
23
+ type : "NEXT"
24
+ }
25
+ | {
26
+ type : "PREVIOUS"
27
+ }
28
+ | {
29
+ type : "GO_TO_PAGE"
30
+ page : number
31
+ } ,
18
32
} ,
19
33
tsTypes : { } as import ( "./auditXService.typegen" ) . Typegen0 ,
20
- initial : "loadingLogs " ,
34
+ initial : "loading " ,
21
35
states : {
22
- loadingLogs : {
23
- invoke : {
24
- src : "loadAuditLogs" ,
25
- onDone : {
26
- target : "success" ,
27
- actions : [ "assignAuditLogs" ] ,
36
+ loading : {
37
+ invoke : [
38
+ {
39
+ src : "loadAuditLogs" ,
40
+ onDone : {
41
+ actions : [ "assignAuditLogs" ] ,
42
+ } ,
43
+ onError : {
44
+ target : "error" ,
45
+ actions : [ "displayLoadAuditLogsError" ] ,
46
+ } ,
28
47
} ,
29
- onError : {
30
- target : "error" ,
31
- actions : [ "displayLoadAuditLogsError" ] ,
48
+ {
49
+ src : "loadAuditLogsCount" ,
50
+ onDone : {
51
+ actions : [ "assignCount" ] ,
52
+ } ,
53
+ onError : {
54
+ target : "error" ,
55
+ actions : [ "displayLoadAuditLogsCountError" ] ,
56
+ } ,
32
57
} ,
33
- } ,
58
+ ] ,
59
+ onDone : "success" ,
34
60
} ,
35
61
success : {
36
- type : "final" ,
62
+ on : {
63
+ NEXT : {
64
+ actions : [ "assignNextPage" ] ,
65
+ target : "loading" ,
66
+ } ,
67
+ PREVIOUS : {
68
+ actions : [ "assignPreviousPage" ] ,
69
+ target : "loading" ,
70
+ } ,
71
+ GO_TO_PAGE : {
72
+ actions : [ "assignPage" ] ,
73
+ target : "loading" ,
74
+ } ,
75
+ } ,
37
76
} ,
38
77
error : {
39
78
type : "final" ,
@@ -45,13 +84,35 @@ export const auditMachine = createMachine(
45
84
assignAuditLogs : assign ( {
46
85
auditLogs : ( _ , event ) => event . data ,
47
86
} ) ,
87
+ assignCount : assign ( {
88
+ count : ( _ , event ) => event . data ,
89
+ } ) ,
90
+ assignNextPage : assign ( {
91
+ page : ( { page } ) => page + 1 ,
92
+ } ) ,
93
+ assignPreviousPage : assign ( {
94
+ page : ( { page } ) => page - 1 ,
95
+ } ) ,
96
+ assignPage : assign ( {
97
+ page : ( { page } ) => page ,
98
+ } ) ,
48
99
displayLoadAuditLogsError : ( _ , event ) => {
49
100
const message = getErrorMessage ( event . data , "Error on loading audit logs." )
50
101
displayError ( message )
51
102
} ,
103
+ displayLoadAuditLogsCountError : ( _ , event ) => {
104
+ const message = getErrorMessage ( event . data , "Error on loading audit logs count." )
105
+ displayError ( message )
106
+ } ,
52
107
} ,
53
108
services : {
54
- loadAuditLogs : ( ) => getAuditLogs ( ) ,
109
+ loadAuditLogs : ( { page, limit } , _ ) =>
110
+ getAuditLogs ( {
111
+ // The page in the API starts at 0
112
+ offset : ( page - 1 ) * limit ,
113
+ limit,
114
+ } ) ,
115
+ loadAuditLogsCount : ( ) => getAuditLogsCount ( ) ,
55
116
} ,
56
117
} ,
57
118
)
0 commit comments