Skip to content

Commit 5fcaf65

Browse files
committed
Refresh page after user action
1 parent a5c719a commit 5fcaf65

File tree

8 files changed

+54
-41
lines changed

8 files changed

+54
-41
lines changed

src/app/(authenticated)/profile/achievements/page.tsx

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,21 @@ export default async function Achievements() {
3636
<div className="flex flex-col items-start gap-y-2 p-4 text-start text-sm">
3737
<h1 className="text-2xl font-bold">Achievements</h1>
3838
<span className="text-gray-600">
39-
Total points:{" "}
39+
Total points:&nbsp;
4040
{userAchievements?.reduce((acc, a) => acc + a.value, 0) || 0}
4141
</span>
4242
</div>
4343
{sortedKinds.map((k) => (
4444
<GridList key={k} title={formatAchievementKind(k)}>
45-
{achievementsByKind[k].map((a) => (
46-
<AchievementTile
47-
key={a.id}
48-
achievement={a}
49-
achieved={!!user && a.users?.includes(user.id)}
50-
/>
51-
))}
45+
{achievementsByKind[k]
46+
.sort((a, b) => a.name.localeCompare(b.name))
47+
.map((a) => (
48+
<AchievementTile
49+
key={a.id}
50+
achievement={a}
51+
achieved={!!user && a.users?.includes(user.id)}
52+
/>
53+
))}
5254
</GridList>
5355
))}
5456
</div>

src/app/(authenticated)/profile/edit/page.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { getServerSession } from "next-auth";
44
import EditProfileForm from "./EditProfileForm";
55
import { redirect } from "next/navigation";
66
import UserSignOut from "@/components/UserSignOut";
7+
import { revalidatePath } from "next/cache";
78

89
export default async function EditProfile() {
910
const session = (await getServerSession(authOptions))!;
@@ -12,7 +13,17 @@ export default async function EditProfile() {
1213

1314
async function updateUser(newUser: User) {
1415
"use server";
15-
if (await UserService.updateMe(session.cannonToken, newUser)) {
16+
const updatedUser = await UserService.updateMe(
17+
session.cannonToken,
18+
newUser,
19+
);
20+
if (updatedUser) {
21+
if (
22+
newUser.img.startsWith("data:") &&
23+
updatedUser.img.startsWith("http")
24+
) {
25+
revalidatePath(updatedUser.img);
26+
}
1627
redirect("/profile");
1728
}
1829
}

src/app/(authenticated)/qr/scan/QRScanner.tsx

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -51,26 +51,24 @@ export default function QRScanner({ user, cannonToken }: QRScannerProps) {
5151
}
5252
}
5353
} else if (scannedAchievement) {
54-
const redeemedAchievement = await AchievementService.redeemSecretAchievement(
55-
cannonToken,
56-
scannedAchievement
57-
)
54+
const redeemedAchievement =
55+
await AchievementService.redeemSecretAchievement(
56+
cannonToken,
57+
scannedAchievement,
58+
);
5859

5960
if (redeemedAchievement) {
60-
setBottomCard(<MessageCard
61-
type="success"
62-
content="Secret Achievement found!"
63-
/>,
61+
setBottomCard(
62+
<MessageCard type="success" content="Achievement redeemed!" />,
6463
);
6564
} else {
66-
setBottomCard(<MessageCard
67-
type="warning"
68-
content="Failed to get user's achievement. Scan again!"
69-
/>,
65+
setBottomCard(
66+
<MessageCard
67+
type="warning"
68+
content="Failed to redeem achievement. Scan again!"
69+
/>,
7070
);
7171
}
72-
73-
7472
} else {
7573
setBottomCard(<MessageCard type="danger" content="Invalid QR-Code" />);
7674
}

src/app/(authenticated)/users/[id]/buttons/ConnectButton.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export default function ConnectButton({
1919
if (!connection) {
2020
alert("Failed to connect");
2121
}
22+
window.location.reload();
2223
}
2324

2425
async function handleRemoveConnection() {
@@ -29,6 +30,7 @@ export default function ConnectButton({
2930
if (!connection) {
3031
alert("Failed to connect");
3132
}
33+
window.location.reload();
3234
}
3335

3436
if (connection) {

src/app/(authenticated)/users/[id]/buttons/DemoteButton.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export default function DemoteButton({
2323
async function handleDemote() {
2424
if (await UserService.demote(cannonToken, otherUser.id)) router.refresh();
2525
else alert("Failed to demote!");
26+
window.location.reload();
2627
}
2728

2829
return (

src/app/(authenticated)/users/[id]/buttons/ValidateSpinButton.tsx

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {
88
import { FerrisWheel } from "lucide-react";
99
import { ProfileButtonProps } from ".";
1010
import { UserService } from "@/services/UserService";
11-
import { useRouter } from "next/navigation";
1211
import { SPIN_WHEEL_MAXIMUM } from "@/constants";
1312

1413
export default function ValidateSpinButton({
@@ -17,8 +16,6 @@ export default function ValidateSpinButton({
1716
otherUser,
1817
edition,
1918
}: ProfileButtonProps) {
20-
const router = useRouter();
21-
2219
if (
2320
user.id === otherUser.id ||
2421
!isMember(user.role) ||
@@ -38,9 +35,9 @@ export default function ValidateSpinButton({
3835
async function validateSpinWheel() {
3936
const success = await UserService.validateSpinWheel(
4037
cannonToken,
41-
otherUser.id
38+
otherUser.id,
4239
);
43-
if (success) router.refresh();
40+
if (success) window.location.reload();
4441
else alert("Could not validate!");
4542
}
4643

src/services/AchievementService.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,16 @@ export const AchievementService = (() => {
1414

1515
const getAchievementBySession = async (
1616
cannonToken: string,
17-
sessionId: string
17+
sessionId: string,
1818
): Promise<Achievement | null> => {
1919
try {
2020
const resp = await fetch(`${achievementsEndpoint}/session/${sessionId}`, {
2121
headers: {
2222
Authorization: `Bearer ${cannonToken}`,
2323
},
24-
next: { revalidate: 5 },
24+
next: {
25+
revalidate: 0, // 1 day
26+
},
2527
});
2628
if (resp.ok) return (await resp.json()) as Achievement;
2729
} catch (e) {
@@ -33,22 +35,22 @@ export const AchievementService = (() => {
3335
const redeemSecretAchievement = async (
3436
cannonToken: string,
3537
code: string,
36-
): Promise<Achievement | null> => {
38+
): Promise<boolean> => {
3739
try {
38-
const resp = await fetch(`${achievementsEndpoint}/session/secret`, {
40+
const resp = await fetch(`${achievementsEndpoint}/redeem/secret`, {
3941
method: "POST",
4042
headers: {
4143
"Content-Type": "application/json",
4244
Authorization: `Bearer ${cannonToken}`,
4345
},
44-
body: JSON.stringify({code}),
46+
body: JSON.stringify({ code }),
4547
});
46-
if (resp.ok) return (await resp.json()) as Achievement;
48+
if (resp.ok) return true;
4749
} catch (e) {
4850
console.error(e);
4951
}
50-
return null;
51-
}
52+
return false;
53+
};
5254

5355
return { getAchievements, getAchievementBySession, redeemSecretAchievement };
5456
})();

src/services/UserService.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export const UserService = (() => {
4848
Authorization: `Bearer ${cannonToken}`,
4949
},
5050
next: {
51-
revalidate: 300, // 5 mins
51+
revalidate: 0, // 1 day
5252
tags: ["modified-me"],
5353
},
5454
});
@@ -67,7 +67,7 @@ export const UserService = (() => {
6767
Authorization: `Bearer ${cannonToken}`,
6868
},
6969
next: {
70-
revalidate: 300, // 5 mins
70+
revalidate: 0, // 1 day
7171
tags: ["modified-me"],
7272
},
7373
});
@@ -102,7 +102,7 @@ export const UserService = (() => {
102102
const updateMe = async (
103103
cannonToken: string,
104104
user: User,
105-
): Promise<boolean> => {
105+
): Promise<User | null> => {
106106
try {
107107
const resp = await fetch(usersEndpoint + "/me", {
108108
method: "PUT",
@@ -119,12 +119,12 @@ export const UserService = (() => {
119119
});
120120
if (resp.ok) {
121121
revalidateTag(`modified-me`);
122-
return true;
122+
return (await resp.json()) as User;
123123
}
124124
} catch (error) {
125125
console.error(error);
126126
}
127-
return false;
127+
return null;
128128
};
129129

130130
const getCVInfo = async (

0 commit comments

Comments
 (0)