From 73d7ddc4affdbe0f47e46e4444225bc8d6632f42 Mon Sep 17 00:00:00 2001 From: Joao Ramos Date: Thu, 14 Dec 2023 17:34:12 +0000 Subject: [PATCH 1/7] Profile screen was crashing --- src/pages/profile.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/pages/profile.tsx b/src/pages/profile.tsx index 54ff55cc..53a565aa 100644 --- a/src/pages/profile.tsx +++ b/src/pages/profile.tsx @@ -64,6 +64,8 @@ export default function Home() { const [gender, setGender] = useState(); const [employment, setEmployment] = useState(); const [position, setPosition] = useState(); + const [companyName, setCompanyName] = useState(""); + const [commercialRegistration, setCommercialRegistration] = useState(""); const profilePictureInput = useRef(null); @@ -89,6 +91,10 @@ export default function Home() { setGender(user.demographicInformation?.gender); setEmployment(user.type === "corporate" ? undefined : user.demographicInformation?.employment); setPosition(user.type === "corporate" ? user.demographicInformation?.position : undefined); + if(user.type === 'agent') { + setCompanyName(user.agentInformation?.companyName) + setCommercialRegistration(user.agentInformation?.commercialRegistration) + } } }, [user]); @@ -219,7 +225,7 @@ export default function Home() { name="companyName" onChange={() => null} placeholder="Enter corporate name" - defaultValue={user.agentInformation.companyName} + defaultValue={companyName} disabled /> null} placeholder="Enter commercial registration" - defaultValue={user.agentInformation.commercialRegistration} + defaultValue={commercialRegistration} disabled /> From 6f61fe1564cc9f01177ebc14d262f2aa6058c2b3 Mon Sep 17 00:00:00 2001 From: Joao Ramos Date: Thu, 14 Dec 2023 17:34:52 +0000 Subject: [PATCH 2/7] Comission is now hidden from everyone apart from admins --- src/pages/payment-record.tsx | 43 ++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/src/pages/payment-record.tsx b/src/pages/payment-record.tsx index 70f094d7..d7827f0c 100644 --- a/src/pages/payment-record.tsx +++ b/src/pages/payment-record.tsx @@ -57,7 +57,7 @@ export const getServerSideProps = withIronSessionSsr(({req, res}) => { const columnHelper = createColumnHelper(); -const PaymentCreator = ({onClose, reload}: {onClose: () => void; reload: () => void}) => { +const PaymentCreator = ({onClose, reload, showComission = false}: {onClose: () => void; reload: () => void, showComission: boolean}) => { const [corporate, setCorporate] = useState(); const [price, setPrice] = useState(0); const [currency, setCurrency] = useState("EUR"); @@ -173,24 +173,25 @@ const PaymentCreator = ({onClose, reload}: {onClose: () => void; reload: () => v /> - -
-
- - setCommission(e ? parseInt(e) : 0)} type="number" defaultValue={0} /> + {showComission && ( +
+
+ + setCommission(e ? parseInt(e) : 0)} type="number" defaultValue={0} /> +
+
+ + c.currency === currency)?.label}`} + onChange={() => null} + type="text" + defaultValue={0} + disabled + /> +
-
- - c.currency === currency)?.label}`} - onChange={() => null} - type="text" - defaultValue={0} - disabled - /> -
-
+ )}
@@ -420,7 +421,11 @@ export default function PaymentRecord() { setIsCreatingPayment(false)}> - setIsCreatingPayment(false)} reload={reload} /> + setIsCreatingPayment(false)} + reload={reload} + showComission={user.type === "developer" || user.type === "admin"} + />
From a2b9ba17a71dc75c5c97743946e43ffc1a71ab7f Mon Sep 17 00:00:00 2001 From: Joao Ramos Date: Thu, 14 Dec 2023 17:38:24 +0000 Subject: [PATCH 3/7] Replaced 'Agent' with 'Country Manager' on role display --- src/components/Navbar.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index b2ef13df..5b8b8b02 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -45,6 +45,13 @@ export default function Navbar({user, path, navDisabled = false, focusMode = fal const uppercaseFirstLetter = (string: Type) => string.charAt(0).toUpperCase() + string.slice(1); + const displayRole = (type: Type) => { + switch (type) { + case "agent": return 'Country Manager'; + default: return uppercaseFirstLetter(type); + } + } + return ( <> {user && setIsMenuOpen(false)} user={user} />} @@ -72,7 +79,7 @@ export default function Navbar({user, path, navDisabled = false, focusMode = fal )} {user.name} - {user.name} | {uppercaseFirstLetter(user.type)} + {user.name} | {displayRole(user.type)}
setIsMenuOpen(true)}> From 44454d1e056b638a96e38275f1ffb16da3d80d10 Mon Sep 17 00:00:00 2001 From: Joao Ramos Date: Thu, 14 Dec 2023 17:57:39 +0000 Subject: [PATCH 4/7] Changed corporate from user.name to user.companyName Company name is now updateable --- src/components/UserCard.tsx | 2 +- src/dashboards/Admin.tsx | 2 +- src/dashboards/Agent.tsx | 2 +- src/interfaces/user.ts | 2 +- src/pages/(admin)/Lists/UserList.tsx | 2 +- src/pages/payment-record.tsx | 22 ++++++++++++---------- 6 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/components/UserCard.tsx b/src/components/UserCard.tsx index c703d99c..c6b5db64 100644 --- a/src/components/UserCard.tsx +++ b/src/components/UserCard.tsx @@ -48,7 +48,7 @@ const UserCard = ({user, loggedInUser, onClose, onViewStudents, onViewTeachers, const [referralAgent, setReferralAgent] = useState(user.type === "corporate" ? user.corporateInformation?.referralAgent : undefined); const [companyName, setCompanyName] = useState( user.type === "corporate" - ? user.corporateInformation?.companyInformation.name + ? user.corporateInformation?.companyInformation.companyName : user.type === "agent" ? user.agentInformation.companyName : undefined, diff --git a/src/dashboards/Admin.tsx b/src/dashboards/Admin.tsx index 37514f3d..7db04b84 100644 --- a/src/dashboards/Admin.tsx +++ b/src/dashboards/Admin.tsx @@ -48,7 +48,7 @@ export default function AdminDashboard({user}: Props) {
{displayUser.type === "corporate" - ? displayUser.corporateInformation?.companyInformation?.name || displayUser.name + ? displayUser.corporateInformation?.companyInformation?.companyName || displayUser.name : displayUser.name} {displayUser.email} diff --git a/src/dashboards/Agent.tsx b/src/dashboards/Agent.tsx index f37054b4..c99e0d4d 100644 --- a/src/dashboards/Agent.tsx +++ b/src/dashboards/Agent.tsx @@ -51,7 +51,7 @@ export default function AgentDashboard({user}: Props) {
{displayUser.type === "corporate" - ? displayUser.corporateInformation?.companyInformation?.name || displayUser.name + ? displayUser.corporateInformation?.companyInformation?.companyName || displayUser.name : displayUser.name} {displayUser.email} diff --git a/src/interfaces/user.ts b/src/interfaces/user.ts index cd337ac5..b13089fa 100644 --- a/src/interfaces/user.ts +++ b/src/interfaces/user.ts @@ -68,7 +68,7 @@ export interface AgentInformation { } export interface CompanyInformation { - name: string; + companyName: string; userAmount: number; } diff --git a/src/pages/(admin)/Lists/UserList.tsx b/src/pages/(admin)/Lists/UserList.tsx index 5d83a17c..16efd641 100644 --- a/src/pages/(admin)/Lists/UserList.tsx +++ b/src/pages/(admin)/Lists/UserList.tsx @@ -294,7 +294,7 @@ export default function UserList({user, filters = []}: {user: User; filters?: (( "underline text-mti-purple-light hover:text-mti-purple-dark transition ease-in-out duration-300 cursor-pointer", )} onClick={() => (PERMISSIONS.updateExpiryDate[row.original.type].includes(user.type) ? setSelectedUser(row.original) : null)}> - {row.original.type === "corporate" ? row.original.corporateInformation?.companyInformation?.name || getValue() : getValue()} + {row.original.type === "corporate" ? row.original.corporateInformation?.companyInformation?.companyName || getValue() : getValue()}
), }), diff --git a/src/pages/payment-record.tsx b/src/pages/payment-record.tsx index d7827f0c..bc78813d 100644 --- a/src/pages/payment-record.tsx +++ b/src/pages/payment-record.tsx @@ -115,7 +115,7 @@ const PaymentCreator = ({onClose, reload, showComission = false}: {onClose: () = options={(users.filter((u) => u.type === "corporate") as CorporateUser[]).map((user) => ({ value: user.id, meta: user, - label: `${user.corporateInformation.companyInformation.name || user.name} - ${user.email}`, + label: `${user.corporateInformation.companyInformation.companyName || user.name} - ${user.email}`, }))} defaultValue={{value: "undefined", label: "Select an account"}} onChange={(value) => setCorporate((value as any)?.meta ?? undefined)} @@ -313,14 +313,16 @@ export default function PaymentRecord() { }), columnHelper.accessor("corporate", { header: "Corporate", - cell: (info) => ( -
setSelectedUser(users.find((x) => x.id === info.row.original.corporate))}> - {(users.find((x) => x.id === info.row.original.corporate) as CorporateUser)?.corporateInformation.companyInformation.name || - (users.find((x) => x.id === info.row.original.corporate) as CorporateUser)?.name} -
- ), + cell: (info) => { + const user = users.find((x) => x.id === info.row.original.corporate) as CorporateUser; + return ( +
setSelectedUser(user)}> + {user?.corporateInformation.companyInformation.companyName || user?.name} +
+ ); + }, }), columnHelper.accessor("date", { header: "Date", @@ -445,7 +447,7 @@ export default function PaymentRecord() { options={(users.filter((u) => u.type === "corporate") as CorporateUser[]).map((user) => ({ value: user.id, meta: user, - label: `${user.corporateInformation.companyInformation.name || user.name} - ${user.email}`, + label: `${user.corporateInformation.companyInformation.companyName || user.name} - ${user.email}`, }))} onChange={(value) => setCorporate((value as any)?.meta ?? undefined)} styles={{ From 861d97222a97ee947a4d1b02618e8d6ddfc303e5 Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Fri, 15 Dec 2023 10:40:32 +0000 Subject: [PATCH 5/7] Updated from companyName to name --- src/components/UserCard.tsx | 102 ++++++++++++++------------- src/dashboards/Admin.tsx | 2 +- src/dashboards/Agent.tsx | 11 ++- src/interfaces/user.ts | 2 +- src/pages/(admin)/Lists/UserList.tsx | 2 +- src/pages/payment-record.tsx | 14 ++-- 6 files changed, 67 insertions(+), 66 deletions(-) diff --git a/src/components/UserCard.tsx b/src/components/UserCard.tsx index c6b5db64..f72591aa 100644 --- a/src/components/UserCard.tsx +++ b/src/components/UserCard.tsx @@ -48,7 +48,7 @@ const UserCard = ({user, loggedInUser, onClose, onViewStudents, onViewTeachers, const [referralAgent, setReferralAgent] = useState(user.type === "corporate" ? user.corporateInformation?.referralAgent : undefined); const [companyName, setCompanyName] = useState( user.type === "corporate" - ? user.corporateInformation?.companyInformation.companyName + ? user.corporateInformation?.companyInformation.name : user.type === "agent" ? user.agentInformation.companyName : undefined, @@ -90,7 +90,7 @@ const UserCard = ({user, loggedInUser, onClose, onViewStudents, onViewTeachers, agentInformation: type === "agent" ? { - companyName, + name: companyName, commercialRegistration, } : undefined, @@ -100,13 +100,13 @@ const UserCard = ({user, loggedInUser, onClose, onViewStudents, onViewTeachers, referralAgent, monthlyDuration, companyInformation: { - companyName, + name: companyName, userAmount, }, payment: { value: paymentValue, currency: paymentCurrency, - ...referralAgent === '' ? {} : { commission: commissionValue } + ...(referralAgent === "" ? {} : {commission: commissionValue}), }, } : undefined, @@ -219,54 +219,56 @@ const UserCard = ({user, loggedInUser, onClose, onViewStudents, onViewTeachers,
-
- - {referralAgentLabel && ( - u.type === "agent").map((x) => ({value: x.id, label: `${x.name} - ${x.email}`})), + ]} + defaultValue={{ + value: referralAgent, + label: referralAgentLabel, + }} + onChange={(value) => setReferralAgent(value?.value)} + styles={{ + control: (styles) => ({ + ...styles, + paddingLeft: "4px", + border: "none", + outline: "none", + ":focus": { outline: "none", - ":focus": { - outline: "none", - }, - }), - option: (styles, state) => ({ - ...styles, - backgroundColor: state.isFocused ? "#D5D9F0" : state.isSelected ? "#7872BF" : "white", - color: state.isFocused ? "black" : styles.color, - }), - }} - /> - )} -
-
- {referralAgent !== '' ? ( - <> - - setCommission(e ? parseInt(e) : undefined)} - type="number" - defaultValue={commissionValue || 0} - className="col-span-3" - /> - - ) :
} -
+ }, + }), + option: (styles, state) => ({ + ...styles, + backgroundColor: state.isFocused ? "#D5D9F0" : state.isSelected ? "#7872BF" : "white", + color: state.isFocused ? "black" : styles.color, + }), + }} + /> + )}
+
+ {referralAgent !== "" ? ( + <> + + setCommission(e ? parseInt(e) : undefined)} + type="number" + defaultValue={commissionValue || 0} + className="col-span-3" + /> + + ) : ( +
+ )} +
+
)} diff --git a/src/dashboards/Admin.tsx b/src/dashboards/Admin.tsx index 7db04b84..37514f3d 100644 --- a/src/dashboards/Admin.tsx +++ b/src/dashboards/Admin.tsx @@ -48,7 +48,7 @@ export default function AdminDashboard({user}: Props) {
{displayUser.type === "corporate" - ? displayUser.corporateInformation?.companyInformation?.companyName || displayUser.name + ? displayUser.corporateInformation?.companyInformation?.name || displayUser.name : displayUser.name} {displayUser.email} diff --git a/src/dashboards/Agent.tsx b/src/dashboards/Agent.tsx index c99e0d4d..dbfb56cc 100644 --- a/src/dashboards/Agent.tsx +++ b/src/dashboards/Agent.tsx @@ -7,11 +7,7 @@ import UserList from "@/pages/(admin)/Lists/UserList"; import {dateSorter} from "@/utils"; import moment from "moment"; import {useEffect, useState} from "react"; -import { - BsArrowLeft, - BsPersonFill, - BsBank -} from "react-icons/bs"; +import {BsArrowLeft, BsPersonFill, BsBank} from "react-icons/bs"; import UserCard from "@/components/UserCard"; import useGroups from "@/hooks/useGroups"; import {calculateAverageLevel, calculateBandScore} from "@/utils/score"; @@ -41,7 +37,8 @@ export default function AgentDashboard({user}: Props) { const corporateFilter = (user: User) => user.type === "corporate"; const referredCorporateFilter = (x: User) => x.type === "corporate" && !!x.corporateInformation && x.corporateInformation.referralAgent === user.id; - const inactiveReferredCorporateFilter = (x: User) => referredCorporateFilter(x) && (x.status === "disabled" || moment().isAfter(x.subscriptionExpirationDate)); + const inactiveReferredCorporateFilter = (x: User) => + referredCorporateFilter(x) && (x.status === "disabled" || moment().isAfter(x.subscriptionExpirationDate)); const UserDisplay = (displayUser: User) => (
{displayUser.type === "corporate" - ? displayUser.corporateInformation?.companyInformation?.companyName || displayUser.name + ? displayUser.corporateInformation?.companyInformation?.name || displayUser.name : displayUser.name} {displayUser.email} diff --git a/src/interfaces/user.ts b/src/interfaces/user.ts index b13089fa..cd337ac5 100644 --- a/src/interfaces/user.ts +++ b/src/interfaces/user.ts @@ -68,7 +68,7 @@ export interface AgentInformation { } export interface CompanyInformation { - companyName: string; + name: string; userAmount: number; } diff --git a/src/pages/(admin)/Lists/UserList.tsx b/src/pages/(admin)/Lists/UserList.tsx index 16efd641..5d83a17c 100644 --- a/src/pages/(admin)/Lists/UserList.tsx +++ b/src/pages/(admin)/Lists/UserList.tsx @@ -294,7 +294,7 @@ export default function UserList({user, filters = []}: {user: User; filters?: (( "underline text-mti-purple-light hover:text-mti-purple-dark transition ease-in-out duration-300 cursor-pointer", )} onClick={() => (PERMISSIONS.updateExpiryDate[row.original.type].includes(user.type) ? setSelectedUser(row.original) : null)}> - {row.original.type === "corporate" ? row.original.corporateInformation?.companyInformation?.companyName || getValue() : getValue()} + {row.original.type === "corporate" ? row.original.corporateInformation?.companyInformation?.name || getValue() : getValue()}
), }), diff --git a/src/pages/payment-record.tsx b/src/pages/payment-record.tsx index 1faaf88a..aeb5400f 100644 --- a/src/pages/payment-record.tsx +++ b/src/pages/payment-record.tsx @@ -25,7 +25,7 @@ import Input from "@/components/Low/Input"; import ReactDatePicker from "react-datepicker"; import moment from "moment"; import PaymentAssetManager from "@/components/PaymentAssetManager"; -import { toFixedNumber } from "@/utils/number"; +import {toFixedNumber} from "@/utils/number"; export const getServerSideProps = withIronSessionSsr(({req, res}) => { const user = req.session.user; @@ -59,7 +59,7 @@ export const getServerSideProps = withIronSessionSsr(({req, res}) => { const columnHelper = createColumnHelper(); -const PaymentCreator = ({onClose, reload, showComission = false}: {onClose: () => void; reload: () => void, showComission: boolean}) => { +const PaymentCreator = ({onClose, reload, showComission = false}: {onClose: () => void; reload: () => void; showComission: boolean}) => { const [corporate, setCorporate] = useState(); const [price, setPrice] = useState(0); const [currency, setCurrency] = useState("EUR"); @@ -117,7 +117,7 @@ const PaymentCreator = ({onClose, reload, showComission = false}: {onClose: () = options={(users.filter((u) => u.type === "corporate") as CorporateUser[]).map((user) => ({ value: user.id, meta: user, - label: `${user.corporateInformation.companyInformation.companyName || user.name} - ${user.email}`, + label: `${user.corporateInformation.companyInformation.name || user.name} - ${user.email}`, }))} defaultValue={{value: "undefined", label: "Select an account"}} onChange={(value) => setCorporate((value as any)?.meta ?? undefined)} @@ -420,9 +420,11 @@ export default function PaymentRecord() { const user = users.find((x) => x.id === info.row.original.corporate) as CorporateUser; return (
setSelectedUser(user)}> - {user?.corporateInformation.companyInformation.companyName || user?.name} + {user?.corporateInformation.companyInformation.name || user?.name}
); }, @@ -551,7 +553,7 @@ export default function PaymentRecord() { options={(users.filter((u) => u.type === "corporate") as CorporateUser[]).map((user) => ({ value: user.id, meta: user, - label: `${user.corporateInformation.companyInformation.companyName || user.name} - ${user.email}`, + label: `${user.corporateInformation.companyInformation.name || user.name} - ${user.email}`, }))} onChange={(value) => setCorporate((value as any)?.meta ?? undefined)} styles={{ From 7712e5c71d8a3d3198fc482195452191b14785c3 Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Fri, 15 Dec 2023 10:51:31 +0000 Subject: [PATCH 6/7] Made it so it also reloads the users --- src/pages/payment-record.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/pages/payment-record.tsx b/src/pages/payment-record.tsx index aeb5400f..e123779f 100644 --- a/src/pages/payment-record.tsx +++ b/src/pages/payment-record.tsx @@ -245,8 +245,13 @@ export default function PaymentRecord() { const [agent, setAgent] = useState(); const {user} = useUser({redirectTo: "/login"}); - const {users} = useUsers(); - const {payments, reload} = usePayments(); + const {users, reload: reloadUsers} = useUsers(); + const {payments, reload: reloadPayment} = usePayments(); + + const reload = () => { + reloadUsers(); + reloadPayment(); + }; useEffect(() => { setDisplayPayments( From 2a335026de651f283bf5da819df614638f3fdc8d Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Fri, 15 Dec 2023 10:53:25 +0000 Subject: [PATCH 7/7] Used a already set constant instead of creating a new function --- src/components/Navbar.tsx | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index 5b8b8b02..6f6f5edf 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -9,6 +9,7 @@ import moment from "moment"; import MobileMenu from "./MobileMenu"; import {useState} from "react"; import {Type} from "@/interfaces/user"; +import {USER_TYPE_LABELS} from "@/resources/user"; interface Props { user: User; @@ -43,15 +44,6 @@ export default function Navbar({user, path, navDisabled = false, focusMode = fal return today.add(7, "days").isAfter(momentDate); }; - const uppercaseFirstLetter = (string: Type) => string.charAt(0).toUpperCase() + string.slice(1); - - const displayRole = (type: Type) => { - switch (type) { - case "agent": return 'Country Manager'; - default: return uppercaseFirstLetter(type); - } - } - return ( <> {user && setIsMenuOpen(false)} user={user} />} @@ -79,7 +71,9 @@ export default function Navbar({user, path, navDisabled = false, focusMode = fal )} {user.name} - {user.name} | {displayRole(user.type)} + + {user.name} | {USER_TYPE_LABELS[user.type]} +
setIsMenuOpen(true)}>