Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { cookies, headers } from "next/headers";
import { redirect } from "next/navigation";
import { z } from "zod";

import { EventTypeWebWrapper } from "@calcom/atoms/event-types/wrappers/EventTypeWebWrapper";
import { EventTypeWebWrapper } from "@calcom/web/modules/event-types/components/EventTypeWebWrapper";
import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
import { getEventTypePermissions } from "@calcom/features/pbac/lib/event-type-permissions";
import { eventTypesRouter } from "@calcom/trpc/server/routers/viewer/eventTypes/_router";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { SkeletonLoader } from "@calcom/atoms/connect/conferencing-apps/ConferencingAppsViewWebWrapper";
import { SkeletonLoader } from "@calcom/web/modules/apps/components/ConferencingAppsViewWebWrapper";

export default function Loading() {
return <SkeletonLoader />;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { createRouterCaller } from "app/_trpc/context";
import { _generateMetadata } from "app/_utils";

import { ConferencingAppsViewWebWrapper } from "@calcom/atoms/connect/conferencing-apps/ConferencingAppsViewWebWrapper";
import { ConferencingAppsViewWebWrapper } from "@calcom/web/modules/apps/components/ConferencingAppsViewWebWrapper";
import { appsRouter } from "@calcom/trpc/server/routers/viewer/apps/_router";
import { eventTypesRouter } from "@calcom/trpc/server/routers/viewer/eventTypes/_router";

Expand Down
4 changes: 2 additions & 2 deletions apps/web/components/apps/CalendarListContainer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import { useEffect, Suspense } from "react";

import { InstallAppButton } from "@calcom/app-store/InstallAppButton";
import { DestinationCalendarSettingsWebWrapper } from "@calcom/atoms/destination-calendar/wrappers/DestinationCalendarSettingsWebWrapper";
import { SelectedCalendarsSettingsWebWrapper } from "@calcom/atoms/selected-calendars/wrappers/SelectedCalendarsSettingsWebWrapper";
import { DestinationCalendarSettingsWebWrapper } from "./DestinationCalendarSettingsWebWrapper";
import { SelectedCalendarsSettingsWebWrapper } from "@calcom/web/modules/calendars/components/SelectedCalendarsSettingsWebWrapper";
import AppListCard from "@calcom/web/modules/apps/components/AppListCard";
import { SkeletonLoader } from "@calcom/web/modules/apps/components/SkeletonLoader";
import SettingsHeader from "@calcom/features/settings/appDir/SettingsHeader";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { trpc } from "@calcom/trpc/react";

import { AtomsWrapper } from "../../src/components/atoms-wrapper";
import { DestinationCalendarSettings } from "../DestinationCalendar";
import { AtomsWrapper } from "../../../../packages/platform/atoms/src/components/atoms-wrapper";
import { DestinationCalendarSettings } from "../../../../packages/platform/atoms/destination-calendar/DestinationCalendar";

export const DestinationCalendarSettingsWebWrapper = () => {
const calendars = trpc.viewer.calendars.connectedCalendars.useQuery();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

import { useReducer } from "react";

import { AppList } from "@calcom/web/modules/apps/components/AppList";
import DisconnectIntegrationModal from "@calcom/web/modules/apps/components/DisconnectIntegrationModal";
import SettingsHeader from "@calcom/features/settings/appDir/SettingsHeader";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
Expand All @@ -13,6 +11,9 @@ import { EmptyScreen } from "@calcom/ui/components/empty-screen";
import { SkeletonText, SkeletonContainer } from "@calcom/ui/components/skeleton";
import { showToast } from "@calcom/ui/components/toast";

import { AppList } from "./AppList";
import DisconnectIntegrationModal from "./DisconnectIntegrationModal";

export type UpdateUsersDefaultConferencingAppParams = {
appSlug: string;
appLink?: string;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
"use client";

import { useSession } from "next-auth/react";
import { useSearchParams, usePathname, useRouter } from "next/navigation";
import { useMemo, useCallback, useEffect, useRef } from "react";
import { useSearchParams, usePathname } from "next/navigation";
import { useMemo, useCallback, useEffect } from "react";
Comment on lines +4 to +5
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Critical: useRouter was removed but router is still used throughout the component.

The import for useRouter from next/navigation was removed, but the router variable is still used in multiple places:

  • Line 193: router.push(...) in onOverlaySwitchStateChange
  • Line 195: [router] in dependency array
  • Line 228: router.push(newPath)
  • Line 232: router.push("/apps/categories/calendar")
  • Line 238: router.push(newUrl.toString())

This will cause runtime errors (ReferenceError: router is not defined) when users interact with the overlay calendar, instant meeting, or navigation features.

Proposed fix: Restore the useRouter import and usage
-import { useSearchParams, usePathname } from "next/navigation";
-import { useMemo, useCallback, useEffect } from "react";
+import { useSearchParams, usePathname, useRouter } from "next/navigation";
+import { useMemo, useCallback, useEffect } from "react";

Then add the router initialization inside BookerWebWrapperComponent:

const BookerWebWrapperComponent = (props: BookerWebWrapperAtomProps) => {
  const pathname = usePathname();
  const searchParams = useSearchParams();
  const router = useRouter(); // Add this line
  // ... rest of component
🤖 Prompt for AI Agents
In `@apps/web/modules/bookings/components/BookerWebWrapper.tsx` around lines 4 -
5, The component still references router in functions like
onOverlaySwitchStateChange, and in places calling router.push (e.g., inside
BookerWebWrapperComponent and handlers that build newPath/newUrl), but useRouter
was removed from imports; re-import useRouter from next/navigation and
initialize const router = useRouter() inside BookerWebWrapperComponent
(alongside existing usePathname/useSearchParams) so all uses of router
(router.push calls and dependency arrays) are valid; ensure dependency arrays
that included [router] still reference the local router variable.

import React from "react";
import { shallow } from "zustand/shallow";

Expand All @@ -12,7 +12,6 @@ import {
} from "@calcom/embed-core/embed-iframe";
import { useBookerEmbedEvents } from "@calcom/embed-core/src/embed-iframe/react-hooks";
import type { BookerProps } from "@calcom/features/bookings/Booker";
import { Booker as BookerComponent } from "@calcom/web/modules/bookings/components/Booker";
import {
BookerStoreProvider,
useInitializeBookerStoreContext,
Expand All @@ -33,12 +32,13 @@ import { DEFAULT_LIGHT_BRAND_COLOR, DEFAULT_DARK_BRAND_COLOR, WEBAPP_URL } from
import { useRouterQuery } from "@calcom/lib/hooks/useRouterQuery";
import { localStorage } from "@calcom/lib/webstorage";

import { Booker as BookerComponent } from "./Booker";

export type BookerWebWrapperAtomProps = BookerProps & {
eventData?: NonNullable<Awaited<ReturnType<typeof getPublicEvent>>>;
};

const BookerWebWrapperComponent = (props: BookerWebWrapperAtomProps) => {
const router = useRouter();
const pathname = usePathname();
const searchParams = useSearchParams();
const clientFetchedEvent = useEvent({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { Alert } from "@calcom/ui/components/alert";
import { Select } from "@calcom/ui/components/form";
import { List } from "@calcom/ui/components/list";

import { SelectedCalendarsSettings } from "../SelectedCalendarsSettings";
import { SelectedCalendarsSettings } from "@calcom/atoms/selected-calendars/SelectedCalendarsSettings";

export enum SelectedCalendarSettingsScope {
User = "user",
Expand Down Expand Up @@ -147,7 +147,6 @@ export const SelectedCalendarsSettingsWebWrapper = (props: SelectedCalendarsSett

const query = trpc.viewer.calendars.connectedCalendars.useQuery(
{

eventTypeId: scope === SelectedCalendarSettingsScope.EventType ? eventTypeId! : null,
},
{
Expand Down
2 changes: 1 addition & 1 deletion apps/web/modules/d/[link]/d-type-view.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"use client";

import { BookerWebWrapper as Booker } from "@calcom/atoms/booker";
import { BookerWebWrapper as Booker } from "@calcom/web/modules/bookings/components/BookerWebWrapper";
import { getBookerWrapperClasses } from "@calcom/features/bookings/Booker/utils/getBookerWrapperClasses";

import { type PageProps } from "@lib/d/[link]/[slug]/getServerSideProps";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { Controller } from "react-hook-form";
import type { Options } from "react-select";

import { AddMembersWithSwitchPlatformWrapper } from "@calcom/atoms/add-members-switch/AddMembersWithSwitchPlatformWrapper";
import { AddMembersWithSwitchWebWrapper } from "@calcom/atoms/add-members-switch/AddMembersWithSwitchWebWrapper";
import { AddMembersWithSwitchWebWrapper } from "./AddMembersWithSwitchWebWrapper";
import { useIsPlatform } from "@calcom/atoms/hooks/useIsPlatform";
import { Segment } from "@calcom/features/Segment";
import type {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import type { AddMembersWithSwitchProps } from "@calcom/web/modules/event-types/components/AddMembersWithSwitch";
import { AddMembersWithSwitch } from "@calcom/web/modules/event-types/components/AddMembersWithSwitch";
import { trpc } from "@calcom/trpc/react";

import type { AddMembersWithSwitchProps } from "./AddMembersWithSwitch";
import { AddMembersWithSwitch } from "./AddMembersWithSwitch";

export const AddMembersWithSwitchWebWrapper = ({ ...props }: AddMembersWithSwitchProps) => {
const utils = trpc.useUtils();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ import { useEffect, useRef, useState } from "react";
import { z } from "zod";

import { useOrgBranding } from "@calcom/features/ee/organizations/context/provider";
import type { ChildrenEventType } from "@calcom/web/modules/event-types/components/ChildrenEventTypeSelect";
import { EventType as EventTypeComponent } from "@calcom/web/modules/event-types/components/EventType";
import type { EventTypeSetupProps } from "@calcom/features/eventtypes/lib/types";
import { EventPermissionProvider } from "@calcom/features/pbac/client/context/EventPermissionContext";
import { useWorkflowPermission } from "@calcom/features/pbac/client/hooks/useEventPermission";
Expand All @@ -20,14 +18,17 @@ import { trpc } from "@calcom/trpc/react";
import type { RouterOutputs } from "@calcom/trpc/react";
import useMeQuery from "@calcom/trpc/react/hooks/useMeQuery";
import { showToast } from "@calcom/ui/components/toast";
import { revalidateTeamEventTypeCache } from "@calcom/web/app/(booking-page-wrapper)/team/[slug]/[type]/actions";
import { revalidateEventTypeEditPage } from "@calcom/web/app/(use-page-wrapper)/event-types/[type]/actions";

import { TRPCClientError } from "@trpc/react-query";

import { useEventTypeForm } from "../hooks/useEventTypeForm";
import { useHandleRouteChange } from "../hooks/useHandleRouteChange";
import { useTabsNavigations } from "../hooks/useTabsNavigations";
import { revalidateTeamEventTypeCache } from "@calcom/web/app/(booking-page-wrapper)/team/[slug]/[type]/actions";
import { revalidateEventTypeEditPage } from "@calcom/web/app/(use-page-wrapper)/event-types/[type]/actions";

import type { ChildrenEventType } from "./ChildrenEventTypeSelect";
import { EventType as EventTypeComponent } from "./EventType";
import { useEventTypeForm } from "@calcom/atoms/event-types/hooks/useEventTypeForm";
import { useHandleRouteChange } from "@calcom/atoms/event-types/hooks/useHandleRouteChange";
import { useTabsNavigations } from "@calcom/atoms/event-types/hooks/useTabsNavigations";

type EventPermissions = {
eventTypes: {
Expand All @@ -44,65 +45,49 @@ type EventPermissions = {
};
};

const ManagedEventTypeDialog = dynamic(
() => import("@calcom/web/modules/event-types/components/dialogs/ManagedEventDialog")
);
const ManagedEventTypeDialog = dynamic(() => import("./dialogs/ManagedEventDialog"));

const AssignmentWarningDialog = dynamic(
() => import("@calcom/web/modules/event-types/components/dialogs/AssignmentWarningDialog")
);
const AssignmentWarningDialog = dynamic(() => import("./dialogs/AssignmentWarningDialog"));

const EventSetupTab = dynamic(
() =>
// import web wrapper when it's ready
import("./EventSetupTabWebWrapper").then((mod) => mod),
() => import("./tabs/setup/EventSetupTabWebWrapper").then((mod) => mod),
{ loading: () => null }
);

const EventAvailabilityTab = dynamic(() =>
// import web wrapper when it's ready
import("./EventAvailabilityTabWebWrapper").then((mod) => mod)
import("./tabs/availability/EventAvailabilityTabWebWrapper").then((mod) => mod)
);

const EventTeamAssignmentTab = dynamic(() => import("./EventTeamAssignmentTabWebWrapper").then((mod) => mod));
const EventTeamAssignmentTab = dynamic(() => import("./tabs/assignment/EventTeamAssignmentTabWebWrapper"));

const EventLimitsTab = dynamic(() =>
// import web wrapper when it's ready
import("./EventLimitsTabWebWrapper").then((mod) => mod)
import("./tabs/limits/EventLimitsTabWebWrapper").then((mod) => mod)
);

const EventAdvancedTab = dynamic(() =>
// import web wrapper when it's ready
import("./EventAdvancedWebWrapper").then((mod) => mod)
import("./tabs/advanced/EventAdvancedWebWrapper").then((mod) => mod)
);

const EventInstantTab = dynamic(() =>
import("@calcom/web/modules/event-types/components/tabs/instant/EventInstantTab").then(
(mod) => mod.EventInstantTab
)
import("./tabs/instant/EventInstantTab").then((mod) => mod.EventInstantTab)
);

const EventRecurringTab = dynamic(() =>
// import web wrapper when it's ready
import("./EventRecurringWebWrapper").then((mod) => mod)
import("./tabs/recurring/EventRecurringWebWrapper").then((mod) => mod)
);

const EventAppsTab = dynamic(() =>
import("@calcom/web/modules/event-types/components/tabs/apps/EventAppsTab").then((mod) => mod.EventAppsTab)
import("./tabs/apps/EventAppsTab").then((mod) => mod.EventAppsTab)
);

const EventWorkflowsTab = dynamic(
() => import("@calcom/web/modules/event-types/components/tabs/workflows/EventWorkflowsTab")
);
const EventWorkflowsTab = dynamic(() => import("./tabs/workflows/EventWorkflowsTab"));

const EventWebhooksTab = dynamic(() =>
import("@calcom/web/modules/event-types/components/tabs/webhooks/EventWebhooksTab").then(
(mod) => mod.EventWebhooksTab
)
import("./tabs/webhooks/EventWebhooksTab").then((mod) => mod.EventWebhooksTab)
);

const EventAITab = dynamic(() =>
import("@calcom/web/modules/event-types/components/tabs/ai/EventAITab").then((mod) => mod.EventAITab)
import("./tabs/ai/EventAITab").then((mod) => mod.EventAITab)
);

export type EventTypeWebWrapperProps = {
Expand Down Expand Up @@ -248,21 +233,21 @@ const EventTypeWeb = ({

const tabMap = {
setup: (
<EventSetupTab
eventType={eventType}
locationOptions={locationOptions}
team={team}
teamMembers={teamMembers}
destinationCalendar={destinationCalendar}
/>
<EventSetupTab
eventType={eventType}
locationOptions={locationOptions}
team={team}
teamMembers={teamMembers}
destinationCalendar={destinationCalendar}
/>
),
availability: (
<EventAvailabilityTab
eventType={eventType}
isTeamEvent={!!team}
user={user}
teamMembers={teamMembers}
/>
<EventAvailabilityTab
eventType={eventType}
isTeamEvent={!!team}
user={user}
teamMembers={teamMembers}
/>
),
team: (
<EventTeamAssignmentTab
Expand Down
23 changes: 1 addition & 22 deletions apps/web/modules/event-types/components/HostEditDialogs.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import type {
InputClassNames,
SelectClassNames,
} from "@calcom/features/eventtypes/lib/types";
import { groupHostsByGroupId, getHostsFromOtherGroups } from "@calcom/lib/bookings/hostGroupUtils";
import { groupHostsByGroupId, getHostsFromOtherGroups, sortHosts } from "@calcom/lib/bookings/hostGroupUtils";
import { DEFAULT_GROUP_ID } from "@calcom/lib/constants";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import classNames from "@calcom/ui/classNames";
Expand Down Expand Up @@ -128,27 +128,6 @@ export const PriorityDialog = (
);
};

export function sortHosts(
hostA: { priority: number | null; weight: number | null },
hostB: { priority: number | null; weight: number | null },
isRRWeightsEnabled: boolean
) {
const weightA = hostA.weight ?? 100;
const priorityA = hostA.priority ?? 2;
const weightB = hostB.weight ?? 100;
const priorityB = hostB.priority ?? 2;

if (isRRWeightsEnabled) {
if (weightA === weightB) {
return priorityB - priorityA;
} else {
return weightB - weightA;
}
} else {
return priorityB - priorityA;
}
}

export type WeightDialogCustomClassNames = {
container?: string;
label?: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {
SelectedCalendarsSettingsWebWrapper,
SelectedCalendarSettingsScope,
SelectedCalendarsSettingsWebWrapperSkeleton,
} from "@calcom/atoms/selected-calendars/wrappers/SelectedCalendarsSettingsWebWrapper";
} from "@calcom/web/modules/calendars/components/SelectedCalendarsSettingsWebWrapper";
import { Timezone as PlatformTimzoneSelect } from "@calcom/atoms/timezone";
import getLocationsOptionsForSelect from "@calcom/features/bookings/lib/getLocationOptionsForSelect";
import DestinationCalendarSelector from "@calcom/features/calendars/DestinationCalendarSelector";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { localeOptions } from "@calcom/lib/i18n";
import { trpc } from "@calcom/trpc/react";
import type { EventAdvancedBaseProps } from "@calcom/web/modules/event-types/components/tabs/advanced/EventAdvancedTab";
import { EventAdvancedTab } from "@calcom/web/modules/event-types/components/tabs/advanced/EventAdvancedTab";

import type { EventAdvancedBaseProps } from "./EventAdvancedTab";
import { EventAdvancedTab } from "./EventAdvancedTab";

const EventAdvancedWebWrapper = ({ ...props }: EventAdvancedBaseProps) => {
const connectedCalendarsQuery = trpc.viewer.calendars.connectedCalendars.useQuery();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import AssignAllTeamMembers from "@calcom/web/modules/event-types/components/Ass
import type { ChildrenEventTypeSelectCustomClassNames } from "@calcom/web/modules/event-types/components/ChildrenEventTypeSelect";
import ChildrenEventTypeSelect from "@calcom/web/modules/event-types/components/ChildrenEventTypeSelect";
import { EditWeightsForAllTeamMembers } from "@calcom/web/modules/event-types/components/EditWeightsForAllTeamMembers";
import { sortHosts } from "@calcom/web/modules/event-types/components/HostEditDialogs";
import { sortHosts } from "@calcom/lib/bookings/hostGroupUtils";
import { LearnMoreLink } from "@calcom/web/modules/event-types/components/LearnMoreLink";
import WeightDescription from "@calcom/web/modules/event-types/components/WeightDescription";
import type {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {
EventTeamAssignmentTab,
type EventTeamAssignmentTabBaseProps,
} from "@calcom/web/modules/event-types/components/tabs/assignment/EventTeamAssignmentTab";
} from "./EventTeamAssignmentTab";

const EventTeamAssignmentTabWebWrapper = (
props: Omit<EventTeamAssignmentTabBaseProps, "isSegmentApplicable">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { Controller, useFormContext } from "react-hook-form";
import type { OptionProps, SingleValueProps } from "react-select";
import { components } from "react-select";

import type { GetAllSchedulesByUserIdQueryType } from "@calcom/atoms/event-types/wrappers/EventAvailabilityTabWebWrapper";
import type { GetAllSchedulesByUserIdQueryType } from "./EventAvailabilityTabWebWrapper";
import { useIsPlatform } from "@calcom/atoms/hooks/useIsPlatform";
import dayjs from "@calcom/dayjs";
import { SelectSkeletonLoader } from "@calcom/features/availability/components/SkeletonLoader";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { useFormContext } from "react-hook-form";

import useLockedFieldsManager from "@calcom/features/ee/managed-event-types/hooks/useLockedFieldsManager";
import type { TeamMembers } from "@calcom/web/modules/event-types/components/EventType";
import type { EventTypeSetup, FormValues } from "@calcom/features/eventtypes/lib/types";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import type { RouterOutputs } from "@calcom/trpc/react";
import { trpc } from "@calcom/trpc/react";
import { EventAvailabilityTab } from "@calcom/web/modules/event-types/components/tabs/availability/EventAvailabilityTab";

import type { TeamMembers } from "../../EventType";
import { EventAvailabilityTab } from "./EventAvailabilityTab";

export type EventAvailabilityTabWebWrapperProps = {
eventType: EventTypeSetup;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ const EventLimitsTabWebWrapper = (props: EventLimitsTabProps) => {
return <EventLimitsTab {...props} />;
};

export default EventLimitsTabWebWrapper;
export default EventLimitsTabWebWrapper;
Loading
Loading