From c6246c9408619ccd17900afb0d490113fbf114a4 Mon Sep 17 00:00:00 2001 From: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com> Date: Tue, 29 Aug 2023 02:02:20 -0400 Subject: [PATCH] refactor: Eventtype app context after orgs (#10781) Co-authored-by: Hariom Balhara --- packages/app-store/EventTypeAppContext.tsx | 31 +++++++++++++------ packages/app-store/_components/AppCard.tsx | 11 ++----- .../_components/EventTypeAppCardInterface.tsx | 2 +- packages/app-store/_utils/useIsAppEnabled.ts | 2 +- .../components/EventTypeAppCardInterface.tsx | 3 +- .../components/EventTypeAppCardInterface.tsx | 5 +-- .../components/EventTypeAppCardInterface.tsx | 5 +-- .../components/EventTypeAppCardInterface.tsx | 5 +-- .../components/EventTypeAppCardInterface.tsx | 5 +-- .../components/EventTypeAppCardInterface.tsx | 5 +-- .../components/EventTypeAppCardInterface.tsx | 3 +- .../components/EventTypeAppCardInterface.tsx | 5 +-- .../components/EventTypeAppCardInterface.tsx | 5 +-- .../components/EventTypeAppCardInterface.tsx | 5 +-- .../components/EventTypeAppCardInterface.tsx | 3 +- .../components/EventTypeAppCardInterface.tsx | 5 +-- 16 files changed, 38 insertions(+), 62 deletions(-) diff --git a/packages/app-store/EventTypeAppContext.tsx b/packages/app-store/EventTypeAppContext.tsx index 0ddaf7a821..584d6a2fa0 100644 --- a/packages/app-store/EventTypeAppContext.tsx +++ b/packages/app-store/EventTypeAppContext.tsx @@ -5,15 +5,21 @@ export type GetAppData = (key: string) => unknown; export type SetAppData = (key: string, value: unknown) => void; type LockedIcon = JSX.Element | false | undefined; type Disabled = boolean | undefined; -// eslint-disable-next-line @typescript-eslint/no-empty-function -const EventTypeAppContext = React.createContext<[GetAppData, SetAppData, LockedIcon, Disabled]>([ - () => ({}), - () => ({}), - undefined, - undefined, -]); -export type SetAppDataGeneric = < +type AppContext = { + getAppData: GetAppData; + setAppData: SetAppData; + LockedIcon?: LockedIcon; + disabled?: Disabled; +}; + +// eslint-disable-next-line @typescript-eslint/no-empty-function +const EventTypeAppContext = React.createContext({ + getAppData: () => ({}), + setAppData: () => ({}), +}); + +type SetAppDataGeneric = < TKey extends keyof z.infer, TValue extends z.infer[TKey] >( @@ -21,7 +27,7 @@ export type SetAppDataGeneric = < value: TValue ) => void; -export type GetAppDataGeneric = >( +type GetAppDataGeneric = >( key: TKey ) => z.infer[TKey]; @@ -29,7 +35,12 @@ export const useAppContextWithSchema = () => { type GetAppData = GetAppDataGeneric; type SetAppData = SetAppDataGeneric; // TODO: Not able to do it without type assertion here - const context = React.useContext(EventTypeAppContext) as [GetAppData, SetAppData, LockedIcon, Disabled]; + const context = React.useContext(EventTypeAppContext) as { + getAppData: GetAppData; + setAppData: SetAppData; + LockedIcon: LockedIcon; + disabled: Disabled; + }; return context; }; export default EventTypeAppContext; diff --git a/packages/app-store/_components/AppCard.tsx b/packages/app-store/_components/AppCard.tsx index d73ba73c37..5489c1ea95 100644 --- a/packages/app-store/_components/AppCard.tsx +++ b/packages/app-store/_components/AppCard.tsx @@ -1,12 +1,11 @@ import { useAutoAnimate } from "@formkit/auto-animate/react"; import Link from "next/link"; +import { useAppContextWithSchema } from "@calcom/app-store/EventTypeAppContext"; import { classNames } from "@calcom/lib"; import type { RouterOutputs } from "@calcom/trpc/react"; import { Switch, Badge, Avatar } from "@calcom/ui"; -import type { SetAppDataGeneric } from "../EventTypeAppContext"; -import type { eventTypeAppCardZod } from "../eventTypeAppCardZod"; import type { CredentialOwner } from "../types"; import OmniInstallAppButton from "./OmniInstallAppButton"; @@ -16,24 +15,20 @@ export default function AppCard({ switchOnClick, switchChecked, children, - setAppData, returnTo, teamId, - disableSwitch, - LockedIcon, }: { app: RouterOutputs["viewer"]["integrations"]["items"][number] & { credentialOwner?: CredentialOwner }; description?: React.ReactNode; switchChecked?: boolean; switchOnClick?: (e: boolean) => void; children?: React.ReactNode; - setAppData: SetAppDataGeneric; returnTo?: string; teamId?: number; - disableSwitch?: boolean; LockedIcon?: React.ReactNode; }) { const [animationRef] = useAutoAnimate(); + const { setAppData, LockedIcon, disabled } = useAppContextWithSchema(); return (
{ if (switchOnClick) { switchOnClick(enabled); diff --git a/packages/app-store/_components/EventTypeAppCardInterface.tsx b/packages/app-store/_components/EventTypeAppCardInterface.tsx index e312297007..8f34ce9e11 100644 --- a/packages/app-store/_components/EventTypeAppCardInterface.tsx +++ b/packages/app-store/_components/EventTypeAppCardInterface.tsx @@ -19,7 +19,7 @@ export const EventTypeAppCard = (props: { const { app, getAppData, setAppData, LockedIcon, disabled } = props; return ( - + { if (!app.credentialOwner) { return getAppData("enabled"); diff --git a/packages/app-store/basecamp3/components/EventTypeAppCardInterface.tsx b/packages/app-store/basecamp3/components/EventTypeAppCardInterface.tsx index d742941000..cc81f0237e 100644 --- a/packages/app-store/basecamp3/components/EventTypeAppCardInterface.tsx +++ b/packages/app-store/basecamp3/components/EventTypeAppCardInterface.tsx @@ -9,7 +9,7 @@ import { Select } from "@calcom/ui"; import type { appDataSchema } from "../zod"; const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ app }) { - const [getAppData, setAppData] = useAppContextWithSchema(); + const { getAppData } = useAppContextWithSchema(); const [enabled, setEnabled] = useState(getAppData("enabled")); const [projects, setProjects] = useState(); const [selectedProject, setSelectedProject] = useState(); @@ -32,7 +32,6 @@ const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ return ( { if (!e) { diff --git a/packages/app-store/fathom/components/EventTypeAppCardInterface.tsx b/packages/app-store/fathom/components/EventTypeAppCardInterface.tsx index 44e3ea5c72..5320587871 100644 --- a/packages/app-store/fathom/components/EventTypeAppCardInterface.tsx +++ b/packages/app-store/fathom/components/EventTypeAppCardInterface.tsx @@ -7,16 +7,13 @@ import { TextField } from "@calcom/ui"; import type { appDataSchema } from "../zod"; const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ app, eventType }) { - const [getAppData, setAppData, LockedIcon, disabled] = useAppContextWithSchema(); + const { getAppData, setAppData, disabled } = useAppContextWithSchema(); const trackingId = getAppData("trackingId"); const { enabled, updateEnabled } = useIsAppEnabled(app); return ( { updateEnabled(e); }} diff --git a/packages/app-store/ga4/components/EventTypeAppCardInterface.tsx b/packages/app-store/ga4/components/EventTypeAppCardInterface.tsx index 44e3ea5c72..5320587871 100644 --- a/packages/app-store/ga4/components/EventTypeAppCardInterface.tsx +++ b/packages/app-store/ga4/components/EventTypeAppCardInterface.tsx @@ -7,16 +7,13 @@ import { TextField } from "@calcom/ui"; import type { appDataSchema } from "../zod"; const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ app, eventType }) { - const [getAppData, setAppData, LockedIcon, disabled] = useAppContextWithSchema(); + const { getAppData, setAppData, disabled } = useAppContextWithSchema(); const trackingId = getAppData("trackingId"); const { enabled, updateEnabled } = useIsAppEnabled(app); return ( { updateEnabled(e); }} diff --git a/packages/app-store/giphy/components/EventTypeAppCardInterface.tsx b/packages/app-store/giphy/components/EventTypeAppCardInterface.tsx index 970b7bc099..b285eeedef 100644 --- a/packages/app-store/giphy/components/EventTypeAppCardInterface.tsx +++ b/packages/app-store/giphy/components/EventTypeAppCardInterface.tsx @@ -8,7 +8,7 @@ import { useLocale } from "@calcom/lib/hooks/useLocale"; import type { appDataSchema } from "../zod"; const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ app, eventType }) { - const [getAppData, setAppData, LockedIcon, disabled] = useAppContextWithSchema(); + const { getAppData, setAppData, disabled } = useAppContextWithSchema(); const thankYouPage = getAppData("thankYouPage"); const { enabled: showGifSelection, updateEnabled: setShowGifSelection } = useIsAppEnabled(app); @@ -16,11 +16,8 @@ const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ return ( { setShowGifSelection(e); }} diff --git a/packages/app-store/gtm/components/EventTypeAppCardInterface.tsx b/packages/app-store/gtm/components/EventTypeAppCardInterface.tsx index 44e3ea5c72..5320587871 100644 --- a/packages/app-store/gtm/components/EventTypeAppCardInterface.tsx +++ b/packages/app-store/gtm/components/EventTypeAppCardInterface.tsx @@ -7,16 +7,13 @@ import { TextField } from "@calcom/ui"; import type { appDataSchema } from "../zod"; const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ app, eventType }) { - const [getAppData, setAppData, LockedIcon, disabled] = useAppContextWithSchema(); + const { getAppData, setAppData, disabled } = useAppContextWithSchema(); const trackingId = getAppData("trackingId"); const { enabled, updateEnabled } = useIsAppEnabled(app); return ( { updateEnabled(e); }} diff --git a/packages/app-store/metapixel/components/EventTypeAppCardInterface.tsx b/packages/app-store/metapixel/components/EventTypeAppCardInterface.tsx index d8d3940c84..668523d3ad 100644 --- a/packages/app-store/metapixel/components/EventTypeAppCardInterface.tsx +++ b/packages/app-store/metapixel/components/EventTypeAppCardInterface.tsx @@ -7,16 +7,13 @@ import { TextField } from "@calcom/ui"; import type { appDataSchema } from "../zod"; const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ app, eventType }) { - const [getAppData, setAppData, LockedIcon, disabled] = useAppContextWithSchema(); + const { getAppData, setAppData, disabled } = useAppContextWithSchema(); const trackingId = getAppData("trackingId"); const { enabled, updateEnabled } = useIsAppEnabled(app); return ( diff --git a/packages/app-store/paypal/components/EventTypeAppCardInterface.tsx b/packages/app-store/paypal/components/EventTypeAppCardInterface.tsx index 08a6eff4ce..c9b92f441b 100644 --- a/packages/app-store/paypal/components/EventTypeAppCardInterface.tsx +++ b/packages/app-store/paypal/components/EventTypeAppCardInterface.tsx @@ -16,7 +16,7 @@ type Option = { value: string; label: string }; const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ app, eventType }) { const { asPath } = useRouter(); - const [getAppData, setAppData] = useAppContextWithSchema(); + const { getAppData, setAppData } = useAppContextWithSchema(); const price = getAppData("price"); const currency = getAppData("currency"); const [selectedCurrency, setSelectedCurrency] = useState( @@ -38,7 +38,6 @@ const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ return ( { diff --git a/packages/app-store/plausible/components/EventTypeAppCardInterface.tsx b/packages/app-store/plausible/components/EventTypeAppCardInterface.tsx index 63abae7450..2b24f7c4fb 100644 --- a/packages/app-store/plausible/components/EventTypeAppCardInterface.tsx +++ b/packages/app-store/plausible/components/EventTypeAppCardInterface.tsx @@ -7,17 +7,14 @@ import { TextField } from "@calcom/ui"; import type { appDataSchema } from "../zod"; const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ app, eventType }) { - const [getAppData, setAppData, LockedIcon, disabled] = useAppContextWithSchema(); + const { getAppData, setAppData, disabled } = useAppContextWithSchema(); const plausibleUrl = getAppData("PLAUSIBLE_URL"); const trackingId = getAppData("trackingId"); const { enabled, updateEnabled } = useIsAppEnabled(app); return ( { updateEnabled(e); }} diff --git a/packages/app-store/qr_code/components/EventTypeAppCardInterface.tsx b/packages/app-store/qr_code/components/EventTypeAppCardInterface.tsx index fc492f20c1..ceb1d451fc 100644 --- a/packages/app-store/qr_code/components/EventTypeAppCardInterface.tsx +++ b/packages/app-store/qr_code/components/EventTypeAppCardInterface.tsx @@ -11,7 +11,7 @@ import type { appDataSchema } from "../zod"; const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ eventType, app }) { const { t } = useLocale(); - const [_getAppData, setAppData, LockedIcon, disabled] = useAppContextWithSchema(); + const { disabled } = useAppContextWithSchema(); const [additionalParameters, setAdditionalParameters] = useState(""); const { enabled, updateEnabled } = useIsAppEnabled(app); @@ -37,10 +37,7 @@ const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ return ( { updateEnabled(e); }} diff --git a/packages/app-store/stripepayment/components/EventTypeAppCardInterface.tsx b/packages/app-store/stripepayment/components/EventTypeAppCardInterface.tsx index b499a2749a..e49c827a81 100644 --- a/packages/app-store/stripepayment/components/EventTypeAppCardInterface.tsx +++ b/packages/app-store/stripepayment/components/EventTypeAppCardInterface.tsx @@ -15,7 +15,7 @@ type Option = { value: string; label: string }; const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ app, eventType }) { const pathname = usePathname(); - const [getAppData, setAppData, LockedIcon, disabled] = useAppContextWithSchema(); + const { getAppData, setAppData, disabled } = useAppContextWithSchema(); const price = getAppData("price"); const currency = getAppData("currency"); const paymentOption = getAppData("paymentOption"); @@ -38,10 +38,7 @@ const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ return ( { setRequirePayment(enabled); diff --git a/packages/app-store/templates/booking-pages-tag/components/EventTypeAppCardInterface.tsx b/packages/app-store/templates/booking-pages-tag/components/EventTypeAppCardInterface.tsx index ae14000501..d8e07f9407 100644 --- a/packages/app-store/templates/booking-pages-tag/components/EventTypeAppCardInterface.tsx +++ b/packages/app-store/templates/booking-pages-tag/components/EventTypeAppCardInterface.tsx @@ -8,13 +8,12 @@ import { TextField } from "@calcom/ui"; import type { appDataSchema } from "../zod"; const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ app, eventType }) { - const [getAppData, setAppData] = useAppContextWithSchema(); + const { getAppData, setAppData } = useAppContextWithSchema(); const trackingId = getAppData("trackingId"); const [enabled, setEnabled] = useState(getAppData("enabled")); return ( { if (!e) { diff --git a/packages/app-store/templates/event-type-app-card/components/EventTypeAppCardInterface.tsx b/packages/app-store/templates/event-type-app-card/components/EventTypeAppCardInterface.tsx index 85f4a6a504..c79e7ecff2 100644 --- a/packages/app-store/templates/event-type-app-card/components/EventTypeAppCardInterface.tsx +++ b/packages/app-store/templates/event-type-app-card/components/EventTypeAppCardInterface.tsx @@ -7,16 +7,13 @@ import { Sunrise, Sunset } from "@calcom/ui/components/icon"; import type { appDataSchema } from "../zod"; const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ eventType, app }) { - const [getAppData, setAppData, LockedIcon, disabled] = useAppContextWithSchema(); + const { getAppData, setAppData } = useAppContextWithSchema(); const isSunrise = getAppData("isSunrise"); const { enabled, updateEnabled } = useIsAppEnabled(app); return ( { if (!e) { updateEnabled(false);