From 1d203dc5665844713a8f6c85525dc9003ed73375 Mon Sep 17 00:00:00 2001 From: Rajiv Sahal Date: Mon, 30 Sep 2024 17:03:18 +0530 Subject: [PATCH] feat: frontend to handle multiple calendars for connect atoms (#16527) * handle multiple calendars in connect atoms * resolve merge conflicts * fixup * frontend for multiple calendars * fixup * remove comment * add missing props * add prop for multi calendar view * add multi calendar support * fixup --- .../platform/atoms/connect/OAuthConnect.tsx | 57 ++++++++++++++++++- .../atoms/connect/apple/AppleConnect.tsx | 43 +++++++++++--- .../atoms/connect/google/GcalConnect.tsx | 8 +++ .../atoms/connect/outlook/OutlookConnect.tsx | 8 +++ .../examples/base/src/pages/index.tsx | 8 ++- packages/ui/components/tooltip/Tooltip.tsx | 3 +- 6 files changed, 113 insertions(+), 14 deletions(-) diff --git a/packages/platform/atoms/connect/OAuthConnect.tsx b/packages/platform/atoms/connect/OAuthConnect.tsx index 22b3eae8cf..37fe19f0b6 100644 --- a/packages/platform/atoms/connect/OAuthConnect.tsx +++ b/packages/platform/atoms/connect/OAuthConnect.tsx @@ -1,5 +1,6 @@ "use client"; +import type { ReactNode } from "react"; import type { FC } from "react"; import type { CALENDARS } from "@calcom/platform-constants"; @@ -8,6 +9,7 @@ import { Button } from "@calcom/ui"; import type { OnCheckErrorType, UseCheckProps } from "../hooks/connect/useCheck"; import { useCheck } from "../hooks/connect/useCheck"; import { useConnect } from "../hooks/connect/useConnect"; +import { useConnectedCalendars } from "../hooks/useConnectedCalendars"; import { AtomsWrapper } from "../src/components/atoms-wrapper"; import { cn } from "../src/lib/utils"; @@ -19,6 +21,10 @@ export type OAuthConnectProps = { onCheckError?: OnCheckErrorType; redir?: string; initialData: UseCheckProps["initialData"]; + isMultiCalendar?: boolean; + tooltip?: ReactNode; + tooltipSide?: "top" | "bottom" | "left" | "right"; + isClickable?: boolean; }; export const OAuthConnect: FC< @@ -34,9 +40,12 @@ export const OAuthConnect: FC< calendar, redir, initialData, + isMultiCalendar = false, + tooltip, + tooltipSide = "bottom", + isClickable, }) => { const { connect } = useConnect(calendar, redir); - const { allowConnect, checked } = useCheck({ onCheckError, calendar: calendar, @@ -54,6 +63,24 @@ export const OAuthConnect: FC< displayedLabel = alreadyConnectedLabel; } + if (isMultiCalendar) { + return ( + + + + ); + } + return ( + <> + {isMultiCalendar && ( + + )} + {!isMultiCalendar && ( + + )} + diff --git a/packages/platform/atoms/connect/google/GcalConnect.tsx b/packages/platform/atoms/connect/google/GcalConnect.tsx index 16afa5706a..91ccf49463 100644 --- a/packages/platform/atoms/connect/google/GcalConnect.tsx +++ b/packages/platform/atoms/connect/google/GcalConnect.tsx @@ -16,6 +16,10 @@ export const GcalConnect: FC> = ({ onCheckError, redir, initialData, + isMultiCalendar = false, + tooltipSide, + tooltip, + isClickable, }) => { const { t } = useLocale(); return ( @@ -28,6 +32,10 @@ export const GcalConnect: FC> = ({ onCheckError={onCheckError} redir={redir} initialData={initialData} + isMultiCalendar={isMultiCalendar} + tooltipSide={tooltipSide} + tooltip={tooltip} + isClickable={isClickable} /> ); }; diff --git a/packages/platform/atoms/connect/outlook/OutlookConnect.tsx b/packages/platform/atoms/connect/outlook/OutlookConnect.tsx index 85d18342dd..adeee47516 100644 --- a/packages/platform/atoms/connect/outlook/OutlookConnect.tsx +++ b/packages/platform/atoms/connect/outlook/OutlookConnect.tsx @@ -16,6 +16,10 @@ export const OutlookConnect: FC> = ({ onCheckError, redir, initialData, + isMultiCalendar = false, + tooltipSide, + tooltip, + isClickable, }) => { const { t } = useLocale(); return ( @@ -28,6 +32,10 @@ export const OutlookConnect: FC> = ({ onCheckError={onCheckError} redir={redir} initialData={initialData} + isMultiCalendar={isMultiCalendar} + tooltipSide={tooltipSide} + tooltip={tooltip} + isClickable={isClickable} /> ); }; diff --git a/packages/platform/examples/base/src/pages/index.tsx b/packages/platform/examples/base/src/pages/index.tsx index 1fc93a34c0..a754a5fff4 100644 --- a/packages/platform/examples/base/src/pages/index.tsx +++ b/packages/platform/examples/base/src/pages/index.tsx @@ -25,17 +25,21 @@ export default function Home(props: { calUsername: string; calEmail: string }) { className="h-[40px] bg-gradient-to-r from-[#8A2387] via-[#E94057] to-[#F27121] text-center text-base font-semibold text-transparent text-white hover:bg-orange-700" /> - +
cover image diff --git a/packages/ui/components/tooltip/Tooltip.tsx b/packages/ui/components/tooltip/Tooltip.tsx index edb222b012..0ea983c1d3 100644 --- a/packages/ui/components/tooltip/Tooltip.tsx +++ b/packages/ui/components/tooltip/Tooltip.tsx @@ -32,7 +32,8 @@ export function Tooltip({ "calcom-tooltip", side === "top" && "-mt-7", side === "right" && "ml-2", - "bg-inverted text-inverted relative z-50 rounded-md px-2 py-1 text-xs font-semibold shadow-lg", + "relative z-50 rounded-md text-xs font-semibold shadow-lg", + !isPlatform && "bg-inverted text-inverted px-2 py-1", props.className && `${props.className}` )} side={side}