patch applied
This commit is contained in:
parent
801e4c4600
commit
010d82ec00
|
@ -21,7 +21,7 @@ export default function AppsShell({ children }: { children: React.ReactNode }) {
|
|||
|
||||
return (
|
||||
<>
|
||||
<div className="block mb-12 lg:hidden">
|
||||
<div className="mb-12 block lg:hidden">
|
||||
{status === "authenticated" && <NavTabs tabs={tabs} linkProps={{ shallow: true }} />}
|
||||
</div>
|
||||
<main>{children}</main>
|
||||
|
|
|
@ -67,7 +67,7 @@ const DestinationCalendarSelector = ({
|
|||
placeholder={!hidePlaceholder ? `${t("select_destination_calendar")}:` : undefined}
|
||||
options={options}
|
||||
isSearchable={false}
|
||||
className="focus:border-primary-500 focus:ring-primary-500 mt-1 mb-2 block w-full min-w-0 flex-1 rounded-none rounded-r-md border-gray-300 sm:text-sm"
|
||||
className="focus:ring-primary-500 focus:border-primary-500 mt-1 mb-2 block w-full min-w-0 flex-1 rounded-none rounded-r-md border-gray-300 sm:text-sm"
|
||||
onChange={(option) => {
|
||||
setSelectedOption(option);
|
||||
if (!option) {
|
||||
|
|
|
@ -11,7 +11,7 @@ export default function AllApps() {
|
|||
return (
|
||||
<div className="mb-16">
|
||||
<h2 className="mb-2 text-lg font-semibold text-gray-900">{t("all_apps")}</h2>
|
||||
<div className="grid gap-3 grid-col-1 md:grid-cols-3">
|
||||
<div className="grid-col-1 grid gap-3 md:grid-cols-3">
|
||||
{apps.map((app) => (
|
||||
<AppCard
|
||||
key={app.name}
|
||||
|
|
|
@ -16,12 +16,12 @@ interface AppCardProps {
|
|||
export default function AppCard(props: AppCardProps) {
|
||||
return (
|
||||
<Link href={"/apps/" + props.slug}>
|
||||
<a className="block p-5 border border-gray-300 rounded-sm hover:bg-neutral-50">
|
||||
<a className="block rounded-sm border border-gray-300 p-5 hover:bg-neutral-50">
|
||||
<div className="flex">
|
||||
<img src={props.logo} alt={props.name + " Logo"} className="w-12 h-12 mb-4 rounded-sm" />
|
||||
<img src={props.logo} alt={props.name + " Logo"} className="mb-4 h-12 w-12 rounded-sm" />
|
||||
<Button
|
||||
color="secondary"
|
||||
className="flex self-start ml-auto"
|
||||
className="ml-auto flex self-start"
|
||||
onClick={() => {
|
||||
// TODO: Actually add the integration
|
||||
console.log("The magic is supposed to happen here");
|
||||
|
@ -31,7 +31,7 @@ export default function AppCard(props: AppCardProps) {
|
|||
</div>
|
||||
<h3 className="font-medium">{props.name}</h3>
|
||||
<div className="flex text-sm text-gray-800">
|
||||
<span>{props.rating} stars</span> <StarIcon className="w-4 h-4 ml-1 text-yellow-600 mt-0.5" />
|
||||
<span>{props.rating} stars</span> <StarIcon className="ml-1 mt-0.5 h-4 w-4 text-yellow-600" />
|
||||
<span className="pl-1 text-gray-500">{props.reviews} reviews</span>
|
||||
</div>
|
||||
<p className="mt-2 text-sm text-gray-500">{props.description}</p>
|
||||
|
|
|
@ -11,9 +11,9 @@ export default function AppStoreCategories(props: any) {
|
|||
<div className="grid grid-cols-1 gap-3 md:grid-cols-3">
|
||||
{props.categories.map((category: any) => (
|
||||
<Link key={category.name} href={"/apps/categories/" + category.name}>
|
||||
<a className="flex px-6 py-4 bg-gray-100 rounded-sm">
|
||||
<div className="flex w-12 h-12 mr-4 bg-white rounded-sm">
|
||||
<CreditCardIcon className="self-center w-6 h-6 mx-auto" />
|
||||
<a className="flex rounded-sm bg-gray-100 px-6 py-4">
|
||||
<div className="mr-4 flex h-12 w-12 rounded-sm bg-white">
|
||||
<CreditCardIcon className="mx-auto h-6 w-6 self-center" />
|
||||
</div>
|
||||
<div>
|
||||
<h3 className="font-medium">{category.name}</h3>
|
||||
|
|
|
@ -36,12 +36,12 @@ export default function Slider() {
|
|||
<div>
|
||||
<h2 className="mb-2 text-lg font-semibold text-gray-900">{t("trending_apps")}</h2>
|
||||
</div>
|
||||
<div className="ml-auto glide__arrows" data-glide-el="controls">
|
||||
<div className="glide__arrows ml-auto" data-glide-el="controls">
|
||||
<button data-glide-dir="<" className="mr-4">
|
||||
<ArrowLeftIcon className="w-5 h-5 text-gray-600 hover:text-black" />
|
||||
<ArrowLeftIcon className="h-5 w-5 text-gray-600 hover:text-black" />
|
||||
</button>
|
||||
<button data-glide-dir=">">
|
||||
<ArrowRightIcon className="w-5 h-5 text-gray-600 hover:text-black" />
|
||||
<ArrowRightIcon className="h-5 w-5 text-gray-600 hover:text-black" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -10,8 +10,8 @@ export default function LinkIconButton(props: LinkIconButtonProps) {
|
|||
return (
|
||||
<div className="-ml-2">
|
||||
<button
|
||||
type="button"
|
||||
{...props}
|
||||
type="button"
|
||||
className="text-md flex items-center rounded-sm px-2 py-1 text-sm font-medium text-gray-700 hover:bg-gray-200 hover:text-gray-900">
|
||||
<props.Icon className="h-4 w-4 text-neutral-500 ltr:mr-2 rtl:ml-2" />
|
||||
{props.children}
|
||||
|
|
|
@ -16,7 +16,7 @@ export const DatePicker = ({ date, onDatesChange, className }: Props) => {
|
|||
return (
|
||||
<PrimitiveDatePicker
|
||||
className={classNames(
|
||||
"focus:border-primary-500 focus:ring-primary-500 rounded-sm border border-gray-300 p-1 pl-2 shadow-sm sm:text-sm",
|
||||
"focus:ring-primary-500 focus:border-primary-500 rounded-sm border border-gray-300 p-1 pl-2 shadow-sm sm:text-sm",
|
||||
className
|
||||
)}
|
||||
clearIcon={null}
|
||||
|
|
|
@ -19,7 +19,7 @@ const TrialBanner = () => {
|
|||
|
||||
return (
|
||||
<div
|
||||
className="m-4 hidden rounded-md bg-yellow-200 p-4 text-center text-sm font-medium text-gray-600 lg:block"
|
||||
className="m-4 hidden rounded-md bg-yellow-200 p-4 text-center text-sm font-medium text-gray-600 sm:block"
|
||||
data-testid="trial-banner">
|
||||
<div className="mb-2 text-left">{t("trial_days_left", { days: trialDaysLeft })}</div>
|
||||
<Button
|
||||
|
|
|
@ -74,7 +74,7 @@ export default function TeamAvailabilityModal(props: Props) {
|
|||
]}
|
||||
isSearchable={false}
|
||||
classNamePrefix="react-select"
|
||||
className="react-select-container focus:border-primary-500 focus:ring-primary-500 block w-full min-w-0 flex-1 rounded-sm border border-gray-300 sm:text-sm"
|
||||
className="react-select-container focus:ring-primary-500 focus:border-primary-500 block w-full min-w-0 flex-1 rounded-sm border border-gray-300 sm:text-sm"
|
||||
value={{ value: frequency, label: `${frequency} minutes` }}
|
||||
onChange={(newFrequency) => setFrequency(newFrequency?.value ?? 30)}
|
||||
/>
|
||||
|
|
|
@ -47,7 +47,7 @@ export default function TeamAvailabilityScreen(props: Props) {
|
|||
<Avatar
|
||||
imageSrc={getPlaceholderAvatar(member?.avatar, member?.name as string)}
|
||||
alt={member?.name || ""}
|
||||
className="min-h-10 min-w-10 mt-1 h-10 w-10 rounded-full"
|
||||
className="min-w-10 min-h-10 mt-1 h-10 w-10 rounded-full"
|
||||
/>
|
||||
<div className="ml-3 inline-block overflow-hidden pt-1">
|
||||
<span className="truncate text-lg font-bold text-neutral-700">{member?.name}</span>
|
||||
|
@ -93,7 +93,7 @@ export default function TeamAvailabilityScreen(props: Props) {
|
|||
]}
|
||||
isSearchable={false}
|
||||
classNamePrefix="react-select"
|
||||
className="react-select-container focus:border-primary-500 focus:ring-primary-500 block w-full min-w-0 flex-1 rounded-sm border border-gray-300 sm:text-sm"
|
||||
className="react-select-container focus:ring-primary-500 focus:border-primary-500 block w-full min-w-0 flex-1 rounded-sm border border-gray-300 sm:text-sm"
|
||||
value={{ value: frequency, label: `${frequency} minutes` }}
|
||||
onChange={(newFrequency) => setFrequency(newFrequency?.value ?? 30)}
|
||||
/>
|
||||
|
|
|
@ -59,7 +59,7 @@ export default function TeamAvailabilityTimes(props: Props) {
|
|||
{times.map((time) => (
|
||||
<div key={time.format()} className="flex flex-row items-center">
|
||||
<a
|
||||
className="min-w-48 border-brand text-primary-500 hover:bg-brand hover:text-brandcontrast mb-2 mr-3 block flex-grow rounded-sm border bg-white py-2 text-center font-medium dark:border-transparent dark:bg-gray-600 dark:text-neutral-200 dark:hover:border-black dark:hover:bg-black dark:hover:text-white"
|
||||
className="min-w-48 text-primary-500 border-brand hover:bg-brand hover:text-brandcontrast mb-2 mr-3 block flex-grow rounded-sm border bg-white py-2 text-center font-medium dark:border-transparent dark:bg-gray-600 dark:text-neutral-200 dark:hover:border-black dark:hover:bg-black dark:hover:text-white"
|
||||
data-testid="time">
|
||||
{time.format("HH:mm")}
|
||||
</a>
|
||||
|
|
|
@ -9,15 +9,14 @@ import { trpc } from "@lib/trpc";
|
|||
import DestinationCalendarSelector from "@components/DestinationCalendarSelector";
|
||||
import { List } from "@components/List";
|
||||
import { ShellSubHeading } from "@components/Shell";
|
||||
import ConnectIntegration from "@components/integrations/ConnectIntegrations";
|
||||
import DisconnectIntegration from "@components/integrations/DisconnectIntegration";
|
||||
import IntegrationListItem from "@components/integrations/IntegrationListItem";
|
||||
import SubHeadingTitleWithConnections from "@components/integrations/SubHeadingTitleWithConnections";
|
||||
import { Alert } from "@components/ui/Alert";
|
||||
import Button from "@components/ui/Button";
|
||||
import Switch from "@components/ui/Switch";
|
||||
|
||||
import ConnectIntegration from "../../../../components/integrations/ConnectIntegrations";
|
||||
import DisconnectIntegration from "../../../../components/integrations/DisconnectIntegration";
|
||||
import IntegrationListItem from "../../../../components/integrations/IntegrationListItem";
|
||||
import SubHeadingTitleWithConnections from "../../../../components/integrations/SubHeadingTitleWithConnections";
|
||||
|
||||
type Props = {
|
||||
onChanged: () => unknown | Promise<unknown>;
|
||||
};
|
||||
|
@ -105,7 +104,7 @@ function ConnectedCalendarsList(props: Props) {
|
|||
}
|
||||
return (
|
||||
<List>
|
||||
{data.connectedCalendars.map((item: any) => (
|
||||
{data.connectedCalendars.map((item) => (
|
||||
<Fragment key={item.credentialId}>
|
||||
{item.calendars ? (
|
||||
<IntegrationListItem
|
||||
|
@ -126,8 +125,8 @@ function ConnectedCalendarsList(props: Props) {
|
|||
{item.calendars.map((cal) => (
|
||||
<CalendarSwitch
|
||||
key={cal.externalId}
|
||||
externalId={cal.externalId as string}
|
||||
title={cal.name as string}
|
||||
externalId={cal.externalId}
|
||||
title={cal.name || "Nameless calendar"}
|
||||
type={item.integration.type}
|
||||
defaultSelected={cal.isSelected}
|
||||
/>
|
||||
|
@ -170,7 +169,7 @@ function CalendarList(props: Props) {
|
|||
query={query}
|
||||
success={({ data }) => (
|
||||
<List>
|
||||
{data.calendar.items.map((item: any) => (
|
||||
{data.calendar.items.map((item) => (
|
||||
<IntegrationListItem
|
||||
key={item.title}
|
||||
{...item}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { DestinationCalendar, SelectedCalendar } from "@prisma/client";
|
||||
import { TFunction } from "next-i18next";
|
||||
|
||||
import { PaymentInfo } from "@ee/lib/stripe/server";
|
||||
|
||||
|
@ -7,15 +6,8 @@ import type { Event } from "@lib/events/EventManager";
|
|||
import { Ensure } from "@lib/types/utils";
|
||||
import { VideoCallData } from "@lib/videoClient";
|
||||
|
||||
import { NewCalendarEventType } from "../constants/types";
|
||||
import { ConferenceData } from "./GoogleCalendar";
|
||||
|
||||
export type Person = {
|
||||
name: string;
|
||||
email: string;
|
||||
timeZone: string;
|
||||
language: { translate: TFunction; locale: string };
|
||||
};
|
||||
import { ConferenceData } from "../../google_calendar/interfaces/GoogleCalendar";
|
||||
import { NewCalendarEventType, Person } from "../types/CalendarTypes";
|
||||
|
||||
export interface EntryPoint {
|
||||
entryPointType?: string;
|
||||
|
|
|
@ -21,10 +21,10 @@ import { symmetricDecrypt } from "@lib/crypto";
|
|||
import type { Event } from "@lib/events/EventManager";
|
||||
import logger from "@lib/logger";
|
||||
|
||||
import { TIMEZONE_FORMAT } from "../constants/formats";
|
||||
import { CALDAV_CALENDAR_TYPE } from "../constants/generals";
|
||||
import { CalendarEventType, EventBusyDate, NewCalendarEventType } from "../constants/types";
|
||||
import { TIMEZONE_FORMAT } from "../constants/format";
|
||||
import { DEFAULT_CALENDAR_TYPE } from "../constants/general";
|
||||
import { Calendar, CalendarEvent, IntegrationCalendar } from "../interfaces/Calendar";
|
||||
import { CalendarEventType, EventBusyDate, NewCalendarEventType } from "../types/CalendarTypes";
|
||||
import { convertDate, getAttendees, getDuration } from "../utils/CalendarUtils";
|
||||
|
||||
dayjs.extend(utc);
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
import parser from "accept-language-parser";
|
||||
import { IncomingMessage } from "http";
|
||||
import { i18n } from "next-i18next.config";
|
||||
|
||||
import { getSession } from "@lib/auth";
|
||||
import prisma from "@lib/prisma";
|
||||
|
||||
import { Maybe } from "@trpc/server";
|
||||
|
||||
import { i18n } from "../../../next-i18next.config";
|
||||
|
||||
export function getLocaleFromHeaders(req: IncomingMessage): string {
|
||||
let preferredLocale: string | null | undefined;
|
||||
if (req.headers["accept-language"]) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { CalendarEvent } from "@lib/calendar/interfaces/Calendar";
|
||||
import { CalendarEvent } from "@lib/apps/calendar/interfaces/Calendar";
|
||||
import AttendeeAwaitingPaymentEmail from "@lib/emails/templates/attendee-awaiting-payment-email";
|
||||
import AttendeeCancelledEmail from "@lib/emails/templates/attendee-cancelled-email";
|
||||
import AttendeeDeclinedEmail from "@lib/emails/templates/attendee-declined-email";
|
||||
|
@ -12,7 +12,6 @@ import OrganizerRequestReminderEmail from "@lib/emails/templates/organizer-reque
|
|||
import OrganizerRescheduledEmail from "@lib/emails/templates/organizer-rescheduled-email";
|
||||
import OrganizerScheduledEmail from "@lib/emails/templates/organizer-scheduled-email";
|
||||
import TeamInviteEmail, { TeamInvite } from "@lib/emails/templates/team-invite-email";
|
||||
import { CalendarEvent } from "@lib/integrations/calendar/interfaces/Calendar";
|
||||
|
||||
export const sendScheduledEmails = async (calEvent: CalendarEvent) => {
|
||||
const emailsToSend: Promise<unknown>[] = [];
|
||||
|
|
|
@ -7,9 +7,9 @@ import { createEvent, DateArray } from "ics";
|
|||
import nodemailer from "nodemailer";
|
||||
|
||||
import { getCancelLink, getRichDescription } from "@lib/CalEventParser";
|
||||
import { getErrorFromUnknown } from "@lib/errors";
|
||||
import { getIntegrationName } from "@lib/integrations";
|
||||
import { CalendarEvent, Person } from "@lib/integrations/calendar/interfaces/Calendar";
|
||||
import { CalendarEvent } from "@lib/apps/calendar/interfaces/Calendar";
|
||||
import { getAppName } from "@lib/apps/utils/AppUtils";
|
||||
import { getErrorFromUnknown, Person } from "@lib/errors";
|
||||
import { serverConfig } from "@lib/serverConfig";
|
||||
|
||||
import {
|
||||
|
|
|
@ -5,12 +5,13 @@ import { v5 as uuidv5 } from "uuid";
|
|||
|
||||
import { FAKE_DAILY_CREDENTIAL } from "@lib/integrations/Daily/DailyVideoApiAdapter";
|
||||
import { FAKE_HUDDLE_CREDENTIAL } from "@lib/integrations/Huddle01/Huddle01VideoApiAdapter";
|
||||
import { createEvent, updateEvent } from "@lib/integrations/calendar/CalendarManager";
|
||||
import { AdditionInformation, CalendarEvent } from "@lib/integrations/calendar/interfaces/Calendar";
|
||||
import { LocationType } from "@lib/location";
|
||||
import prisma from "@lib/prisma";
|
||||
import { createMeeting, updateMeeting, VideoCallData } from "@lib/videoClient";
|
||||
|
||||
import { AdditionInformation, CalendarEvent } from "../apps/calendar/interfaces/Calendar";
|
||||
import { createEvent, updateEvent } from "../apps/calendar/managers/CalendarManager";
|
||||
|
||||
export type Event = AdditionInformation & VideoCallData;
|
||||
|
||||
export interface EventResult {
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
"@calcom/tsconfig": "*",
|
||||
"@calcom/ui": "*",
|
||||
"@daily-co/daily-js": "^0.21.0",
|
||||
"@glidejs/glide": "^3.5.2",
|
||||
"@headlessui/react": "^1.4.2",
|
||||
"@heroicons/react": "^1.0.5",
|
||||
"@hookform/error-message": "^2.0.0",
|
||||
|
@ -108,9 +109,11 @@
|
|||
"@microsoft/microsoft-graph-types-beta": "0.15.0-preview",
|
||||
"@playwright/test": "^1.18.1",
|
||||
"@tailwindcss/forms": "^0.4.0",
|
||||
"@tailwindcss/typography": "^0.5.1",
|
||||
"@types/accept-language-parser": "1.5.2",
|
||||
"@types/async": "^3.2.10",
|
||||
"@types/bcryptjs": "^2.4.2",
|
||||
"@types/glidejs__glide": "^3.4.1",
|
||||
"@types/jest": "^27.0.3",
|
||||
"@types/lodash": "^4.14.177",
|
||||
"@types/micro": "^7.3.6",
|
||||
|
|
|
@ -3,12 +3,12 @@ import type { NextApiRequest, NextApiResponse } from "next";
|
|||
|
||||
import { refund } from "@ee/lib/stripe/server";
|
||||
|
||||
import { CalendarEvent, AdditionInformation } from "@lib/apps/calendar/interfaces/Calendar";
|
||||
import { asStringOrNull } from "@lib/asStringOrNull";
|
||||
import { getSession } from "@lib/auth";
|
||||
import { sendDeclinedEmails } from "@lib/emails/email-manager";
|
||||
import { sendScheduledEmails } from "@lib/emails/email-manager";
|
||||
import EventManager from "@lib/events/EventManager";
|
||||
import { CalendarEvent, AdditionInformation } from "@lib/integrations/calendar/interfaces/Calendar";
|
||||
import logger from "@lib/logger";
|
||||
import prisma from "@lib/prisma";
|
||||
import { BookingConfirmBody } from "@lib/types/booking";
|
||||
|
|
|
@ -21,7 +21,7 @@ export default function Apps() {
|
|||
large>
|
||||
<div className="mb-8">
|
||||
<Button color="secondary" href="/apps">
|
||||
<ChevronLeftIcon className="w-5 h-5" />
|
||||
<ChevronLeftIcon className="h-5 w-5" />
|
||||
</Button>
|
||||
</div>
|
||||
<div className="mb-16">
|
||||
|
|
|
@ -57,7 +57,7 @@ function WebhookListItem(props: { webhook: TWebhook; onEditWebhook: () => void }
|
|||
</span>
|
||||
</div>
|
||||
<div className="mt-2 flex">
|
||||
<span className="flex flex-col space-x-2 space-y-1 text-xs sm:flex-row sm:space-y-0 sm:rtl:space-x-reverse">
|
||||
<span className="flex flex-col space-x-2 space-y-1 space-x-2 text-xs sm:flex-row sm:space-y-0 sm:rtl:space-x-reverse">
|
||||
{props.webhook.eventTriggers.map((eventTrigger, ind) => (
|
||||
<span
|
||||
key={ind}
|
||||
|
@ -336,7 +336,7 @@ function WebhookListContainer() {
|
|||
<ListItem className={classNames("flex-col")}>
|
||||
<div
|
||||
className={classNames("flex w-full flex-1 items-center space-x-2 p-3 rtl:space-x-reverse")}>
|
||||
<Image width={40} height={40} src="/integrations/webhooks.svg" alt="Webhooks" />
|
||||
<Image width={40} height={40} src="/apps/webhooks.svg" alt="Webhooks" />
|
||||
<div className="flex-grow truncate pl-2">
|
||||
<ListItemTitle component="h3">Webhooks</ListItemTitle>
|
||||
<ListItemText component="p">{t("automation")}</ListItemText>
|
||||
|
@ -409,7 +409,7 @@ function IframeEmbedContainer() {
|
|||
<List>
|
||||
<ListItem className={classNames("flex-col")}>
|
||||
<div className={classNames("flex w-full flex-1 items-center space-x-2 p-3 rtl:space-x-reverse")}>
|
||||
<Image width={40} height={40} src="/integrations/embed.svg" alt="Embed" />
|
||||
<Image width={40} height={40} src="/apps/embed.svg" alt="Embed" />
|
||||
<div className="flex-grow truncate pl-2">
|
||||
<ListItemTitle component="h3">{t("standard_iframe")}</ListItemTitle>
|
||||
<ListItemText component="p">{t("embed_your_calendar")}</ListItemText>
|
||||
|
@ -434,7 +434,7 @@ function IframeEmbedContainer() {
|
|||
</ListItem>
|
||||
<ListItem className={classNames("flex-col")}>
|
||||
<div className={classNames("flex w-full flex-1 items-center space-x-2 p-3 rtl:space-x-reverse")}>
|
||||
<Image width={40} height={40} src="/integrations/embed.svg" alt="Embed" />
|
||||
<Image width={40} height={40} src="/apps/embed.svg" alt="Embed" />
|
||||
<div className="flex-grow truncate pl-2">
|
||||
<ListItemTitle component="h3">{t("responsive_fullscreen_iframe")}</ListItemTitle>
|
||||
<ListItemText component="p">A fullscreen scheduling experience on your website</ListItemText>
|
||||
|
@ -583,7 +583,7 @@ function Web3Container() {
|
|||
<List>
|
||||
<ListItem className={classNames("flex-col")}>
|
||||
<div className={classNames("flex w-full flex-1 items-center space-x-2 p-3")}>
|
||||
<Image width={40} height={40} src="/integrations/metamask.svg" alt="Embed" />
|
||||
<Image width={40} height={40} src="/apps/metamask.svg" alt="Embed" />
|
||||
<div className="flex-grow truncate pl-2">
|
||||
<ListItemTitle component="h3">
|
||||
MetaMask (
|
||||
|
|
|
@ -17,6 +17,8 @@ import { useForm } from "react-hook-form";
|
|||
import TimezoneSelect from "react-timezone-select";
|
||||
import * as z from "zod";
|
||||
|
||||
import { getCalendarCredentials, getConnectedCalendars } from "@lib/apps/calendar/managers/CalendarManager";
|
||||
import getApps from "@lib/apps/utils/AppUtils";
|
||||
import { asStringOrNull } from "@lib/asStringOrNull";
|
||||
import { getSession } from "@lib/auth";
|
||||
import { DEFAULT_SCHEDULE } from "@lib/availability";
|
||||
|
@ -30,14 +32,12 @@ import { Schedule as ScheduleType } from "@lib/types/schedule";
|
|||
import { ClientSuspense } from "@components/ClientSuspense";
|
||||
import Loader from "@components/Loader";
|
||||
import { Form } from "@components/form/fields";
|
||||
import { CalendarListContainer } from "@components/integrations/CalendarListContainer";
|
||||
import { Alert } from "@components/ui/Alert";
|
||||
import Button from "@components/ui/Button";
|
||||
import Text from "@components/ui/Text";
|
||||
import Schedule from "@components/ui/form/Schedule";
|
||||
|
||||
import { CalendarListContainer } from "../lib/apps/calendar/components/CalendarListContainer";
|
||||
import { getCalendarCredentials, getConnectedCalendars } from "../lib/apps/calendar/managers/CalendarManager";
|
||||
import getApps from "../lib/apps/utils/AppUtils";
|
||||
import getEventTypes from "../lib/queries/event-types/get-event-types";
|
||||
|
||||
dayjs.extend(utc);
|
||||
|
@ -704,7 +704,7 @@ export async function getServerSideProps(context: NextPageContext) {
|
|||
},
|
||||
});
|
||||
|
||||
const integrations = getIntegrations(credentials)
|
||||
const integrations = getApps(credentials)
|
||||
.filter((item) => item.type.endsWith("_calendar"))
|
||||
.map((item) => omit(item, "key"));
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import { z } from "zod";
|
|||
|
||||
import { checkPremiumUsername } from "@ee/lib/core/checkPremiumUsername";
|
||||
|
||||
import { getCalendarCredentials, getConnectedCalendars } from "@lib/apps/calendar/managers/CalendarManager";
|
||||
import { ALL_APPS } from "@lib/apps/utils/AppUtils";
|
||||
import { checkRegularUsername } from "@lib/core/checkRegularUsername";
|
||||
import jackson from "@lib/jackson";
|
||||
|
@ -23,10 +24,6 @@ import { Schedule } from "@lib/types/schedule";
|
|||
import { eventTypesRouter } from "@server/routers/viewer/eventTypes";
|
||||
import { TRPCError } from "@trpc/server";
|
||||
|
||||
import {
|
||||
getCalendarCredentials,
|
||||
getConnectedCalendars,
|
||||
} from "../../lib/apps/calendar/managers/CalendarManager";
|
||||
import { createProtectedRouter, createRouter } from "../createRouter";
|
||||
import { resizeBase64Image } from "../lib/resizeBase64Image";
|
||||
import { viewerTeamsRouter } from "./viewer/teams";
|
||||
|
|
|
@ -6,7 +6,8 @@
|
|||
"@components/*": ["components/*"],
|
||||
"@lib/*": ["lib/*"],
|
||||
"@server/*": ["server/*"],
|
||||
"@ee/*": ["ee/*"]
|
||||
"@ee/*": ["ee/*"],
|
||||
"@apps/*": ["lib/apps/*"]
|
||||
},
|
||||
"typeRoots": ["./types"],
|
||||
"types": ["@types/jest"]
|
||||
|
|
29
yarn.lock
29
yarn.lock
|
@ -969,6 +969,11 @@
|
|||
intl-messageformat "9.11.4"
|
||||
tslib "^2.1.0"
|
||||
|
||||
"@glidejs/glide@^3.5.2":
|
||||
version "3.5.2"
|
||||
resolved "https://registry.yarnpkg.com/@glidejs/glide/-/glide-3.5.2.tgz#7012c5920ecf202bbda44d8526fc979984b6dd54"
|
||||
integrity sha512-7jGciNJ2bQ4eZLSNlSZ+VAyW63kALf420CvkEpK4lEsUfWJq9odqimci0YCiyNyMUFB+pWHwLYyNc57dijYsCg==
|
||||
|
||||
"@headlessui/react@^1.4.2":
|
||||
version "1.4.3"
|
||||
resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.4.3.tgz#f77c6bb5cb4a614a5d730fb880cab502d48abf37"
|
||||
|
@ -2505,6 +2510,15 @@
|
|||
dependencies:
|
||||
mini-svg-data-uri "^1.2.3"
|
||||
|
||||
"@tailwindcss/typography@^0.5.1":
|
||||
version "0.5.2"
|
||||
resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.2.tgz#24b069dab24d7a2467d01aca0dd432cb4b29f0ee"
|
||||
integrity sha512-coq8DBABRPFcVhVIk6IbKyyHUt7YTEC/C992tatFB+yEx5WGBQrCgsSFjxHUr8AWXphWckadVJbominEduYBqw==
|
||||
dependencies:
|
||||
lodash.castarray "^4.4.0"
|
||||
lodash.isplainobject "^4.0.6"
|
||||
lodash.merge "^4.6.2"
|
||||
|
||||
"@tootallnate/once@1":
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
|
||||
|
@ -2725,6 +2739,11 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.29.tgz#a48795ecadf957f6c0d10e0c34af86c098fa5bee"
|
||||
integrity sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ==
|
||||
|
||||
"@types/glidejs__glide@^3.4.1":
|
||||
version "3.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/glidejs__glide/-/glidejs__glide-3.4.1.tgz#220bbce087500eda3700e476c728e17d096eb6f0"
|
||||
integrity sha512-ib2VRchnLSXGOdiZFfCt6QEIYviw5g+Yey8Q2+kMzUxGXsnR9ZwZi1qPXI1ttrvR/AtUYZmSSHDVVSoIyt6LPw==
|
||||
|
||||
"@types/graceful-fs@^4.1.2":
|
||||
version "4.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15"
|
||||
|
@ -8502,11 +8521,21 @@ lodash-es@^4.17.21:
|
|||
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
|
||||
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
|
||||
|
||||
lodash.castarray@^4.4.0:
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115"
|
||||
integrity sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU=
|
||||
|
||||
lodash.clonedeep@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
|
||||
integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
|
||||
|
||||
lodash.isplainobject@^4.0.6:
|
||||
version "4.0.6"
|
||||
resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
|
||||
integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=
|
||||
|
||||
lodash.merge@^4.6.2:
|
||||
version "4.6.2"
|
||||
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
|
||||
|
|
Loading…
Reference in New Issue
Block a user