2022-06-10 00:32:34 +00:00
|
|
|
import dayjs from "dayjs";
|
2022-01-21 21:35:31 +00:00
|
|
|
import { z } from "zod";
|
|
|
|
|
2022-04-05 18:03:22 +00:00
|
|
|
import { LocationType } from "@calcom/core/location";
|
2022-02-21 18:45:35 +00:00
|
|
|
import { slugify } from "@calcom/lib/slugify";
|
2022-01-21 21:35:31 +00:00
|
|
|
|
2022-06-10 00:32:34 +00:00
|
|
|
// Let's not import 118kb just to get an enum
|
|
|
|
export enum Frequency {
|
|
|
|
YEARLY = 0,
|
|
|
|
MONTHLY = 1,
|
|
|
|
WEEKLY = 2,
|
|
|
|
DAILY = 3,
|
|
|
|
HOURLY = 4,
|
|
|
|
MINUTELY = 5,
|
|
|
|
SECONDLY = 6,
|
|
|
|
}
|
|
|
|
|
2022-01-21 21:35:31 +00:00
|
|
|
export const eventTypeLocations = z.array(
|
2022-03-13 15:56:56 +00:00
|
|
|
z.object({
|
|
|
|
type: z.nativeEnum(LocationType),
|
|
|
|
address: z.string().optional(),
|
|
|
|
link: z.string().url().optional(),
|
2022-05-25 20:34:08 +00:00
|
|
|
displayLocationPublicly: z.boolean().optional(),
|
2022-05-16 15:50:12 +00:00
|
|
|
hostPhoneNumber: z.string().optional(),
|
2022-03-13 15:56:56 +00:00
|
|
|
})
|
2022-01-21 21:35:31 +00:00
|
|
|
);
|
|
|
|
|
2022-05-05 21:16:25 +00:00
|
|
|
// Matching RRule.Options: rrule/dist/esm/src/types.d.ts
|
2022-06-10 00:32:34 +00:00
|
|
|
export const recurringEventType = z
|
|
|
|
.object({
|
|
|
|
dtstart: z.date().optional(),
|
|
|
|
interval: z.number(),
|
|
|
|
count: z.number(),
|
|
|
|
freq: z.nativeEnum(Frequency),
|
|
|
|
until: z.date().optional(),
|
|
|
|
tzid: z.string().optional(),
|
|
|
|
})
|
|
|
|
.nullable();
|
2022-05-05 21:16:25 +00:00
|
|
|
|
2022-02-21 16:53:16 +00:00
|
|
|
export const eventTypeSlug = z.string().transform((val) => slugify(val.trim()));
|
2022-06-10 00:32:34 +00:00
|
|
|
|
2022-01-21 21:35:31 +00:00
|
|
|
export const stringToDate = z.string().transform((a) => new Date(a));
|
2022-06-10 00:32:34 +00:00
|
|
|
|
|
|
|
export const stringOrNumber = z.union([
|
|
|
|
z.string().transform((v, ctx) => {
|
|
|
|
const parsed = parseInt(v);
|
|
|
|
if (isNaN(parsed)) {
|
|
|
|
ctx.addIssue({
|
|
|
|
code: z.ZodIssueCode.custom,
|
|
|
|
message: "Not a number",
|
|
|
|
});
|
|
|
|
}
|
|
|
|
return parsed;
|
|
|
|
}),
|
|
|
|
z.number().int(),
|
|
|
|
]);
|
|
|
|
|
|
|
|
export const stringToDayjs = z.string().transform((val) => dayjs(val));
|