Update all Yarn dependencies (2022-05-16) (#2769)

* Update all Yarn dependencies (2022-05-16)

* Upgrade dependencies

* Removes deprecated packages

* Upgrades deps

* Updates submodules

* Update yarn.lock

* Linting

* Linting

* Update website

* Build fixes

* TODO: fix this

* Module resolving

* Type fixes

* Intercom fixes on SSG

* Fixes infinite loop

* Upgrades to React 18

* Type fixes

* Locks node version to 14

* Upgrades daily-js

* Readds missing types

* Upgrades playwright

* Noop when intercom is not installed

* Update website

* Removed yarn.lock in favor of monorepo

Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com>
Co-authored-by: zomars <zomars@me.com>
This commit is contained in:
depfu[bot] 2022-05-17 19:31:49 +00:00 committed by GitHub
parent 683e8c4490
commit db01f7be19
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
60 changed files with 1719 additions and 21327 deletions

@ -1 +1 @@
Subproject commit 943cd10de1f6661273d2ec18acdaa93118852714 Subproject commit a3e7b8638ce3c814f64f7a8b6c6079fa3d8e3538

@ -1 +1 @@
Subproject commit be2d4338ee1023a2d2862978ccf91554d47ff51f Subproject commit 64f5ac5723c0a1d48bb7b29957ea0fc01c837ca8

View File

@ -16,14 +16,14 @@
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"iframe-resizer-react": "^1.1.0", "iframe-resizer-react": "^1.1.0",
"next": "^12.1.0", "next": "^12.1.6",
"nextra": "^1.1.0", "nextra": "^1.1.0",
"nextra-theme-docs": "^1.2.2", "nextra-theme-docs": "^1.2.2",
"react": "^17.0.2", "react": "^18.1.0",
"react-dom": "^17.0.2" "react-dom": "^18.1.0"
}, },
"devDependencies": { "devDependencies": {
"@calcom/config": "*", "@calcom/config": "*",
"eslint": "^8.10.0" "eslint": "^8.15.0"
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -10,16 +10,16 @@
"dependencies": { "dependencies": {
"highlight.js": "^11.5.1", "highlight.js": "^11.5.1",
"isarray": "2.0.5", "isarray": "2.0.5",
"next": "12.1.5", "next": "12.1.6",
"openapi-snippet": "^0.13.0", "openapi-snippet": "^0.13.0",
"react": "17.0.2", "react": "18.1.0",
"react-dom": "17.0.2", "react-dom": "18.1.0",
"swagger-ui-react": "4.10.3" "swagger-ui-react": "4.11.1"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "17.0.27", "@types/node": "14.17.6",
"@types/react": "17.0.43", "@types/react": "18.0.9",
"@types/react-dom": "17.0.14", "@types/react-dom": "18.0.4",
"typescript": "4.6.3" "typescript": "4.6.4"
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@ import { FormEvent, useCallback, useEffect, useState } from "react";
import Cropper from "react-easy-crop"; import Cropper from "react-easy-crop";
import Button from "@calcom/ui/Button"; import Button from "@calcom/ui/Button";
import { DialogClose, DialogTrigger, Dialog, DialogContent } from "@calcom/ui/Dialog"; import { Dialog, DialogClose, DialogContent, DialogTrigger } from "@calcom/ui/Dialog";
import { Area, getCroppedImg } from "@lib/cropImage"; import { Area, getCroppedImg } from "@lib/cropImage";
import { useFileReader } from "@lib/hooks/useFileReader"; import { useFileReader } from "@lib/hooks/useFileReader";
@ -71,15 +71,15 @@ export default function ImageUploader({
...props ...props
}: ImageUploaderProps) { }: ImageUploaderProps) {
const { t } = useLocale(); const { t } = useLocale();
const [imageSrc, setImageSrc] = useState<string | null>(); const [imageSrc, setImageSrc] = useState<string | null>(null);
const [croppedAreaPixels, setCroppedAreaPixels] = useState<Area | null>(); const [croppedAreaPixels, setCroppedAreaPixels] = useState<Area | null>(null);
const [{ result }, setFile] = useFileReader({ const [{ result }, setFile] = useFileReader({
method: "readAsDataURL", method: "readAsDataURL",
}); });
useEffect(() => { useEffect(() => {
setImageSrc(props.imageSrc); if (props.imageSrc) setImageSrc(props.imageSrc);
}, [props.imageSrc]); }, [props.imageSrc]);
const onInputFile = (e: FileEvent<HTMLInputElement>) => { const onInputFile = (e: FileEvent<HTMLInputElement>) => {
@ -90,8 +90,9 @@ export default function ImageUploader({
}; };
const showCroppedImage = useCallback( const showCroppedImage = useCallback(
async (croppedAreaPixels) => { async (croppedAreaPixels: Area | null) => {
try { try {
if (!croppedAreaPixels) return;
const croppedImage = await getCroppedImg( const croppedImage = await getCroppedImg(
result as string /* result is always string when using readAsDataUrl */, result as string /* result is always string when using readAsDataUrl */,
croppedAreaPixels croppedAreaPixels

View File

@ -1,9 +1,10 @@
import { AdminRequired } from "components/ui/AdminRequired"; import { AdminRequired } from "components/ui/AdminRequired";
import Link, { LinkProps } from "next/link"; import Link, { LinkProps } from "next/link";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import React, { ElementType, FC, Fragment, MouseEventHandler } from "react"; import { FC, Fragment, MouseEventHandler } from "react";
import classNames from "@lib/classNames"; import classNames from "@lib/classNames";
import { SVGComponent } from "@lib/types/SVGComponent";
export interface NavTabProps { export interface NavTabProps {
tabs: { tabs: {
@ -12,7 +13,7 @@ export interface NavTabProps {
href?: string; href?: string;
/** If you want to change query param tabName as per current tab */ /** If you want to change query param tabName as per current tab */
tabName?: string; tabName?: string;
icon?: ElementType; icon?: SVGComponent;
adminRequired?: boolean; adminRequired?: boolean;
}[]; }[];
linkProps?: Omit<LinkProps, "href">; linkProps?: Omit<LinkProps, "href">;

View File

@ -1,7 +1,7 @@
import { ChevronLeftIcon, ChevronRightIcon } from "@heroicons/react/solid"; import { ChevronLeftIcon, ChevronRightIcon } from "@heroicons/react/solid";
import { EventType, PeriodType } from "@prisma/client"; import { EventType, PeriodType } from "@prisma/client";
import dayjs, { Dayjs } from "dayjs"; import dayjs, { Dayjs } from "dayjs";
import dayjsBusinessTime from "dayjs-business-time"; import dayjsBusinessTime from "dayjs-business-days2";
import timezone from "dayjs/plugin/timezone"; import timezone from "dayjs/plugin/timezone";
import utc from "dayjs/plugin/utc"; import utc from "dayjs/plugin/utc";
import { memoize } from "lodash"; import { memoize } from "lodash";
@ -56,7 +56,7 @@ function isOutOfBounds(
case PeriodType.ROLLING: { case PeriodType.ROLLING: {
const periodRollingEndDay = periodCountCalendarDays const periodRollingEndDay = periodCountCalendarDays
? dayjs().utcOffset(date.utcOffset()).add(periodDays!, "days").endOf("day") ? dayjs().utcOffset(date.utcOffset()).add(periodDays!, "days").endOf("day")
: dayjs().utcOffset(date.utcOffset()).addBusinessTime(periodDays!, "days").endOf("day"); : dayjs().utcOffset(date.utcOffset()).businessDaysAdd(periodDays!).endOf("day");
return date.endOf("day").isAfter(periodRollingEndDay); return date.endOf("day").isAfter(periodRollingEndDay);
} }

View File

@ -118,7 +118,6 @@ export default function TeamSettingsRightSidebar(props: { team: TeamWithMembers;
)} )}
</div> </div>
{props.team?.id && props.role !== MembershipRole.MEMBER && ( {props.team?.id && props.role !== MembershipRole.MEMBER && (
// eslint-disable-next-line @next/next/link-passhref
<Link href={`/settings/teams/${props.team.id}/availability`}> <Link href={`/settings/teams/${props.team.id}/availability`}>
<div className="mt-5 hidden space-y-1 sm:block"> <div className="mt-5 hidden space-y-1 sm:block">
<LinkIconButton Icon={ClockIcon}>{"View Availability"}</LinkIconButton> <LinkIconButton Icon={ClockIcon}>{"View Availability"}</LinkIconButton>

View File

@ -37,7 +37,6 @@ const Team = ({ team }: TeamPageProps) => {
); );
return ( return (
// eslint-disable-next-line @next/next/link-passhref
<Link key={member.id} href={`/${member.username}`}> <Link key={member.id} href={`/${member.username}`}>
<div className={classes}> <div className={classes}>
<ArrowRightIcon <ArrowRightIcon

View File

@ -3,6 +3,7 @@ import { FC, Fragment } from "react";
type AdminRequiredProps = { type AdminRequiredProps = {
as?: keyof JSX.IntrinsicElements; as?: keyof JSX.IntrinsicElements;
children?: React.ReactNode;
}; };
export const AdminRequired: FC<AdminRequiredProps> = ({ children, as, ...rest }) => { export const AdminRequired: FC<AdminRequiredProps> = ({ children, as, ...rest }) => {

View File

@ -36,7 +36,7 @@ type ChildrenProps = {
props: RadioAreaProps; props: RadioAreaProps;
children?: ReactNode; children?: ReactNode;
}; };
interface RadioAreaGroupProps extends Omit<React.ComponentPropsWithoutRef<"div">, "onChange"> { interface RadioAreaGroupProps extends Omit<React.ComponentPropsWithoutRef<"div">, "onChange" | "children"> {
children: ChildrenProps | ChildrenProps[]; children: ChildrenProps | ChildrenProps[];
name?: string; name?: string;
onChange?: (value: string) => void; onChange?: (value: string) => void;

View File

@ -100,8 +100,10 @@ export default function TeamAvailabilityScreen(props: Props) {
</div> </div>
</div> </div>
<div className="flex h-full flex-1"> <div className="flex h-full flex-1">
{/* @ts-ignore */}
<AutoSizer> <AutoSizer>
{({ height, width }) => ( {({ height, width }) => (
// @ts-ignore
<List <List
itemSize={240} itemSize={240}
itemCount={props.team?.members?.length ?? 0} itemCount={props.team?.members?.length ?? 0}

View File

@ -93,7 +93,7 @@ const CryptoSection = (props: CryptoSectionProps) => {
const verifyButton = useMemo(() => { const verifyButton = useMemo(() => {
return ( return (
<Button color="secondary" onClick={verifyWallet} type="button" id="hasToken" name="hasToken"> <Button color="secondary" onClick={verifyWallet} type="button" id="hasToken">
{ {
// eslint-disable-next-line @next/next/no-img-element // eslint-disable-next-line @next/next/no-img-element
<img className="mr-1 h-5" src="/apps/metamask.svg" alt="MetaMask" /> <img className="mr-1 h-5" src="/apps/metamask.svg" alt="MetaMask" />

View File

@ -1,7 +1,7 @@
import { FC } from "react"; import { FC } from "react";
import { LiveChatLoaderProvider } from "react-live-chat-loader"; import { LiveChatLoaderProvider } from "react-live-chat-loader";
const Provider: FC = ({ children }) => ( const Provider: FC<{ children: React.ReactNode }> = ({ children }) => (
<LiveChatLoaderProvider providerKey={process.env.NEXT_PUBLIC_HELPSCOUT_KEY!} provider="helpScout"> <LiveChatLoaderProvider providerKey={process.env.NEXT_PUBLIC_HELPSCOUT_KEY!} provider="helpScout">
<>{children}</> <>{children}</>
</LiveChatLoaderProvider> </LiveChatLoaderProvider>

View File

@ -1,11 +1,12 @@
import { ChatAltIcon } from "@heroicons/react/solid"; import { ChatAltIcon } from "@heroicons/react/solid";
import { useIntercom } from "react-use-intercom";
import { DropdownMenuItem } from "@calcom/ui/Dropdown"; import { DropdownMenuItem } from "@calcom/ui/Dropdown";
import classNames from "@lib/classNames"; import classNames from "@lib/classNames";
import { useLocale } from "@lib/hooks/useLocale"; import { useLocale } from "@lib/hooks/useLocale";
import { useIntercom } from "./useIntercom";
export default function IntercomMenuItem() { export default function IntercomMenuItem() {
const { t } = useLocale(); const { t } = useLocale();
const { boot, show } = useIntercom(); const { boot, show } = useIntercom();

View File

@ -1,7 +1,7 @@
import { FC } from "react"; import { FC } from "react";
import { IntercomProvider } from "react-use-intercom"; import { IntercomProvider } from "react-use-intercom";
const Provider: FC = ({ children }) => ( const Provider: FC<{ children: React.ReactNode }> = ({ children }) => (
<IntercomProvider appId={process.env.NEXT_PUBLIC_INTERCOM_APP_ID!}>{children}</IntercomProvider> <IntercomProvider appId={process.env.NEXT_PUBLIC_INTERCOM_APP_ID!}>{children}</IntercomProvider>
); );

View File

@ -0,0 +1,11 @@
import { useIntercom as _useIntercom } from "react-use-intercom";
export const useIntercom =
typeof window !== "undefined" && !!process.env.NEXT_PUBLIC_INTERCOM_APP_ID
? _useIntercom
: () => ({
boot: () => {},
show: () => {},
});
export default useIntercom;

View File

@ -1,6 +1,6 @@
import { SessionProvider } from "next-auth/react"; import { SessionProvider } from "next-auth/react";
import { appWithTranslation } from "next-i18next"; import { appWithTranslation } from "next-i18next";
import type { AppProps as NextAppProps } from "next/app"; import type { AppProps as NextAppProps, AppProps as NextJsAppProps } from "next/app";
import { ComponentProps, ReactNode, useMemo } from "react"; import { ComponentProps, ReactNode, useMemo } from "react";
import DynamicHelpscoutProvider from "@ee/lib/helpscout/providerDynamic"; import DynamicHelpscoutProvider from "@ee/lib/helpscout/providerDynamic";
@ -11,7 +11,9 @@ import { createTelemetryClient, TelemetryProvider } from "@lib/telemetry";
import { trpc } from "./trpc"; import { trpc } from "./trpc";
const I18nextAdapter = appWithTranslation(({ children }: { children?: ReactNode }) => <>{children}</>); const I18nextAdapter = appWithTranslation<NextJsAppProps & { children: React.ReactNode }>(({ children }) => (
<>{children}</>
));
// Workaround for https://github.com/vercel/next.js/issues/8592 // Workaround for https://github.com/vercel/next.js/issues/8592
export type AppProps = NextAppProps & { export type AppProps = NextAppProps & {

View File

@ -30,21 +30,21 @@
"@calcom/app-store": "*", "@calcom/app-store": "*",
"@calcom/core": "*", "@calcom/core": "*",
"@calcom/ee": "*", "@calcom/ee": "*",
"@calcom/embed-core": "*",
"@calcom/lib": "*", "@calcom/lib": "*",
"@calcom/prisma": "*", "@calcom/prisma": "*",
"@calcom/stripe": "*", "@calcom/stripe": "*",
"@calcom/tsconfig": "*", "@calcom/tsconfig": "*",
"@calcom/ui": "*", "@calcom/ui": "*",
"@calcom/embed-core": "*", "@daily-co/daily-js": "^0.26.0",
"@daily-co/daily-js": "^0.21.0",
"@glidejs/glide": "^3.5.2", "@glidejs/glide": "^3.5.2",
"@heroicons/react": "^1.0.6", "@heroicons/react": "^1.0.6",
"@hookform/error-message": "^2.0.0", "@hookform/error-message": "^2.0.0",
"@hookform/resolvers": "^2.8.5", "@hookform/resolvers": "^2.8.9",
"@jitsu/sdk-js": "^2.2.4", "@jitsu/sdk-js": "^2.2.4",
"@metamask/providers": "^8.1.1", "@metamask/providers": "^8.1.1",
"@next-auth/prisma-adapter": "^1.0.3", "@next-auth/prisma-adapter": "^1.0.3",
"@next/bundle-analyzer": "12.1.0", "@next/bundle-analyzer": "12.1.6",
"@radix-ui/react-avatar": "^0.1.0", "@radix-ui/react-avatar": "^0.1.0",
"@radix-ui/react-collapsible": "^0.1.0", "@radix-ui/react-collapsible": "^0.1.0",
"@radix-ui/react-dialog": "^0.1.0", "@radix-ui/react-dialog": "^0.1.0",
@ -54,20 +54,20 @@
"@radix-ui/react-slider": "^0.1.1", "@radix-ui/react-slider": "^0.1.1",
"@radix-ui/react-switch": "^0.1.1", "@radix-ui/react-switch": "^0.1.1",
"@radix-ui/react-tooltip": "^0.1.0", "@radix-ui/react-tooltip": "^0.1.0",
"@stripe/react-stripe-js": "^1.4.1", "@stripe/react-stripe-js": "^1.8.0",
"@stripe/stripe-js": "^1.16.0", "@stripe/stripe-js": "^1.29.0",
"@trpc/client": "^9.22.0", "@trpc/client": "^9.23.4",
"@trpc/next": "^9.22.0", "@trpc/next": "^9.23.4",
"@trpc/react": "^9.22.0", "@trpc/react": "^9.23.4",
"@trpc/server": "^9.22.0", "@trpc/server": "^9.23.4",
"@vercel/edge-functions-ui": "^0.2.1", "@vercel/edge-functions-ui": "^0.2.1",
"@wojtekmaj/react-daterange-picker": "^3.3.1", "@wojtekmaj/react-daterange-picker": "^3.3.1",
"accept-language-parser": "^1.5.0", "accept-language-parser": "^1.5.0",
"async": "^3.2.1", "async": "^3.2.1",
"bcryptjs": "^2.4.3", "bcryptjs": "^2.4.3",
"classnames": "^2.3.1", "classnames": "^2.3.1",
"dayjs": "^1.10.4", "dayjs": "^1.11.2",
"dayjs-business-time": "^1.0.4", "dayjs-business-days2": "^1.1.0",
"googleapis": "^84.0.0", "googleapis": "^84.0.0",
"gray-matter": "^4.0.3", "gray-matter": "^4.0.3",
"handlebars": "^4.7.7", "handlebars": "^4.7.7",
@ -78,78 +78,77 @@
"lodash": "^4.17.21", "lodash": "^4.17.21",
"micro": "^9.3.4", "micro": "^9.3.4",
"mime-types": "^2.1.35", "mime-types": "^2.1.35",
"next": "^12.1.0", "next": "^12.1.6",
"next-auth": "^4.3.3", "next-auth": "^4.3.4",
"next-i18next": "^8.9.0", "next-i18next": "^11.0.0",
"next-mdx-remote": "^4.0.2", "next-mdx-remote": "^4.0.3",
"next-seo": "^4.26.0", "next-seo": "^4.26.0",
"next-transpile-modules": "^9.0.0", "next-transpile-modules": "^9.0.0",
"nodemailer": "^6.7.2", "nodemailer": "^6.7.5",
"otplib": "^12.0.1", "otplib": "^12.0.1",
"qrcode": "^1.5.0", "qrcode": "^1.5.0",
"react": "^17.0.2", "react": "^18.1.0",
"react-colorful": "^5.5.1", "react-colorful": "^5.5.1",
"react-date-picker": "^8.3.6", "react-date-picker": "^8.3.6",
"react-digit-input": "^2.1.0", "react-digit-input": "^2.1.0",
"react-dom": "^17.0.2", "react-dom": "^18.1.0",
"react-easy-crop": "^3.5.2", "react-easy-crop": "^3.5.2",
"react-hook-form": "^7.29.0", "react-hook-form": "^7.31.1",
"react-hot-toast": "^2.1.0", "react-hot-toast": "^2.1.0",
"react-intl": "^5.22.0", "react-intl": "^5.25.1",
"react-live-chat-loader": "^2.7.3", "react-live-chat-loader": "^2.7.3",
"react-multi-email": "^0.5.3", "react-multi-email": "^0.5.3",
"react-phone-number-input": "^3.1.41", "react-phone-number-input": "^3.1.52",
"react-query": "^3.33.7", "react-query": "^3.39.0",
"react-router-dom": "^5.2.0", "react-select": "^5.3.2",
"react-select": "^5.2.1",
"react-timezone-select": "^1.3.1", "react-timezone-select": "^1.3.1",
"react-use-intercom": "1.4.0", "react-use-intercom": "1.5.1",
"react-virtualized-auto-sizer": "^1.0.6", "react-virtualized-auto-sizer": "^1.0.6",
"react-window": "^1.8.6", "react-window": "^1.8.7",
"rrule": "^2.6.9", "rrule": "^2.6.9",
"short-uuid": "^4.2.0", "short-uuid": "^4.2.0",
"stripe": "^8.191.0", "stripe": "^9.1.0",
"superjson": "1.8.1", "superjson": "1.9.1",
"uuid": "^8.3.2", "uuid": "^8.3.2",
"web3": "^1.6.1", "web3": "^1.7.3",
"zod": "^3.14.4" "zod": "^3.16.0"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.17.8", "@babel/core": "^7.17.10",
"@calcom/config": "*", "@calcom/config": "*",
"@calcom/types": "*", "@calcom/types": "*",
"@microsoft/microsoft-graph-types-beta": "0.15.0-preview", "@microsoft/microsoft-graph-types-beta": "0.15.0-preview",
"@playwright/test": "^1.18.1", "@playwright/test": "^1.22.1",
"@types/accept-language-parser": "1.5.2", "@types/accept-language-parser": "1.5.2",
"@types/async": "^3.2.10", "@types/async": "^3.2.13",
"@types/bcryptjs": "^2.4.2", "@types/bcryptjs": "^2.4.2",
"@types/glidejs__glide": "^3.4.1", "@types/glidejs__glide": "^3.4.2",
"@types/jest": "^27.0.3", "@types/jest": "^27.5.1",
"@types/lodash": "^4.14.177", "@types/lodash": "^4.14.182",
"@types/micro": "^7.3.6", "@types/micro": "7.3.6",
"@types/mime-types": "^2.1.1", "@types/mime-types": "^2.1.1",
"@types/module-alias": "^2.0.1", "@types/module-alias": "^2.0.1",
"@types/node": "^16.11.24", "@types/node": "14.17.6",
"@types/nodemailer": "^6.4.4", "@types/nodemailer": "^6.4.4",
"@types/qrcode": "^1.4.1", "@types/qrcode": "^1.4.1",
"@types/react": "^17.0.37", "@types/react": "18.0.9",
"@types/react-phone-number-input": "^3.0.13", "@types/react-phone-number-input": "^3.0.13",
"@types/react-virtualized-auto-sizer": "^1.0.1", "@types/react-virtualized-auto-sizer": "^1.0.1",
"@types/react-window": "^1.8.5", "@types/react-window": "^1.8.5",
"@types/stripe": "^8.0.417", "@types/stripe": "^8.0.417",
"@types/uuid": "8.3.1", "@types/uuid": "8.3.1",
"autoprefixer": "^10.4.0", "autoprefixer": "^10.4.7",
"babel-jest": "^27.3.1", "babel-jest": "^27.3.1",
"env-cmd": "10.1.0", "env-cmd": "10.1.0",
"eslint": "^8.10.0", "eslint": "^8.15.0",
"jest": "^26.0.0", "jest": "^26.0.0",
"mockdate": "^3.0.5", "mockdate": "^3.0.5",
"module-alias": "^2.2.2", "module-alias": "^2.2.2",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"postcss": "^8.4.4", "postcss": "^8.4.13",
"tailwindcss": "^3.0.23", "tailwindcss": "^3.0.24",
"ts-jest": "^26.0.0", "ts-jest": "^26.0.0",
"ts-node": "^10.6.0", "ts-node": "^10.6.0",
"typescript": "^4.5.3" "typescript": "^4.6.4"
} }
} }

View File

@ -1,7 +1,7 @@
import { BookingStatus, Credential, Prisma, SchedulingType, WebhookTriggerEvents } from "@prisma/client"; import { BookingStatus, Credential, Prisma, SchedulingType, WebhookTriggerEvents } from "@prisma/client";
import async from "async"; import async from "async";
import dayjs from "dayjs"; import dayjs from "dayjs";
import dayjsBusinessTime from "dayjs-business-time"; import dayjsBusinessTime from "dayjs-business-days2";
import isBetween from "dayjs/plugin/isBetween"; import isBetween from "dayjs/plugin/isBetween";
import timezone from "dayjs/plugin/timezone"; import timezone from "dayjs/plugin/timezone";
import utc from "dayjs/plugin/utc"; import utc from "dayjs/plugin/utc";
@ -114,7 +114,7 @@ function isOutOfBounds(
case "rolling": { case "rolling": {
const periodRollingEndDay = periodCountCalendarDays const periodRollingEndDay = periodCountCalendarDays
? dayjs().tz(timeZone).add(periodDays, "days").endOf("day") ? dayjs().tz(timeZone).add(periodDays, "days").endOf("day")
: dayjs().tz(timeZone).addBusinessTime(periodDays, "days").endOf("day"); : dayjs().tz(timeZone).businessDaysAdd(periodDays).endOf("day");
return date.endOf("day").isAfter(periodRollingEndDay); return date.endOf("day").isAfter(periodRollingEndDay);
} }

View File

@ -63,16 +63,13 @@ export default function Page({ resetPasswordRequest, csrfToken }: Props) {
</h2> </h2>
</div> </div>
<p>{t("password_has_been_reset_login")}</p> <p>{t("password_has_been_reset_login")}</p>
{ <Link href="/auth/login">
// eslint-disable-next-line @next/next/link-passhref <button
<Link href="/auth/login"> type="button"
<button className="flex w-full justify-center px-4 py-2 text-sm font-medium text-blue-600 focus:outline-none focus:ring-2 focus:ring-black focus:ring-offset-2">
type="button" {t("login")}
className="flex w-full justify-center px-4 py-2 text-sm font-medium text-blue-600 focus:outline-none focus:ring-2 focus:ring-black focus:ring-offset-2"> </button>
{t("login")} </Link>
</button>
</Link>
}
</div> </div>
</> </>
); );

View File

@ -26,7 +26,7 @@ async function _getStaticProps() {
} }
type PageProps = inferSSRProps<typeof _getStaticProps>; type PageProps = inferSSRProps<typeof _getStaticProps>;
const SandboxPage: NextPage<PageProps> = (props) => { const SandboxPage: NextPage<PageProps & { children: React.ReactNode }> = (props) => {
return ( return (
<> <>
<Head> <Head>

View File

@ -1,8 +1,8 @@
import { ExternalLinkIcon } from "@heroicons/react/solid"; import { ExternalLinkIcon } from "@heroicons/react/solid";
import { ReactNode } from "react"; import { ReactNode } from "react";
import { useIntercom } from "react-use-intercom";
import Button from "@calcom/ui/Button"; import Button from "@calcom/ui/Button";
import { useIntercom } from "@ee/lib/intercom/useIntercom";
import { useLocale } from "@lib/hooks/useLocale"; import { useLocale } from "@lib/hooks/useLocale";
import useMeQuery from "@lib/hooks/useMeQuery"; import useMeQuery from "@lib/hooks/useMeQuery";

View File

@ -4,7 +4,7 @@ import { getSession } from "next-auth/react";
import Head from "next/head"; import Head from "next/head";
import Link from "next/link"; import Link from "next/link";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import React, { useEffect } from "react"; import { useEffect } from "react";
import { useLocale } from "@lib/hooks/useLocale"; import { useLocale } from "@lib/hooks/useLocale";
import prisma from "@lib/prisma"; import prisma from "@lib/prisma";
@ -122,21 +122,23 @@ export default function JoinCall(props: JoinCallPageProps) {
<meta property="twitter:description" content={t("quick_video_meeting")} /> <meta property="twitter:description" content={t("quick_video_meeting")} />
</Head> </Head>
<div style={{ zIndex: 2, position: "relative" }}> <div style={{ zIndex: 2, position: "relative" }}>
<Link href="/" passHref> <>
{ <Link href="/" passHref>
// eslint-disable-next-line @next/next/no-img-element {
<img // eslint-disable-next-line @next/next/no-img-element
className="h-5·w-auto fixed z-10 hidden sm:inline-block" <img
src="https://cal.com/logo-white.svg" className="h-5·w-auto fixed z-10 hidden sm:inline-block"
alt="Cal.com Logo" src="https://cal.com/logo-white.svg"
style={{ alt="Cal.com Logo"
top: 46, style={{
left: 24, top: 46,
}} left: 24,
/> }}
} />
</Link> }
{JoinCall} </Link>
{JoinCall}
</>
</div> </div>
</> </>
); );

View File

@ -6,6 +6,7 @@ function chooseEmbedType(page: Page, embedType: string) {
async function gotToPreviewTab(page: Page) { async function gotToPreviewTab(page: Page) {
// To prevent early timeouts // To prevent early timeouts
// eslint-disable-next-line playwright/no-wait-for-timeout
await page.waitForTimeout(1000); await page.waitForTimeout(1000);
await page.locator("[data-testid=embed-tabs]").locator("text=Preview").click(); await page.locator("[data-testid=embed-tabs]").locator("text=Preview").click();
} }

View File

@ -22,7 +22,7 @@ test.describe("Event Types tests", () => {
test.use({ storageState: "playwright/artifacts/proStorageState.json" }); test.use({ storageState: "playwright/artifacts/proStorageState.json" });
test("has at least 2 events", async ({ page }) => { test("has at least 2 events", async ({ page }) => {
const $eventTypes = await page.locator("[data-testid=event-types] > *"); const $eventTypes = page.locator("[data-testid=event-types] > *");
const count = await $eventTypes.count(); const count = await $eventTypes.count();
expect(count).toBeGreaterThanOrEqual(2); expect(count).toBeGreaterThanOrEqual(2);
@ -48,7 +48,8 @@ test.describe("Event Types tests", () => {
await page.goto("/event-types"); await page.goto("/event-types");
isCreated = await expect(page.locator(`text='${eventTitle}'`)).toBeVisible(); isCreated = page.locator(`text='${eventTitle}'`);
await expect(isCreated).toBeVisible();
}); });
test("enabling recurring event comes with default options", async ({ page }) => { test("enabling recurring event comes with default options", async ({ page }) => {
@ -67,22 +68,21 @@ test.describe("Event Types tests", () => {
}); });
await page.click("[data-testid=show-advanced-settings]"); await page.click("[data-testid=show-advanced-settings]");
await expect(await page.locator("[data-testid=recurring-event-collapsible] > *")).not.toBeVisible(); await expect(page.locator("[data-testid=recurring-event-collapsible] > *")).not.toBeVisible();
await page.click("[data-testid=recurring-event-check]"); await page.click("[data-testid=recurring-event-check]");
isCreated = await expect( isCreated = page.locator("[data-testid=recurring-event-collapsible] > *");
await page.locator("[data-testid=recurring-event-collapsible] > *") await expect(isCreated).toBeVisible();
).toBeVisible();
await expect( expect(
await page await page
.locator("[data-testid=recurring-event-collapsible] input[type=number]") .locator("[data-testid=recurring-event-collapsible] input[type=number]")
.nth(0) .nth(0)
.getAttribute("value") .getAttribute("value")
).toBe("1"); ).toBe("1");
await expect( expect(
await page.locator("[data-testid=recurring-event-collapsible] div[class$=singleValue]").textContent() await page.locator("[data-testid=recurring-event-collapsible] div[class$=singleValue]").textContent()
).toBe("week"); ).toBe("week");
await expect( expect(
await page await page
.locator("[data-testid=recurring-event-collapsible] input[type=number]") .locator("[data-testid=recurring-event-collapsible] input[type=number]")
.nth(1) .nth(1)
@ -98,21 +98,21 @@ test.describe("Event Types tests", () => {
await page.click("[data-testid=event-type-options-3]"); await page.click("[data-testid=event-type-options-3]");
await page.click("[data-testid=event-type-duplicate-3]"); await page.click("[data-testid=event-type-duplicate-3]");
const url = await page.url(); const url = page.url();
const params = new URLSearchParams(url); const params = new URLSearchParams(url);
await expect(params.get("title")).toBe(firstTitle); expect(params.get("title")).toBe(firstTitle);
await expect(params.get("slug")).toBe(firstSlug); expect(params.get("slug")).toBe(firstSlug);
const formTitle = await page.inputValue("[name=title]"); const formTitle = await page.inputValue("[name=title]");
const formSlug = await page.inputValue("[name=slug]"); const formSlug = await page.inputValue("[name=slug]");
await expect(formTitle).toBe(firstTitle); expect(formTitle).toBe(firstTitle);
await expect(formSlug).toBe(firstSlug); expect(formSlug).toBe(firstSlug);
}); });
test("edit first event", async ({ page }) => { test("edit first event", async ({ page }) => {
const $eventTypes = await page.locator("[data-testid=event-types] > *"); const $eventTypes = page.locator("[data-testid=event-types] > *");
const firstEventTypeElement = await $eventTypes.first(); const firstEventTypeElement = $eventTypes.first();
await firstEventTypeElement.click(); await firstEventTypeElement.click();
await page.waitForNavigation({ await page.waitForNavigation({
url: (url) => { url: (url) => {
@ -135,12 +135,12 @@ test.describe("Event Types tests", () => {
test.use({ storageState: "playwright/artifacts/freeStorageState.json" }); test.use({ storageState: "playwright/artifacts/freeStorageState.json" });
test("has at least 2 events where first is enabled", async ({ page }) => { test("has at least 2 events where first is enabled", async ({ page }) => {
const $eventTypes = await page.locator("[data-testid=event-types] > *"); const $eventTypes = page.locator("[data-testid=event-types] > *");
const count = await $eventTypes.count(); const count = await $eventTypes.count();
expect(count).toBeGreaterThanOrEqual(2); expect(count).toBeGreaterThanOrEqual(2);
const $first = await $eventTypes.first(); const $first = $eventTypes.first();
const $last = await $eventTypes.last()!; const $last = $eventTypes.last()!;
expect(await $first.getAttribute("data-disabled")).toBe("0"); expect(await $first.getAttribute("data-disabled")).toBe("0");
expect(await $last.getAttribute("data-disabled")).toBe("1"); expect(await $last.getAttribute("data-disabled")).toBe("1");
}); });
@ -150,8 +150,8 @@ test.describe("Event Types tests", () => {
}); });
test("edit first event", async ({ page }) => { test("edit first event", async ({ page }) => {
const $eventTypes = await page.locator("[data-testid=event-types] > *"); const $eventTypes = page.locator("[data-testid=event-types] > *");
const firstEventTypeElement = await $eventTypes.first(); const firstEventTypeElement = $eventTypes.first();
await firstEventTypeElement.click(); await firstEventTypeElement.click();
await page.waitForNavigation({ await page.waitForNavigation({
url: (url) => { url: (url) => {

View File

@ -140,6 +140,7 @@ export async function login(
await signInLocator.click(); await signInLocator.click();
// 2 seconds of delay to give the session enough time for a clean load // 2 seconds of delay to give the session enough time for a clean load
// eslint-disable-next-line playwright/no-wait-for-timeout
await page.waitForTimeout(2000); await page.waitForTimeout(2000);
} }

View File

@ -35,6 +35,7 @@ test.describe("hash my url", () => {
await page.keyboard.press("Enter"); await page.keyboard.press("Enter");
// To prevent an early 404 // To prevent an early 404
// eslint-disable-next-line playwright/no-wait-for-timeout
await page.waitForTimeout(1000); await page.waitForTimeout(1000);
// book using generated url hash // book using generated url hash

View File

@ -12,6 +12,7 @@ const IS_STRIPE_ENABLED = !!(
); );
test.describe("Stripe integration", () => { test.describe("Stripe integration", () => {
// eslint-disable-next-line playwright/no-skipped-test
test.skip(!IS_STRIPE_ENABLED, "It should only run if Stripe is installed"); test.skip(!IS_STRIPE_ENABLED, "It should only run if Stripe is installed");
test.describe("Stripe integration dashboard", () => { test.describe("Stripe integration dashboard", () => {

View File

@ -2,6 +2,7 @@ import { expect, Page, test } from "@playwright/test";
import { createServer, IncomingMessage, ServerResponse } from "http"; import { createServer, IncomingMessage, ServerResponse } from "http";
export function todo(title: string) { export function todo(title: string) {
// eslint-disable-next-line playwright/no-skipped-test
test.skip(title, () => {}); test.skip(title, () => {});
} }
@ -72,6 +73,7 @@ export async function selectFirstAvailableTimeSlotNextMonth(page: Page) {
// @TODO: Find a better way to make test wait for full month change render to end // @TODO: Find a better way to make test wait for full month change render to end
// so it can click up on the right day, also when resolve remove other todos // so it can click up on the right day, also when resolve remove other todos
// Waiting for full month increment // Waiting for full month increment
// eslint-disable-next-line playwright/no-wait-for-timeout
await page.waitForTimeout(1000); await page.waitForTimeout(1000);
// TODO: Find out why the first day is always booked on tests // TODO: Find out why the first day is always booked on tests
await page.locator('[data-testid="day"][data-disabled="false"]').nth(1).click(); await page.locator('[data-testid="day"][data-disabled="false"]').nth(1).click();
@ -83,6 +85,7 @@ export async function selectSecondAvailableTimeSlotNextMonth(page: Page) {
// @TODO: Find a better way to make test wait for full month change render to end // @TODO: Find a better way to make test wait for full month change render to end
// so it can click up on the right day, also when resolve remove other todos // so it can click up on the right day, also when resolve remove other todos
// Waiting for full month increment // Waiting for full month increment
// eslint-disable-next-line playwright/no-wait-for-timeout
await page.waitForTimeout(1000); await page.waitForTimeout(1000);
// TODO: Find out why the first day is always booked on tests // TODO: Find out why the first day is always booked on tests
await page.locator('[data-testid="day"][data-disabled="false"]').nth(1).click(); await page.locator('[data-testid="day"][data-disabled="false"]').nth(1).click();

View File

@ -3,6 +3,7 @@ import { expect, test } from "@playwright/test";
import { IS_GOOGLE_LOGIN_ENABLED, IS_SAML_LOGIN_ENABLED } from "../server/lib/constants"; import { IS_GOOGLE_LOGIN_ENABLED, IS_SAML_LOGIN_ENABLED } from "../server/lib/constants";
test("Should display Google Login button", async ({ page }) => { test("Should display Google Login button", async ({ page }) => {
// eslint-disable-next-line playwright/no-skipped-test
test.skip(!IS_GOOGLE_LOGIN_ENABLED, "It should only run if Google Login is installed"); test.skip(!IS_GOOGLE_LOGIN_ENABLED, "It should only run if Google Login is installed");
await page.goto(`${process.env.PLAYWRIGHT_TEST_BASE_URL}/auth/login`); await page.goto(`${process.env.PLAYWRIGHT_TEST_BASE_URL}/auth/login`);
@ -11,6 +12,7 @@ test("Should display Google Login button", async ({ page }) => {
}); });
test("Should display SAML Login button", async ({ page }) => { test("Should display SAML Login button", async ({ page }) => {
// eslint-disable-next-line playwright/no-skipped-test
test.skip(!IS_SAML_LOGIN_ENABLED, "It should only run if SAML Login is installed"); test.skip(!IS_SAML_LOGIN_ENABLED, "It should only run if SAML Login is installed");
await page.goto(`${process.env.PLAYWRIGHT_TEST_BASE_URL}/auth/login`); await page.goto(`${process.env.PLAYWRIGHT_TEST_BASE_URL}/auth/login`);

View File

@ -41,6 +41,7 @@ test.describe("Onboarding", () => {
// Try to go getting started with a available username // Try to go getting started with a available username
await page.goto("/getting-started"); await page.goto("/getting-started");
// Wait for useEffectUpdate to run // Wait for useEffectUpdate to run
// eslint-disable-next-line playwright/no-wait-for-timeout
await page.waitForTimeout(1000); await page.waitForTimeout(1000);
const updatedUser = await prisma.user.findUnique({ const updatedUser = await prisma.user.findUnique({

View File

@ -102,6 +102,7 @@ test.describe("Reschedule Tests", async () => {
}); });
test("Unpaid rescheduling should go to payment page", async ({ page, users, bookings, payments }) => { test("Unpaid rescheduling should go to payment page", async ({ page, users, bookings, payments }) => {
// eslint-disable-next-line playwright/no-skipped-test
test.skip(!IS_STRIPE_ENABLED, "Skipped as Stripe is not installed"); test.skip(!IS_STRIPE_ENABLED, "Skipped as Stripe is not installed");
const user = await users.create(); const user = await users.create();
await user.login(); await user.login();

View File

@ -7,6 +7,7 @@ test.describe("SAML tests", () => {
test.use({ storageState: "playwright/artifacts/proStorageState.json" }); test.use({ storageState: "playwright/artifacts/proStorageState.json" });
test("test SAML configuration UI with pro@example.com", async ({ page }) => { test("test SAML configuration UI with pro@example.com", async ({ page }) => {
// eslint-disable-next-line playwright/no-skipped-test
test.skip(!IS_SAML_LOGIN_ENABLED, "It should only run if SAML is enabled"); test.skip(!IS_SAML_LOGIN_ENABLED, "It should only run if SAML is enabled");
// Try to go Security page // Try to go Security page
await page.goto("/settings/security"); await page.goto("/settings/security");

File diff suppressed because it is too large Load Diff

@ -1 +1 @@
Subproject commit b86553c8497b25a347fa8e8efcabd30f981506ac Subproject commit 100e69ab175b7a8c6c2bf564ce757b10ff74292e

View File

@ -44,12 +44,17 @@
}, },
"devDependencies": { "devDependencies": {
"dotenv-checker": "^1.1.5", "dotenv-checker": "^1.1.5",
"husky": "^7.0.1", "husky": "^8.0.1",
"lint-staged": "^12.3.5", "lint-staged": "^12.4.1",
"prettier": "^2.5.1" "prettier": "^2.5.1"
}, },
"dependencies": { "dependencies": {
"turbo": "latest" "turbo": "1.2.9"
},
"resolutions": {
"@types/node": "14.17.6",
"@types/react": "18.0.9",
"@types/react-dom": "18.0.4"
}, },
"lint-staged": { "lint-staged": {
"apps/**/*.{js,ts,jsx,tsx}": [ "apps/**/*.{js,ts,jsx,tsx}": [

View File

@ -7,7 +7,7 @@
"description": "Apple calendar runs both the macOS and iOS mobile operating systems. Offering online cloud backup of calendars using Apples iCloud service, it can sync with Google Calendar and Microsoft Exchange Server. Users can schedule events in their day that include time, location, duration, and extra notes.", "description": "Apple calendar runs both the macOS and iOS mobile operating systems. Offering online cloud backup of calendars using Apples iCloud service, it can sync with Google Calendar and Microsoft Exchange Server. Users can schedule events in their day that include time, location, duration, and extra notes.",
"dependencies": { "dependencies": {
"@calcom/prisma": "*", "@calcom/prisma": "*",
"react-hook-form": "^7.29.0" "react-hook-form": "^7.31.1"
}, },
"devDependencies": { "devDependencies": {
"@calcom/types": "*" "@calcom/types": "*"

View File

@ -10,7 +10,7 @@
"@calcom/lib": "*", "@calcom/lib": "*",
"@calcom/prisma": "*", "@calcom/prisma": "*",
"@calcom/ui": "*", "@calcom/ui": "*",
"react-hook-form": "^7.29.0" "react-hook-form": "^7.31.1"
}, },
"devDependencies": { "devDependencies": {
"@calcom/types": "*" "@calcom/types": "*"

View File

@ -7,7 +7,7 @@
"dependencies": { "dependencies": {
"@calcom/lib": "*", "@calcom/lib": "*",
"@calcom/prisma": "*", "@calcom/prisma": "*",
"@hubspot/api-client": "^6.0.1-beta4" "@hubspot/api-client": "^6.0.1"
}, },
"devDependencies": { "devDependencies": {
"@calcom/types": "*" "@calcom/types": "*"

View File

@ -7,6 +7,7 @@ module.exports = {
}, },
}, },
rules: { rules: {
"@next/next/no-img-element": "off",
"@next/next/no-html-link-for-pages": "off", "@next/next/no-html-link-for-pages": "off",
"jsx-a11y/role-supports-aria-props": "off", // @see https://github.com/vercel/next.js/issues/27989#issuecomment-897638654 "jsx-a11y/role-supports-aria-props": "off", // @see https://github.com/vercel/next.js/issues/27989#issuecomment-897638654
}, },

View File

@ -8,19 +8,19 @@
"prettier-preset.js" "prettier-preset.js"
], ],
"dependencies": { "dependencies": {
"eslint-config-next": "^12.0.8", "eslint-config-next": "^12.1.6",
"eslint-config-prettier": "^8.5.0", "eslint-config-prettier": "^8.5.0",
"eslint-plugin-playwright": "^0.8.0", "eslint-plugin-playwright": "^0.9.0",
"eslint-plugin-prettier": "^4.0.0" "eslint-plugin-prettier": "^4.0.0"
}, },
"devDependencies": { "devDependencies": {
"eslint": "^8.11.0", "@tailwindcss/forms": "^0.5.1",
"@tailwindcss/forms": "^0.5.0",
"@tailwindcss/typography": "^0.5.2", "@tailwindcss/typography": "^0.5.2",
"@trivago/prettier-plugin-sort-imports": "3.2.0", "@trivago/prettier-plugin-sort-imports": "3.2.0",
"prettier-plugin-tailwindcss": "^0.1.8", "eslint": "^8.15.0",
"prettier": "^2.5.1", "prettier": "^2.5.1",
"tailwindcss": "^3.0.23", "prettier-plugin-tailwindcss": "^0.1.11",
"typescript": "^4.5.3" "tailwindcss": "^3.0.24",
"typescript": "^4.6.4"
} }
} }

View File

@ -11,7 +11,7 @@
"dependencies": { "dependencies": {
"@calcom/app-store": "*", "@calcom/app-store": "*",
"@calcom/lib": "*", "@calcom/lib": "*",
"dayjs": "^1.10.4", "dayjs": "^1.11.2",
"ical.js": "^1.4.0", "ical.js": "^1.4.0",
"ics": "^2.31.0", "ics": "^2.31.0",
"uuid": "^8.3.2" "uuid": "^8.3.2"

View File

@ -26,14 +26,14 @@
} }
}, },
"devDependencies": { "devDependencies": {
"autoprefixer": "^10.4.4", "autoprefixer": "^10.4.7",
"eslint": "^8.10.0", "eslint": "^8.15.0",
"postcss": "^8.4.12", "postcss": "^8.4.13",
"vite": "^2.8.6" "vite": "^2.9.9"
}, },
"dependencies": { "dependencies": {
"tailwindcss": "^3.0.24", "tailwindcss": "^3.0.24",
"tsc": "^2.0.4", "tsc": "^2.0.4",
"typescript": "^4.6.3" "typescript": "^4.6.4"
} }
} }

View File

@ -1,215 +0,0 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
esbuild-android-64@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.27.tgz#b868bbd9955a92309c69df628d8dd1945478b45c"
integrity sha512-LuEd4uPuj/16Y8j6kqy3Z2E9vNY9logfq8Tq+oTE2PZVuNs3M1kj5Qd4O95ee66yDGb3isaOCV7sOLDwtMfGaQ==
esbuild-android-arm64@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.27.tgz#e7d6430555e8e9c505fd87266bbc709f25f1825c"
integrity sha512-E8Ktwwa6vX8q7QeJmg8yepBYXaee50OdQS3BFtEHKrzbV45H4foMOeEE7uqdjGQZFBap5VAqo7pvjlyA92wznQ==
esbuild-darwin-64@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.27.tgz#4dc7484127564e89b4445c0a560a3cb50b3d68e1"
integrity sha512-czw/kXl/1ZdenPWfw9jDc5iuIYxqUxgQ/Q+hRd4/3udyGGVI31r29LCViN2bAJgGvQkqyLGVcG03PJPEXQ5i2g==
esbuild-darwin-arm64@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.27.tgz#469e59c665f84a8ed323166624c5e7b9b2d22ac1"
integrity sha512-BEsv2U2U4o672oV8+xpXNxN9bgqRCtddQC6WBh4YhXKDcSZcdNh7+6nS+DM2vu7qWIWNA4JbRG24LUUYXysimQ==
esbuild-freebsd-64@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.27.tgz#895df03bf5f87094a56c9a5815bf92e591903d70"
integrity sha512-7FeiFPGBo+ga+kOkDxtPmdPZdayrSzsV9pmfHxcyLKxu+3oTcajeZlOO1y9HW+t5aFZPiv7czOHM4KNd0tNwCA==
esbuild-freebsd-arm64@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.27.tgz#0b72a41a6b8655e9a8c5608f2ec1afdcf6958441"
integrity sha512-8CK3++foRZJluOWXpllG5zwAVlxtv36NpHfsbWS7TYlD8S+QruXltKlXToc/5ZNzBK++l6rvRKELu/puCLc7jA==
esbuild-linux-32@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.27.tgz#43b8ba3803b0bbe7f051869c6a8bf6de1e95de28"
integrity sha512-qhNYIcT+EsYSBClZ5QhLzFzV5iVsP1YsITqblSaztr3+ZJUI+GoK8aXHyzKd7/CKKuK93cxEMJPpfi1dfsOfdw==
esbuild-linux-64@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.27.tgz#dc8072097327ecfadba1735562824ce8c05dd0bd"
integrity sha512-ESjck9+EsHoTaKWlFKJpPZRN26uiav5gkI16RuI8WBxUdLrrAlYuYSndxxKgEn1csd968BX/8yQZATYf/9+/qg==
esbuild-linux-arm64@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.27.tgz#c52b58cbe948426b1559910f521b0a3f396f10b8"
integrity sha512-no6Mi17eV2tHlJnqBHRLekpZ2/VYx+NfGxKcBE/2xOMYwctsanCaXxw4zapvNrGE9X38vefVXLz6YCF8b1EHiQ==
esbuild-linux-arm@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.27.tgz#df869dbd67d4ee3a04b3c7273b6bd2b233e78a18"
integrity sha512-JnnmgUBdqLQO9hoNZQqNHFWlNpSX82vzB3rYuCJMhtkuaWQEmQz6Lec1UIxJdC38ifEghNTBsF9bbe8dFilnCw==
esbuild-linux-mips64le@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.27.tgz#a2b646d9df368b01aa970a7b8968be6dd6b01d19"
integrity sha512-NolWP2uOvIJpbwpsDbwfeExZOY1bZNlWE/kVfkzLMsSgqeVcl5YMen/cedRe9mKnpfLli+i0uSp7N+fkKNU27A==
esbuild-linux-ppc64le@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.27.tgz#9a21af766a0292578a3009c7408b8509cac7cefd"
integrity sha512-/7dTjDvXMdRKmsSxKXeWyonuGgblnYDn0MI1xDC7J1VQXny8k1qgNp6VmrlsawwnsymSUUiThhkJsI+rx0taNA==
esbuild-linux-riscv64@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.27.tgz#344a27f91568056a5903ad5841b447e00e78d740"
integrity sha512-D+aFiUzOJG13RhrSmZgrcFaF4UUHpqj7XSKrIiCXIj1dkIkFqdrmqMSOtSs78dOtObWiOrFCDDzB24UyeEiNGg==
esbuild-linux-s390x@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.27.tgz#73a7309bd648a07ef58f069658f989a5096130db"
integrity sha512-CD/D4tj0U4UQjELkdNlZhQ8nDHU5rBn6NGp47Hiz0Y7/akAY5i0oGadhEIg0WCY/HYVXFb3CsSPPwaKcTOW3bg==
esbuild-netbsd-64@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.27.tgz#482a587cdbd18a6c264a05136596927deb46c30a"
integrity sha512-h3mAld69SrO1VoaMpYl3a5FNdGRE/Nqc+E8VtHOag4tyBwhCQXxtvDDOAKOUQexBGca0IuR6UayQ4ntSX5ij1Q==
esbuild-openbsd-64@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.27.tgz#e99f8cdc63f1628747b63edd124d53cf7796468d"
integrity sha512-xwSje6qIZaDHXWoPpIgvL+7fC6WeubHHv18tusLYMwL+Z6bEa4Pbfs5IWDtQdHkArtfxEkIZz77944z8MgDxGw==
esbuild-sunos-64@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.27.tgz#8611d825bcb8239c78d57452e83253a71942f45c"
integrity sha512-/nBVpWIDjYiyMhuqIqbXXsxBc58cBVH9uztAOIfWShStxq9BNBik92oPQPJ57nzWXRNKQUEFWr4Q98utDWz7jg==
esbuild-windows-32@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.27.tgz#c06374206d4d92dd31d4fda299b09f51a35e82f6"
integrity sha512-Q9/zEjhZJ4trtWhFWIZvS/7RUzzi8rvkoaS9oiizkHTTKd8UxFwn/Mm2OywsAfYymgUYm8+y2b+BKTNEFxUekw==
esbuild-windows-64@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.27.tgz#756631c1d301dfc0d1a887deed2459ce4079582f"
integrity sha512-b3y3vTSl5aEhWHK66ngtiS/c6byLf6y/ZBvODH1YkBM+MGtVL6jN38FdHUsZasCz9gFwYs/lJMVY9u7GL6wfYg==
esbuild-windows-arm64@0.14.27:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.27.tgz#ad7e187193dcd18768b16065a950f4441d7173f4"
integrity sha512-I/reTxr6TFMcR5qbIkwRGvldMIaiBu2+MP0LlD7sOlNXrfqIl9uNjsuxFPGEG4IRomjfQ5q8WT+xlF/ySVkqKg==
esbuild@^0.14.14:
version "0.14.27"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.27.tgz#41fe0f1b6b68b9f77cac025009bc54bb96e616f1"
integrity sha512-MZQt5SywZS3hA9fXnMhR22dv0oPGh6QtjJRIYbgL1AeqAoQZE+Qn5ppGYQAoHv/vq827flj4tIJ79Mrdiwk46Q==
optionalDependencies:
esbuild-android-64 "0.14.27"
esbuild-android-arm64 "0.14.27"
esbuild-darwin-64 "0.14.27"
esbuild-darwin-arm64 "0.14.27"
esbuild-freebsd-64 "0.14.27"
esbuild-freebsd-arm64 "0.14.27"
esbuild-linux-32 "0.14.27"
esbuild-linux-64 "0.14.27"
esbuild-linux-arm "0.14.27"
esbuild-linux-arm64 "0.14.27"
esbuild-linux-mips64le "0.14.27"
esbuild-linux-ppc64le "0.14.27"
esbuild-linux-riscv64 "0.14.27"
esbuild-linux-s390x "0.14.27"
esbuild-netbsd-64 "0.14.27"
esbuild-openbsd-64 "0.14.27"
esbuild-sunos-64 "0.14.27"
esbuild-windows-32 "0.14.27"
esbuild-windows-64 "0.14.27"
esbuild-windows-arm64 "0.14.27"
fsevents@~2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
function-bind@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
has@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
dependencies:
function-bind "^1.1.1"
is-core-module@^2.8.1:
version "2.8.1"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211"
integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==
dependencies:
has "^1.0.3"
nanoid@^3.3.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35"
integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==
path-parse@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
picocolors@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
postcss@^8.4.6:
version "8.4.12"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.12.tgz#1e7de78733b28970fa4743f7da6f3763648b1905"
integrity sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==
dependencies:
nanoid "^3.3.1"
picocolors "^1.0.0"
source-map-js "^1.0.2"
resolve@^1.22.0:
version "1.22.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198"
integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==
dependencies:
is-core-module "^2.8.1"
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
rollup@^2.59.0:
version "2.70.1"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.70.1.tgz#824b1f1f879ea396db30b0fc3ae8d2fead93523e"
integrity sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==
optionalDependencies:
fsevents "~2.3.2"
source-map-js@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
supports-preserve-symlinks-flag@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
vite@^2.8.6:
version "2.8.6"
resolved "https://registry.yarnpkg.com/vite/-/vite-2.8.6.tgz#32d50e23c99ca31b26b8ccdc78b1d72d4d7323d3"
integrity sha512-e4H0QpludOVKkmOsRyqQ7LTcMUDF3mcgyNU4lmi0B5JUbe0ZxeBBl8VoZ8Y6Rfn9eFKYtdXNPcYK97ZwH+K2ug==
dependencies:
esbuild "^0.14.14"
postcss "^8.4.6"
resolve "^1.22.0"
rollup "^2.59.0"
optionalDependencies:
fsevents "~2.3.2"

View File

@ -31,14 +31,14 @@
}, },
"devDependencies": { "devDependencies": {
"@calcom/embed-snippet": "^1.0.0", "@calcom/embed-snippet": "^1.0.0",
"@types/react": "^17.0.0", "@types/react": "18.0.9",
"@types/react-dom": "^17.0.0", "@types/react-dom": "18.0.4",
"@vitejs/plugin-react": "^1.3.0", "@vitejs/plugin-react": "^1.3.2",
"eslint": "^8.10.0", "eslint": "^8.15.0",
"vite": "^2.9.5" "vite": "^2.9.9"
}, },
"dependencies": { "dependencies": {
"playwright": "^1.21.1", "playwright": "^1.22.1",
"typescript": "^4.6.3" "typescript": "^4.6.4"
} }
} }

View File

@ -8,6 +8,7 @@ export default function useEmbed(embedJsUrl?: string) {
setGlobalCal(() => { setGlobalCal(() => {
return EmbedSnippet(embedJsUrl); return EmbedSnippet(embedJsUrl);
}); });
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []); }, []);
return globalCal; return globalCal;
} }

View File

@ -9,6 +9,6 @@
"lint": "eslint --ext .ts,.js src" "lint": "eslint --ext .ts,.js src"
}, },
"devDependencies": { "devDependencies": {
"eslint": "^8.10.0" "eslint": "^8.15.0"
} }
} }

View File

@ -4,7 +4,8 @@
*/ */
import type { Cal as CalClass, InstructionQueue } from "@calcom/embed-core/src/embed"; import type { Cal as CalClass, InstructionQueue } from "@calcom/embed-core/src/embed";
const WEBAPP_URL = import.meta.env.NEXT_PUBLIC_WEBAPP_URL || `https://${import.meta.env.NEXT_PUBLIC_VERCEL_URL}`; const WEBAPP_URL =
import.meta.env.NEXT_PUBLIC_WEBAPP_URL || `https://${import.meta.env.NEXT_PUBLIC_VERCEL_URL}`;
const EMBED_LIB_URL = import.meta.env.NEXT_PUBLIC_EMBED_LIB_URL || `${WEBAPP_URL}/embed/embed.js`; const EMBED_LIB_URL = import.meta.env.NEXT_PUBLIC_EMBED_LIB_URL || `${WEBAPP_URL}/embed/embed.js`;

View File

@ -6,18 +6,17 @@
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"bcryptjs": "^2.4.3", "bcryptjs": "^2.4.3",
"dayjs-business-time": "^1.0.4", "dayjs": "^1.11.2",
"dayjs": "^1.10.4",
"ical.js": "^1.4.0", "ical.js": "^1.4.0",
"ics": "^2.31.0", "ics": "^2.31.0",
"tsdav": "2.0.0", "next-i18next": "^11.0.0",
"react-hot-toast": "^2.1.0",
"tsdav": "2.0.2",
"tslog": "^3.2.1", "tslog": "^3.2.1",
"uuid": "^8.3.2", "uuid": "^8.3.2"
"next-i18next": "^8.9.0",
"react-hot-toast": "^2.1.0"
}, },
"devDependencies": { "devDependencies": {
"@calcom/tsconfig": "*", "@calcom/tsconfig": "*",
"typescript": "^4.5.3" "typescript": "^4.6.4"
} }
} }

View File

@ -20,14 +20,14 @@
}, },
"devDependencies": { "devDependencies": {
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"prisma": "^3.13.0", "prisma": "^3.14.0",
"ts-node": "^10.6.0", "ts-node": "^10.6.0",
"zod": "^3.14.4", "zod": "^3.16.0",
"zod-prisma": "^0.5.4" "zod-prisma": "^0.5.4"
}, },
"dependencies": { "dependencies": {
"@calcom/lib": "*", "@calcom/lib": "*",
"@prisma/client": "^3.13.0" "@prisma/client": "^3.14.0"
}, },
"main": "index.ts", "main": "index.ts",
"types": "index.d.ts", "types": "index.d.ts",

View File

@ -215,16 +215,16 @@ model VerificationToken {
} }
model BookingReference { model BookingReference {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
type String type String
uid String uid String
meetingId String? meetingId String?
meetingPassword String? meetingPassword String?
meetingUrl String? meetingUrl String?
booking Booking? @relation(fields: [bookingId], references: [id], onDelete: Cascade) booking Booking? @relation(fields: [bookingId], references: [id], onDelete: Cascade)
bookingId Int? bookingId Int?
externalCalendarId String? externalCalendarId String?
deleted Boolean? deleted Boolean?
} }
model Attendee { model Attendee {

View File

@ -13,10 +13,10 @@
"dependencies": { "dependencies": {
"@calcom/ee": "*", "@calcom/ee": "*",
"@calcom/lib": "*", "@calcom/lib": "*",
"@stripe/react-stripe-js": "^1.4.1", "@stripe/react-stripe-js": "^1.8.0",
"@stripe/stripe-js": "^1.16.0", "@stripe/stripe-js": "^1.29.0",
"dayjs": "^1.10.4", "dayjs": "^1.11.2",
"stripe": "^8.191.0" "stripe": "^9.1.0"
}, },
"main": "index.ts", "main": "index.ts",
"types": "index.d.ts", "types": "index.d.ts",

View File

@ -9,6 +9,6 @@
"react-library.json" "react-library.json"
], ],
"devDependencies": { "devDependencies": {
"tsconfig-paths": "^3.12.0" "tsconfig-paths": "^4.0.0"
} }
} }

View File

@ -17,8 +17,8 @@ export type ButtonBaseProps = {
}; };
export type ButtonProps = ButtonBaseProps & export type ButtonProps = ButtonBaseProps &
( (
| (Omit<JSX.IntrinsicElements["a"], "href"> & { href: LinkProps["href"] }) | (Omit<JSX.IntrinsicElements["a"], "href" | "onClick"> & { href: LinkProps["href"] })
| (JSX.IntrinsicElements["button"] & { href?: never }) | (Omit<JSX.IntrinsicElements["button"], "onClick"> & { href?: never })
); );
export const Button = forwardRef<HTMLAnchorElement | HTMLButtonElement, ButtonProps>(function Button( export const Button = forwardRef<HTMLAnchorElement | HTMLButtonElement, ButtonProps>(function Button(

View File

@ -6,14 +6,14 @@
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@radix-ui/react-dialog": "^0.1.0", "@radix-ui/react-dialog": "^0.1.0",
"next": "^12.1.0" "next": "^12.1.6"
}, },
"devDependencies": { "devDependencies": {
"@calcom/config": "*", "@calcom/config": "*",
"@calcom/lib": "*", "@calcom/lib": "*",
"@calcom/tsconfig": "*", "@calcom/tsconfig": "*",
"@types/react": "^17.0.37", "@types/react": "18.0.9",
"@types/react-dom": "^17.0.11", "@types/react-dom": "18.0.4",
"typescript": "^4.5.3" "typescript": "^4.6.4"
} }
} }

View File

@ -14,6 +14,7 @@ interface AvatarProps extends SkeletonBaseProps {
interface SkeletonContainer { interface SkeletonContainer {
as?: keyof JSX.IntrinsicElements; as?: keyof JSX.IntrinsicElements;
children?: React.ReactNode;
} }
const SkeletonAvatar: React.FC<AvatarProps> = ({ width, height }) => { const SkeletonAvatar: React.FC<AvatarProps> = ({ width, height }) => {

3903
yarn.lock

File diff suppressed because it is too large Load Diff