diff --git a/apps/web/pages/success.tsx b/apps/web/pages/success.tsx index b577d9f935..929c42e13c 100644 --- a/apps/web/pages/success.tsx +++ b/apps/web/pages/success.tsx @@ -259,7 +259,7 @@ export default function Success(props: SuccessProps) { ); const customInputs = bookingInfo?.customInputs; - const locationToDisplay = getSuccessPageLocationMessage(location, t); + const locationToDisplay = getSuccessPageLocationMessage(location, t, props?.bookingInfo?.status); return (
@@ -825,6 +825,7 @@ export async function getServerSideProps(context: GetServerSidePropsContext) { select: { title: true, uid: true, + status: true, description: true, customInputs: true, user: { diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json index 51385df053..c815ff940f 100644 --- a/apps/web/public/static/locales/en/common.json +++ b/apps/web/public/static/locales/en/common.json @@ -67,12 +67,14 @@ "event_still_awaiting_approval": "An event is still waiting for your approval", "booking_submitted_subject": "Booking Submitted: {{eventType}} with {{name}} at {{date}}", "your_meeting_has_been_booked": "Your meeting has been booked", - "event_type_has_been_rescheduled_on_time_date": "Your {{eventType}} with {{name}} has been rescheduled to {{time}} ({{timeZone}}) on {{date}}.", + "event_type_has_been_rescheduled_on_time_date": "Your {{eventType}} with {{name}} has been rescheduled to {{date}}.", "event_has_been_rescheduled": "Updated - Your event has been rescheduled", "request_reschedule_title_attendee": "Request to reschedule your booking", "request_reschedule_subtitle": "{{organizer}} has cancelled the booking and requested you to pick another time.", "request_reschedule_title_organizer": "You have requested {{attendee}} to reschedule", "request_reschedule_subtitle_organizer": "You have cancelled the booking and {{attendee}} should pick a new booking time with you.", + "rescheduled_event_type_subject": "Request for reschedule sent: {{eventType}} with {{name}} at {{date}}", + "requested_to_reschedule_subject_attendee": "Action Required Reschedule: Please book a new time for {{eventType}} with {{name}}", "reschedule_reason": "Reason for reschedule", "hi_user_name": "Hi {{name}}", "ics_event_title": "{{eventType}} with {{name}}", @@ -92,8 +94,6 @@ "meeting_password": "Meeting Password", "meeting_url": "Meeting URL", "meeting_request_rejected": "Your meeting request has been rejected", - "rescheduled_event_type_subject": "Request for reschedule sent: {{eventType}} with {{name}} at {{date}}", - "requested_to_reschedule_subject_attendee": "Action Required Reschedule: Please book a new time for {{eventType}} with {{name}}", "rejected_event_type_with_organizer": "Rejected: {{eventType}} with {{organizer}} on {{date}}", "hi": "Hi", "join_team": "Join team", diff --git a/packages/app-store/locations.ts b/packages/app-store/locations.ts index 2797e44240..f6a349c59e 100644 --- a/packages/app-store/locations.ts +++ b/packages/app-store/locations.ts @@ -310,13 +310,17 @@ export const getEventLocationValue = (eventLocations: LocationObject[], bookingL ); }; -export function getSuccessPageLocationMessage(location: EventLocationType["type"], t: TFunction) { +export function getSuccessPageLocationMessage( + location: EventLocationType["type"], + t: TFunction, + bookingStatus?: BookingStatus +) { const eventLocationType = getEventLocationType(location); let locationToDisplay = location; if (eventLocationType && !eventLocationType.default && eventLocationType.linkType === "dynamic") { - const isConfirmed = status === BookingStatus.ACCEPTED; + const isConfirmed = bookingStatus === BookingStatus.ACCEPTED; - if (status === BookingStatus.CANCELLED || status === BookingStatus.REJECTED) { + if (bookingStatus === BookingStatus.CANCELLED || bookingStatus === BookingStatus.REJECTED) { locationToDisplay == t("web_conference"); } else if (isConfirmed) { locationToDisplay = diff --git a/packages/emails/email-manager.ts b/packages/emails/email-manager.ts index db1f8c7c9e..75e4b43844 100644 --- a/packages/emails/email-manager.ts +++ b/packages/emails/email-manager.ts @@ -5,9 +5,9 @@ import AttendeeCancelledEmail from "./templates/attendee-cancelled-email"; import AttendeeDeclinedEmail from "./templates/attendee-declined-email"; import AttendeeLocationChangeEmail from "./templates/attendee-location-change-email"; import AttendeeRequestEmail from "./templates/attendee-request-email"; -import AttendeeRequestRescheduledEmail from "./templates/attendee-request-reschedule-email"; import AttendeeRescheduledEmail from "./templates/attendee-rescheduled-email"; import AttendeeScheduledEmail from "./templates/attendee-scheduled-email"; +import AttendeeWasRequestedToRescheduleEmail from "./templates/attendee-was-requested-to-reschedule-email"; import BrokenIntegrationEmail from "./templates/broken-integration-email"; import FeedbackEmail, { Feedback } from "./templates/feedback-email"; import ForgotPasswordEmail, { PasswordReset } from "./templates/forgot-password-email"; @@ -16,7 +16,7 @@ import OrganizerLocationChangeEmail from "./templates/organizer-location-change- import OrganizerPaymentRefundFailedEmail from "./templates/organizer-payment-refund-failed-email"; import OrganizerRequestEmail from "./templates/organizer-request-email"; import OrganizerRequestReminderEmail from "./templates/organizer-request-reminder-email"; -import OrganizerRequestRescheduleEmail from "./templates/organizer-request-reschedule-email"; +import OrganizerRequestedToRescheduleEmail from "./templates/organizer-requested-to-reschedule-email"; import OrganizerRescheduledEmail from "./templates/organizer-rescheduled-email"; import OrganizerScheduledEmail from "./templates/organizer-scheduled-email"; import TeamInviteEmail, { TeamInvite } from "./templates/team-invite-email"; @@ -53,7 +53,7 @@ export const sendScheduledEmails = async (calEvent: CalendarEvent) => { export const sendRescheduledEmails = async (calEvent: CalendarEvent) => { const emailsToSend: Promise[] = []; - + // @TODO: we should obtain who is rescheduling the event and send them a different email emailsToSend.push( ...calEvent.attendees.map((attendee) => { return new Promise((resolve, reject) => { @@ -73,7 +73,7 @@ export const sendRescheduledEmails = async (calEvent: CalendarEvent) => { const scheduledEmail = new OrganizerRescheduledEmail(calEvent); resolve(scheduledEmail.sendEmail()); } catch (e) { - reject(console.error("OrganizerScheduledEmail.sendEmail failed", e)); + reject(console.error("OrganizerRescheduledEmail.sendEmail failed", e)); } }) ); @@ -255,10 +255,10 @@ export const sendRequestRescheduleEmail = async ( emailsToSend.push( new Promise((resolve, reject) => { try { - const requestRescheduleEmail = new AttendeeRequestRescheduledEmail(calEvent, metadata); + const requestRescheduleEmail = new AttendeeWasRequestedToRescheduleEmail(calEvent, metadata); resolve(requestRescheduleEmail.sendEmail()); } catch (e) { - reject(console.error("AttendeeRequestRescheduledEmail.sendEmail failed", e)); + reject(console.error("AttendeeWasRequestedToRescheduleEmail.sendEmail failed", e)); } }) ); @@ -266,10 +266,10 @@ export const sendRequestRescheduleEmail = async ( emailsToSend.push( new Promise((resolve, reject) => { try { - const requestRescheduleEmail = new OrganizerRequestRescheduleEmail(calEvent, metadata); + const requestRescheduleEmail = new OrganizerRequestedToRescheduleEmail(calEvent, metadata); resolve(requestRescheduleEmail.sendEmail()); } catch (e) { - reject(console.error("OrganizerRequestRescheduledEmail.sendEmail failed", e)); + reject(console.error("OrganizerRequestedToRescheduleEmail.sendEmail failed", e)); } }) ); diff --git a/packages/emails/src/templates/AttendeeRescheduledEmail.tsx b/packages/emails/src/templates/AttendeeRescheduledEmail.tsx index 33966dc52d..9e0ab07943 100644 --- a/packages/emails/src/templates/AttendeeRescheduledEmail.tsx +++ b/packages/emails/src/templates/AttendeeRescheduledEmail.tsx @@ -4,7 +4,7 @@ export const AttendeeRescheduledEmail = (props: React.ComponentProps ); diff --git a/packages/emails/src/templates/AttendeeRequestRescheduledEmail.tsx b/packages/emails/src/templates/AttendeeWasRequestedToRescheduleEmail.tsx similarity index 93% rename from packages/emails/src/templates/AttendeeRequestRescheduledEmail.tsx rename to packages/emails/src/templates/AttendeeWasRequestedToRescheduleEmail.tsx index 77cdba9237..763057d74e 100644 --- a/packages/emails/src/templates/AttendeeRequestRescheduledEmail.tsx +++ b/packages/emails/src/templates/AttendeeWasRequestedToRescheduleEmail.tsx @@ -1,7 +1,7 @@ import { CallToAction, CallToActionTable } from "../components"; import { OrganizerScheduledEmail } from "./OrganizerScheduledEmail"; -export const AttendeeRequestRescheduledEmail = ( +export const AttendeeWasRequestedToRescheduleEmail = ( props: { metadata: { rescheduleLink: string } } & React.ComponentProps ) => ( ) => ( ); diff --git a/packages/emails/src/templates/index.ts b/packages/emails/src/templates/index.ts index 918f6b76e4..b1682fc23f 100644 --- a/packages/emails/src/templates/index.ts +++ b/packages/emails/src/templates/index.ts @@ -3,7 +3,7 @@ export { AttendeeCancelledEmail } from "./AttendeeCancelledEmail"; export { AttendeeDeclinedEmail } from "./AttendeeDeclinedEmail"; export { AttendeeLocationChangeEmail } from "./AttendeeLocationChangeEmail"; export { AttendeeRequestEmail } from "./AttendeeRequestEmail"; -export { AttendeeRequestRescheduledEmail } from "./AttendeeRequestRescheduledEmail"; +export { AttendeeWasRequestedToRescheduleEmail } from "./AttendeeWasRequestedToRescheduleEmail"; export { AttendeeRescheduledEmail } from "./AttendeeRescheduledEmail"; export { AttendeeScheduledEmail } from "./AttendeeScheduledEmail"; export { FeedbackEmail } from "./FeedbackEmail"; @@ -13,7 +13,7 @@ export { OrganizerLocationChangeEmail } from "./OrganizerLocationChangeEmail"; export { OrganizerPaymentRefundFailedEmail } from "./OrganizerPaymentRefundFailedEmail"; export { OrganizerRequestEmail } from "./OrganizerRequestEmail"; export { OrganizerRequestReminderEmail } from "./OrganizerRequestReminderEmail"; -export { OrganizerRequestRescheduledEmail } from "./OrganizerRequestRescheduledEmail"; +export { OrganizerRequestedToRescheduleEmail } from "./OrganizerRequestedToRescheduleEmail"; export { OrganizerRescheduledEmail } from "./OrganizerRescheduledEmail"; export { OrganizerScheduledEmail } from "./OrganizerScheduledEmail"; export { TeamInviteEmail } from "./TeamInviteEmail"; diff --git a/packages/emails/templates/attendee-rescheduled-email.ts b/packages/emails/templates/attendee-rescheduled-email.ts index e7e079d1ac..aca08219b9 100644 --- a/packages/emails/templates/attendee-rescheduled-email.ts +++ b/packages/emails/templates/attendee-rescheduled-email.ts @@ -11,12 +11,12 @@ export default class AttendeeRescheduledEmail extends AttendeeScheduledEmail { to: `${this.attendee.name} <${this.attendee.email}>`, from: `${this.calEvent.organizer.name} <${this.getMailerOptions().from}>`, replyTo: [...this.calEvent.attendees.map(({ email }) => email), this.calEvent.organizer.email], - subject: `${this.attendee.language.translate("rescheduled_event_type_subject", { + subject: `${this.attendee.language.translate("event_type_has_been_rescheduled_on_time_date", { eventType: this.calEvent.type, name: this.calEvent.team?.name || this.calEvent.organizer.name, date: this.getFormattedDate(), })}`, - html: renderEmail("AttendeeCancelledEmail", { + html: renderEmail("AttendeeRescheduledEmail", { calEvent: this.calEvent, attendee: this.attendee, }), diff --git a/packages/emails/templates/attendee-scheduled-email.ts b/packages/emails/templates/attendee-scheduled-email.ts index 8a86a0393b..e2cc52d75e 100644 --- a/packages/emails/templates/attendee-scheduled-email.ts +++ b/packages/emails/templates/attendee-scheduled-email.ts @@ -71,7 +71,7 @@ export default class AttendeeScheduledEmail extends BaseEmail { name: this.calEvent.team?.name || this.calEvent.organizer.name, date: this.getFormattedDate(), })}`, - html: renderEmail("AttendeeScheduledEmail", { + html: renderEmail("AttendeeRescheduledEmail", { calEvent: this.calEvent, attendee: this.attendee, }), diff --git a/packages/emails/templates/attendee-request-reschedule-email.ts b/packages/emails/templates/attendee-was-requested-to-reschedule-email.ts similarity index 94% rename from packages/emails/templates/attendee-request-reschedule-email.ts rename to packages/emails/templates/attendee-was-requested-to-reschedule-email.ts index 2a325a79cc..a30131d4f4 100644 --- a/packages/emails/templates/attendee-request-reschedule-email.ts +++ b/packages/emails/templates/attendee-was-requested-to-reschedule-email.ts @@ -4,10 +4,10 @@ import dayjs from "@calcom/dayjs"; import { getCancelLink } from "@calcom/lib/CalEventParser"; import type { CalendarEvent } from "@calcom/types/Calendar"; -import { renderEmail } from "../"; +import { renderEmail } from ".."; import OrganizerScheduledEmail from "./organizer-scheduled-email"; -export default class AttendeeRequestRescheduledEmail extends OrganizerScheduledEmail { +export default class AttendeeWasRequestedToRescheduleEmail extends OrganizerScheduledEmail { private metadata: { rescheduleLink: string }; constructor(calEvent: CalendarEvent, metadata: { rescheduleLink: string }) { super(calEvent); @@ -27,7 +27,7 @@ export default class AttendeeRequestRescheduledEmail extends OrganizerScheduledE eventType: this.calEvent.type, name: this.calEvent.attendees[0].name, })}`, - html: renderEmail("AttendeeRequestRescheduledEmail", { + html: renderEmail("AttendeeWasRequestedToRescheduleEmail", { calEvent: this.calEvent, attendee: this.calEvent.organizer, metadata: this.metadata, diff --git a/packages/emails/templates/organizer-request-reschedule-email.ts b/packages/emails/templates/organizer-requested-to-reschedule-email.ts similarity index 93% rename from packages/emails/templates/organizer-request-reschedule-email.ts rename to packages/emails/templates/organizer-requested-to-reschedule-email.ts index 452c3489a3..5abdf1ebc9 100644 --- a/packages/emails/templates/organizer-request-reschedule-email.ts +++ b/packages/emails/templates/organizer-requested-to-reschedule-email.ts @@ -4,10 +4,10 @@ import dayjs from "@calcom/dayjs"; import { getRichDescription } from "@calcom/lib/CalEventParser"; import type { CalendarEvent } from "@calcom/types/Calendar"; -import { renderEmail } from "../"; +import { renderEmail } from ".."; import OrganizerScheduledEmail from "./organizer-scheduled-email"; -export default class OrganizerRequestRescheduledEmail extends OrganizerScheduledEmail { +export default class OrganizerRequestedToRescheduleEmail extends OrganizerScheduledEmail { private metadata: { rescheduleLink: string }; constructor(calEvent: CalendarEvent, metadata: { rescheduleLink: string }) { super(calEvent); @@ -28,7 +28,7 @@ export default class OrganizerRequestRescheduledEmail extends OrganizerScheduled name: this.calEvent.attendees[0].name, date: this.getFormattedDate(), })}`, - html: renderEmail("OrganizerRequestRescheduledEmail", { + html: renderEmail("OrganizerRequestedToRescheduleEmail", { calEvent: this.calEvent, attendee: this.calEvent.organizer, }), diff --git a/packages/emails/templates/organizer-rescheduled-email.ts b/packages/emails/templates/organizer-rescheduled-email.ts index 551a555773..d48d12e58b 100644 --- a/packages/emails/templates/organizer-rescheduled-email.ts +++ b/packages/emails/templates/organizer-rescheduled-email.ts @@ -20,7 +20,7 @@ export default class OrganizerRescheduledEmail extends OrganizerScheduledEmail { }, from: `Cal.com <${this.getMailerOptions().from}>`, to: toAddresses.join(","), - subject: `${this.calEvent.organizer.language.translate("rescheduled_event_type_subject", { + subject: `${this.calEvent.organizer.language.translate("event_type_has_been_rescheduled_on_time_date", { eventType: this.calEvent.type, name: this.calEvent.attendees[0].name, date: `${this.getOrganizerStart("h:mma")} - ${this.getOrganizerEnd( diff --git a/packages/lib/CalEventParser.ts b/packages/lib/CalEventParser.ts index b73d2dc872..efdf8ee265 100644 --- a/packages/lib/CalEventParser.ts +++ b/packages/lib/CalEventParser.ts @@ -93,7 +93,10 @@ export const getLocation = (calEvent: CalendarEvent) => { export const getProviderName = (calEvent: CalendarEvent): string => { // TODO: use getAppName from @calcom/app-store if (calEvent.location && calEvent.location.includes("integrations:")) { - const location = calEvent.location.split(":")[1]; + let location = calEvent.location.split(":")[1]; + if (location === "daily") { + location = "Cal Video"; + } return location[0].toUpperCase() + location.slice(1); } // If location its a url, probably we should be validating it with a custom library