import { Fragment } from "react"; import React from "react"; import classNames from "@calcom/lib/classNames"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { Clock, CheckSquare, RefreshCcw, CreditCard } from "@calcom/ui/components/icon"; import type { PublicEvent } from "../../types"; import { EventDetailBlocks } from "../../types"; import { EventDuration } from "./Duration"; import { EventLocations } from "./Locations"; import { EventOccurences } from "./Occurences"; import { EventPrice } from "./Price"; type EventDetailsPropsBase = { event: PublicEvent; className?: string; }; type EventDetailDefaultBlock = { blocks?: EventDetailBlocks[]; }; // Rendering a custom block requires passing a name prop, // which is used as a key for the block. type EventDetailCustomBlock = { blocks?: React.FC[]; name: string; }; type EventDetailsProps = EventDetailsPropsBase & (EventDetailDefaultBlock | EventDetailCustomBlock); interface EventMetaProps { icon?: React.FC<{ className: string }> | string; children: React.ReactNode; // Emphasises the text in the block. For now only // applying in dark mode. highlight?: boolean; contentClassName?: string; className?: string; } /** * Default order in which the event details will be rendered. */ const defaultEventDetailsBlocks = [ EventDetailBlocks.DESCRIPTION, EventDetailBlocks.REQUIRES_CONFIRMATION, EventDetailBlocks.DURATION, EventDetailBlocks.OCCURENCES, EventDetailBlocks.LOCATION, EventDetailBlocks.PRICE, ]; /** * Helper component that ensures the meta data of an event is * rendered in a consistent way — adds an icon and children (text usually). */ export const EventMetaBlock = ({ icon: Icon, children, highlight, contentClassName, className, }: EventMetaProps) => { if (!React.Children.count(children)) return null; return (