* WIP * Create Booking Questions builder * Renaming things * wip * wip * Implement Add Guests and other fixes * Fixes after testing * Fix wrong status code 404 * Fixes * Lint fixes * Self review comments addressed * More self review comments addressed * Feedback from zomars * BugFixes after testing * More fixes discovered during review * Update packages/lib/hooks/useHasPaidPlan.ts Co-authored-by: Omar López <zomars@me.com> * More fixes discovered during review * Update packages/ui/components/form/inputs/Input.tsx Co-authored-by: Omar López <zomars@me.com> * More fixes discovered during review * Update packages/features/bookings/lib/getBookingFields.ts Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com> * More PR review fixes * Hide label using labelSrOnly * Fix Carinas feedback and implement 2 workflows thingy * Misc fixes * Fixes from Loom comments and PR * Fix a lint errr * Fix cancellation reason * Fix regression in edit due to name conflict check * Update packages/features/form-builder/FormBuilder.tsx Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com> * Fix options not set when default value is used * Restoring reqBody to avoid uneeded conflicts with main * Type fix * Update apps/web/components/booking/pages/BookingPage.tsx Co-authored-by: Omar López <zomars@me.com> * Update packages/features/form-builder/FormBuilder.tsx Co-authored-by: Omar López <zomars@me.com> * Update apps/web/components/booking/pages/BookingPage.tsx Co-authored-by: Omar López <zomars@me.com> * Apply suggestions from code review Co-authored-by: Omar López <zomars@me.com> * Show fields but mark them disabled * Apply suggestions from code review Co-authored-by: Omar López <zomars@me.com> * More comments * Fix booking success page crash when a booking doesnt have newly added required fields response * Dark theme asterisk not visible * Make location required in zodSchema as was there in production * Linting * Remove _metadata.ts files for apps that have config.json * Revert "Remove _metadata.ts files for apps that have config.json" This reverts commit d79bdd336cf312a30a8943af94c059947bd91ccd. * Fix lint error * Fix missing condition for samlSPConfig * Delete unexpectedly added file * yarn.lock change not required * fix types * Make checkboxes rounded * Fix defaultLabel being stored as label due to SSR rendering * Shaved 16kb from booking page * Explicit types for profile * Show payment value only if price is greater than 0 * Fix type error * Add back inferred types as they are failing * Fix duplicate label on number --------- Co-authored-by: zomars <zomars@me.com> Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com> Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com> Co-authored-by: Efraín Rochín <roae.85@gmail.com>
51 lines
1.8 KiB
TypeScript
51 lines
1.8 KiB
TypeScript
import type { BookingCreateBody } from "@calcom/prisma/zod-utils";
|
|
import type { AppsStatus } from "@calcom/types/Calendar";
|
|
|
|
import * as fetch from "@lib/core/http/fetch-wrapper";
|
|
import type { BookingResponse } from "@lib/types/booking";
|
|
|
|
type ExtendedBookingCreateBody = BookingCreateBody & {
|
|
noEmail?: boolean;
|
|
recurringCount?: number;
|
|
appsStatus?: AppsStatus[] | undefined;
|
|
allRecurringDates?: string[];
|
|
currentRecurringIndex?: number;
|
|
};
|
|
|
|
const createRecurringBooking = async (data: ExtendedBookingCreateBody[]) => {
|
|
const createdBookings: BookingResponse[] = [];
|
|
const allRecurringDates: string[] = data.map((booking) => booking.start);
|
|
let appsStatus: AppsStatus[] | undefined = undefined;
|
|
// Reversing to accumulate results for noEmail instances first, to then lastly, create the
|
|
// emailed booking taking into account accumulated results to send app status accurately
|
|
for (let key = data.length - 1; key >= 0; key--) {
|
|
const booking = data[key];
|
|
if (key === 0) {
|
|
const calcAppsStatus: { [key: string]: AppsStatus } = createdBookings
|
|
.flatMap((book) => (book.appsStatus !== undefined ? book.appsStatus : []))
|
|
.reduce((prev, curr) => {
|
|
if (prev[curr.type]) {
|
|
prev[curr.type].failures += curr.failures;
|
|
prev[curr.type].success += curr.success;
|
|
} else {
|
|
prev[curr.type] = curr;
|
|
}
|
|
return prev;
|
|
}, {} as { [key: string]: AppsStatus });
|
|
appsStatus = Object.values(calcAppsStatus);
|
|
}
|
|
|
|
const response = await fetch.post<ExtendedBookingCreateBody, BookingResponse>("/api/book/event", {
|
|
...booking,
|
|
appsStatus,
|
|
allRecurringDates,
|
|
currentRecurringIndex: key,
|
|
noEmail: key !== 0,
|
|
});
|
|
createdBookings.push(response);
|
|
}
|
|
return createdBookings;
|
|
};
|
|
|
|
export default createRecurringBooking;
|