From f374d91ef827dd108bc8322546d0a6733ff699e6 Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Tue, 2 Apr 2024 10:53:34 +0100 Subject: [PATCH] Solved an issue where the company name of country managers wasn't able to be updated --- src/components/UserCard.tsx | 2 +- src/pages/(admin)/Lists/UserList.tsx | 44 ++++++++++++---------------- src/pages/api/users/update.ts | 2 +- src/resources/user.ts | 8 +++-- 4 files changed, 27 insertions(+), 29 deletions(-) diff --git a/src/components/UserCard.tsx b/src/components/UserCard.tsx index 1580272d..93e9bac3 100644 --- a/src/components/UserCard.tsx +++ b/src/components/UserCard.tsx @@ -114,7 +114,7 @@ const UserCard = ({user, loggedInUser, onClose, onViewStudents, onViewTeachers, agentInformation: type === "agent" ? { - name: companyName, + companyName, commercialRegistration, } : undefined, diff --git a/src/pages/(admin)/Lists/UserList.tsx b/src/pages/(admin)/Lists/UserList.tsx index 89b9656a..15256380 100644 --- a/src/pages/(admin)/Lists/UserList.tsx +++ b/src/pages/(admin)/Lists/UserList.tsx @@ -16,18 +16,14 @@ import {countries, TCountries} from "countries-list"; import countryCodes from "country-codes-list"; import Modal from "@/components/Modal"; import UserCard from "@/components/UserCard"; -import {USER_TYPE_LABELS} from "@/resources/user"; +import {isAgentUser, USER_TYPE_LABELS} from "@/resources/user"; import useFilterStore from "@/stores/listFilterStore"; import {useRouter} from "next/router"; -import {isCorporateUser} from '@/resources/user'; -import { useListSearch } from "@/hooks/useListSearch"; +import {isCorporateUser} from "@/resources/user"; +import {useListSearch} from "@/hooks/useListSearch"; const columnHelper = createColumnHelper(); -const searchFields = [ - ['name'], - ['email'], - ['corporateInformation', 'companyInformation', 'name'], -]; +const searchFields = [["name"], ["email"], ["corporateInformation", "companyInformation", "name"]]; export default function UserList({user, filters = []}: {user: User; filters?: ((user: User) => boolean)[]}) { const [showDemographicInformation, setShowDemographicInformation] = useState(false); const [sorter, setSorter] = useState(); @@ -331,14 +327,14 @@ export default function UserList({user, filters = []}: {user: User; filters?: (( ) as any, cell: (info) => USER_TYPE_LABELS[info.getValue()], }), - columnHelper.accessor('corporateInformation.companyInformation.name', { + columnHelper.accessor("corporateInformation.companyInformation.name", { header: ( ) as any, - cell: (info) => getCorporateName(info.row.original), + cell: (info) => getCompanyName(info.row.original), }), columnHelper.accessor("subscriptionExpirationDate", { header: ( @@ -393,13 +389,16 @@ export default function UserList({user, filters = []}: {user: User; filters?: (( return undefined; }; - const getCorporateName = (user: User) => { - if(isCorporateUser(user)) { - return user.corporateInformation?.companyInformation?.name + const getCompanyName = (user: User) => { + if (isCorporateUser(user)) { + return user.corporateInformation?.companyInformation?.name; + } + if (isAgentUser(user)) { + return user.agentInformation.companyName; } - return ''; - } + return ""; + }; const sortFunction = (a: User, b: User) => { if (sorter === "name" || sorter === reverseString("name")) @@ -468,25 +467,20 @@ export default function UserList({user, filters = []}: {user: User; filters?: (( : b.demographicInformation!.gender.localeCompare(a.demographicInformation!.gender); } - if(sorter === 'companyName' || sorter === reverseString('companyName')) { - const aCorporateName = getCorporateName(a); - const bCorporateName = getCorporateName(b); + if (sorter === "companyName" || sorter === reverseString("companyName")) { + const aCorporateName = getCompanyName(a); + const bCorporateName = getCompanyName(b); if (!aCorporateName && bCorporateName) return sorter === "companyName" ? -1 : 1; if (aCorporateName && !bCorporateName) return sorter === "companyName" ? 1 : -1; if (!aCorporateName && !bCorporateName) return 0; - return sorter === "companyName" - ? aCorporateName.localeCompare(bCorporateName) - : bCorporateName.localeCompare(aCorporateName); + return sorter === "companyName" ? aCorporateName.localeCompare(bCorporateName) : bCorporateName.localeCompare(aCorporateName); } return a.id.localeCompare(b.id); }; - const { rows: filteredRows, renderSearch } = useListSearch( - searchFields, - displayUsers, - ) + const {rows: filteredRows, renderSearch} = useListSearch(searchFields, displayUsers); const table = useReactTable({ data: filteredRows, diff --git a/src/pages/api/users/update.ts b/src/pages/api/users/update.ts index b8091f50..3a79045f 100644 --- a/src/pages/api/users/update.ts +++ b/src/pages/api/users/update.ts @@ -85,7 +85,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { const user = await setDoc(userRef, updatedUser, {merge: true}); await managePaymentRecords(updatedUser, updatedUser.id); - if (updatedUser.status) { + if (updatedUser.status || updatedUser.type === "corporate") { // there's no await as this does not affect the user propagateStatusChange(queryId, updatedUser.status); } diff --git a/src/resources/user.ts b/src/resources/user.ts index ffc2c8b5..c6a516c1 100644 --- a/src/resources/user.ts +++ b/src/resources/user.ts @@ -1,4 +1,4 @@ -import {Type, User, CorporateUser} from "@/interfaces/user"; +import {Type, User, CorporateUser, AgentUser} from "@/interfaces/user"; export const USER_TYPE_LABELS: {[key in Type]: string} = { student: "Student", @@ -11,4 +11,8 @@ export const USER_TYPE_LABELS: {[key in Type]: string} = { export function isCorporateUser(user: User): user is CorporateUser { return (user as CorporateUser).corporateInformation !== undefined; - } \ No newline at end of file +} + +export function isAgentUser(user: User): user is AgentUser { + return (user as AgentUser).agentInformation !== undefined; +}