
* WIP bookings page ui changes, created api endpoint * Ui changes mobile/desktop * Added translations * Fix lib import and common names * WIP reschedule * WIP * Save wip * [WIP] builder and class for CalendarEvent, email for attende * update rescheduled emails, booking view and availability page view * Working version reschedule * Fix for req.user as array * Added missing translation and refactor dialog to self component * Test for reschedule * update on types * Update lib no required * Update type on createBooking * fix types * remove preview stripe sub * remove unused file * remove unused import * Fix reschedule test * Refactor and cleaning up code * Email reschedule title fixes * Adding calendar delete and recreate placeholder of cancelled * Add translation * Removed logs, notes, fixed types * Fixes process.env types * Use strict compare * Fixes type inference * Type fixing is my middle name * Update apps/web/components/booking/BookingListItem.tsx * Update apps/web/components/dialog/RescheduleDialog.tsx * Update packages/core/builders/CalendarEvent/director.ts * Update apps/web/pages/success.tsx * Updates rescheduling labels * Update packages/core/builders/CalendarEvent/builder.ts * Type fixes * Update packages/core/builders/CalendarEvent/builder.ts * Only validating input blocked once * E2E fixes * Stripe tests fixes Co-authored-by: Peer Richelsen <peer@cal.com> Co-authored-by: zomars <zomars@me.com>
35 lines
1.2 KiB
TypeScript
35 lines
1.2 KiB
TypeScript
import { Booking } from "@prisma/client";
|
|
|
|
import { CalendarEventBuilder } from "./builder";
|
|
|
|
export class CalendarEventDirector {
|
|
private builder!: CalendarEventBuilder;
|
|
private existingBooking!: Partial<Booking>;
|
|
private cancellationReason!: string;
|
|
|
|
public setBuilder(builder: CalendarEventBuilder): void {
|
|
this.builder = builder;
|
|
}
|
|
|
|
public setExistingBooking(booking: Booking) {
|
|
this.existingBooking = booking;
|
|
}
|
|
|
|
public setCancellationReason(reason: string) {
|
|
this.cancellationReason = reason;
|
|
}
|
|
|
|
public async buildForRescheduleEmail(): Promise<void> {
|
|
if (this.existingBooking && this.existingBooking.eventTypeId && this.existingBooking.uid) {
|
|
await this.builder.buildEventObjectFromInnerClass(this.existingBooking.eventTypeId);
|
|
await this.builder.buildUsersFromInnerClass();
|
|
this.builder.buildAttendeesList();
|
|
this.builder.setLocation(this.existingBooking.location);
|
|
this.builder.setUId(this.existingBooking.uid);
|
|
this.builder.setCancellationReason(this.cancellationReason);
|
|
this.builder.buildRescheduleLink(this.existingBooking.uid);
|
|
} else {
|
|
throw new Error("buildForRescheduleEmail.missing.params.required");
|
|
}
|
|
}
|
|
}
|