Solved an issue where the company name of country managers wasn't able to be updated

This commit is contained in:
Tiago Ribeiro
2024-04-02 10:53:34 +01:00
parent 62ecc4e395
commit f374d91ef8
4 changed files with 27 additions and 29 deletions

View File

@@ -114,7 +114,7 @@ const UserCard = ({user, loggedInUser, onClose, onViewStudents, onViewTeachers,
agentInformation: agentInformation:
type === "agent" type === "agent"
? { ? {
name: companyName, companyName,
commercialRegistration, commercialRegistration,
} }
: undefined, : undefined,

View File

@@ -16,18 +16,14 @@ import {countries, TCountries} from "countries-list";
import countryCodes from "country-codes-list"; import countryCodes from "country-codes-list";
import Modal from "@/components/Modal"; import Modal from "@/components/Modal";
import UserCard from "@/components/UserCard"; 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 useFilterStore from "@/stores/listFilterStore";
import {useRouter} from "next/router"; import {useRouter} from "next/router";
import {isCorporateUser} from '@/resources/user'; import {isCorporateUser} from "@/resources/user";
import {useListSearch} from "@/hooks/useListSearch"; import {useListSearch} from "@/hooks/useListSearch";
const columnHelper = createColumnHelper<User>(); const columnHelper = createColumnHelper<User>();
const searchFields = [ const searchFields = [["name"], ["email"], ["corporateInformation", "companyInformation", "name"]];
['name'],
['email'],
['corporateInformation', 'companyInformation', 'name'],
];
export default function UserList({user, filters = []}: {user: User; filters?: ((user: User) => boolean)[]}) { export default function UserList({user, filters = []}: {user: User; filters?: ((user: User) => boolean)[]}) {
const [showDemographicInformation, setShowDemographicInformation] = useState(false); const [showDemographicInformation, setShowDemographicInformation] = useState(false);
const [sorter, setSorter] = useState<string>(); const [sorter, setSorter] = useState<string>();
@@ -331,14 +327,14 @@ export default function UserList({user, filters = []}: {user: User; filters?: ((
) as any, ) as any,
cell: (info) => USER_TYPE_LABELS[info.getValue()], cell: (info) => USER_TYPE_LABELS[info.getValue()],
}), }),
columnHelper.accessor('corporateInformation.companyInformation.name', { columnHelper.accessor("corporateInformation.companyInformation.name", {
header: ( header: (
<button className="flex gap-2 items-center" onClick={() => setSorter((prev) => selectSorter(prev, "companyName"))}> <button className="flex gap-2 items-center" onClick={() => setSorter((prev) => selectSorter(prev, "companyName"))}>
<span>Company Name</span> <span>Company Name</span>
<SorterArrow name="companyName" /> <SorterArrow name="companyName" />
</button> </button>
) as any, ) as any,
cell: (info) => getCorporateName(info.row.original), cell: (info) => getCompanyName(info.row.original),
}), }),
columnHelper.accessor("subscriptionExpirationDate", { columnHelper.accessor("subscriptionExpirationDate", {
header: ( header: (
@@ -393,13 +389,16 @@ export default function UserList({user, filters = []}: {user: User; filters?: ((
return undefined; return undefined;
}; };
const getCorporateName = (user: User) => { const getCompanyName = (user: User) => {
if (isCorporateUser(user)) { if (isCorporateUser(user)) {
return user.corporateInformation?.companyInformation?.name return user.corporateInformation?.companyInformation?.name;
}
if (isAgentUser(user)) {
return user.agentInformation.companyName;
} }
return ''; return "";
} };
const sortFunction = (a: User, b: User) => { const sortFunction = (a: User, b: User) => {
if (sorter === "name" || sorter === reverseString("name")) 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); : b.demographicInformation!.gender.localeCompare(a.demographicInformation!.gender);
} }
if(sorter === 'companyName' || sorter === reverseString('companyName')) { if (sorter === "companyName" || sorter === reverseString("companyName")) {
const aCorporateName = getCorporateName(a); const aCorporateName = getCompanyName(a);
const bCorporateName = getCorporateName(b); const bCorporateName = getCompanyName(b);
if (!aCorporateName && bCorporateName) return sorter === "companyName" ? -1 : 1; if (!aCorporateName && bCorporateName) return sorter === "companyName" ? -1 : 1;
if (aCorporateName && !bCorporateName) return sorter === "companyName" ? 1 : -1; if (aCorporateName && !bCorporateName) return sorter === "companyName" ? 1 : -1;
if (!aCorporateName && !bCorporateName) return 0; if (!aCorporateName && !bCorporateName) return 0;
return sorter === "companyName" return sorter === "companyName" ? aCorporateName.localeCompare(bCorporateName) : bCorporateName.localeCompare(aCorporateName);
? aCorporateName.localeCompare(bCorporateName)
: bCorporateName.localeCompare(aCorporateName);
} }
return a.id.localeCompare(b.id); return a.id.localeCompare(b.id);
}; };
const { rows: filteredRows, renderSearch } = useListSearch( const {rows: filteredRows, renderSearch} = useListSearch(searchFields, displayUsers);
searchFields,
displayUsers,
)
const table = useReactTable({ const table = useReactTable({
data: filteredRows, data: filteredRows,

View File

@@ -85,7 +85,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
const user = await setDoc(userRef, updatedUser, {merge: true}); const user = await setDoc(userRef, updatedUser, {merge: true});
await managePaymentRecords(updatedUser, updatedUser.id); 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 // there's no await as this does not affect the user
propagateStatusChange(queryId, updatedUser.status); propagateStatusChange(queryId, updatedUser.status);
} }

View File

@@ -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} = { export const USER_TYPE_LABELS: {[key in Type]: string} = {
student: "Student", student: "Student",
@@ -12,3 +12,7 @@ export const USER_TYPE_LABELS: {[key in Type]: string} = {
export function isCorporateUser(user: User): user is CorporateUser { export function isCorporateUser(user: User): user is CorporateUser {
return (user as CorporateUser).corporateInformation !== undefined; return (user as CorporateUser).corporateInformation !== undefined;
} }
export function isAgentUser(user: User): user is AgentUser {
return (user as AgentUser).agentInformation !== undefined;
}