diff --git a/src/components/Medium/InviteCard.tsx b/src/components/Medium/InviteCard.tsx new file mode 100644 index 00000000..9b3e0a20 --- /dev/null +++ b/src/components/Medium/InviteCard.tsx @@ -0,0 +1,77 @@ +import { Invite } from "@/interfaces/invite"; +import { User } from "@/interfaces/user"; +import axios from "axios"; +import { useState } from "react"; +import { BsArrowRepeat } from "react-icons/bs"; +import { toast } from "react-toastify"; + +interface Props { + invite: Invite; + users: User[]; + reload: () => void; +} + +export default function InviteCard({ invite, users, reload }: Props) { + const [isLoading, setIsLoading] = useState(false); + + const inviter = users.find((u) => u.id === invite.from); + const name = !inviter + ? null + : inviter.type === "corporate" + ? inviter.corporateInformation?.companyInformation?.name || inviter.name + : inviter.name; + + const decide = (decision: "accept" | "decline") => { + if (!confirm(`Are you sure you want to ${decision} this invite?`)) return; + + setIsLoading(true); + axios + .get(`/api/invites/${decision}/${invite.id}`) + .then(() => { + toast.success( + `Successfully ${decision === "accept" ? "accepted" : "declined"} the invite!`, + { toastId: "success" }, + ); + reload(); + }) + .catch((e) => { + toast.success(`Something went wrong, please try again later!`, { + toastId: "error", + }); + reload(); + }) + .finally(() => setIsLoading(false)); + }; + + return ( +
-
- EnCoach - {p.duration}{" "}
- {capitalize(
- p.duration === 1 ? p.duration_unit.slice(0, p.duration_unit.length - 1) : p.duration_unit,
- )}
-
-
- EnCoach - {user.corporateInformation?.monthlyDuration} Months
-
+
+ EnCoach - {p.duration}{" "}
+ {capitalize(
+ p.duration === 1
+ ? p.duration_unit.slice(
+ 0,
+ p.duration_unit.length - 1,
+ )
+ : p.duration_unit,
+ )}
+
+
+
+ EnCoach - {user.corporateInformation?.monthlyDuration}{" "}
+ Months
+
+