@@ -86,6 +86,23 @@ export default function UserDetail(p: { user: User }) {
86
86
const flags = getFlags ( user , updateUser ) ;
87
87
const rop = getRopEntries ( user , updateUser ) ;
88
88
89
+ const downloadAccountStatement = async ( ) => {
90
+ if ( ! accountStatement ) {
91
+ return ;
92
+ }
93
+ try {
94
+ const blob = new Blob ( [ JSON . stringify ( accountStatement ) ] , { type : 'application/json' } ) ;
95
+ const fileDownloadUrl = URL . createObjectURL ( blob ) ;
96
+ const link = document . createElement ( 'a' ) ;
97
+ link . href = fileDownloadUrl ;
98
+ link . setAttribute ( 'download' , 'AccountStatement.json' ) ;
99
+ document . body . appendChild ( link ) ;
100
+ link . click ( ) ;
101
+ } catch ( error ) {
102
+ console . error ( `Error downloading account statement ` , error ) ;
103
+ }
104
+ }
105
+
89
106
return < >
90
107
< PageWithSubMenu subMenu = { adminMenu } title = "Users" subtitle = "Search and manage all users." >
91
108
< div className = "flex" >
@@ -106,8 +123,8 @@ export default function UserDetail(p: { user: User }) {
106
123
< Property name = "Remaining Hours"
107
124
actions = {
108
125
accountStatement && [ {
109
- label : 'View Account Statement' ,
110
- onClick : ( ) => setViewAccountStatement ( true )
126
+ label : 'Download Account Statement' ,
127
+ onClick : ( ) => downloadAccountStatement ( )
111
128
} , {
112
129
label : 'Grant 20 Extra Hours' ,
113
130
onClick : async ( ) => {
@@ -176,15 +193,6 @@ export default function UserDetail(p: { user: User }) {
176
193
}
177
194
</ div >
178
195
</ Modal >
179
- < Modal visible = { viewAccountStatement } onClose = { ( ) => setViewAccountStatement ( false ) } title = "Edit Roles" buttons = { [
180
- < button className = "secondary" onClick = { ( ) => setViewAccountStatement ( false ) } > Done</ button >
181
- ] } >
182
- < div className = "flex flex-col" >
183
- {
184
- JSON . stringify ( accountStatement , null , ' ' )
185
- }
186
- </ div >
187
- </ Modal >
188
196
</ > ;
189
197
}
190
198
0 commit comments