From b99ea16b31fe5ad06ee7089d514ecf264a7ba7ac Mon Sep 17 00:00:00 2001 From: Rajiv Sahal Date: Tue, 15 Apr 2025 22:23:05 +0530 Subject: [PATCH] feat: dry run behaviour for CalendarSettings atom (#20690) --- .../CalendarSettingsPlatformWrapper.tsx | 4 ++ ...inationCalendarSettingsPlatformWrapper.tsx | 14 +++-- ...lectedCalendarsSettingsPlatformWrapper.tsx | 60 +++++++++++++++---- 3 files changed, 60 insertions(+), 18 deletions(-) diff --git a/packages/platform/atoms/calendar-settings/wrappers/CalendarSettingsPlatformWrapper.tsx b/packages/platform/atoms/calendar-settings/wrappers/CalendarSettingsPlatformWrapper.tsx index f09343fba4..917c25bdea 100644 --- a/packages/platform/atoms/calendar-settings/wrappers/CalendarSettingsPlatformWrapper.tsx +++ b/packages/platform/atoms/calendar-settings/wrappers/CalendarSettingsPlatformWrapper.tsx @@ -10,23 +10,27 @@ type CalendarSettingsPlatformWrapperProps = { }; calendarRedirectUrls?: CalendarRedirectUrls; allowDelete?: boolean; + isDryRun?: boolean; }; export const CalendarSettingsPlatformWrapper = ({ classNames, calendarRedirectUrls, allowDelete = true, + isDryRun, }: CalendarSettingsPlatformWrapperProps) => { return (
} classNames={classNames?.destinationCalendarSettingsCustomClassnames} + isDryRun={isDryRun} />
); diff --git a/packages/platform/atoms/destination-calendar/wrappers/DestinationCalendarSettingsPlatformWrapper.tsx b/packages/platform/atoms/destination-calendar/wrappers/DestinationCalendarSettingsPlatformWrapper.tsx index ae42a80e1c..cc1db9571b 100644 --- a/packages/platform/atoms/destination-calendar/wrappers/DestinationCalendarSettingsPlatformWrapper.tsx +++ b/packages/platform/atoms/destination-calendar/wrappers/DestinationCalendarSettingsPlatformWrapper.tsx @@ -6,9 +6,11 @@ import { DestinationCalendarSettings } from "../DestinationCalendar"; export const DestinationCalendarSettingsPlatformWrapper = ({ statusLoader, classNames = "mx-5", + isDryRun = false, }: { statusLoader?: JSX.Element; classNames?: string; + isDryRun?: boolean; }) => { const calendars = useConnectedCalendars({}); const { mutate: updateDestinationCalendars, isPending: isUpdatingCalendar } = @@ -39,11 +41,13 @@ export const DestinationCalendarSettingsPlatformWrapper = ({ hidePlaceholder hideAdvancedText onChange={async ({ externalId, integration, delegationCredentialId }) => { - await updateDestinationCalendars({ - integration, - externalId, - delegationCredentialId, - }); + if (!isDryRun) { + await updateDestinationCalendars({ + integration, + externalId, + delegationCredentialId, + }); + } }} isPending={isUpdatingCalendar} /> diff --git a/packages/platform/atoms/selected-calendars/wrappers/SelectedCalendarsSettingsPlatformWrapper.tsx b/packages/platform/atoms/selected-calendars/wrappers/SelectedCalendarsSettingsPlatformWrapper.tsx index 1dfefd0e78..334290d344 100644 --- a/packages/platform/atoms/selected-calendars/wrappers/SelectedCalendarsSettingsPlatformWrapper.tsx +++ b/packages/platform/atoms/selected-calendars/wrappers/SelectedCalendarsSettingsPlatformWrapper.tsx @@ -33,12 +33,14 @@ type SelectedCalendarsSettingsPlatformWrapperProps = { classNames?: string; calendarRedirectUrls?: CalendarRedirectUrls; allowDelete?: boolean; + isDryRun?: boolean; }; export const SelectedCalendarsSettingsPlatformWrapper = ({ classNames = "mx-5 mb-6", calendarRedirectUrls, allowDelete, + isDryRun, }: SelectedCalendarsSettingsPlatformWrapperProps) => { const { t } = useLocale(); const query = useConnectedCalendars({}); @@ -54,7 +56,10 @@ export const SelectedCalendarsSettingsPlatformWrapper = ({ if (!data.connectedCalendars.length) { return ( - +

No connected calendars found.

); @@ -62,7 +67,10 @@ export const SelectedCalendarsSettingsPlatformWrapper = ({ return ( - + {data.connectedCalendars.map((connectedCalendar) => { if (!!connectedCalendar.calendars && connectedCalendar.calendars.length > 0) { @@ -85,6 +93,7 @@ export const SelectedCalendarsSettingsPlatformWrapper = ({ trashIcon buttonProps={{ className: "border border-default" }} slug={connectedCalendar.integration.slug} + isDryRun={isDryRun} /> )} @@ -105,6 +114,7 @@ export const SelectedCalendarsSettingsPlatformWrapper = ({ credentialId={cal.credentialId} delegationCredentialId={connectedCalendar.delegationCredentialId} eventTypeId={null} + isDryRun={isDryRun} /> ); })} @@ -128,6 +138,7 @@ export const SelectedCalendarsSettingsPlatformWrapper = ({ trashIcon buttonProps={{ className: "border border-default" }} slug={connectedCalendar.integration.slug} + isDryRun={isDryRun} /> ) @@ -147,8 +158,10 @@ export const SelectedCalendarsSettingsPlatformWrapper = ({ const SelectedCalendarsSettingsHeading = ({ calendarRedirectUrls, + isDryRun, }: { calendarRedirectUrls?: CalendarRedirectUrls; + isDryRun?: boolean; }) => { const { t } = useLocale(); @@ -161,7 +174,10 @@ const SelectedCalendarsSettingsHeading = ({
- +
@@ -177,6 +193,7 @@ const PlatformDisconnectIntegration = (props: { isGlobal?: boolean; onSuccess?: () => void; buttonProps?: ButtonProps; + isDryRun?: boolean; }) => { const { t } = useLocale(); const { onSuccess, credentialId, slug } = props; @@ -202,11 +219,20 @@ const PlatformDisconnectIntegration = (props: { return ( { - slug && - (await deleteCalendarCredentials({ + !props.isDryRun && setModalOpen(false); + + if (props.isDryRun) { + toast({ + description: t("app_removed_successfully"), + }); + } + + if (!props.isDryRun && slug) { + await deleteCalendarCredentials({ calendar: slug.split("-")[0] as unknown as (typeof CALENDARS)[number], id: credentialId, - })); + }); + } }} {...props} isModalOpen={modalOpen} @@ -215,7 +241,7 @@ const PlatformDisconnectIntegration = (props: { ); }; -const PlatformCalendarSwitch = (props: ICalendarSwitchProps) => { +const PlatformCalendarSwitch = (props: ICalendarSwitchProps & { isDryRun?: boolean }) => { const { isChecked, title, credentialId, type, externalId, delegationCredentialId } = props; const [checkedInternal, setCheckedInternal] = useState(isChecked); const { toast } = useToast(); @@ -271,12 +297,15 @@ const PlatformCalendarSwitch = (props: ICalendarSwitchProps) => { id={externalId} onCheckedChange={async () => { setCheckedInternal((prevValue) => !prevValue); - await toggleSelectedCalendars({ - isOn: !checkedInternal, - credentialId, - externalId, - integration: type, - }); + + if (!props.isDryRun) { + await toggleSelectedCalendars({ + isOn: !checkedInternal, + credentialId, + externalId, + integration: type, + }); + } }} /> @@ -285,8 +314,10 @@ const PlatformCalendarSwitch = (props: ICalendarSwitchProps) => { const PlatformAdditionalCalendarSelector = ({ calendarRedirectUrls, + isDryRun, }: { calendarRedirectUrls?: CalendarRedirectUrls; + isDryRun?: boolean; }) => { const { t } = useLocale(); const { refetch } = useConnectedCalendars({}); @@ -302,6 +333,7 @@ const PlatformAdditionalCalendarSelector = ({
} @@ -314,6 +346,7 @@ const PlatformAdditionalCalendarSelector = ({
} @@ -326,6 +359,7 @@ const PlatformAdditionalCalendarSelector = ({