Skip to content

Commit a7530e1

Browse files
author
Laurie T. Malau
committed
Download instead of view account statement
1 parent 94f3b38 commit a7530e1

File tree

1 file changed

+19
-12
lines changed

1 file changed

+19
-12
lines changed

components/dashboard/src/admin/UserDetail.tsx

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ export default function UserDetail(p: { user: User }) {
2121
const [activity, setActivity] = useState(false);
2222
const [user, setUser] = useState(p.user);
2323
const [accountStatement, setAccountStatement] = useState<AccountStatement>();
24-
const [viewAccountStatement, setViewAccountStatement] = useState(false);
2524
const [isStudent, setIsStudent] = useState<boolean>();
2625
const [editFeatureFlags, setEditFeatureFlags] = useState(false);
2726
const [editRoles, setEditRoles] = useState(false);
@@ -86,6 +85,23 @@ export default function UserDetail(p: { user: User }) {
8685
const flags = getFlags(user, updateUser);
8786
const rop = getRopEntries(user, updateUser);
8887

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+
89105
return <>
90106
<PageWithSubMenu subMenu={adminMenu} title="Users" subtitle="Search and manage all users.">
91107
<div className="flex">
@@ -106,8 +122,8 @@ export default function UserDetail(p: { user: User }) {
106122
<Property name="Remaining Hours"
107123
actions={
108124
accountStatement && [{
109-
label: 'View Account Statement',
110-
onClick: () => setViewAccountStatement(true)
125+
label: 'Download Account Statement',
126+
onClick: () => downloadAccountStatement()
111127
}, {
112128
label: 'Grant 20 Extra Hours',
113129
onClick: async () => {
@@ -176,15 +192,6 @@ export default function UserDetail(p: { user: User }) {
176192
}
177193
</div>
178194
</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>
188195
</>;
189196
}
190197

0 commit comments

Comments
 (0)