diff --git a/apps/web/pages/[user]/[type].tsx b/apps/web/pages/[user]/[type].tsx index 65ac334b20..e895112694 100644 --- a/apps/web/pages/[user]/[type].tsx +++ b/apps/web/pages/[user]/[type].tsx @@ -116,6 +116,16 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => }, ], }, + // Order is important to ensure that given a slug if there are duplicates, we choose the same event type consistently when showing in event-types list UI(in terms of ordering and disabled event types) + // TODO: If we can ensure that there are no duplicates for a [slug, userId] combination in existing data, this requirement might be avoided. + orderBy: [ + { + position: "desc", + }, + { + id: "asc", + }, + ], select: { ...availiblityPageEventTypeSelect, users: { @@ -170,6 +180,7 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => }, }, }); + if (!eventTypeBackwardsCompat) { return { notFound: true, @@ -187,9 +198,7 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => user.eventTypes.push(eventTypeBackwardsCompat); } - let [eventType] = user.eventTypes; - if (isDynamicGroup) { eventType = getDefaultEvent(typeParam); eventType["users"] = users.map((user) => { diff --git a/apps/web/pages/event-types/index.tsx b/apps/web/pages/event-types/index.tsx index 2b40359742..4567962b9b 100644 --- a/apps/web/pages/event-types/index.tsx +++ b/apps/web/pages/event-types/index.tsx @@ -116,6 +116,9 @@ export const EventTypeList = ({ group, groupIndex, readOnly, types }: EventTypeL await utils.cancelQuery(["viewer.eventTypes"]); await utils.invalidateQueries(["viewer.eventTypes"]); }, + onSettled: async () => { + await utils.invalidateQueries(["viewer.eventTypes"]); + }, }); function moveEventType(index: number, increment: 1 | -1) { diff --git a/apps/web/server/routers/viewer.tsx b/apps/web/server/routers/viewer.tsx index be4efcde02..e03b4a9e49 100644 --- a/apps/web/server/routers/viewer.tsx +++ b/apps/web/server/routers/viewer.tsx @@ -239,15 +239,14 @@ const loggedInViewerRouter = createProtectedRouter() }; let eventTypeGroups: EventTypeGroup[] = []; - const eventTypesHashMap = user.eventTypes.concat(typesRaw).reduce((hashMap, newItem) => { - const oldItem = hashMap[newItem.id] || {}; + const eventTypesHashMap = user.eventTypes.concat(typesRaw).reduce((hashMap, newItem, currentIndex) => { + const oldItem = hashMap[newItem.id] || { + $disabled: user.plan === "FREE" && currentIndex > 0, + }; hashMap[newItem.id] = { ...oldItem, ...newItem }; return hashMap; }, {} as Record); - const mergedEventTypes = Object.values(eventTypesHashMap).map((et, index) => ({ - ...et, - $disabled: user.plan === "FREE" && index > 0, - })); + const mergedEventTypes = Object.values(eventTypesHashMap).map((eventType) => eventType); eventTypeGroups.push({ teamId: null,