Added linked account
This commit is contained in:
@@ -35,6 +35,7 @@ import GroupList from "@/pages/(admin)/Lists/GroupList";
|
|||||||
import useFilterStore from "@/stores/listFilterStore";
|
import useFilterStore from "@/stores/listFilterStore";
|
||||||
import { useRouter } from "next/router";
|
import { useRouter } from "next/router";
|
||||||
import useCodes from "@/hooks/useCodes";
|
import useCodes from "@/hooks/useCodes";
|
||||||
|
import { getUserCorporate } from "@/utils/groups";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
user: CorporateUser;
|
user: CorporateUser;
|
||||||
@@ -44,6 +45,8 @@ export default function CorporateDashboard({ user }: Props) {
|
|||||||
const [page, setPage] = useState("");
|
const [page, setPage] = useState("");
|
||||||
const [selectedUser, setSelectedUser] = useState<User>();
|
const [selectedUser, setSelectedUser] = useState<User>();
|
||||||
const [showModal, setShowModal] = useState(false);
|
const [showModal, setShowModal] = useState(false);
|
||||||
|
const [corporateUserToShow, setCorporateUserToShow] =
|
||||||
|
useState<CorporateUser>();
|
||||||
|
|
||||||
const { stats } = useStats();
|
const { stats } = useStats();
|
||||||
const { users, reload } = useUsers();
|
const { users, reload } = useUsers();
|
||||||
@@ -57,6 +60,11 @@ export default function CorporateDashboard({ user }: Props) {
|
|||||||
setShowModal(!!selectedUser && page === "");
|
setShowModal(!!selectedUser && page === "");
|
||||||
}, [selectedUser, page]);
|
}, [selectedUser, page]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
// in this case it fetches the master corporate account
|
||||||
|
getUserCorporate(user.id).then(setCorporateUserToShow);
|
||||||
|
}, [user]);
|
||||||
|
|
||||||
const studentFilter = (user: User) =>
|
const studentFilter = (user: User) =>
|
||||||
user.type === "student" &&
|
user.type === "student" &&
|
||||||
groups.flatMap((g) => g.participants).includes(user.id);
|
groups.flatMap((g) => g.participants).includes(user.id);
|
||||||
@@ -200,6 +208,15 @@ export default function CorporateDashboard({ user }: Props) {
|
|||||||
|
|
||||||
const DefaultDashboard = () => (
|
const DefaultDashboard = () => (
|
||||||
<>
|
<>
|
||||||
|
{corporateUserToShow && (
|
||||||
|
<div className="absolute top-4 right-4 bg-neutral-200 px-2 rounded-lg py-1">
|
||||||
|
Linked to:{" "}
|
||||||
|
<b>
|
||||||
|
{corporateUserToShow?.corporateInformation?.companyInformation
|
||||||
|
.name || corporateUserToShow.name}
|
||||||
|
</b>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
<section className="flex flex-wrap gap-2 items-center -lg:justify-center lg:justify-between text-center">
|
<section className="flex flex-wrap gap-2 items-center -lg:justify-center lg:justify-between text-center">
|
||||||
<IconCard
|
<IconCard
|
||||||
onClick={() => setPage("students")}
|
onClick={() => setPage("students")}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ import MasterCorporateDashboard from "@/dashboards/MasterCorporate";
|
|||||||
import PaymentDue from "./(status)/PaymentDue";
|
import PaymentDue from "./(status)/PaymentDue";
|
||||||
import {useRouter} from "next/router";
|
import {useRouter} from "next/router";
|
||||||
import {PayPalScriptProvider} from "@paypal/react-paypal-js";
|
import {PayPalScriptProvider} from "@paypal/react-paypal-js";
|
||||||
import {CorporateUser, Type, userTypes} from "@/interfaces/user";
|
import {CorporateUser, MasterCorporateUser, Type, userTypes} from "@/interfaces/user";
|
||||||
import Select from "react-select";
|
import Select from "react-select";
|
||||||
import {USER_TYPE_LABELS} from "@/resources/user";
|
import {USER_TYPE_LABELS} from "@/resources/user";
|
||||||
|
|
||||||
@@ -187,6 +187,7 @@ export default function Home(props: Props) {
|
|||||||
{selectedScreen === "student" && <StudentDashboard user={user} />}
|
{selectedScreen === "student" && <StudentDashboard user={user} />}
|
||||||
{selectedScreen === "teacher" && <TeacherDashboard user={user} />}
|
{selectedScreen === "teacher" && <TeacherDashboard user={user} />}
|
||||||
{selectedScreen === "corporate" && <CorporateDashboard user={user as unknown as CorporateUser} />}
|
{selectedScreen === "corporate" && <CorporateDashboard user={user as unknown as CorporateUser} />}
|
||||||
|
{selectedScreen === "mastercorporate" && <MasterCorporateDashboard user={user as unknown as MasterCorporateUser} />}
|
||||||
{selectedScreen === "agent" && <AgentDashboard user={user} />}
|
{selectedScreen === "agent" && <AgentDashboard user={user} />}
|
||||||
{selectedScreen === "admin" && <AdminDashboard user={user} />}
|
{selectedScreen === "admin" && <AdminDashboard user={user} />}
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { CorporateUser, Group, User } from "@/interfaces/user";
|
import { CorporateUser, Group, User, Type } from "@/interfaces/user";
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
|
|
||||||
export const isUserFromCorporate = async (userID: string) => {
|
export const isUserFromCorporate = async (userID: string) => {
|
||||||
@@ -7,20 +7,12 @@ export const isUserFromCorporate = async (userID: string) => {
|
|||||||
const users = (await axios.get<User[]>("/api/users/list")).data;
|
const users = (await axios.get<User[]>("/api/users/list")).data;
|
||||||
|
|
||||||
const adminTypes = groups.map(
|
const adminTypes = groups.map(
|
||||||
(g) => users.find((u) => u.id === g.admin)?.type,
|
(g) => users.find((u) => u.id === g.admin)?.type
|
||||||
);
|
);
|
||||||
return adminTypes.includes("corporate");
|
return adminTypes.includes("corporate");
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getUserCorporate = async (
|
const getAdminForGroup = async (userID: string, role: Type) => {
|
||||||
userID: string,
|
|
||||||
): Promise<CorporateUser | undefined> => {
|
|
||||||
const userRequest = await axios.get<User>(`/api/users/${userID}`);
|
|
||||||
if (userRequest.status === 200) {
|
|
||||||
const user = userRequest.data;
|
|
||||||
if (user.type === "corporate") return user;
|
|
||||||
}
|
|
||||||
|
|
||||||
const groups = (await axios.get<Group[]>(`/api/groups?participant=${userID}`))
|
const groups = (await axios.get<Group[]>(`/api/groups?participant=${userID}`))
|
||||||
.data;
|
.data;
|
||||||
|
|
||||||
@@ -29,9 +21,23 @@ export const getUserCorporate = async (
|
|||||||
const userRequest = await axios.get<User>(`/api/users/${g.admin}`);
|
const userRequest = await axios.get<User>(`/api/users/${g.admin}`);
|
||||||
if (userRequest.status === 200) return userRequest.data;
|
if (userRequest.status === 200) return userRequest.data;
|
||||||
return undefined;
|
return undefined;
|
||||||
}),
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
const admins = adminRequests.filter((x) => x?.type === "corporate");
|
const admins = adminRequests.filter((x) => x?.type === role);
|
||||||
return admins.length > 0 ? (admins[0] as CorporateUser) : undefined;
|
return admins.length > 0 ? (admins[0] as CorporateUser) : undefined;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const getUserCorporate = async (
|
||||||
|
userID: string
|
||||||
|
): Promise<CorporateUser | undefined> => {
|
||||||
|
const userRequest = await axios.get<User>(`/api/users/${userID}`);
|
||||||
|
if (userRequest.status === 200) {
|
||||||
|
const user = userRequest.data;
|
||||||
|
if (user.type === "corporate") {
|
||||||
|
return getAdminForGroup(userID, "mastercorporate");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return getAdminForGroup(userID, "corporate");
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user