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:
parent
683e8c4490
commit
db01f7be19
|
@ -1 +1 @@
|
||||||
Subproject commit 943cd10de1f6661273d2ec18acdaa93118852714
|
Subproject commit a3e7b8638ce3c814f64f7a8b6c6079fa3d8e3538
|
2
apps/api
2
apps/api
|
@ -1 +1 @@
|
||||||
Subproject commit be2d4338ee1023a2d2862978ccf91554d47ff51f
|
Subproject commit 64f5ac5723c0a1d48bb7b29957ea0fc01c837ca8
|
|
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
3623
apps/docs/yarn.lock
3623
apps/docs/yarn.lock
File diff suppressed because it is too large
Load Diff
|
@ -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
|
@ -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
|
||||||
|
|
|
@ -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">;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 }) => {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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}
|
||||||
|
|
|
@ -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" />
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
|
@ -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 & {
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) => {
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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", () => {
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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`);
|
||||||
|
|
|
@ -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({
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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");
|
||||||
|
|
12313
apps/web/yarn.lock
12313
apps/web/yarn.lock
File diff suppressed because it is too large
Load Diff
|
@ -1 +1 @@
|
||||||
Subproject commit b86553c8497b25a347fa8e8efcabd30f981506ac
|
Subproject commit 100e69ab175b7a8c6c2bf564ce757b10ff74292e
|
11
package.json
11
package.json
|
@ -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}": [
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
"description": "Apple calendar runs both the macOS and iOS mobile operating systems. Offering online cloud backup of calendars using Apple’s 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 Apple’s 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": "*"
|
||||||
|
|
|
@ -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": "*"
|
||||||
|
|
|
@ -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": "*"
|
||||||
|
|
|
@ -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
|
||||||
},
|
},
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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`;
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -9,6 +9,6 @@
|
||||||
"react-library.json"
|
"react-library.json"
|
||||||
],
|
],
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"tsconfig-paths": "^3.12.0"
|
"tsconfig-paths": "^4.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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(
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 }) => {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user