* fix * move event types components to web * update import paths * mv apps components * migrate form builder * fix * mv sso * fix * mv * update import paths * update import paths * mv * mv * mv * fix * update Booker * fix * fix * fix * fix * mv video * mv embed components to web * update import paths * mv calendar weekly view components * update import paths * fix * fixp * fix * fix * fix * fix: update FormBuilder imports to use @calcom/features/form-builder Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: update broken import paths after file migrations Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: correct import paths for platform atoms and moved components Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: apply CSS type fixes and add missing atoms exports Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: resolve type errors in test files after component migrations Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: resolve remaining type errors in test files Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix * migrate * fix: resolve type errors in test and mock files - Add missing bookingForm, bookerFormErrorRef, instantConnectCooldownMs to Booker.test.tsx bookings prop - Add all required BookerEvent properties to event.mock.ts - Add vi import from vitest to all mock files - Fix date parameter types in packages/dayjs/__mocks__/index.ts - Add verificationCode and setVerificationCode to test-utils.tsx mock store - Remove children.type access in Section.tsx mock to fix type error - Fix lint issues: remove unused React imports, use import type where needed, add return types - Add biome-ignore comments for pre-existing lint warnings in test files Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * migrate * migrate * migrate * update import paths * update import paths * update import paths * fix * migrate data table * migrate data table * fix * fix * fix * migrate insights components * migrate insights components * fix * mv * update import paths * fix * fix * fix * fix * fix * fix: resolve type errors in test mocks - Booker.test.tsx: Add all required UseFormReturn methods to bookingForm mock - event.mock.ts: Fix entity, subsetOfHosts, instantMeetingParameters, fieldTranslations, image types - dayjs/__mocks__/index.ts: Use Object.assign for proper typing of mock properties - Section.tsx: Change 'class' to 'className' in JSX with biome-ignore comment Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: add missing hasDataErrors and dataErrors to bookings.errors mock Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: add missing loadingStates properties to bookings mock Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: add missing slots properties (setTentativeSelectedTimeslots, tentativeSelectedTimeslots, slotReservationId) Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: update quickAvailabilityChecks to include utcEndIso and use valid status type Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: add missing bookerForm properties (formName, beforeVerifyEmail, formErrors) Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: add missing UseFormReturn properties to bookerForm.bookingForm mock Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: add hasFormErrors and formErrors to bookerForm.formErrors mock Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: add hasFormErrors and formErrors to bookerForm.errors mock Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: add missing isError property to mockEvent Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: use complete BookerEvent mock in Booker.test.tsx Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: use branded bookingFields type in event mock Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: add missing schedule mock properties (isError, isSuccess, isLoading, dataUpdatedAt) Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * revert * fix * fix * fix * fix build * fix * fix * fix * fix: correct AddMembersWithSwitch test wrapper to use initial assignAllTeamMembers value - Fixed test wrapper to initialize useState with componentProps.assignAllTeamMembers instead of hardcoded false, allowing tests to properly test different states - Updated test expectations for ALL_TEAM_MEMBERS_ENABLED_AND_SEGMENT_NOT_APPLICABLE state to match actual component behavior (toggle should be present and checked) - Fixed 'should show Segment when toggled on' test to start with assignAllTeamMembers: false to properly test the flow of enabling it - Added explicit types to satisfy biome lint requirements Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: use JSX.Element instead of React.JSX.Element for type compatibility Co-Authored-By: benny@cal.com <sldisek783@gmail.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
81 lines
3.1 KiB
TypeScript
81 lines
3.1 KiB
TypeScript
import type { ComponentProps } from "react";
|
|
|
|
import { EmbedDialog, EmbedButton } from "@calcom/web/modules/embed/components/Embed";
|
|
import { IS_CALCOM } from "@calcom/lib/constants";
|
|
import { useLocale } from "@calcom/lib/hooks/useLocale";
|
|
import { trpc } from "@calcom/trpc/react";
|
|
|
|
import { tabs } from "@calcom/features/embed/lib/EmbedTabs";
|
|
import { useEmbedTypes } from "@calcom/features/embed/lib/hooks";
|
|
|
|
export const RoutingFormEmbedDialog = () => {
|
|
const types = useEmbedTypes();
|
|
const { t } = useLocale();
|
|
const { data: user } = trpc.viewer.me.get.useQuery();
|
|
const routingFormTypes = types.filter((type) => type.type !== "email");
|
|
|
|
// Add the headless option specifically for routing forms
|
|
const headlessType = {
|
|
title: t("use_my_own_form"),
|
|
subtitle: t("use_our_headless_routing_api"),
|
|
type: "headless",
|
|
illustration: (
|
|
<svg
|
|
width="100%"
|
|
height="100%"
|
|
className="rounded-md"
|
|
viewBox="0 0 308 265"
|
|
fill="none"
|
|
xmlns="http://www.w3.org/2000/svg">
|
|
<path
|
|
d="M0 1.99999C0 0.895423 0.895431 0 2 0H306C307.105 0 308 0.895431 308 2V263C308 264.105 307.105 265 306 265H2C0.895431 265 0 264.105 0 263V1.99999Z"
|
|
fill="white"
|
|
/>
|
|
<rect x="24" width="260" height="38.5" rx="6" fill="#F3F4F6" />
|
|
<rect x="24" y="50.5" width="139" height="163" rx="6" fill="#F8F8F8" />
|
|
<g opacity="0.8">
|
|
<rect x="42" y="74" width="20" height="20" rx="2" fill="#374151" />
|
|
<path
|
|
d="M48 81L52 85L56 81"
|
|
stroke="white"
|
|
strokeWidth="2"
|
|
strokeLinecap="round"
|
|
strokeLinejoin="round"
|
|
/>
|
|
</g>
|
|
<rect x="48" y="106" width="80" height="8" rx="6" fill="#F3F4F6" />
|
|
<rect x="48" y="118" width="48" height="4" rx="6" fill="#F3F4F6" />
|
|
<rect x="48" y="130" width="64" height="4" rx="6" fill="#F3F4F6" />
|
|
<rect x="48" y="142" width="32" height="4" rx="6" fill="#F3F4F6" />
|
|
<rect x="48" y="160" width="72" height="6" rx="3" fill="#292929" />
|
|
<rect x="176" y="50.5" width="108" height="164" rx="6" fill="#F3F4F6" />
|
|
<text x="220" y="120" textAnchor="middle" className="fill-gray-400" fontSize="8">
|
|
API
|
|
</text>
|
|
<rect x="200" y="125" width="40" height="2" rx="1" fill="#9CA3AF" />
|
|
<rect x="200" y="130" width="32" height="2" rx="1" fill="#9CA3AF" />
|
|
<rect x="200" y="135" width="36" height="2" rx="1" fill="#9CA3AF" />
|
|
<rect x="24" y="226.5" width="260" height="38.5" rx="6" fill="#F3F4F6" />
|
|
</svg>
|
|
),
|
|
};
|
|
|
|
const routingFormTypesWithHeadless = IS_CALCOM
|
|
? [...routingFormTypes, headlessType]
|
|
: routingFormTypes;
|
|
|
|
return (
|
|
<EmbedDialog
|
|
types={routingFormTypesWithHeadless}
|
|
tabs={tabs}
|
|
eventTypeHideOptionDisabled={true}
|
|
defaultBrandColor={user ? { brandColor: user.brandColor, darkBrandColor: user.darkBrandColor } : null}
|
|
noQueryParamMode={true}
|
|
/>
|
|
);
|
|
};
|
|
|
|
export const RoutingFormEmbedButton = (props: ComponentProps<typeof EmbedButton>) => {
|
|
return <EmbedButton {...props} noQueryParamMode={true} />;
|
|
};
|