@@ -21,7 +21,6 @@ export default function UserDetail(p: { user: User }) {
21
21
const [ activity , setActivity ] = useState ( false ) ;
22
22
const [ user , setUser ] = useState ( p . user ) ;
23
23
const [ accountStatement , setAccountStatement ] = useState < AccountStatement > ( ) ;
24
- const [ viewAccountStatement , setViewAccountStatement ] = useState ( false ) ;
25
24
const [ isStudent , setIsStudent ] = useState < boolean > ( ) ;
26
25
const [ editFeatureFlags , setEditFeatureFlags ] = useState ( false ) ;
27
26
const [ editRoles , setEditRoles ] = useState ( false ) ;
@@ -86,6 +85,23 @@ export default function UserDetail(p: { user: User }) {
86
85
const flags = getFlags ( user , updateUser ) ;
87
86
const rop = getRopEntries ( user , updateUser ) ;
88
87
88
+ const downloadAccountStatement = async ( ) => {
89
+ if ( ! accountStatement ) {
90
+ return ;
91
+ }
92
+ try {
93
+ const blob = new Blob ( [ JSON . stringify ( accountStatement ) ] , { type : 'application/json' } ) ;
94
+ const fileDownloadUrl = URL . createObjectURL ( blob ) ;
95
+ const link = document . createElement ( 'a' ) ;
96
+ link . href = fileDownloadUrl ;
97
+ link . setAttribute ( 'download' , 'AccountStatement.json' ) ;
98
+ document . body . appendChild ( link ) ;
99
+ link . click ( ) ;
100
+ } catch ( error ) {
101
+ console . error ( `Error downloading account statement ` , error ) ;
102
+ }
103
+ }
104
+
89
105
return < >
90
106
< PageWithSubMenu subMenu = { adminMenu } title = "Users" subtitle = "Search and manage all users." >
91
107
< div className = "flex" >
@@ -106,8 +122,8 @@ export default function UserDetail(p: { user: User }) {
106
122
< Property name = "Remaining Hours"
107
123
actions = {
108
124
accountStatement && [ {
109
- label : 'View Account Statement' ,
110
- onClick : ( ) => setViewAccountStatement ( true )
125
+ label : 'Download Account Statement' ,
126
+ onClick : ( ) => downloadAccountStatement ( )
111
127
} , {
112
128
label : 'Grant 20 Extra Hours' ,
113
129
onClick : async ( ) => {
@@ -176,15 +192,6 @@ export default function UserDetail(p: { user: User }) {
176
192
}
177
193
</ div >
178
194
</ 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
195
</ > ;
189
196
}
190
197
0 commit comments