Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ import { TailwindIndicator } from "@/components/tailwind-indicator";
import { Metadata } from "next";
import { siteConfig } from "@/config/site";

export const dynamic = "force-dynamic";

export const metadata: Metadata = {
title: {
default: siteConfig.name,
Expand Down
33 changes: 13 additions & 20 deletions components/account.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ export default function AccountForm({
name,
email,
}: {
user: { id: string };
user: any;
name: string;
email: string;
}) {
Expand All @@ -42,30 +42,23 @@ export default function AccountForm({
});

async function onSubmit(data: AccountFormValues) {
try {
const updates = {
email: data.email,
full_name: data.name,
};
try {
const updates = {
email: email,
full_name: data.name,
};

let { error } = await supabase
.from("profiles")
.update(updates)
.eq("id", user.id);
if (error) {
toast({
description: "An error occurred while updating your profile",
});
} else {
toast({
description: "Your profile has been updated",
});
}
} catch (error) {
toast({
description: "An error occurred while updating your profile",
});
}
if (error) throw error;
toast({
description: "Your profile has been updated",
});
} catch (error) {
console.log(error);
}
}

return (
Expand Down
195 changes: 94 additions & 101 deletions components/edit-member.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ export default function EditMemberForm({
member,
existingGroups,
}: {
member: { id: string; email: string; first_name: string; last_name: string };
existingGroups: string[];
member: any;
existingGroups: any;
}) {
//track all the groups
const [memberGroups, setMemberGroups] = React.useState<MemberGroup[]>([]);
Expand Down Expand Up @@ -112,110 +112,103 @@ export default function EditMemberForm({

console.log("existingIDs", existingGroupIds);
async function onSubmit(data: MemberFormValues) {
const {
data: { user },
} = await supabase.auth.getUser();

let groupIds = [];

// Delete all existing associations for the member
const { error: deleteError } = await supabase
.from("member_group_joins")
.delete()
.eq("member_id", member.id);
if (deleteError) {
console.error("Error deleting existing associations:", deleteError);
}

// Get the IDs of the selected groups that already exist in memberGroups
// Get the IDs of the selected groups that already exist in memberGroups
const existingGroupIds = selectedGroups
?.filter((group) =>
memberGroups?.map(({ name }) => name).includes(group.value)
const {
data: { user },
} = await supabase.auth.getUser();

let groupIds = [];

// Delete all existing associations for the member
const { error: deleteError } = await supabase
.from("member_group_joins")
.delete()
.eq("member_id", member.id);
if (deleteError) {
console.error("Error deleting existing associations:", deleteError);
}

// Get the IDs of the selected groups that already exist in memberGroups
// Get the IDs of the selected groups that already exist in memberGroups
const existingGroupIds = selectedGroups
?.filter((group) =>
memberGroups?.map(({ name }) => name).includes(group.value)
)
.map((group) => memberGroups.find(({ name }) => name === group.value)?.id);

// Add the IDs of the existing groups to groupIds

// Save new groups - if the member group doesn't hold any of the selected groups
const newGroups =
selectedGroups
?.filter(
(group) =>
!memberGroups?.map(({ name }) => name).includes(group.value)
)
.map((group) => memberGroups.find(({ name }) => name === group.value)?.id);

// Add the IDs of the existing groups to groupIds

// Save new groups - if the member group doesn't hold any of the selected groups
const newGroups =
selectedGroups
?.filter(
(group) =>
!memberGroups?.map(({ name }) => name).includes(group.value)
)
.map(({ value }) => value) || [];

//Creating a new group if there are elements in the newgroup array
if (!!newGroups.length) {
const groupResponse = await supabase
.from("member_groups")
.insert(newGroups.map((name) => ({ name })))
.select();
console.log("gr", groupResponse);
const { data: createdGroups, error: createGroupError } = groupResponse;
console.log("created groups", createdGroups);
if (createGroupError) {
console.error("Error creating new group:", createGroupError);
} else {
if (Array.isArray(createdGroups) && createdGroups.length > 0) {
groupIds = createdGroups.map(({ id }) => id);
}
}
}

try {
const updates = {
email: data.email,
first_name: data.first_name,
last_name: data.last_name,
created_by: user?.id,
};

const selectedGroupIds = selectedGroups
? selectedGroups.map((group) => group.value)
: [];

console.log("SId", selectedGroupIds);

if (!!selectedGroups?.length && member.id) {
// Insert new associations
const joinUpdates = selectedGroups
?.map((group) => memberGroups.find((g) => g.name === group.value)?.id)
.concat(groupIds)
.filter((id) => id !== undefined)
.map((memberGroupId) => ({
member_id: member.id,
group_id: memberGroupId,
}));

const { error: joinError } = await supabase
.from("member_group_joins")
.insert(joinUpdates);
if (joinError) {
console.error("Error updating member_group_joins:", joinError);
}
.map(({ value }) => value) || [];

//Creating a new group if there are elements in the newgroup array
if (!!newGroups.length) {
const groupResponse = await supabase
.from("member_groups")
.insert(newGroups.map((name) => ({ name })))
.select();
console.log("gr", groupResponse);
const { data: createdGroups, error: createGroupError } = groupResponse;
console.log("created groups", createdGroups);
if (createGroupError) {
console.error("Error creating new group:", createGroupError);
} else {
if (Array.isArray(createdGroups) && createdGroups.length > 0) {
groupIds = createdGroups.map(({ id }) => id);
}
let { error } = await supabase
.from("members")
.update(updates)
.eq("id", member.id);
if (error) {
toast({
description: "An error occurred while updating the member",
});
} else {
toast({
description: "Your member has been updated",
});
router.refresh();
}
}

try {
const updates = {
email: data.email,
first_name: data.first_name,
last_name: data.last_name,
created_by: user?.id,
};

const selectedGroupIds = selectedGroups
? selectedGroups.map((group) => group.value)
: [];

console.log("SId", selectedGroupIds);

if (!!selectedGroups?.length && member.id) {
// Insert new associations
const joinUpdates = selectedGroups
?.map((group) => memberGroups.find((g) => g.name === group.value)?.id)
.concat(groupIds)
.filter((id) => id !== undefined)
.map((memberGroupId) => ({
member_id: member.id,
group_id: memberGroupId,
}));

const { error: joinError } = await supabase
.from("member_group_joins")
.insert(joinUpdates);
if (joinError) {
console.error("Error updating member_group_joins:", joinError);
}
} catch (error) {
toast({
description: "An error occurred while updating the member",
});
}
let { error } = await supabase
.from("members")
.update(updates)
.eq("id", member.id);
if (error) throw error;
toast({
description: "Your member has been updated",
});
router.refresh();
} catch (error) {
console.log(error);
}
}

// React.useEffect(() => {
// async function fetchMemberGroups() {
Expand Down
104 changes: 51 additions & 53 deletions components/email-composer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -214,63 +214,61 @@ export default function EmailComposer({
console.log("SLECTEDMEMBER", selectedMembers);

const onSubmit = async (data: EmailFormValues) => {
console.log("entered the onsubnit with", data);
try {
setIsSending(true);

const toEmails = data.to_emails.map((email) => email.value);
let mergedEmails = toEmails;

if (memberEmailsArray.length > 0) {
console.log(memberEmailsArray, "memberEmailsArray");
mergedEmails = [...new Set([...toEmails, ...memberEmailsArray])].filter(
(v) => isNaN(v)
);
}
console.log("MERGE", mergedEmails);
const newEmailData = {
to_emails: mergedEmails,
subject: data.subject ? data.subject : "empty subject",
body: data.body ? data.body : "<p></p>",
cc_emails: [],
bcc_emails: [],
attachments: [],
from_email: userEmail,
};

const response = await fetch("/send-email", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(newEmailData),
console.log("entered the onsubnit with", data);
try {
setIsSending(true);

const toEmails = data.to_emails.map((email) => email.value);
let mergedEmails = toEmails;

if (memberEmailsArray.length > 0) {
console.log(memberEmailsArray, "memberEmailsArray");
mergedEmails = [...new Set([...toEmails, ...memberEmailsArray])].filter(
(v) => isNaN(v)
);
}
console.log("MERGE", mergedEmails);
const newEmailData = {
to_emails: mergedEmails,
subject: data.subject ? data.subject : "empty subject",
body: data.body ? data.body : "<p></p>",
cc_emails: [],
bcc_emails: [],
attachments: [],
from_email: userEmail,
};

const response = await fetch("/send-email", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(newEmailData),
});

const { data: newEmail, error: insertError } = await supabase
.from("emails")
.insert([newEmailData]);

if (response.ok) {
console.log("Email sent successfully");
onSend();
form.reset();
toast({
description: "Your email has been sent successfully",
});

const { data: newEmail, error: insertError } = await supabase
.from("emails")
.insert([newEmailData]);

if (response.ok) {
console.log("Email sent successfully");
onSend();
form.reset();
toast({
description: "Your email has been sent successfully",
});
} else {
console.error("Failed to send email", response.statusText);
toast({
description: response.statusText,
});
}
} catch (error) {
} else {
console.error("Failed to send email", response.statusText);
toast({
description: "An error occurred while sending the email",
description: response.statusText,
});
} finally {
setIsSending(false);
}
};
} catch (error) {
console.error("Error sending email:", error);
} finally {
setIsSending(false);
}
};

return (
<DialogContent className="sm:max-w-xl">
Expand Down
Loading