@@ -10,11 +10,11 @@ export const auditMachine = createMachine(
10
10
schema : {
11
11
context : { } as { auditLogs ?: AuditLog [ ] ; count ?: number ; page : number ; limit : number } ,
12
12
services : { } as {
13
- loadAuditLogs : {
14
- data : AuditLog [ ]
15
- }
16
- loadAuditLogsCount : {
17
- data : number
13
+ loadAuditLogsAndCount : {
14
+ data : {
15
+ auditLogs : AuditLog [ ]
16
+ count : number
17
+ }
18
18
}
19
19
} ,
20
20
events : { } as
@@ -33,42 +33,35 @@ export const auditMachine = createMachine(
33
33
initial : "loading" ,
34
34
states : {
35
35
loading : {
36
- invoke : [
37
- {
38
- src : "loadAuditLogs" ,
39
- onDone : {
40
- actions : [ "assignAuditLogs" ] ,
41
- } ,
42
- onError : {
43
- target : "error" ,
44
- actions : [ "displayLoadAuditLogsError" ] ,
45
- } ,
36
+ // Right now, XState doesn't a good job with state + context typing so
37
+ // this forces the AuditPageView to showing the loading state when the
38
+ // loading state is called again by cleaning up the audit logs data
39
+ entry : "clearPreviousAuditLogs" ,
40
+ invoke : {
41
+ src : "loadAuditLogsAndCount" ,
42
+ onDone : {
43
+ target : "success" ,
44
+ actions : [ "assignAuditLogsAndCount" ] ,
46
45
} ,
47
- {
48
- src : "loadAuditLogsCount" ,
49
- onDone : {
50
- actions : [ "assignCount" ] ,
51
- } ,
52
- onError : {
53
- target : "error" ,
54
- actions : [ "displayLoadAuditLogsCountError" ] ,
55
- } ,
46
+ onError : {
47
+ target : "error" ,
48
+ actions : [ "displayApiError" ] ,
56
49
} ,
57
- ] ,
50
+ } ,
58
51
onDone : "success" ,
59
52
} ,
60
53
success : {
61
54
on : {
62
55
NEXT : {
63
- actions : [ "assignNextPage" ] ,
56
+ actions : [ "assignNextPage" , "onPageChange" ] ,
64
57
target : "loading" ,
65
58
} ,
66
59
PREVIOUS : {
67
- actions : [ "assignPreviousPage" ] ,
60
+ actions : [ "assignPreviousPage" , "onPageChange" ] ,
68
61
target : "loading" ,
69
62
} ,
70
63
GO_TO_PAGE : {
71
- actions : [ "assignPage" ] ,
64
+ actions : [ "assignPage" , "onPageChange" ] ,
72
65
target : "loading" ,
73
66
} ,
74
67
} ,
@@ -80,11 +73,12 @@ export const auditMachine = createMachine(
80
73
} ,
81
74
{
82
75
actions : {
83
- assignAuditLogs : assign ( {
84
- auditLogs : ( _ , event ) => event . data ,
76
+ clearPreviousAuditLogs : assign ( {
77
+ auditLogs : ( _ ) => undefined ,
85
78
} ) ,
86
- assignCount : assign ( {
87
- count : ( _ , event ) => event . data ,
79
+ assignAuditLogsAndCount : assign ( {
80
+ auditLogs : ( _ , event ) => event . data . auditLogs ,
81
+ count : ( _ , event ) => event . data . count ,
88
82
} ) ,
89
83
assignNextPage : assign ( {
90
84
page : ( { page } ) => page + 1 ,
@@ -93,25 +87,29 @@ export const auditMachine = createMachine(
93
87
page : ( { page } ) => page - 1 ,
94
88
} ) ,
95
89
assignPage : assign ( {
96
- page : ( { page } ) => page ,
90
+ page : ( _ , { page } ) => page ,
97
91
} ) ,
98
- displayLoadAuditLogsError : ( _ , event ) => {
92
+ displayApiError : ( _ , event ) => {
99
93
const message = getErrorMessage ( event . data , "Error on loading audit logs." )
100
94
displayError ( message )
101
95
} ,
102
- displayLoadAuditLogsCountError : ( _ , event ) => {
103
- const message = getErrorMessage ( event . data , "Error on loading number of audit log entries." )
104
- displayError ( message )
105
- } ,
106
96
} ,
107
97
services : {
108
- loadAuditLogs : ( { page, limit } , _ ) =>
109
- getAuditLogs ( {
110
- // The page in the API starts at 0
111
- offset : ( page - 1 ) * limit ,
112
- limit,
113
- } ) . then ( ( data ) => data . audit_logs ) ,
114
- loadAuditLogsCount : ( ) => getAuditLogsCount ( ) . then ( ( data ) => data . count ) ,
98
+ loadAuditLogsAndCount : async ( { page, limit } , _ ) => {
99
+ const [ auditLogs , count ] = await Promise . all ( [
100
+ getAuditLogs ( {
101
+ // The page in the API starts at 0
102
+ offset : ( page - 1 ) * limit ,
103
+ limit,
104
+ } ) . then ( ( data ) => data . audit_logs ) ,
105
+ getAuditLogsCount ( ) . then ( ( data ) => data . count ) ,
106
+ ] )
107
+
108
+ return {
109
+ auditLogs,
110
+ count,
111
+ }
112
+ } ,
115
113
} ,
116
114
} ,
117
115
)
0 commit comments