diff --git a/app/applications/page.tsx b/app/applications/page.tsx index 3dcdb8a..c7d70b7 100644 --- a/app/applications/page.tsx +++ b/app/applications/page.tsx @@ -14,7 +14,11 @@ import { getQuestionText, getPortalConfig, } from "@/lib/firebaseUtils"; -import { CombinedApplicationData, APPLICATION_STATUS, PortalConfig } from "@/lib/types"; +import { + CombinedApplicationData, + APPLICATION_STATUS, + PortalConfig, +} from "@/lib/types"; import ApplicationAcceptModal from "@/components/ApplicationAcceptModal"; import { calculateAge } from "@/lib/evaluator"; @@ -23,9 +27,9 @@ export default function Applications() { const [applications, setApplications] = useState( [] ); - const [applicationsOriginal, setApplicationsOriginal] = useState( - [] - ); + const [applicationsOriginal, setApplicationsOriginal] = useState< + CombinedApplicationData[] + >([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [selectedApplication, setSelectedApplication] = @@ -39,10 +43,12 @@ export default function Applications() { motivation: string; bigProblem: string; interestingProject: string; + listTeammates: string; }>({ motivation: "Motivation", bigProblem: "Problem to Solve", interestingProject: "Interesting Project", + listTeammates: "List of Teammates", }); const [searchName, setSearchName] = useState(""); const [searchSort, setSearchSort] = useState(""); @@ -52,41 +58,67 @@ export default function Applications() { setSearchName(e.target.value); // possible for gender - const genderFiltered = applicationsOriginal.filter(app => app.gender_identity?.toLowerCase().includes(e.target.value.toLowerCase())) + const genderFiltered = applicationsOriginal.filter((app) => + app.gender_identity?.toLowerCase().includes(e.target.value.toLowerCase()) + ); // for university - const uniFiltered = applicationsOriginal.filter(app => app.school?.toLowerCase().includes(e.target.value.toLowerCase())) + const uniFiltered = applicationsOriginal.filter((app) => + app.school?.toLowerCase().includes(e.target.value.toLowerCase()) + ); // for status - const statusFiltered = applicationsOriginal.filter(app => app.status?.toLowerCase().includes(e.target.value.toLowerCase())) + const statusFiltered = applicationsOriginal.filter((app) => + app.status?.toLowerCase().includes(e.target.value.toLowerCase()) + ); // for name - const nameFiltered = applicationsOriginal.filter(app => app.firstName?.toLowerCase().includes(e.target.value.toLowerCase())) + const nameFiltered = applicationsOriginal.filter((app) => + app.firstName?.toLowerCase().includes(e.target.value.toLowerCase()) + ); // for last name - const lastNameFiltered = applicationsOriginal.filter(app => app.lastName?.toLowerCase().includes(e.target.value.toLowerCase())) + const lastNameFiltered = applicationsOriginal.filter((app) => + app.lastName?.toLowerCase().includes(e.target.value.toLowerCase()) + ); // for email - const emailFiltered = applicationsOriginal.filter(app => app.email?.toLowerCase().includes(e.target.value.toLowerCase())) + const emailFiltered = applicationsOriginal.filter((app) => + app.email?.toLowerCase().includes(e.target.value.toLowerCase()) + ); // for desired role - const roleFiltered = applicationsOriginal.filter(app => app.desiredRoles?.toLowerCase().includes(e.target.value.toLowerCase())) + const roleFiltered = applicationsOriginal.filter((app) => + app.desiredRoles?.toLowerCase().includes(e.target.value.toLowerCase()) + ); // for age - const ageFiltered = applicationsOriginal.filter(app => { + const ageFiltered = applicationsOriginal.filter((app) => { const age = calculateAge(app.date_of_birth); return age.toString().includes(e.target.value); - }) + }); // for year - const schoolYearFiltered = applicationsOriginal.filter(app => app.year?.toString().includes(e.target.value)) + const schoolYearFiltered = applicationsOriginal.filter((app) => + app.year?.toString().includes(e.target.value) + ); - const allResults = genderFiltered.concat(uniFiltered, statusFiltered, nameFiltered, lastNameFiltered, emailFiltered, roleFiltered, ageFiltered, schoolYearFiltered, schoolYearFiltered); - const uniqueResults = allResults.filter((app, index, self) => - index === self.findIndex(a => a.id === app.id) + const allResults = genderFiltered.concat( + uniFiltered, + statusFiltered, + nameFiltered, + lastNameFiltered, + emailFiltered, + roleFiltered, + ageFiltered, + schoolYearFiltered, + schoolYearFiltered + ); + const uniqueResults = allResults.filter( + (app, index, self) => index === self.findIndex((a) => a.id === app.id) ); setApplications(uniqueResults); - } + }; const getSortValue = (app: CombinedApplicationData, sortField: string) => { switch (sortField) { @@ -118,7 +150,9 @@ export default function Applications() { const bValue = getSortValue(b, sortField); if (typeof aValue === "string" && typeof bValue === "string") { - return descending ? bValue.localeCompare(aValue) : aValue.localeCompare(bValue); + return descending + ? bValue.localeCompare(aValue) + : aValue.localeCompare(bValue); } if (typeof aValue === "number" && typeof bValue === "number") { @@ -185,17 +219,23 @@ export default function Applications() { const loadQuestionTexts = async () => { try { - const [motivationText, bigProblemText, interestingProjectText] = - await Promise.all([ - getQuestionText("motivation"), - getQuestionText("bigProblem"), - getQuestionText("interestingProject"), - ]); + const [ + motivationText, + bigProblemText, + interestingProjectText, + listTeammatesText, + ] = await Promise.all([ + getQuestionText("motivation"), + getQuestionText("bigProblem"), + getQuestionText("interestingProject"), + getQuestionText("list_teammates"), + ]); setQuestionTexts({ motivation: motivationText, bigProblem: bigProblemText, interestingProject: interestingProjectText, + listTeammates: listTeammatesText, }); } catch (error) { console.error("Error loading question texts:", error); @@ -579,7 +619,10 @@ export default function Applications() { type="text" placeholder="Search by keyword" /> -

Support name, email, status, university, gender, role, age, school year.

+

+ Support name, email, status, university, gender, role, age, + school year. +

@@ -611,7 +654,7 @@ export default function Applications() {
{/*