Skip to content

Commit 013eef1

Browse files
committed
Merge branch 'feat/delete-booking-history-past' of https://github.com/PAVANNAIK25/cal.com into feat/delete-booking-history-past
2 parents 4e1a396 + cc2787a commit 013eef1

File tree

36 files changed

+354
-60
lines changed

36 files changed

+354
-60
lines changed

apps/web/app/(use-page-wrapper)/connect-and-join/page.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { _generateMetadata } from "app/_utils";
22

3+
import LicenseRequired from "@calcom/features/ee/common/components/LicenseRequired";
4+
35
import LegacyPage from "~/connect-and-join/connect-and-join-view";
46

57
export const generateMetadata = async () => {
@@ -9,4 +11,11 @@ export const generateMetadata = async () => {
911
);
1012
};
1113

12-
export default LegacyPage;
14+
const ServerPage = async () => {
15+
return (
16+
<LicenseRequired>
17+
<LegacyPage />
18+
</LicenseRequired>
19+
);
20+
};
21+
export default ServerPage;

apps/web/modules/connect-and-join/connect-and-join-view.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,4 @@ function ConnectAndJoin() {
8585
);
8686
}
8787

88-
ConnectAndJoin.requiresLicense = true;
89-
9088
export default ConnectAndJoin;
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
---
2+
title: 'Set up your availability'
3+
---
4+
5+
Follow these step-by-step instructions to configure your availability in Cal.com based on your individual preferences:
6+
7+
<Steps>
8+
<Step title="Access availability settings">
9+
* Log in to your Cal.com account.
10+
* Click Availability in the sidebar. You’ll see your existing availability schedules, such as "Working Hours" or any other you’ve added before.
11+
</Step>
12+
<Step title="Create a new availability schedule">
13+
* Click New in the top-right corner.
14+
* Enter a name for your schedule (e.g., "Test Availability").
15+
* Click Continue to create your schedule.
16+
By default, the schedule is set to 9:00 AM to 5:00 PM.
17+
</Step>
18+
<Step title="Customize your availability">
19+
* Enable/Disable Days:
20+
Toggle days on or off based on when you're available.
21+
For example, you can set availability until 1:00 PM on a Saturday.
22+
* Edit Times for Specific Days:
23+
Click a time box to adjust availability for specific days.
24+
For example, change Monday’s availability to 9:00 AM to 6:00 PM.
25+
* Copy Times to Other Days:
26+
After setting times for one day, click Copy Times To and select other days (e.g., Tuesday–Friday).
27+
* Add Multiple Time Slots:
28+
Add additional time slots to split your availability (e.g., 9:00 AM–11:00 AM and 5:00 PM–7:30 PM).
29+
</Step>
30+
<Step title="Add Day overrides">
31+
Use day overrides for special cases when your availability changes for specific dates.
32+
* Click Add an Override.
33+
Example: Choose a date (e.g., Wednesday) and mark yourself as completely unavailable.
34+
Overrides are automatically archived once the date has passed.
35+
</Step>
36+
<Step title="Adjust your time zone">
37+
Set a specific time zone for your availability.
38+
Useful if your availability changes when traveling to another country.
39+
</Step>
40+
<Step title="Troubleshoot availability issues">
41+
If you notice times not showing up as expected, click Launch Troubleshooter.
42+
This tool helps identify issues based on how Cal.com determines your availability.
43+
</Step>
44+
</Steps>
45+

packages/app-store/apps.metadata.generated.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,10 @@ import linear_config_json from "./linear/config.json";
5151
import make_config_json from "./make/config.json";
5252
import matomo_config_json from "./matomo/config.json";
5353
import metapixel_config_json from "./metapixel/config.json";
54+
import millis_ai_config_json from "./millis-ai/config.json";
5455
import mirotalk_config_json from "./mirotalk/config.json";
5556
import mock_payment_app_config_json from "./mock-payment-app/config.json";
57+
import monobot_config_json from "./monobot/config.json";
5658
import n8n_config_json from "./n8n/config.json";
5759
import nextcloudtalk_config_json from "./nextcloudtalk/config.json";
5860
import { metadata as office365calendar__metadata_ts } from "./office365calendar/_metadata";
@@ -155,8 +157,10 @@ export const appStoreMetadata = {
155157
make: make_config_json,
156158
matomo: matomo_config_json,
157159
metapixel: metapixel_config_json,
160+
"millis-ai": millis_ai_config_json,
158161
mirotalk: mirotalk_config_json,
159162
"mock-payment-app": mock_payment_app_config_json,
163+
monobot: monobot_config_json,
160164
n8n: n8n_config_json,
161165
nextcloudtalk: nextcloudtalk_config_json,
162166
office365calendar: office365calendar__metadata_ts,

packages/app-store/apps.server.generated.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,10 @@ export const apiHandlers = {
5151
make: import("./make/api"),
5252
matomo: import("./matomo/api"),
5353
metapixel: import("./metapixel/api"),
54+
"millis-ai": import("./millis-ai/api"),
5455
mirotalk: import("./mirotalk/api"),
5556
"mock-payment-app": import("./mock-payment-app/api"),
57+
monobot: import("./monobot/api"),
5658
n8n: import("./n8n/api"),
5759
nextcloudtalk: import("./nextcloudtalk/api"),
5860
office365calendar: import("./office365calendar/api"),
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
---
2+
items:
3+
- 0.jpg
4+
- 1.jpg
5+
- 2.jpg
6+
- 3.jpg
7+
- 4.jpg
8+
---
9+
10+
{DESCRIPTION}
11+
12+
Effortlessly create advanced LLM-based voice applications with ultra-low latency — The Fastest on the Market.
13+
14+
Millis AI gives you everything you need to create instant, human-like, and affordable voice agents.
15+
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { createDefaultInstallation } from "@calcom/app-store/_utils/installation";
2+
import type { AppDeclarativeHandler } from "@calcom/types/AppHandler";
3+
4+
import appConfig from "../config.json";
5+
6+
const handler: AppDeclarativeHandler = {
7+
appType: appConfig.type,
8+
variant: appConfig.variant,
9+
slug: appConfig.slug,
10+
supportsMultipleInstalls: false,
11+
handlerType: "add",
12+
redirect: {
13+
newTab: true,
14+
url: "https://www.millis.ai/integrations/cal-com",
15+
},
16+
createCredential: ({ appType, user, slug, teamId }) =>
17+
createDefaultInstallation({ appType, user: user, slug, key: {}, teamId }),
18+
};
19+
20+
export default handler;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default as add } from "./add";

packages/app-store/millis-ai/components/.gitkeep

Whitespace-only changes.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"/*": "Don't modify slug - If required, do it using cli edit command",
3+
"name": "Millis AI",
4+
"slug": "millis-ai",
5+
"type": "millis-ai_automation",
6+
"logo": "icon.png",
7+
"url": "https://docs.millis.ai/tutorials/create-voice-agent-for-appointment-scheduling",
8+
"variant": "automation",
9+
"categories": ["automation"],
10+
"publisher": "Millis AI",
11+
"email": "thach@millis.ai",
12+
"description": "Build next-gen voice agents with 500ms latency\r",
13+
"isTemplate": false,
14+
"__createdUsingCli": true,
15+
"__template": "link-as-an-app"
16+
}

packages/app-store/millis-ai/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * as api from "./api";
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"$schema": "https://json.schemastore.org/package.json",
3+
"private": true,
4+
"name": "@calcom/millis-ai",
5+
"version": "0.0.0",
6+
"main": "./index.ts",
7+
"dependencies": {
8+
"@calcom/lib": "*"
9+
},
10+
"devDependencies": {
11+
"@calcom/types": "*"
12+
},
13+
"description": "Build next-gen voice agents with 500ms latency\r"
14+
}
239 KB
Loading
237 KB
Loading
216 KB
Loading
213 KB
Loading
140 KB
Loading
40.3 KB
Loading
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
items:
3+
- iframe: { src: https://www.youtube.com/watch?v=Jm2elbC9UmI }
4+
- 1.jpeg
5+
- 2.jpeg
6+
- 3.jpeg
7+
---
8+
9+
{DESCRIPTION}
10+
11+
Monobot allows you to setup versatile AI Virtual Assistants for chat and voice in minutes.
12+
13+
### Easy-to-Use Intuitive Configuration UI
14+
Dozens of industries are already covered by our comprehensive Virtual Assistant template library to give you a head start.
15+
16+
### Human-like Voice Experience in Many Languages
17+
Our bots sound just like humans, can speak over 20 languages plus you can choose from many voices!
18+
19+
### Integrations
20+
Integrations with calendars, messengers, external APIs and much more is already included at no extra cost.

packages/app-store/monobot/api/add.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { createDefaultInstallation } from "@calcom/app-store/_utils/installation";
2+
import type { AppDeclarativeHandler } from "@calcom/types/AppHandler";
3+
4+
import appConfig from "../config.json";
5+
6+
const handler: AppDeclarativeHandler = {
7+
appType: appConfig.type,
8+
variant: appConfig.variant,
9+
slug: appConfig.slug,
10+
supportsMultipleInstalls: false,
11+
handlerType: "add",
12+
redirect: {
13+
newTab: true,
14+
url: "https://monobot.ai/?referralId=cal.com",
15+
},
16+
createCredential: ({ appType, user, slug, teamId }) =>
17+
createDefaultInstallation({ appType, user: user, slug, key: {}, teamId }),
18+
};
19+
20+
export default handler;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default as add } from "./add";

packages/app-store/monobot/components/.gitkeep

Whitespace-only changes.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"/*": "Don't modify slug - If required, do it using cli edit command",
3+
"name": "Monobot CX",
4+
"slug": "monobot",
5+
"type": "monobot_automation",
6+
"logo": "icon.svg",
7+
"url": "https://monobot.ai/?referralId=cal.com",
8+
"variant": "automation",
9+
"categories": ["automation"],
10+
"publisher": "Monobot CX",
11+
"email": "contact@monobot.ai",
12+
"description": "Crafting your personalized AI-driven assistant is easy and fast.",
13+
"isTemplate": false,
14+
"__createdUsingCli": true,
15+
"__template": "link-as-an-app"
16+
}

packages/app-store/monobot/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * as api from "./api";
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"$schema": "https://json.schemastore.org/package.json",
3+
"private": true,
4+
"name": "@calcom/monobot",
5+
"version": "0.0.0",
6+
"main": "./index.ts",
7+
"dependencies": {
8+
"@calcom/lib": "*"
9+
},
10+
"devDependencies": {
11+
"@calcom/types": "*"
12+
},
13+
"description": "Crafting your personalized AI-driven assistant is easy and fast."
14+
}
3.53 MB
Loading
587 KB
Loading
518 KB
Loading
Lines changed: 12 additions & 0 deletions
Loading

packages/app-store/routing-forms/components/FormActions.tsx

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
import type { App_RoutingForms_Form } from "@prisma/client";
21
import { useRouter } from "next/navigation";
32
import { createContext, forwardRef, useContext, useState } from "react";
43
import { Controller, useForm } from "react-hook-form";
54
import { v4 as uuidv4 } from "uuid";
6-
import { z } from "zod";
75

86
import { useOrgBranding } from "@calcom/features/ee/organizations/context/provider";
97
import { RoutingFormEmbedButton, RoutingFormEmbedDialog } from "@calcom/features/embed/RoutingFormEmbed";
@@ -34,15 +32,24 @@ import {
3432
} from "@calcom/ui";
3533

3634
import getFieldIdentifier from "../lib/getFieldIdentifier";
37-
import type { SerializableForm } from "../types/types";
3835

39-
type RoutingForm = SerializableForm<App_RoutingForms_Form>;
36+
type FormField = {
37+
identifier?: string;
38+
id: string;
39+
type: string;
40+
label: string;
41+
routerId?: string | null;
42+
};
43+
44+
type RoutingForm = {
45+
id: string;
46+
name: string;
47+
disabled: boolean;
48+
fields?: FormField[];
49+
};
50+
4051
export type NewFormDialogState = { action: "new" | "duplicate"; target: string | null } | null;
4152
export type SetNewFormDialogState = React.Dispatch<React.SetStateAction<NewFormDialogState>>;
42-
const newFormModalQuerySchema = z.object({
43-
action: z.literal("new").or(z.literal("duplicate")),
44-
target: z.string().optional(),
45-
});
4653

4754
function NewFormDialog({
4855
appUrl,

packages/app-store/routing-forms/pages/forms/[...appPages].tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,10 @@ export default function RoutingForms({
201201
SkeletonLoader={SkeletonLoaderTeamList}>
202202
<div className="bg-default mb-16 overflow-hidden">
203203
<List data-testid="routing-forms-list" ref={parent}>
204-
{forms?.map(({ form, readOnly }, index) => {
204+
{forms?.map(({ form, readOnly, hasError }, index) => {
205+
// Make the form read only if it has an error
206+
// TODO: Consider showing error in UI so user can report and get it fixed.
207+
readOnly = readOnly || hasError;
205208
if (!form) {
206209
return null;
207210
}

packages/app-store/routing-forms/pages/route-builder/[...appPages].tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ import { Query, Builder, Utils as QbUtils } from "react-awesome-query-builder";
88
import type { ImmutableTree, BuilderProps, Config } from "react-awesome-query-builder";
99
import type { JsonTree } from "react-awesome-query-builder";
1010
import type { UseFormReturn } from "react-hook-form";
11+
import type { z } from "zod";
1112

1213
import { areTheySiblingEntitites } from "@calcom/lib/entityPermissionUtils";
1314
import { useLocale } from "@calcom/lib/hooks/useLocale";
1415
import { buildEmptyQueryValue, raqbQueryValueUtils } from "@calcom/lib/raqb/raqbUtils";
15-
import type { App_RoutingForms_Form } from "@calcom/prisma/client";
1616
import { SchedulingType } from "@calcom/prisma/client";
1717
import type { RouterOutputs } from "@calcom/trpc/react";
1818
import { trpc } from "@calcom/trpc/react";
@@ -49,7 +49,6 @@ import {
4949
isDynamicOperandField,
5050
} from "../../lib/getQueryBuilderConfig";
5151
import isRouter from "../../lib/isRouter";
52-
import type { SerializableForm } from "../../types/types";
5352
import type {
5453
GlobalRoute,
5554
LocalRoute,
@@ -58,6 +57,7 @@ import type {
5857
EditFormRoute,
5958
AttributeRoutingConfig,
6059
} from "../../types/types";
60+
import type { zodRoutes } from "../../zod";
6161
import { RouteActionType } from "../../zod";
6262

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

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

915-
const notHaveAttributesQuery = ({ form }: { form: SerializableForm<App_RoutingForms_Form> }) => {
915+
const notHaveAttributesQuery = ({ form }: { form: { routes: z.infer<typeof zodRoutes> } }) => {
916916
return form.routes?.every((route) => {
917917
if (isRouter(route)) {
918918
return true;

0 commit comments

Comments
 (0)