Skip to content
This repository was archived by the owner on Mar 24, 2024. It is now read-only.

Commit 9709977

Browse files
authored
[Front] Admin Check - [Front] Avatar Name (#89)
* Update AvatarMenu and ShopCart components * Admin with useMe
1 parent 710fb9b commit 9709977

File tree

5 files changed

+45
-15
lines changed

5 files changed

+45
-15
lines changed

SoarCraft.AwaiShop/Hub/User/Get.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ internal partial class ShopHub {
88
* <remarks>
99
* @author Aloento
1010
* @since 0.5.0
11-
* @version 0.1.0
11+
* @version 0.1.1
1212
* </remarks>
1313
*/
1414
[Authorize]
@@ -30,6 +30,7 @@ internal partial class ShopHub {
3030
x.EMail,
3131
x.Phone,
3232
x.Address,
33+
x.Admin,
3334
x.Version
3435
})
3536
.SingleOrDefaultAsync();

src/Components/AvatarMenu.tsx

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@ import { AuthenticatedTemplate, UnauthenticatedTemplate, useMsal } from "@azure/
22
import { Avatar, Link, Menu, MenuGroupHeader, MenuItem, MenuList, MenuPopover, MenuTrigger } from "@fluentui/react-components";
33
import { useBoolean } from "ahooks";
44
import { useEffect } from "react";
5+
import { Logger } from "~/Helpers/Logger";
6+
import { Hub } from "~/ShopNet";
57
import { OnNewUserSubject } from "./NewUser";
68
import { Setting } from "./Setting";
79

10+
const log = new Logger("Avatar", "Menu");
11+
812
/**
913
* @author Aloento
1014
* @since 0.1.0
11-
* @version 0.3.0
15+
* @version 0.3.2
1216
*/
1317
export function AvatarMenu() {
1418
const [isMenu, { toggle: toggleMenu }] = useBoolean();
@@ -21,19 +25,22 @@ export function AvatarMenu() {
2125
OnNewUserSubject.subscribe(x => setMount(!x));
2226
}, []);
2327

28+
const { data } = Hub.User.Get.useMe(log);
29+
2430
const claim = instance.getActiveAccount();
31+
const name = claim?.name || claim?.username;
2532

2633
return <>
2734
<Menu open={isMenu} onOpenChange={toggleMenu}>
2835
<MenuTrigger>
29-
<Avatar size={36} active={isMenu ? "active" : "unset"} />
36+
<Avatar size={36} active={isMenu ? "active" : "unset"} name={name} />
3037
</MenuTrigger>
3138

3239
<MenuPopover>
3340
<MenuList>
3441

3542
<AuthenticatedTemplate>
36-
<MenuGroupHeader>Hi {claim?.name || claim?.username}</MenuGroupHeader>
43+
<MenuGroupHeader>Hi {name}</MenuGroupHeader>
3744
</AuthenticatedTemplate>
3845

3946
<UnauthenticatedTemplate>
@@ -47,9 +54,12 @@ export function AvatarMenu() {
4754
<MenuItem>History</MenuItem>
4855
</Link>
4956

50-
<Link appearance="subtle" href="/Admin">
51-
<MenuItem>Admin</MenuItem>
52-
</Link>
57+
{
58+
data?.Admin &&
59+
<Link appearance="subtle" href="/Admin">
60+
<MenuItem>Admin</MenuItem>
61+
</Link>
62+
}
5363

5464
<MenuItem onClick={toggleModal}>Setting</MenuItem>
5565

src/Components/ShopCart/index.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Body1, Popover, PopoverSurface, PopoverTrigger, ToggleButton, Tooltip, makeStyles, shorthands, tokens } from "@fluentui/react-components";
1+
import { Popover, PopoverSurface, PopoverTrigger, ToggleButton, Tooltip, makeStyles, shorthands, tokens } from "@fluentui/react-components";
22
import { useConst } from "@fluentui/react-hooks";
33
import { CartRegular } from "@fluentui/react-icons";
44
import { useBoolean, useUpdateEffect } from "ahooks";
@@ -87,9 +87,7 @@ export function ShopCart() {
8787
<DelegateDataGrid Items={List} Columns={useConst(() => CartColumns(log))} NoHeader />
8888

8989
<div className={style.conf}>
90-
<Body1>
91-
{List.map(x => x.Quantity).reduce((prev, curr) => prev + curr, 0)} items in shopping cart
92-
</Body1>
90+
{List.map(x => x.Quantity).reduce((prev, curr) => prev + curr, 0)} items in shopping cart
9391

9492
<Confirm />
9593
</div>

src/Pages/Admin/index.tsx

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,24 @@
1+
import { Spinner } from "@fluentui/react-components";
12
import { useMemo } from "react";
23
import { useRouter } from "~/Components/Router";
4+
import { Logger } from "~/Helpers/Logger";
5+
import { Hub } from "~/ShopNet";
36
import { AdminOrder } from "./Order";
47
import { AdminProduct } from "./Product";
58
import { AdminUser } from "./User";
69

10+
const log = new Logger("Admin");
11+
712
/**
813
* @author Aloento
914
* @since 0.1.0
10-
* @version 0.1.0
15+
* @version 0.2.0
1116
*/
1217
function Admin() {
13-
const { Paths } = useRouter();
18+
const { Paths, Nav } = useRouter();
1419
const path = Paths.at(1);
1520

16-
return useMemo(() => {
21+
const content = useMemo(() => {
1722
switch (path) {
1823
case "Order":
1924
return <AdminOrder />;
@@ -24,7 +29,17 @@ function Admin() {
2429
default:
2530
return <AdminProduct />;
2631
}
27-
}, [path])
32+
}, [path]);
33+
34+
const { data, loading } = Hub.User.Get.useMe(log);
35+
36+
if (loading)
37+
return <Spinner size="huge" label="Authenticating..." />;
38+
39+
if (!data?.Admin)
40+
return Nav("/");
41+
42+
return content;
2843
}
2944

3045
/** @deprecated */

src/ShopNet/User/Get.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,17 @@ import { useErrorToast } from "~/Helpers/useToast";
88
import { IConcurrency } from "../Database";
99
import { ShopNet } from "../ShopNet";
1010

11+
/**
12+
* @author Aloento
13+
* @since 0.5.0
14+
* @version 0.1.0
15+
*/
1116
interface IuseMe extends IConcurrency {
1217
Name: string;
1318
EMail: string;
1419
Phone: string;
1520
Address: string;
21+
Admin?: boolean;
1622
}
1723

1824
/**

0 commit comments

Comments
 (0)