Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
d0956d6
refactor(features): remove AddNewTeamsForm re-export from packages
devin-ai-integration[bot] Nov 6, 2025
78a31c3
refactor(webhooks): decouple WebhookListItem from @calcom/web via DI
devin-ai-integration[bot] Nov 6, 2025
2536c0a
refactor(webhooks): decouple EventTypeWebhookListItem from @calcom/we…
devin-ai-integration[bot] Nov 6, 2025
3ebfe93
refactor(webhooks): decouple webhook-edit-view from @calcom/web via DI
devin-ai-integration[bot] Nov 6, 2025
b41b908
refactor(webhooks): decouple webhook-new-view from @calcom/web via DI
devin-ai-integration[bot] Nov 6, 2025
995602a
refactor(eventtypes): remove revalidateEventTypesList from DuplicateD…
devin-ai-integration[bot] Nov 6, 2025
0aa9306
refactor(eventtypes): remove revalidateEventTypeEditPage from EventWe…
devin-ai-integration[bot] Nov 6, 2025
2a87de2
refactor(eventtypes): remove revalidateEventTypeEditPage from EventWo…
devin-ai-integration[bot] Nov 6, 2025
5a10eb3
refactor(teams): remove revalidateTeamsList from 6 components
devin-ai-integration[bot] Nov 6, 2025
dbe4069
refactor(teams): remove revalidate calls from 5 components and pages
devin-ai-integration[bot] Nov 6, 2025
329cd70
refactor(organizations): remove revalidate calls from 6 components
devin-ai-integration[bot] Nov 6, 2025
1d008b9
refactor(api-keys,dsync): remove revalidate calls from 3 components
devin-ai-integration[bot] Nov 6, 2025
c900b07
refactor(auth): move buildLegacyRequest to shared package
devin-ai-integration[bot] Nov 6, 2025
228a701
refactor(platform): remove platform hook imports via props-based pattern
devin-ai-integration[bot] Nov 6, 2025
8496246
refactor(auth): inline buildLegacyRequest to avoid widening type-chec…
devin-ai-integration[bot] Nov 6, 2025
2f26e3a
fix(users): correct platformUserInfo property access in InviteMemberM…
devin-ai-integration[bot] Nov 6, 2025
4d94905
Revert platform DI changes to prevent regressions
devin-ai-integration[bot] Nov 12, 2025
a01fbe7
fix: address Cubic's PR feedback on dependency injection
devin-ai-integration[bot] Nov 12, 2025
172642e
Merge branch 'main' into devin/remove-web-dependencies-1762456280
volnei Nov 12, 2025
e4e1cd2
fix(auth): add type cast for buildLegacyRequest in calcomHandler
devin-ai-integration[bot] Nov 12, 2025
abacc2d
refactor(i18n): move i18n contexts from @calcom/web to @calcom/lib
devin-ai-integration[bot] Nov 12, 2025
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 @@ -10,6 +10,8 @@ import { webhookRouter } from "@calcom/trpc/server/routers/viewer/webhook/_route

import { buildLegacyRequest } from "@lib/buildLegacyCtx";

import { revalidateWebhooksList } from "./actions";

export const generateMetadata = async () =>
await _generateMetadata(
(t) => t("webhooks"),
Expand All @@ -28,7 +30,7 @@ const WebhooksViewServerWrapper = async () => {
const caller = await createRouterCaller(webhookRouter);
const data = await caller.getByViewer();

return <WebhooksView data={data} />;
return <WebhooksView data={data} onInvalidate={revalidateWebhooksList} />;
};

export default WebhooksViewServerWrapper;
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { revalidatePath } from "next/cache";

import { createRouterCaller } from "app/_trpc/context";
import { _generateMetadata } from "app/_utils";

Expand Down Expand Up @@ -26,7 +28,12 @@ const Page = async () => {
webhookCaller.list(),
]);

return <NewWebhookView webhooks={webhooks} installedApps={installedApps} />;
const onInvalidate = async () => {
"use server";
revalidatePath("/settings/developer/webhooks");
};

return <NewWebhookView webhooks={webhooks} installedApps={installedApps} onInvalidate={onInvalidate} />;
};

export default Page;
13 changes: 4 additions & 9 deletions apps/web/app/AppRouterI18nProvider.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
"use client";

import { createContext, useMemo } from "react";
import { useMemo } from "react";
import type { ReactNode } from "react";

type AppRouterI18nContextType = {
translations: Record<string, string>;
ns: string;
locale: string;
};

export const AppRouterI18nContext = createContext<AppRouterI18nContextType | null>(null);
import { AppRouterI18nContext } from "@calcom/lib/i18n/AppRouterI18nContext";
import type { AppRouterI18nContextType } from "@calcom/lib/i18n/AppRouterI18nContext";

export function AppRouterI18nProvider({
children,
Expand All @@ -26,7 +21,7 @@ export function AppRouterI18nProvider({
locale,
ns,
}),
[locale, ns]
[translations, locale, ns]
);

return <AppRouterI18nContext.Provider value={value}>{children}</AppRouterI18nContext.Provider>;
Expand Down
13 changes: 4 additions & 9 deletions apps/web/app/CustomI18nProvider.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
"use client";

import { createContext, useMemo } from "react";
import { useMemo } from "react";
import type { ReactNode } from "react";

type CustomI18nContextType = {
translations: Record<string, string>;
ns: string;
locale: string;
};

export const CustomI18nContext = createContext<CustomI18nContextType | null>(null);
import { CustomI18nContext } from "@calcom/lib/i18n/CustomI18nContext";
import type { CustomI18nContextType } from "@calcom/lib/i18n/CustomI18nContext";

export function CustomI18nProvider({
children,
Expand All @@ -26,7 +21,7 @@ export function CustomI18nProvider({
locale,
ns,
}),
[locale, ns]
[translations, locale, ns]
);

return <CustomI18nContext.Provider value={value}>{children}</CustomI18nContext.Provider>;
Expand Down
7 changes: 5 additions & 2 deletions packages/features/auth/signup/handlers/calcomHandler.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { cookies, headers } from "next/headers";
import { NextResponse } from "next/server";
import type { NextApiRequest } from "next";

import { getPremiumMonthlyPlanPriceId } from "@calcom/app-store/stripepayment/lib/utils";
import { getLocaleFromRequest } from "@calcom/features/auth/lib/getLocaleFromRequest";
Expand All @@ -13,14 +14,14 @@ import { checkIfEmailIsBlockedInWatchlistController } from "@calcom/features/wat
import { hashPassword } from "@calcom/lib/auth/hashPassword";
import { WEBAPP_URL } from "@calcom/lib/constants";
import { HttpError } from "@calcom/lib/http-error";
import { buildLegacyRequest } from "@calcom/lib/legacy-request";
import logger from "@calcom/lib/logger";
import type { CustomNextApiHandler } from "@calcom/lib/server/username";
import { usernameHandler } from "@calcom/lib/server/username";
import { prisma } from "@calcom/prisma";
import { CreationSource } from "@calcom/prisma/enums";
import { IdentityProvider } from "@calcom/prisma/enums";
import { signupSchema } from "@calcom/prisma/zod-utils";
import { buildLegacyRequest } from "@calcom/web/lib/buildLegacyCtx";

import { joinAnyChildTeamOnOrgInvite } from "../utils/organization";
import {
Expand Down Expand Up @@ -215,7 +216,9 @@ const handler: CustomNextApiHandler = async (body, usernameStatus) => {
}
sendEmailVerification({
email,
language: await getLocaleFromRequest(buildLegacyRequest(await headers(), await cookies())),
language: await getLocaleFromRequest(
buildLegacyRequest(await headers(), await cookies()) as unknown as NextApiRequest
),
username: username || "",
});
}
Expand Down
3 changes: 0 additions & 3 deletions packages/features/ee/api-keys/components/ApiKeyDialogForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import { SelectField } from "@calcom/ui/components/form";
import { Switch } from "@calcom/ui/components/form";
import { showToast } from "@calcom/ui/components/toast";
import { Tooltip } from "@calcom/ui/components/tooltip";
import { revalidateApiKeysList } from "@calcom/web/app/(use-page-wrapper)/settings/(settings-layout)/developer/api-keys/actions";

export default function ApiKeyDialogForm({
defaultValues,
Expand All @@ -32,7 +31,6 @@ export default function ApiKeyDialogForm({
const updateApiKeyMutation = trpc.viewer.apiKeys.edit.useMutation({
onSuccess() {
utils.viewer.apiKeys.list.invalidate();
revalidateApiKeysList();
showToast(t("api_key_updated"), "success");
handleClose();
},
Expand Down Expand Up @@ -147,7 +145,6 @@ export default function ApiKeyDialogForm({
setApiKey(apiKey);
setApiKeyDetails({ ...event });
await utils.viewer.apiKeys.list.invalidate();
revalidateApiKeysList();
setSuccessfulNewApiKeyModal(true);
}
}}
Expand Down
2 changes: 0 additions & 2 deletions packages/features/ee/api-keys/components/ApiKeyListItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import {
DropdownMenuTrigger,
} from "@calcom/ui/components/dropdown";
import { showToast } from "@calcom/ui/components/toast";
import { revalidateApiKeysList } from "@calcom/web/app/(use-page-wrapper)/settings/(settings-layout)/developer/api-keys/actions";

export type TApiKeys = RouterOutputs["viewer"]["apiKeys"]["list"][number];

Expand All @@ -40,7 +39,6 @@ const ApiKeyListItem = ({
const deleteApiKey = trpc.viewer.apiKeys.delete.useMutation({
async onSuccess() {
await utils.viewer.apiKeys.list.invalidate();
revalidateApiKeysList();
showToast(t("api_key_deleted"), "success");
},
onError(err) {
Expand Down
2 changes: 0 additions & 2 deletions packages/features/ee/dsync/components/CreateTeamDialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { CreateANewTeamForm } from "@calcom/features/ee/teams/components";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
import { DialogContent } from "@calcom/ui/components/dialog";
import { revalidateTeamsList } from "@calcom/web/app/(use-page-wrapper)/(main-nav)/teams/actions";

interface CreateTeamDialogProps {
open: boolean;
Expand All @@ -25,7 +24,6 @@ const CreateTeamDialog = (props: CreateTeamDialogProps) => {
onSuccess={async () => {
await utils.viewer.dsync.teamGroupMapping.get.invalidate();
await utils.viewer.teams.list.invalidate();
revalidateTeamsList();
onOpenChange(false);
}}
/>
Expand Down
1 change: 0 additions & 1 deletion packages/features/ee/organizations/components/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
export { CreateANewOrganizationForm } from "./CreateANewOrganizationForm";
export { AboutOrganizationForm } from "./AboutOrganizationForm";
export { AddNewTeamsForm } from "@calcom/web/modules/settings/organizations/new/_components/AddNewTeamsForm";
export { AdminOnboardingHandover } from "./AdminOnboardingHandover";
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import type { RouterOutputs } from "@calcom/trpc/react";
import { trpc } from "@calcom/trpc/react";
import { ConfirmationDialogContent } from "@calcom/ui/components/dialog";
import { showToast } from "@calcom/ui/components/toast";
import { revalidateAttributesList } from "@calcom/web/app/(use-page-wrapper)/settings/organizations/(org-user-only)/members/actions";

type AttributeItemProps = RouterOutputs["viewer"]["attributes"]["list"][number];

Expand All @@ -24,7 +23,6 @@ export function DeleteAttributeModal({
onSuccess: () => {
showToast(t("attribute_deleted_successfully"), "success");
utils.viewer.attributes.list.invalidate();
revalidateAttributesList();
},
onError: (err) => {
showToast(err.message, "error");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,26 @@

import { useRouter } from "next/navigation";
import { useFormContext } from "react-hook-form";
import { z } from "zod";

import LicenseRequired from "@calcom/features/ee/common/components/LicenseRequired";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
import { Button } from "@calcom/ui/components/button";
import { showToast } from "@calcom/ui/components/toast";
import { revalidateAttributesList } from "@calcom/web/app/(use-page-wrapper)/settings/organizations/(org-user-only)/members/actions";

import { AttributeForm } from "./AttributesForm";

const CreateAttributeSchema = z.object({
// Calling this name would make sense but conflicts with rhf "watch" "name" field
attrName: z.string().min(1),
type: z.enum(["TEXT", "NUMBER", "SINGLE_SELECT", "MULTI_SELECT"]),
options: z.array(z.object({ value: z.string(), id: z.string() })),
});

type FormValues = z.infer<typeof CreateAttributeSchema>;
type FormValues = {
attrName: string;
type: "TEXT" | "NUMBER" | "SINGLE_SELECT" | "MULTI_SELECT";
options: Array<{ value: string; id: string }>;
};

function CreateAttributesPage() {
const router = useRouter();
const mutation = trpc.viewer.attributes.create.useMutation({
onSuccess: () => {
showToast("Attribute created successfully", "success");
revalidateAttributesList();
router.push("/settings/organizations/attributes");
},
onError: (err) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,20 @@

import { useParams } from "next/navigation";
import { useFormContext } from "react-hook-form";
import { z } from "zod";

import LicenseRequired from "@calcom/features/ee/common/components/LicenseRequired";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
import { Button } from "@calcom/ui/components/button";
import { showToast } from "@calcom/ui/components/toast";
import { revalidateAttributesList } from "@calcom/web/app/(use-page-wrapper)/settings/organizations/(org-user-only)/members/actions";

import { AttributeForm } from "./AttributesForm";

const CreateAttributeSchema = z.object({
// Calling this name would make sense but conflicts with rhf "watch" "name" field
attrName: z.string().min(1),
type: z.enum(["TEXT", "NUMBER", "SINGLE_SELECT", "MULTI_SELECT"]),
options: z.array(z.object({ value: z.string(), id: z.string() })),
});

type FormValues = z.infer<typeof CreateAttributeSchema>;
type FormValues = {
attrName: string;
type: "TEXT" | "NUMBER" | "SINGLE_SELECT" | "MULTI_SELECT";
options: Array<{ value: string; id: string }>;
};

function CreateAttributesPage() {
const utils = trpc.useUtils();
Expand All @@ -38,7 +33,6 @@ function CreateAttributesPage() {
id,
});
utils.viewer.attributes.list.invalidate();
revalidateAttributesList();
},
onError: (err) => {
showToast(err.message, "error");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import {
import { Switch } from "@calcom/ui/components/form";
import { Icon } from "@calcom/ui/components/icon";
import { showToast } from "@calcom/ui/components/toast";
import { revalidateAttributesList } from "@calcom/web/app/(use-page-wrapper)/settings/organizations/(org-user-only)/members/actions";

import { DeleteAttributeModal } from "./DeleteAttributeModal";
import { ListSkeleton } from "./ListSkeleton";
Expand Down Expand Up @@ -47,7 +46,6 @@ function AttributeItem({
const mutation = trpc.viewer.attributes.toggleActive.useMutation({
onSuccess: () => {
showToast(t("attribute_updated_successfully"), "success");
revalidateAttributesList();
},
onError: (err) => {
showToast(err.message, "error");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import { trpc } from "@calcom/trpc/react";
import type { RouterOutputs } from "@calcom/trpc/react";
import { Button } from "@calcom/ui/components/button";
import { showToast } from "@calcom/ui/components/toast";
import { revalidateTeamsList } from "@calcom/web/app/(use-page-wrapper)/(main-nav)/teams/actions";

import MakeTeamPrivateSwitch from "../../../teams/components/MakeTeamPrivateSwitch";
import MemberListItem from "../components/MemberListItem";
Expand Down Expand Up @@ -159,7 +158,6 @@ const MembersView = () => {
utils.viewer.organizations.getMembers.invalidate();
utils.viewer.organizations.listOtherTeams.invalidate();
utils.viewer.teams.list.invalidate();
revalidateTeamsList();
utils.viewer.organizations.listOtherTeamMembers.invalidate();
},
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@ import { TextField } from "@calcom/ui/components/form";
import { ImageUploader } from "@calcom/ui/components/image-uploader";
import { SkeletonContainer, SkeletonText } from "@calcom/ui/components/skeleton";
import { showToast } from "@calcom/ui/components/toast";
import { revalidateTeamDataCache } from "@calcom/web/app/(booking-page-wrapper)/team/[slug]/[type]/actions";
import { revalidateTeamsList } from "@calcom/web/app/(use-page-wrapper)/(main-nav)/teams/actions";

import { subdomainSuffix } from "../../../organizations/lib/orgDomains";

Expand Down Expand Up @@ -69,10 +67,6 @@ const OtherTeamProfileView = () => {
await utils.viewer.teams.get.invalidate();
if (team?.slug) {
// Org admins editing another team's profile should purge the cached team data
revalidateTeamDataCache({
teamSlug: team.slug,
orgSlug: team.parent?.slug ?? null,
});
}
showToast(t("your_team_updated_successfully"), "success");
},
Expand Down Expand Up @@ -137,7 +131,6 @@ const OtherTeamProfileView = () => {
async onSuccess() {
await utils.viewer.teams.get.invalidate();
await utils.viewer.teams.list.invalidate();
revalidateTeamsList();
await utils.viewer.eventTypes.invalidate();
showToast(t("success"), "success");
},
Expand All @@ -161,7 +154,7 @@ const OtherTeamProfileView = () => {
if (team?.id) deleteTeamMutation.mutate({ teamId: team.id });
}

function leaveTeam() {
function _leaveTeam() {
if (team?.id && session.data)
removeMemberMutation.mutate({
teamIds: [team.id],
Expand Down Expand Up @@ -291,7 +284,6 @@ const OtherTeamProfileView = () => {
<Label className="text-emphasis mt-5">{t("about")}</Label>
<div
className=" text-subtle break-words text-sm [&_a]:text-blue-500 [&_a]:underline [&_a]:hover:text-blue-600"
// eslint-disable-next-line react/no-danger
dangerouslySetInnerHTML={{ __html: markdownToSafeHTML(team.bio) }}
/>
</>
Expand Down
4 changes: 0 additions & 4 deletions packages/features/ee/teams/components/CreateANewTeamForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ import { Button } from "@calcom/ui/components/button";
import { DialogFooter } from "@calcom/ui/components/dialog";
import { Form } from "@calcom/ui/components/form";
import { TextField } from "@calcom/ui/components/form";
import { revalidateEventTypesList } from "@calcom/web/app/(use-page-wrapper)/(main-nav)/event-types/actions";
import { revalidateTeamsList } from "@calcom/web/app/(use-page-wrapper)/(main-nav)/teams/actions";

import { useOrgBranding } from "../../organizations/context/provider";
import { subdomainSuffix } from "../../organizations/lib/orgDomains";
Expand Down Expand Up @@ -44,8 +42,6 @@ export const CreateANewTeamForm = (props: CreateANewTeamFormProps) => {
const createTeamMutation = trpc.viewer.teams.create.useMutation({
onSuccess: async (data) => {
await utils.viewer.eventTypes.getUserEventGroups.invalidate();
revalidateEventTypesList();
revalidateTeamsList();
onSuccess(data);
},

Expand Down
Loading
Loading