diff --git a/src/modules/stuyactivities/orgs/org_admin/components/PendingMember.tsx b/src/modules/stuyactivities/orgs/org_admin/components/PendingMember.tsx
index ef775246..6cad8add 100644
--- a/src/modules/stuyactivities/orgs/org_admin/components/PendingMember.tsx
+++ b/src/modules/stuyactivities/orgs/org_admin/components/PendingMember.tsx
@@ -12,50 +12,18 @@ const PendingMember = ({
last_name,
email,
picture,
+ approveFunc,
}: {
id: number;
first_name?: string;
last_name?: string;
email: string;
picture: string | undefined;
+ approveFunc: () => void;
}) => {
const { enqueueSnackbar } = useSnackbar();
const organization = useContext(OrgContext);
- const handleApprove = async () => {
- const { error } = await supabase.functions.invoke("approve-member", {
- body: { member_id: id },
- });
-
- if (error) {
- enqueueSnackbar(
- "Error approving member. Contact it@stuysu.org for support.",
- { variant: "error" },
- );
- return;
- }
-
- let memberIndex = organization.memberships.findIndex(
- (m) => m.id === id,
- );
- let memberData = organization.memberships[memberIndex];
-
- memberData.active = true;
-
- if (organization.setOrg) {
- organization.setOrg({
- ...organization,
- memberships: [
- ...organization.memberships.slice(0, memberIndex),
- memberData,
- ...organization.memberships.slice(memberIndex + 1),
- ],
- });
- }
-
- enqueueSnackbar("Member approved!", { variant: "success" });
- };
-
const handleReject = async () => {
const { error } = await supabase
.from("memberships")
@@ -102,7 +70,7 @@ const PendingMember = ({
{approveFunc()})}
variant="contained"
sx={{ height: "40px" }}
>
diff --git a/src/modules/stuyactivities/orgs/org_admin/pages/JoinRequests.tsx b/src/modules/stuyactivities/orgs/org_admin/pages/JoinRequests.tsx
index a21abfc6..44264dfc 100644
--- a/src/modules/stuyactivities/orgs/org_admin/pages/JoinRequests.tsx
+++ b/src/modules/stuyactivities/orgs/org_admin/pages/JoinRequests.tsx
@@ -4,6 +4,42 @@ import OrgContext from "../../../../../contexts/OrgContext";
import PendingMember from "../components/PendingMember";
import { Box } from "@mui/material";
import ItemList from "../../../../../components/ui/lists/ItemList";
+import AsyncButton from "../../../../../components/ui/buttons/AsyncButton";
+import { supabase } from "../../../../../lib/supabaseClient";
+import { enqueueSnackbar } from "notistack";
+
+export const handleApprove = async (id: number, organization: OrgContextType, single: boolean) => {
+ const { error } = await supabase.functions.invoke("approve-member", {
+ body: { member_id: id },
+ });
+
+ if (error) {
+ enqueueSnackbar(
+ "Error approving member. Contact it@stuysu.org for support.",
+ { variant: "error" },
+ );
+ return;
+ }
+
+ let memberIndex = organization.memberships.findIndex(
+ (m) => m.id === id,
+ );
+ let memberData = organization.memberships[memberIndex];
+
+ memberData.active = true;
+
+ if (organization.setOrg) {
+ organization.setOrg({
+ ...organization,
+ memberships: [
+ ...organization.memberships.slice(0, memberIndex),
+ memberData,
+ ...organization.memberships.slice(memberIndex + 1),
+ ],
+ });
+ }
+ if (single) enqueueSnackbar("Member approved!", { variant: "success" });
+};
const JoinRequests = () => {
const organization = useContext(OrgContext);
@@ -19,6 +55,15 @@ const JoinRequests = () => {
};
});
+ const handleApproveAll = async () => {
+ let membersApproved = 0;
+ pendingMembers.forEach(async (member) => {
+ handleApprove(member.membershipId!, organization, false);
+ membersApproved++;
+ });
+
+ enqueueSnackbar(`Approved ${membersApproved} members`, { variant: "success" });
+ };
return (
{
When people request to join your Activity, you'll see them
here.
+
+
Approve All
{pendingMembers?.length > 0 && (
@@ -43,6 +90,7 @@ const JoinRequests = () => {
email={member.email || "Undefined"}
picture={member.picture}
key={i}
+ approveFunc={(() => {handleApprove(member.membershipId!, organization, true)})}
/>
))}