diff --git a/apps/web/pages/event-types/index.tsx b/apps/web/pages/event-types/index.tsx index 4c6c428106..e33931ae7d 100644 --- a/apps/web/pages/event-types/index.tsx +++ b/apps/web/pages/event-types/index.tsx @@ -186,6 +186,7 @@ export const EventTypeList = ({ group, groupIndex, readOnly, types }: EventTypeL length: type.length, type: type.schedulingType, teamId: group.teamId, + locations: encodeURIComponent(JSON.stringify(type.locations)), }; if (!group.teamId) { delete query.teamId; diff --git a/packages/prisma/zod/custom/eventtype.ts b/packages/prisma/zod/custom/eventtype.ts index cbdca6e596..884fc8cc8f 100755 --- a/packages/prisma/zod/custom/eventtype.ts +++ b/packages/prisma/zod/custom/eventtype.ts @@ -9,8 +9,9 @@ export const createEventTypeInput = _EventTypeModel teamId: true, schedulingType: true, hidden: true, + locations: true }) - .partial({ hidden: true }) + .partial({ hidden: true, locations: true }) .refine((data) => (data.teamId ? data.teamId && data.schedulingType : true), { path: ["schedulingType"], message: "You must select a scheduling type for team events", diff --git a/packages/trpc/server/routers/viewer/eventTypes.tsx b/packages/trpc/server/routers/viewer/eventTypes.tsx index 93a658adc1..0aa043eda3 100644 --- a/packages/trpc/server/routers/viewer/eventTypes.tsx +++ b/packages/trpc/server/routers/viewer/eventTypes.tsx @@ -156,6 +156,7 @@ export const eventTypesRouter = router({ // Position is required by lodash to sort on it. Don't remove it, TS won't complain but it would silently break reordering position: true, hashedLink: true, + locations: true, destinationCalendar: true, team: { select: { diff --git a/packages/ui/v2/modules/event-types/CreateEventType.tsx b/packages/ui/v2/modules/event-types/CreateEventType.tsx index 20fc0059a1..d3aedd23b4 100644 --- a/packages/ui/v2/modules/event-types/CreateEventType.tsx +++ b/packages/ui/v2/modules/event-types/CreateEventType.tsx @@ -52,6 +52,15 @@ interface CreateEventTypeBtnProps { options: EventTypeParent[]; } +const isValidJSONString = (str: string) => { + try { + JSON.parse(str); + } catch (e) { + return false; + } + return true; +}; + export default function CreateEventTypeButton(props: CreateEventTypeBtnProps) { const { t } = useLocale(); const router = useRouter(); @@ -82,7 +91,13 @@ export default function CreateEventTypeButton(props: CreateEventTypeBtnProps) { ? router.query.description : ""; const slug: string = typeof router.query.slug === "string" && router.query.slug ? router.query.slug : ""; + const locations = + typeof router.query.locations === "string" && + isValidJSONString(decodeURIComponent(router.query.locations)) + ? JSON.parse(decodeURIComponent(router.query.locations)) + : []; + setValue("locations", locations); setValue("title", title); setValue("length", length); setValue("description", description); @@ -137,7 +152,16 @@ export default function CreateEventTypeButton(props: CreateEventTypeBtnProps) { return ( + clearQueryParamsOnClose={[ + "eventPage", + "teamId", + "type", + "description", + "title", + "length", + "slug", + "locations", + ]}> {!hasTeams || props.isIndividualTeam ? (