Skip to content

Commit

Permalink
Merge branch 'feat/delete-booking-history-past' of https://github.com…
Browse files Browse the repository at this point in the history
…/PAVANNAIK25/cal.com into feat/delete-booking-history-past
  • Loading branch information
PAVANNAIK25 committed Feb 19, 2025
2 parents 4e1a396 + cc2787a commit 013eef1
Show file tree
Hide file tree
Showing 36 changed files with 354 additions and 60 deletions.
11 changes: 10 additions & 1 deletion apps/web/app/(use-page-wrapper)/connect-and-join/page.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { _generateMetadata } from "app/_utils";

import LicenseRequired from "@calcom/features/ee/common/components/LicenseRequired";

import LegacyPage from "~/connect-and-join/connect-and-join-view";

export const generateMetadata = async () => {
Expand All @@ -9,4 +11,11 @@ export const generateMetadata = async () => {
);
};

export default LegacyPage;
const ServerPage = async () => {
return (
<LicenseRequired>
<LegacyPage />
</LicenseRequired>
);
};
export default ServerPage;
2 changes: 0 additions & 2 deletions apps/web/modules/connect-and-join/connect-and-join-view.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,4 @@ function ConnectAndJoin() {
);
}

ConnectAndJoin.requiresLicense = true;

export default ConnectAndJoin;
45 changes: 45 additions & 0 deletions help/availabilities/set-up-your-availability.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
---
title: 'Set up your availability'
---

Follow these step-by-step instructions to configure your availability in Cal.com based on your individual preferences:

<Steps>
<Step title="Access availability settings">
* Log in to your Cal.com account.
* Click Availability in the sidebar. You’ll see your existing availability schedules, such as "Working Hours" or any other you’ve added before.
</Step>
<Step title="Create a new availability schedule">
* Click New in the top-right corner.
* Enter a name for your schedule (e.g., "Test Availability").
* Click Continue to create your schedule.
By default, the schedule is set to 9:00 AM to 5:00 PM.
</Step>
<Step title="Customize your availability">
* Enable/Disable Days:
Toggle days on or off based on when you're available.
For example, you can set availability until 1:00 PM on a Saturday.
* Edit Times for Specific Days:
Click a time box to adjust availability for specific days.
For example, change Monday’s availability to 9:00 AM to 6:00 PM.
* Copy Times to Other Days:
After setting times for one day, click Copy Times To and select other days (e.g., Tuesday–Friday).
* Add Multiple Time Slots:
Add additional time slots to split your availability (e.g., 9:00 AM–11:00 AM and 5:00 PM–7:30 PM).
</Step>
<Step title="Add Day overrides">
Use day overrides for special cases when your availability changes for specific dates.
* Click Add an Override.
Example: Choose a date (e.g., Wednesday) and mark yourself as completely unavailable.
Overrides are automatically archived once the date has passed.
</Step>
<Step title="Adjust your time zone">
Set a specific time zone for your availability.
Useful if your availability changes when traveling to another country.
</Step>
<Step title="Troubleshoot availability issues">
If you notice times not showing up as expected, click Launch Troubleshooter.
This tool helps identify issues based on how Cal.com determines your availability.
</Step>
</Steps>

4 changes: 4 additions & 0 deletions packages/app-store/apps.metadata.generated.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,10 @@ import linear_config_json from "./linear/config.json";
import make_config_json from "./make/config.json";
import matomo_config_json from "./matomo/config.json";
import metapixel_config_json from "./metapixel/config.json";
import millis_ai_config_json from "./millis-ai/config.json";
import mirotalk_config_json from "./mirotalk/config.json";
import mock_payment_app_config_json from "./mock-payment-app/config.json";
import monobot_config_json from "./monobot/config.json";
import n8n_config_json from "./n8n/config.json";
import nextcloudtalk_config_json from "./nextcloudtalk/config.json";
import { metadata as office365calendar__metadata_ts } from "./office365calendar/_metadata";
Expand Down Expand Up @@ -155,8 +157,10 @@ export const appStoreMetadata = {
make: make_config_json,
matomo: matomo_config_json,
metapixel: metapixel_config_json,
"millis-ai": millis_ai_config_json,
mirotalk: mirotalk_config_json,
"mock-payment-app": mock_payment_app_config_json,
monobot: monobot_config_json,
n8n: n8n_config_json,
nextcloudtalk: nextcloudtalk_config_json,
office365calendar: office365calendar__metadata_ts,
Expand Down
2 changes: 2 additions & 0 deletions packages/app-store/apps.server.generated.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,10 @@ export const apiHandlers = {
make: import("./make/api"),
matomo: import("./matomo/api"),
metapixel: import("./metapixel/api"),
"millis-ai": import("./millis-ai/api"),
mirotalk: import("./mirotalk/api"),
"mock-payment-app": import("./mock-payment-app/api"),
monobot: import("./monobot/api"),
n8n: import("./n8n/api"),
nextcloudtalk: import("./nextcloudtalk/api"),
office365calendar: import("./office365calendar/api"),
Expand Down
15 changes: 15 additions & 0 deletions packages/app-store/millis-ai/DESCRIPTION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
items:
- 0.jpg
- 1.jpg
- 2.jpg
- 3.jpg
- 4.jpg
---

{DESCRIPTION}

Effortlessly create advanced LLM-based voice applications with ultra-low latency — The Fastest on the Market.

Millis AI gives you everything you need to create instant, human-like, and affordable voice agents.

20 changes: 20 additions & 0 deletions packages/app-store/millis-ai/api/add.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { createDefaultInstallation } from "@calcom/app-store/_utils/installation";
import type { AppDeclarativeHandler } from "@calcom/types/AppHandler";

import appConfig from "../config.json";

const handler: AppDeclarativeHandler = {
appType: appConfig.type,
variant: appConfig.variant,
slug: appConfig.slug,
supportsMultipleInstalls: false,
handlerType: "add",
redirect: {
newTab: true,
url: "https://www.millis.ai/integrations/cal-com",
},
createCredential: ({ appType, user, slug, teamId }) =>
createDefaultInstallation({ appType, user: user, slug, key: {}, teamId }),
};

export default handler;
1 change: 1 addition & 0 deletions packages/app-store/millis-ai/api/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default as add } from "./add";
Empty file.
16 changes: 16 additions & 0 deletions packages/app-store/millis-ai/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"/*": "Don't modify slug - If required, do it using cli edit command",
"name": "Millis AI",
"slug": "millis-ai",
"type": "millis-ai_automation",
"logo": "icon.png",
"url": "https://docs.millis.ai/tutorials/create-voice-agent-for-appointment-scheduling",
"variant": "automation",
"categories": ["automation"],
"publisher": "Millis AI",
"email": "[email protected]",
"description": "Build next-gen voice agents with 500ms latency\r",
"isTemplate": false,
"__createdUsingCli": true,
"__template": "link-as-an-app"
}
1 change: 1 addition & 0 deletions packages/app-store/millis-ai/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * as api from "./api";
14 changes: 14 additions & 0 deletions packages/app-store/millis-ai/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"$schema": "https://json.schemastore.org/package.json",
"private": true,
"name": "@calcom/millis-ai",
"version": "0.0.0",
"main": "./index.ts",
"dependencies": {
"@calcom/lib": "*"
},
"devDependencies": {
"@calcom/types": "*"
},
"description": "Build next-gen voice agents with 500ms latency\r"
}
Binary file added packages/app-store/millis-ai/static/0.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added packages/app-store/millis-ai/static/1.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added packages/app-store/millis-ai/static/2.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added packages/app-store/millis-ai/static/3.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added packages/app-store/millis-ai/static/4.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added packages/app-store/millis-ai/static/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
20 changes: 20 additions & 0 deletions packages/app-store/monobot/DESCRIPTION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
items:
- iframe: { src: https://www.youtube.com/watch?v=Jm2elbC9UmI }
- 1.jpeg
- 2.jpeg
- 3.jpeg
---

{DESCRIPTION}

Monobot allows you to setup versatile AI Virtual Assistants for chat and voice in minutes.

### Easy-to-Use Intuitive Configuration UI
Dozens of industries are already covered by our comprehensive Virtual Assistant template library to give you a head start.

### Human-like Voice Experience in Many Languages
Our bots sound just like humans, can speak over 20 languages plus you can choose from many voices!

### Integrations
Integrations with calendars, messengers, external APIs and much more is already included at no extra cost.
20 changes: 20 additions & 0 deletions packages/app-store/monobot/api/add.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { createDefaultInstallation } from "@calcom/app-store/_utils/installation";
import type { AppDeclarativeHandler } from "@calcom/types/AppHandler";

import appConfig from "../config.json";

const handler: AppDeclarativeHandler = {
appType: appConfig.type,
variant: appConfig.variant,
slug: appConfig.slug,
supportsMultipleInstalls: false,
handlerType: "add",
redirect: {
newTab: true,
url: "https://monobot.ai/?referralId=cal.com",
},
createCredential: ({ appType, user, slug, teamId }) =>
createDefaultInstallation({ appType, user: user, slug, key: {}, teamId }),
};

export default handler;
1 change: 1 addition & 0 deletions packages/app-store/monobot/api/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default as add } from "./add";
Empty file.
16 changes: 16 additions & 0 deletions packages/app-store/monobot/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"/*": "Don't modify slug - If required, do it using cli edit command",
"name": "Monobot CX",
"slug": "monobot",
"type": "monobot_automation",
"logo": "icon.svg",
"url": "https://monobot.ai/?referralId=cal.com",
"variant": "automation",
"categories": ["automation"],
"publisher": "Monobot CX",
"email": "[email protected]",
"description": "Crafting your personalized AI-driven assistant is easy and fast.",
"isTemplate": false,
"__createdUsingCli": true,
"__template": "link-as-an-app"
}
1 change: 1 addition & 0 deletions packages/app-store/monobot/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * as api from "./api";
14 changes: 14 additions & 0 deletions packages/app-store/monobot/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"$schema": "https://json.schemastore.org/package.json",
"private": true,
"name": "@calcom/monobot",
"version": "0.0.0",
"main": "./index.ts",
"dependencies": {
"@calcom/lib": "*"
},
"devDependencies": {
"@calcom/types": "*"
},
"description": "Crafting your personalized AI-driven assistant is easy and fast."
}
Binary file added packages/app-store/monobot/static/1.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added packages/app-store/monobot/static/2.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added packages/app-store/monobot/static/3.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 12 additions & 0 deletions packages/app-store/monobot/static/icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
23 changes: 15 additions & 8 deletions packages/app-store/routing-forms/components/FormActions.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
import type { App_RoutingForms_Form } from "@prisma/client";
import { useRouter } from "next/navigation";
import { createContext, forwardRef, useContext, useState } from "react";
import { Controller, useForm } from "react-hook-form";
import { v4 as uuidv4 } from "uuid";
import { z } from "zod";

import { useOrgBranding } from "@calcom/features/ee/organizations/context/provider";
import { RoutingFormEmbedButton, RoutingFormEmbedDialog } from "@calcom/features/embed/RoutingFormEmbed";
Expand Down Expand Up @@ -34,15 +32,24 @@ import {
} from "@calcom/ui";

import getFieldIdentifier from "../lib/getFieldIdentifier";
import type { SerializableForm } from "../types/types";

type RoutingForm = SerializableForm<App_RoutingForms_Form>;
type FormField = {
identifier?: string;
id: string;
type: string;
label: string;
routerId?: string | null;
};

type RoutingForm = {
id: string;
name: string;
disabled: boolean;
fields?: FormField[];
};

export type NewFormDialogState = { action: "new" | "duplicate"; target: string | null } | null;
export type SetNewFormDialogState = React.Dispatch<React.SetStateAction<NewFormDialogState>>;
const newFormModalQuerySchema = z.object({
action: z.literal("new").or(z.literal("duplicate")),
target: z.string().optional(),
});

function NewFormDialog({
appUrl,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,10 @@ export default function RoutingForms({
SkeletonLoader={SkeletonLoaderTeamList}>
<div className="bg-default mb-16 overflow-hidden">
<List data-testid="routing-forms-list" ref={parent}>
{forms?.map(({ form, readOnly }, index) => {
{forms?.map(({ form, readOnly, hasError }, index) => {
// Make the form read only if it has an error
// TODO: Consider showing error in UI so user can report and get it fixed.
readOnly = readOnly || hasError;
if (!form) {
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ import { Query, Builder, Utils as QbUtils } from "react-awesome-query-builder";
import type { ImmutableTree, BuilderProps, Config } from "react-awesome-query-builder";
import type { JsonTree } from "react-awesome-query-builder";
import type { UseFormReturn } from "react-hook-form";
import type { z } from "zod";

import { areTheySiblingEntitites } from "@calcom/lib/entityPermissionUtils";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { buildEmptyQueryValue, raqbQueryValueUtils } from "@calcom/lib/raqb/raqbUtils";
import type { App_RoutingForms_Form } from "@calcom/prisma/client";
import { SchedulingType } from "@calcom/prisma/client";
import type { RouterOutputs } from "@calcom/trpc/react";
import { trpc } from "@calcom/trpc/react";
Expand Down Expand Up @@ -49,7 +49,6 @@ import {
isDynamicOperandField,
} from "../../lib/getQueryBuilderConfig";
import isRouter from "../../lib/isRouter";
import type { SerializableForm } from "../../types/types";
import type {
GlobalRoute,
LocalRoute,
Expand All @@ -58,6 +57,7 @@ import type {
EditFormRoute,
AttributeRoutingConfig,
} from "../../types/types";
import type { zodRoutes } from "../../zod";
import { RouteActionType } from "../../zod";

type EventTypesByGroup = RouterOutputs["viewer"]["eventTypes"]["getByViewer"];
Expand Down Expand Up @@ -912,7 +912,7 @@ const Routes = ({

const { data: allForms } = trpc.viewer.appRoutingForms.forms.useQuery();

const notHaveAttributesQuery = ({ form }: { form: SerializableForm<App_RoutingForms_Form> }) => {
const notHaveAttributesQuery = ({ form }: { form: { routes: z.infer<typeof zodRoutes> } }) => {
return form.routes?.every((route) => {
if (isRouter(route)) {
return true;
Expand Down
Loading

0 comments on commit 013eef1

Please sign in to comment.