Files
cal-diy-oidc/packages/features/ee/round-robin/utils/getTeamMembers.ts
T

80 lines
2.4 KiB
TypeScript

import type { getEventTypeResponse } from "@calcom/features/bookings/lib/handleNewBooking/getEventTypesFromDB";
import type { IsFixedAwareUser } from "@calcom/features/bookings/lib/handleNewBooking/types";
import { getTranslation } from "@calcom/i18n/server";
import type { BookingSelectResult } from "./bookingSelect";
type Attendee = {
name: string;
id: number;
email: string;
timeZone: string;
locale: string | null;
bookingId: number | null;
phoneNumber: string | null;
noShow: boolean | null;
};
// TODO: We have far too many different types here. They're all users or hosts at the end of the day.
type OrganizerType =
| getEventTypeResponse["hosts"][number]["user"]
| IsFixedAwareUser
| {
id: number;
email: string;
name: string | null;
locale: string | null;
timeZone: string;
username: string | null;
};
export async function getTeamMembers({
eventTypeHosts,
attendees,
organizer,
previousHost,
reassignedHost,
}: {
eventTypeHosts: getEventTypeResponse["hosts"];
attendees: Attendee[];
organizer: OrganizerType;
previousHost: BookingSelectResult["user"] | getEventTypeResponse["hosts"][number]["user"] | null;
reassignedHost: getEventTypeResponse["hosts"][number]["user"];
}) {
const teamMemberPromises = eventTypeHosts
.filter((host) => {
const user = host.user;
return (
user.email !== previousHost?.email &&
user.email !== organizer.email &&
attendees.some((attendee) => attendee.email === user.email)
);
})
.map(async (host) => {
const user = host.user;
const tTeamMember = await getTranslation(user.locale ?? "en", "common");
return {
id: user.id,
email: user.email,
name: user.name || "",
timeZone: user.timeZone,
language: { translate: tTeamMember, locale: user.locale ?? "en" },
};
});
const teamMembers = await Promise.all(teamMemberPromises);
if (reassignedHost.email !== organizer.email) {
const tReassignedHost = await getTranslation(reassignedHost.locale ?? "en", "common");
teamMembers.push({
id: reassignedHost.id,
email: reassignedHost.email,
name: reassignedHost.name || "",
timeZone: reassignedHost.timeZone,
language: { translate: tReassignedHost, locale: reassignedHost.locale ?? "en" },
});
}
return teamMembers;
}