cal/packages/lib/validateBookerLayouts.ts
Jeroen Reumkens f31165b442
feat: event settings booker layout toggle (#9082)
* WIP for adding booker layout toggle in event settings pages

* Prevent form error from getting form stuck in loading state

* Fixed types for bookerlayouts settings and preselect correct layout in booker

* Added defaultlayout settings to profile too, and use that in booker plus as default for events.

* Made layout settings responsive

* Added feature toggle for new layout settings

* Fixed user builder for tests by adding defaultlyotu

* Show toggles on booker for layout switch based on selected layouts. Also added a small fix for the settings toggles to preselect the correct toggle for defaultlayout when user profile settings are used.

* Used zod parse to fix type errors.

* Fix unit test

* Set selected date to today in datepicker when week or column view is default layout. It uses that date to show in the title bar.

* Moved booker layout settings to event and user meta data instead of new db column.

* Converted booker layout strings into an enum.

* Renamed booker layouts feature flag and deleted unused v2 booker feature flag.

* Update packages/trpc/server/routers/viewer/eventTypes/update.handler.ts

Co-authored-by: Omar López <zomars@me.com>

* Fix import

* Fix lint warnings in EventTypeSingleLayout

* Fixed bug where when selected date was passed via query param page booking form wouldn't automatically show up. It would still serve you the date selection. This should fix e2e tests.

* Fixed layout header.

* Enabled booking layout toggle feature flag.

---------

Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Omar López <zomars@me.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
2023-06-06 15:31:43 +00:00

30 lines
1.2 KiB
TypeScript

import { bookerLayoutOptions, type BookerLayoutSettings } from "@calcom/prisma/zod-utils";
export const validateBookerLayouts = (settings: BookerLayoutSettings) => {
// Allow layouts to be null, as per database defaults.
if (settings === null) return;
// At least one layout should be enabled.
const atLeastOneLayoutIsEnabled = settings?.enabledLayouts.length > 0;
if (!atLeastOneLayoutIsEnabled) return "bookerlayout_error_min_one_enabled";
// Default layout should also be enabled.
const defaultLayoutIsInEnabledLayouts = settings?.enabledLayouts.find(
(layout) => layout === settings.defaultLayout
);
if (!defaultLayoutIsInEnabledLayouts) return "bookerlayout_error_default_not_enabled";
// Validates that users don't try to insert an unknown layout into DB.
const enabledLayoutsDoesntContainUnknownLayout = settings?.enabledLayouts.every((layout) =>
bookerLayoutOptions.includes(layout)
);
const defaultLayoutIsKnown = bookerLayoutOptions.includes(settings.defaultLayout);
if (!enabledLayoutsDoesntContainUnknownLayout || !defaultLayoutIsKnown) {
return "bookerlayout_error_unknown_layout";
}
};
// export const getEnabledLayouts =