* Add OmniInstall button * Make AppCards configurable by the app itself * Make OmniInstallAppButton not redirect * Fixes * Add extendsFeature support to CLI * Move to automatic file generation approach as dynamic import checking doesnt work correctly * Use zod everywhere consistenly for metadata and fix all TS issues * Fix viewer.eventTypes endpoint. Make prisma base select and _ prefixed models consistent in expecting scalars only * Remove unnecessary zod parsing of event-types as it is making the scope of the PR huge * Fix UI TS errors * wip * Add zod types support in EventTypeAppCard.tsx * Fixes during PR review and other failing tests * Remove unused app * Fix stripe installation flow * More fixes * Fix apps and active apps count * self review * Add loading attribute to OmniInsall button * Handle empty state * Improve types * Fix stripe app installation bug * added fathom app (#4804) * added fathom app wrapper, needs script injection to public booking page * new logo * Add Fathom script support on booking pages and add it as an eventTypeapp * Add automation and analytics apps * Add missing pieces for analytics category * Rename BookingPageScripts to BookingPageTagManager Co-authored-by: Hariom Balhara <hariombalhara@gmail.com> * Fix lint error * Fix runtime error with legayAppData being undefined * Remove duplicate automation key Co-authored-by: Peer Richelsen <peeroke@gmail.com>
51 lines
1.4 KiB
TypeScript
51 lines
1.4 KiB
TypeScript
import dynamic from "next/dynamic";
|
|
import { Dispatch, useState, useEffect } from "react";
|
|
import { JSONObject } from "superjson/dist/types";
|
|
|
|
export type Gate = undefined | "rainbow"; // Add more like ` | "geolocation" | "payment"`
|
|
|
|
export type GateState = {
|
|
rainbowToken?: string;
|
|
};
|
|
|
|
type GateProps = {
|
|
children: React.ReactNode;
|
|
gates: Gate[];
|
|
appData: JSONObject;
|
|
dispatch: Dispatch<Partial<GateState>>;
|
|
};
|
|
|
|
const RainbowGate = dynamic(() => import("@calcom/app-store/rainbow/components/RainbowKit"));
|
|
|
|
// To add a new Gate just add the gate logic to the switch statement
|
|
const Gates: React.FC<GateProps> = ({ children, gates, appData, dispatch }) => {
|
|
const [rainbowToken, setRainbowToken] = useState<string>();
|
|
|
|
useEffect(() => {
|
|
dispatch({ rainbowToken });
|
|
}, [rainbowToken, dispatch]);
|
|
|
|
let gateWrappers = <>{children}</>;
|
|
|
|
// Recursively wraps the `gateWrappers` with new gates allowing for multiple gates
|
|
for (const gate of gates) {
|
|
switch (gate) {
|
|
case "rainbow":
|
|
if (appData.blockchainId && appData.smartContractAddress && !rainbowToken) {
|
|
gateWrappers = (
|
|
<RainbowGate
|
|
setToken={setRainbowToken}
|
|
chainId={appData.blockchainId as number}
|
|
tokenAddress={appData.smartContractAddress as string}>
|
|
{gateWrappers}
|
|
</RainbowGate>
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
return gateWrappers;
|
|
};
|
|
|
|
export default Gates;
|