Skip to content

Commit

Permalink
fix N/A user in pick up sheet
Browse files Browse the repository at this point in the history
  • Loading branch information
JasonIsAzn committed Sep 9, 2024
1 parent e625fa3 commit 1a821a7
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 34 deletions.
72 changes: 38 additions & 34 deletions shpe-app-web/app/(main)/tools/shirt-tracker/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { useEffect, useState } from 'react';
import { useRouter } from 'next/navigation';
import { onAuthStateChanged } from 'firebase/auth';
import { db, auth } from '@/config/firebaseConfig';
import { getMembers, getShirtsToVerify } from '@/api/firebaseUtils';
import { getMembers, getShirtsToVerify, getUser } from '@/api/firebaseUtils';
import { PublicUserInfo, User } from '@/types/user';
import { SHPEEventLog } from '@/types/events';
import { doc, updateDoc, Timestamp } from 'firebase/firestore';
Expand All @@ -15,41 +15,45 @@ const ShirtTracker = () => {
const [loading, setLoading] = useState(true);
const [members, setMembers] = useState<UserWithLogs[]>([]);
const [shirtList, setShirtList] = useState<ShirtWithMember[]>([]);

const fetchShirts = async () => {
const shirts = await getShirtsToVerify();
const updatedShirtList: ShirtWithMember[] = shirts.map((shirt) => {
const shirtUid = shirt.uid?.trim().toLowerCase();
const matchedMember = members.find((member) =>
member.publicInfo?.uid?.trim().toLowerCase() === shirtUid
);

const email = matchedMember?.publicInfo?.email?.trim()
? matchedMember.publicInfo.email
: matchedMember?.private?.privateInfo?.email || 'N/A';

const isOfficialMember = matchedMember
? isMemberVerified(
matchedMember.publicInfo?.chapterExpiration,
matchedMember.publicInfo?.nationalExpiration
)
? 'Yes'
: 'No'
: 'No';

if (!matchedMember || !matchedMember.publicInfo?.name) {
console.log(`Shirt UID: ${shirt.uid}`);
console.log('Matched Member:', matchedMember);
console.log(`Name is missing for UID: ${shirt.uid}`);
}

return {
...shirt,
name: matchedMember?.publicInfo?.name || 'N/A',
email,
isOfficialMember,
shirtPickedUp: shirt.shirtPickedUp ?? false,
};
});
const updatedShirtList: ShirtWithMember[] = await Promise.all(
shirts.map(async (shirt) => {
const shirtUid = shirt.uid?.trim().toLowerCase();
let matchedMember = members.find((member) =>
member.publicInfo?.uid?.trim().toLowerCase() === shirtUid
);

// If not found, fetch the member data manually using getUser
if (!matchedMember) {
console.log(`Member not found locally for UID: ${shirt.uid}, fetching full user data from database...`);
matchedMember = await getUser(shirt.uid);
}

const email = matchedMember?.publicInfo?.email?.trim()
? matchedMember.publicInfo.email
: matchedMember?.private?.privateInfo?.email || 'N/A';

const isOfficialMember = matchedMember
? isMemberVerified(
matchedMember.publicInfo?.chapterExpiration,
matchedMember.publicInfo?.nationalExpiration
)
? 'Yes'
: 'No'
: 'No';


return {
...shirt,
name: matchedMember?.publicInfo?.name || 'N/A',
email,
isOfficialMember,
shirtPickedUp: shirt.shirtPickedUp ?? false,
};
})
);

updatedShirtList.sort(
(a, b) => a.shirtUploadDate.toDate().getTime() - b.shirtUploadDate.toDate().getTime()
Expand Down
25 changes: 25 additions & 0 deletions shpe-app-web/app/api/firebaseUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -304,3 +304,28 @@ export const getPrivateUserData = async (uid: string = ""): Promise<PrivateUserI
};


/**
* Obtains all data related to a user. Any undefined fields mean the currently logged-in user does not have permissions to those fields.
*
* @param uid - Universal ID tied to a registered user.
* @returns - User data formatted according to User interface defined in "./src/types/User.tsx".
*/
export const getUser = async (uid: string): Promise<User | undefined> => {
if (!auth.currentUser?.uid) {
throw new Error("Authentication Error", { cause: "User uid is undefined" });
}
const publicData = await getPublicUserData(uid);
const privateData = await getPrivateUserData(uid);
if (publicData == undefined) {
return undefined;
}
else {
return {
publicInfo: publicData,
private: {
privateInfo: privateData,
},
};
}
};

0 comments on commit 1a821a7

Please sign in to comment.