Skip to content

Commit 7288f2b

Browse files
committed
Ignore duplicate company signatures
1 parent 069d413 commit 7288f2b

File tree

7 files changed

+48
-22
lines changed

7 files changed

+48
-22
lines changed

src/app/(authenticated)/companies/[id]/StandDetails.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,19 @@ export default function StandDetails({ standDetails }: StandDetailsProps) {
1111
{standDetails ? (
1212
<>
1313
<div
14-
className={`flex flex-col items-center justify-center text-xs ${standDetails.chairs ? "text-sinfo-primary" : "text-gray-300"}`}
14+
className={`w-[25%] flex flex-col items-center justify-center text-xs ${standDetails.chairs ? "text-sinfo-primary" : "text-gray-300"}`}
1515
>
1616
<Armchair size={48} strokeWidth={standDetails.chairs > 0 ? 2 : 1} />
1717
<span>{standDetails.chairs} Chairs</span>
1818
</div>
1919
<div
20-
className={`flex flex-col items-center justify-center text-xs ${standDetails.table ? "text-sinfo-primary" : "text-gray-300"}`}
20+
className={`w-[25%] flex flex-col items-center justify-center text-xs ${standDetails.table ? "text-sinfo-primary" : "text-gray-300"}`}
2121
>
2222
<Dock size={48} strokeWidth={standDetails.table ? 2 : 1} />
2323
<span>{standDetails.table ? "Want table" : "No table"}</span>
2424
</div>
2525
<div
26-
className={`flex flex-col items-center justify-center text-xs ${standDetails.lettering ? "text-sinfo-primary" : "text-gray-300"}`}
26+
className={`w-[25%] flex flex-col items-center justify-center text-xs ${standDetails.lettering ? "text-sinfo-primary" : "text-gray-300"}`}
2727
>
2828
<Construction
2929
size={48}

src/app/(authenticated)/home/page.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import Link from "next/link";
1212
import { getServerSession } from "next-auth";
1313
import authOptions from "@/app/api/auth/[...nextauth]/authOptions";
1414
import { UserService } from "@/services/UserService";
15-
import { isCompany, isToday } from "@/utils/utils";
15+
import { getUserActiveSignatureData, isAttendee } from "@/utils/utils";
1616
import UserSignOut from "@/components/UserSignOut";
1717
import { SPIN_WHEEL_MAXIMUM } from "@/constants";
1818
import { EventService } from "@/services/EventService";
@@ -49,11 +49,9 @@ export default async function Home() {
4949
? speakers.sort(() => Math.random() - 0.5).slice(0, N_SPEAKER_TILES)
5050
: [];
5151

52-
const spinWheelData = user.signatures?.find(
53-
(s) => s.edition === event?.id && isToday(s.day)
54-
);
52+
const spinWheelData = getUserActiveSignatureData(user, event?.id ?? ``);
5553
const showSpinWheelSection =
56-
!isCompany(user.role) && !spinWheelData?.redeemed;
54+
isAttendee(user.role) && !spinWheelData?.redeemed;
5755

5856
return (
5957
<div className="container mx-auto">

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export default async function Profile() {
2525

2626
const achievements = await AchievementService.getAchievements();
2727
const userAchievements = achievements?.filter((a) =>
28-
a.users?.includes(user.id),
28+
a.users?.includes(user.id)
2929
);
3030

3131
const userConnections = await UserService.getConnections(session.cannonToken);
@@ -70,10 +70,9 @@ export default async function Profile() {
7070
) : (
7171
<ListCard
7272
title="Start winning achievements"
73-
subtitle="Click here to know more"
73+
subtitle="Click to know more"
7474
link="/profile/achievements"
7575
icon={Award}
76-
extraClassName="!bg-sinfo-primary !text-white"
7776
/>
7877
)}
7978
</GridList>

src/app/(authenticated)/spin/page.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,22 @@ import { SPIN_WHEEL_MAXIMUM } from "@/constants";
88
import { CompanyService } from "@/services/CompanyService";
99
import { EventService } from "@/services/EventService";
1010
import { UserService } from "@/services/UserService";
11-
import { isCompany, isToday } from "@/utils/utils";
11+
import { getUserActiveSignatureData, isAttendee } from "@/utils/utils";
1212
import { getServerSession } from "next-auth";
1313

1414
export default async function Spin() {
1515
const session = (await getServerSession(authOptions))!;
1616
const user = await UserService.getMe(session.cannonToken);
1717
if (!user) return <UserSignOut />;
1818

19-
if (isCompany(user.role)) {
19+
if (!isAttendee(user.role)) {
2020
return (
2121
<BlankPageWithMessage message="You're not eligible to spin the wheel." />
2222
);
2323
}
2424

2525
const event = await EventService.getLatest();
26-
const spinWheelData = user.signatures?.find(
27-
(s) => s.edition === event?.id && isToday(s.day)
28-
);
26+
const spinWheelData = getUserActiveSignatureData(user, event?.id ?? ``);
2927

3028
if (spinWheelData?.redeemed) {
3129
return (

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
"use client";
22

3-
import { isCompany, isMember, isToday } from "@/utils/utils";
3+
import {
4+
getUserActiveSignatureData,
5+
isAttendee,
6+
isMember,
7+
} from "@/utils/utils";
48
import { FerrisWheel } from "lucide-react";
59
import { ProfileButtonProps } from ".";
610
import { UserService } from "@/services/UserService";
@@ -18,14 +22,12 @@ export default function ValidateSpinButton({
1822
if (
1923
user.id === otherUser.id ||
2024
!isMember(user.role) ||
21-
isCompany(otherUser.role)
25+
!isAttendee(otherUser.role)
2226
) {
2327
return <></>;
2428
}
2529

26-
const spinWheelData = otherUser.signatures?.find(
27-
(s) => s.edition === edition && isToday(s.day)
28-
);
30+
const spinWheelData = getUserActiveSignatureData(otherUser, edition ?? ``);
2931

3032
const isEligible =
3133
(spinWheelData &&

src/components/user/CurriculumVitae.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ export default function CurriculumVitae({
125125
<>
126126
<MessageCard
127127
type="info"
128-
content="By submitting your CV you are accepting the Terms and Conditions. Click here to know more."
128+
content="By submitting your CV you are accepting the Terms and Conditions. Click to know more."
129129
onClick={() => router.push("/terms-and-conditions/cv")}
130130
/>
131131
<div className="relative flex flex-col justify-center items-center text-center p-4 gap-y-2 rounded-md outline-dashed outline-sinfo-primary text-sinfo-primary mt-2">

src/utils/utils.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ export function convertToAppRole(role: string): UserRole {
1414
}
1515
}
1616

17+
export function isAttendee(role: string): boolean {
18+
const appRole = convertToAppRole(role);
19+
return appRole === "Attendee";
20+
}
21+
1722
export function isMember(role: string): boolean {
1823
const appRole = convertToAppRole(role);
1924
return appRole === "Member" || appRole === "Admin";
@@ -146,3 +151,27 @@ export function getSessionColor(sessionKind: string) {
146151
return "#000";
147152
}
148153
}
154+
155+
export function getUserActiveSignatureData(user: User, edition: string) {
156+
let relevantSignatures = user.signatures?.find(
157+
(s) => s.edition === edition && isToday(s.day)
158+
);
159+
if (!relevantSignatures) return null;
160+
161+
const singatureMap: { [key: string]: SINFOSignature } = {};
162+
relevantSignatures.signatures.map((s) => {
163+
const curr = singatureMap[s.companyId];
164+
if (!curr) {
165+
singatureMap[s.companyId] = s;
166+
return;
167+
}
168+
if (new Date(s.date) < new Date(curr.date)) {
169+
singatureMap[s.date] = s;
170+
}
171+
});
172+
173+
return {
174+
...relevantSignatures,
175+
signatures: Object.values(singatureMap),
176+
};
177+
}

0 commit comments

Comments
 (0)