diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json
index 6e306dcbfa..6eb5d6e481 100644
--- a/apps/web/public/static/locales/en/common.json
+++ b/apps/web/public/static/locales/en/common.json
@@ -2607,6 +2607,7 @@
"disable_email": "Disable email",
"grant_admin_api": "Grant Admin API Access",
"revoke_admin_api": "Revoke Admin API Access",
+ "add_calendar_label": "Add {{calendar}} Calendar",
"apple_connect_atom_label": "Connect Apple Calendar",
"apple_connect_atom_already_connected_label": "Connected Apple Calendar",
"apple_connect_atom_loading_label": "Checking Apple Calendar",
diff --git a/packages/platform/atoms/calendar-settings/wrappers/CalendarSettingsPlatformWrapper.tsx b/packages/platform/atoms/calendar-settings/wrappers/CalendarSettingsPlatformWrapper.tsx
index 47d9712cf8..ad4ed1ee5e 100644
--- a/packages/platform/atoms/calendar-settings/wrappers/CalendarSettingsPlatformWrapper.tsx
+++ b/packages/platform/atoms/calendar-settings/wrappers/CalendarSettingsPlatformWrapper.tsx
@@ -1,5 +1,6 @@
import { DestinationCalendarSettingsPlatformWrapper } from "../../destination-calendar/index";
import { SelectedCalendarsSettingsPlatformWrapper } from "../../selected-calendars/index";
+import type { CalendarRedirectUrls } from "../../selected-calendars/wrappers/SelectedCalendarsSettingsPlatformWrapper";
type CalendarSettingsPlatformWrapperProps = {
classNames?: {
@@ -7,9 +8,13 @@ type CalendarSettingsPlatformWrapperProps = {
destinationCalendarSettingsCustomClassnames?: string;
selectedCalendarSettingsCustomClassnames?: string;
};
+ calendarRedirectUrls?: CalendarRedirectUrls;
};
-export const CalendarSettingsPlatformWrapper = ({ classNames }: CalendarSettingsPlatformWrapperProps) => {
+export const CalendarSettingsPlatformWrapper = ({
+ classNames,
+ calendarRedirectUrls,
+}: CalendarSettingsPlatformWrapperProps) => {
return (
);
diff --git a/packages/platform/atoms/connect/OAuthConnect.tsx b/packages/platform/atoms/connect/OAuthConnect.tsx
index 046e21d0cd..99ec1e7e26 100644
--- a/packages/platform/atoms/connect/OAuthConnect.tsx
+++ b/packages/platform/atoms/connect/OAuthConnect.tsx
@@ -25,6 +25,7 @@ export type OAuthConnectProps = {
tooltip?: ReactNode;
tooltipSide?: "top" | "bottom" | "left" | "right";
isClickable?: boolean;
+ onSuccess?: () => void;
};
export const OAuthConnect: FC<
@@ -44,6 +45,7 @@ export const OAuthConnect: FC<
tooltip,
tooltipSide = "bottom",
isClickable,
+ onSuccess,
}) => {
const { connect } = useConnect(calendar, redir);
const { allowConnect, checked } = useCheck({
@@ -74,7 +76,10 @@ export const OAuthConnect: FC<
tooltipSide={tooltipSide}
tooltipOffset={10}
className={cn("", !isDisabled && "cursor-pointer", className)}
- onClick={() => connect()}>
+ onClick={() => {
+ connect();
+ onSuccess?.();
+ }}>
{displayedLabel}
diff --git a/packages/platform/atoms/connect/apple/AppleConnect.tsx b/packages/platform/atoms/connect/apple/AppleConnect.tsx
index 78771c5f72..2d1d25bd4d 100644
--- a/packages/platform/atoms/connect/apple/AppleConnect.tsx
+++ b/packages/platform/atoms/connect/apple/AppleConnect.tsx
@@ -34,6 +34,7 @@ export const AppleConnect: FC>> = ({
tooltip,
tooltipSide = "bottom",
isClickable,
+ onSuccess,
}) => {
const { t } = useLocale();
const form = useForm({
@@ -60,6 +61,7 @@ export const AppleConnect: FC>> = ({
toast({
description: "Calendar credentials added successfully",
});
+ onSuccess?.();
}
},
onError: (err) => {
diff --git a/packages/platform/atoms/selected-calendars/wrappers/SelectedCalendarsSettingsPlatformWrapper.tsx b/packages/platform/atoms/selected-calendars/wrappers/SelectedCalendarsSettingsPlatformWrapper.tsx
index 61764b26f6..43fb746e6c 100644
--- a/packages/platform/atoms/selected-calendars/wrappers/SelectedCalendarsSettingsPlatformWrapper.tsx
+++ b/packages/platform/atoms/selected-calendars/wrappers/SelectedCalendarsSettingsPlatformWrapper.tsx
@@ -11,22 +11,37 @@ import {
List,
DisconnectIntegrationComponent,
Alert,
+ Button,
+ Dropdown,
+ DropdownMenuContent,
+ DropdownMenuTrigger,
} from "@calcom/ui";
+import { AppleConnect } from "../../connect/apple/AppleConnect";
import { useAddSelectedCalendar } from "../../hooks/calendars/useAddSelectedCalendar";
import { useDeleteCalendarCredentials } from "../../hooks/calendars/useDeleteCalendarCredentials";
import { useRemoveSelectedCalendar } from "../../hooks/calendars/useRemoveSelectedCalendar";
import { useConnectedCalendars } from "../../hooks/useConnectedCalendars";
+import { Connect } from "../../index";
import { AtomsWrapper } from "../../src/components/atoms-wrapper";
import { Switch } from "../../src/components/ui/switch";
import { useToast } from "../../src/components/ui/use-toast";
import { SelectedCalendarsSettings } from "../SelectedCalendarsSettings";
+export type CalendarRedirectUrls = {
+ google?: string;
+ outlook?: string;
+};
+
+type SelectedCalendarsSettingsPlatformWrapperProps = {
+ classNames?: string;
+ calendarRedirectUrls?: CalendarRedirectUrls;
+};
+
export const SelectedCalendarsSettingsPlatformWrapper = ({
classNames = "mx-5 mb-6",
-}: {
- classNames?: string;
-}) => {
+ calendarRedirectUrls,
+}: SelectedCalendarsSettingsPlatformWrapperProps) => {
const { t } = useLocale();
const query = useConnectedCalendars({});
@@ -44,7 +59,7 @@ export const SelectedCalendarsSettingsPlatformWrapper = ({
return (
-
+
{data.connectedCalendars.map((connectedCalendar) => {
if (!!connectedCalendar.calendars && connectedCalendar.calendars.length > 0) {
@@ -121,7 +136,11 @@ export const SelectedCalendarsSettingsPlatformWrapper = ({
);
};
-const SelectedCalendarsSettingsHeading = () => {
+const SelectedCalendarsSettingsHeading = ({
+ calendarRedirectUrls,
+}: {
+ calendarRedirectUrls?: CalendarRedirectUrls;
+}) => {
const { t } = useLocale();
return (
@@ -131,6 +150,11 @@ const SelectedCalendarsSettingsHeading = () => {
{t("check_for_conflicts")}
{t("select_calendars")}
+
);
@@ -244,3 +268,62 @@ const PlatformCalendarSwitch = (props: ICalendarSwitchProps) => {
);
};
+
+const PlatformAdditionalCalendarSelector = ({
+ calendarRedirectUrls,
+}: {
+ calendarRedirectUrls?: CalendarRedirectUrls;
+}) => {
+ const { t } = useLocale();
+ const { refetch } = useConnectedCalendars({});
+
+ return (
+
+
+
+
+
+
+
+ >}
+ redir={calendarRedirectUrls?.google ?? window.location.href}
+ label={t("add_calendar_label", { calendar: "Google" })}
+ loadingLabel={t("add_calendar_label", { calendar: "Google" })}
+ alreadyConnectedLabel={t("add_calendar_label", { calendar: "Google" })}
+ className="hover:bg-subtle hover:text-default cursor-pointer border-none bg-inherit text-inherit"
+ />
+
+
+ >}
+ redir={calendarRedirectUrls?.outlook ?? window.location.href}
+ label={t("add_calendar_label", { calendar: "Outlook" })}
+ loadingLabel={t("add_calendar_label", { calendar: "Outlook" })}
+ alreadyConnectedLabel={t("add_calendar_label", { calendar: "Outlook" })}
+ className="hover:bg-subtle hover:text-default cursor-pointer border-none bg-inherit text-inherit"
+ />
+
+
+
>}
+ label={t("add_calendar_label", { calendar: "Apple" })}
+ loadingLabel={t("add_calendar_label", { calendar: "Apple" })}
+ alreadyConnectedLabel={t("add_calendar_label", { calendar: "Apple" })}
+ className="hover:bg-subtle hover:text-default cursor-pointer border-none bg-inherit text-inherit"
+ />
+
+
+
+
+ );
+};