refactor: Eventtype app context after orgs (#10781)
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
This commit is contained in:
parent
ccc814eb54
commit
c6246c9408
|
@ -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<TAppData extends ZodType> = <
|
||||
type AppContext = {
|
||||
getAppData: GetAppData;
|
||||
setAppData: SetAppData;
|
||||
LockedIcon?: LockedIcon;
|
||||
disabled?: Disabled;
|
||||
};
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
||||
const EventTypeAppContext = React.createContext<AppContext>({
|
||||
getAppData: () => ({}),
|
||||
setAppData: () => ({}),
|
||||
});
|
||||
|
||||
type SetAppDataGeneric<TAppData extends ZodType> = <
|
||||
TKey extends keyof z.infer<TAppData>,
|
||||
TValue extends z.infer<TAppData>[TKey]
|
||||
>(
|
||||
|
@ -21,7 +27,7 @@ export type SetAppDataGeneric<TAppData extends ZodType> = <
|
|||
value: TValue
|
||||
) => void;
|
||||
|
||||
export type GetAppDataGeneric<TAppData extends ZodType> = <TKey extends keyof z.infer<TAppData>>(
|
||||
type GetAppDataGeneric<TAppData extends ZodType> = <TKey extends keyof z.infer<TAppData>>(
|
||||
key: TKey
|
||||
) => z.infer<TAppData>[TKey];
|
||||
|
||||
|
@ -29,7 +35,12 @@ export const useAppContextWithSchema = <TAppData extends ZodType>() => {
|
|||
type GetAppData = GetAppDataGeneric<TAppData>;
|
||||
type SetAppData = SetAppDataGeneric<TAppData>;
|
||||
// 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;
|
||||
|
|
|
@ -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<typeof eventTypeAppCardZod>;
|
||||
returnTo?: string;
|
||||
teamId?: number;
|
||||
disableSwitch?: boolean;
|
||||
LockedIcon?: React.ReactNode;
|
||||
}) {
|
||||
const [animationRef] = useAutoAnimate<HTMLDivElement>();
|
||||
const { setAppData, LockedIcon, disabled } = useAppContextWithSchema();
|
||||
|
||||
return (
|
||||
<div
|
||||
|
@ -92,7 +87,7 @@ export default function AppCard({
|
|||
{app?.isInstalled || app.credentialOwner ? (
|
||||
<div className="ml-auto flex items-center">
|
||||
<Switch
|
||||
disabled={!app.enabled || disableSwitch}
|
||||
disabled={!app.enabled || disabled}
|
||||
onCheckedChange={(enabled) => {
|
||||
if (switchOnClick) {
|
||||
switchOnClick(enabled);
|
||||
|
|
|
@ -19,7 +19,7 @@ export const EventTypeAppCard = (props: {
|
|||
const { app, getAppData, setAppData, LockedIcon, disabled } = props;
|
||||
return (
|
||||
<ErrorBoundary message={`There is some problem with ${app.name} App`}>
|
||||
<EventTypeAppContext.Provider value={[getAppData, setAppData, LockedIcon, disabled]}>
|
||||
<EventTypeAppContext.Provider value={{ getAppData, setAppData, LockedIcon, disabled }}>
|
||||
<DynamicComponent
|
||||
slug={app.slug === "stripe" ? "stripepayment" : app.slug}
|
||||
componentMap={EventTypeAddonMap}
|
||||
|
|
|
@ -5,7 +5,7 @@ import { useAppContextWithSchema } from "@calcom/app-store/EventTypeAppContext";
|
|||
import type { EventTypeAppCardApp } from "../types";
|
||||
|
||||
function useIsAppEnabled(app: EventTypeAppCardApp) {
|
||||
const [getAppData, setAppData] = useAppContextWithSchema();
|
||||
const { getAppData, setAppData } = useAppContextWithSchema();
|
||||
const [enabled, setEnabled] = useState(() => {
|
||||
if (!app.credentialOwner) {
|
||||
return getAppData("enabled");
|
||||
|
|
|
@ -9,7 +9,7 @@ import { Select } from "@calcom/ui";
|
|||
import type { appDataSchema } from "../zod";
|
||||
|
||||
const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ app }) {
|
||||
const [getAppData, setAppData] = useAppContextWithSchema<typeof appDataSchema>();
|
||||
const { getAppData } = useAppContextWithSchema<typeof appDataSchema>();
|
||||
const [enabled, setEnabled] = useState(getAppData("enabled"));
|
||||
const [projects, setProjects] = useState();
|
||||
const [selectedProject, setSelectedProject] = useState<undefined | { label: string; value: string }>();
|
||||
|
@ -32,7 +32,6 @@ const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({
|
|||
|
||||
return (
|
||||
<AppCard
|
||||
setAppData={setAppData}
|
||||
app={app}
|
||||
switchOnClick={(e) => {
|
||||
if (!e) {
|
||||
|
|
|
@ -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<typeof appDataSchema>();
|
||||
const { getAppData, setAppData, disabled } = useAppContextWithSchema<typeof appDataSchema>();
|
||||
const trackingId = getAppData("trackingId");
|
||||
const { enabled, updateEnabled } = useIsAppEnabled(app);
|
||||
|
||||
return (
|
||||
<AppCard
|
||||
setAppData={setAppData}
|
||||
app={app}
|
||||
disableSwitch={disabled}
|
||||
LockedIcon={LockedIcon}
|
||||
switchOnClick={(e) => {
|
||||
updateEnabled(e);
|
||||
}}
|
||||
|
|
|
@ -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<typeof appDataSchema>();
|
||||
const { getAppData, setAppData, disabled } = useAppContextWithSchema<typeof appDataSchema>();
|
||||
const trackingId = getAppData("trackingId");
|
||||
const { enabled, updateEnabled } = useIsAppEnabled(app);
|
||||
|
||||
return (
|
||||
<AppCard
|
||||
setAppData={setAppData}
|
||||
app={app}
|
||||
disableSwitch={disabled}
|
||||
LockedIcon={LockedIcon}
|
||||
switchOnClick={(e) => {
|
||||
updateEnabled(e);
|
||||
}}
|
||||
|
|
|
@ -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<typeof appDataSchema>();
|
||||
const { getAppData, setAppData, disabled } = useAppContextWithSchema<typeof appDataSchema>();
|
||||
const thankYouPage = getAppData("thankYouPage");
|
||||
const { enabled: showGifSelection, updateEnabled: setShowGifSelection } = useIsAppEnabled(app);
|
||||
|
||||
|
@ -16,11 +16,8 @@ const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({
|
|||
|
||||
return (
|
||||
<AppCard
|
||||
setAppData={setAppData}
|
||||
app={app}
|
||||
description={t("confirmation_page_gif")}
|
||||
disableSwitch={disabled}
|
||||
LockedIcon={LockedIcon}
|
||||
switchOnClick={(e) => {
|
||||
setShowGifSelection(e);
|
||||
}}
|
||||
|
|
|
@ -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<typeof appDataSchema>();
|
||||
const { getAppData, setAppData, disabled } = useAppContextWithSchema<typeof appDataSchema>();
|
||||
const trackingId = getAppData("trackingId");
|
||||
const { enabled, updateEnabled } = useIsAppEnabled(app);
|
||||
|
||||
return (
|
||||
<AppCard
|
||||
setAppData={setAppData}
|
||||
app={app}
|
||||
disableSwitch={disabled}
|
||||
LockedIcon={LockedIcon}
|
||||
switchOnClick={(e) => {
|
||||
updateEnabled(e);
|
||||
}}
|
||||
|
|
|
@ -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<typeof appDataSchema>();
|
||||
const { getAppData, setAppData, disabled } = useAppContextWithSchema<typeof appDataSchema>();
|
||||
const trackingId = getAppData("trackingId");
|
||||
const { enabled, updateEnabled } = useIsAppEnabled(app);
|
||||
|
||||
return (
|
||||
<AppCard
|
||||
setAppData={setAppData}
|
||||
app={app}
|
||||
disableSwitch={disabled}
|
||||
LockedIcon={LockedIcon}
|
||||
switchOnClick={updateEnabled}
|
||||
switchChecked={enabled}
|
||||
teamId={eventType.team?.id || undefined}>
|
||||
|
|
|
@ -16,7 +16,7 @@ type Option = { value: string; label: string };
|
|||
|
||||
const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ app, eventType }) {
|
||||
const { asPath } = useRouter();
|
||||
const [getAppData, setAppData] = useAppContextWithSchema<typeof appDataSchema>();
|
||||
const { getAppData, setAppData } = useAppContextWithSchema<typeof appDataSchema>();
|
||||
const price = getAppData("price");
|
||||
const currency = getAppData("currency");
|
||||
const [selectedCurrency, setSelectedCurrency] = useState(
|
||||
|
@ -38,7 +38,6 @@ const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({
|
|||
return (
|
||||
<AppCard
|
||||
returnTo={WEBAPP_URL + asPath}
|
||||
setAppData={setAppData}
|
||||
app={app}
|
||||
switchChecked={requirePayment}
|
||||
switchOnClick={(enabled) => {
|
||||
|
|
|
@ -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<typeof appDataSchema>();
|
||||
const { getAppData, setAppData, disabled } = useAppContextWithSchema<typeof appDataSchema>();
|
||||
const plausibleUrl = getAppData("PLAUSIBLE_URL");
|
||||
const trackingId = getAppData("trackingId");
|
||||
const { enabled, updateEnabled } = useIsAppEnabled(app);
|
||||
|
||||
return (
|
||||
<AppCard
|
||||
setAppData={setAppData}
|
||||
app={app}
|
||||
disableSwitch={disabled}
|
||||
LockedIcon={LockedIcon}
|
||||
switchOnClick={(e) => {
|
||||
updateEnabled(e);
|
||||
}}
|
||||
|
|
|
@ -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<typeof appDataSchema>();
|
||||
const { disabled } = useAppContextWithSchema<typeof appDataSchema>();
|
||||
const [additionalParameters, setAdditionalParameters] = useState("");
|
||||
const { enabled, updateEnabled } = useIsAppEnabled(app);
|
||||
|
||||
|
@ -37,10 +37,7 @@ const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({
|
|||
|
||||
return (
|
||||
<AppCard
|
||||
setAppData={setAppData}
|
||||
app={app}
|
||||
disableSwitch={disabled}
|
||||
LockedIcon={LockedIcon}
|
||||
switchOnClick={(e) => {
|
||||
updateEnabled(e);
|
||||
}}
|
||||
|
|
|
@ -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<typeof appDataSchema>();
|
||||
const { getAppData, setAppData, disabled } = useAppContextWithSchema<typeof appDataSchema>();
|
||||
const price = getAppData("price");
|
||||
const currency = getAppData("currency");
|
||||
const paymentOption = getAppData("paymentOption");
|
||||
|
@ -38,10 +38,7 @@ const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({
|
|||
return (
|
||||
<AppCard
|
||||
returnTo={WEBAPP_URL + pathname + "?tabName=apps"}
|
||||
setAppData={setAppData}
|
||||
app={app}
|
||||
disableSwitch={disabled}
|
||||
LockedIcon={LockedIcon}
|
||||
switchChecked={requirePayment}
|
||||
switchOnClick={(enabled) => {
|
||||
setRequirePayment(enabled);
|
||||
|
|
|
@ -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<typeof appDataSchema>();
|
||||
const { getAppData, setAppData } = useAppContextWithSchema<typeof appDataSchema>();
|
||||
const trackingId = getAppData("trackingId");
|
||||
const [enabled, setEnabled] = useState(getAppData("enabled"));
|
||||
|
||||
return (
|
||||
<AppCard
|
||||
setAppData={setAppData}
|
||||
app={app}
|
||||
switchOnClick={(e) => {
|
||||
if (!e) {
|
||||
|
|
|
@ -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<typeof appDataSchema>();
|
||||
const { getAppData, setAppData } = useAppContextWithSchema<typeof appDataSchema>();
|
||||
const isSunrise = getAppData("isSunrise");
|
||||
const { enabled, updateEnabled } = useIsAppEnabled(app);
|
||||
|
||||
return (
|
||||
<AppCard
|
||||
setAppData={setAppData}
|
||||
app={app}
|
||||
disableSwitch={disabled}
|
||||
LockedIcon={LockedIcon}
|
||||
switchOnClick={(e) => {
|
||||
if (!e) {
|
||||
updateEnabled(false);
|
||||
|
|
Loading…
Reference in New Issue
Block a user