Merge branch 'main' into refactor/create-booking

This commit is contained in:
Morgan 2023-11-27 09:58:11 +02:00 committed by GitHub
commit 97e998f107
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 123 additions and 106 deletions

View File

@ -1,3 +1,4 @@
import { CAL_URL } from "@calcom/lib/constants";
import { getUserAvatarUrl } from "@calcom/lib/getAvatarUrl"; import { getUserAvatarUrl } from "@calcom/lib/getAvatarUrl";
import type { User } from "@calcom/prisma/client"; import type { User } from "@calcom/prisma/client";
import { AvatarGroup } from "@calcom/ui"; import { AvatarGroup } from "@calcom/ui";
@ -11,6 +12,7 @@ export function UserAvatarGroup(props: UserAvatarProps) {
<AvatarGroup <AvatarGroup
{...rest} {...rest}
items={users.map((user) => ({ items={users.map((user) => ({
href: `${CAL_URL}/${user.username}?redirect=false`,
alt: user.name || "", alt: user.name || "",
title: user.name || "", title: user.name || "",
image: getUserAvatarUrl(user), image: getUserAvatarUrl(user),

View File

@ -1,4 +1,5 @@
import { WEBAPP_URL } from "@calcom/lib/constants"; import { useOrgBranding } from "@calcom/features/ee/organizations/context/provider";
import { CAL_URL, WEBAPP_URL } from "@calcom/lib/constants";
import { getUserAvatarUrl } from "@calcom/lib/getAvatarUrl"; import { getUserAvatarUrl } from "@calcom/lib/getAvatarUrl";
import type { Team, User } from "@calcom/prisma/client"; import type { Team, User } from "@calcom/prisma/client";
import { AvatarGroup } from "@calcom/ui"; import { AvatarGroup } from "@calcom/ui";
@ -10,8 +11,11 @@ type UserAvatarProps = Omit<React.ComponentProps<typeof AvatarGroup>, "items"> &
export function UserAvatarGroupWithOrg(props: UserAvatarProps) { export function UserAvatarGroupWithOrg(props: UserAvatarProps) {
const { users, organization, ...rest } = props; const { users, organization, ...rest } = props;
const orgBranding = useOrgBranding();
const baseUrl = `${orgBranding?.fullDomain ?? CAL_URL}`;
const items = [ const items = [
{ {
href: baseUrl,
image: `${WEBAPP_URL}/team/${organization.slug}/avatar.png`, image: `${WEBAPP_URL}/team/${organization.slug}/avatar.png`,
alt: organization.name || undefined, alt: organization.name || undefined,
title: organization.name, title: organization.name,
@ -19,6 +23,7 @@ export function UserAvatarGroupWithOrg(props: UserAvatarProps) {
].concat( ].concat(
users.map((user) => { users.map((user) => {
return { return {
href: `${baseUrl}/${user.username}/?redirect=false`,
image: getUserAvatarUrl(user), image: getUserAvatarUrl(user),
alt: user.name || undefined, alt: user.name || undefined,
title: user.name || user.username || "", title: user.name || user.username || "",

View File

@ -54,6 +54,7 @@ export function UserPage(props: InferGetServerSidePropsType<typeof getServerSide
// So it doesn't display in the Link (and make tests fail) // So it doesn't display in the Link (and make tests fail)
user: _user, user: _user,
orgSlug: _orgSlug, orgSlug: _orgSlug,
redirect: _redirect,
...query ...query
} = useRouterQuery(); } = useRouterQuery();
@ -388,6 +389,16 @@ export const getServerSideProps: GetServerSideProps<UserPageProps> = async (cont
descriptionAsSafeHTML: markdownToSafeHTML(eventType.description), descriptionAsSafeHTML: markdownToSafeHTML(eventType.description),
})); }));
// if profile only has one public event-type, redirect to it
if (eventTypes.length === 1 && context.query.redirect !== "false") {
return {
redirect: {
permanent: false,
destination: `/${user.username}/${eventTypes[0].slug}`,
},
};
}
const safeBio = markdownToSafeHTML(user.bio) || ""; const safeBio = markdownToSafeHTML(user.bio) || "";
const markdownStrippedBio = stripMarkdown(user?.bio || ""); const markdownStrippedBio = stripMarkdown(user?.bio || "");

View File

@ -97,7 +97,7 @@ export default function Bookings() {
} }
); );
// Animate page (tab) tranistions to look smoothing // Animate page (tab) transitions to look smoothing
const buttonInView = useInViewObserver(() => { const buttonInView = useInViewObserver(() => {
if (!query.isFetching && query.hasNextPage && query.status === "success") { if (!query.isFetching && query.hasNextPage && query.status === "success") {

View File

@ -13,7 +13,7 @@ import { getLayout } from "@calcom/features/MainLayout";
import { useOrgBranding } from "@calcom/features/ee/organizations/context/provider"; import { useOrgBranding } from "@calcom/features/ee/organizations/context/provider";
import useIntercom from "@calcom/features/ee/support/lib/intercom/useIntercom"; import useIntercom from "@calcom/features/ee/support/lib/intercom/useIntercom";
import { EventTypeEmbedButton, EventTypeEmbedDialog } from "@calcom/features/embed/EventTypeEmbed"; import { EventTypeEmbedButton, EventTypeEmbedDialog } from "@calcom/features/embed/EventTypeEmbed";
import { EventTypeDescriptionLazy as EventTypeDescription } from "@calcom/features/eventtypes/components"; import { EventTypeDescription } from "@calcom/features/eventtypes/components";
import CreateEventTypeDialog from "@calcom/features/eventtypes/components/CreateEventTypeDialog"; import CreateEventTypeDialog from "@calcom/features/eventtypes/components/CreateEventTypeDialog";
import { DuplicateDialog } from "@calcom/features/eventtypes/components/DuplicateDialog"; import { DuplicateDialog } from "@calcom/features/eventtypes/components/DuplicateDialog";
import { TeamsFilter } from "@calcom/features/filters/components/TeamsFilter"; import { TeamsFilter } from "@calcom/features/filters/components/TeamsFilter";

View File

@ -26,7 +26,7 @@ export const getServerSideProps = async (ctx: GetServerSidePropsContext) => {
if (team) { if (team) {
return GSSTeamPage({ ...ctx, query: { slug: ctx.query.user } }); return GSSTeamPage({ ...ctx, query: { slug: ctx.query.user } });
} }
return GSSUserPage({ ...ctx, query: { user: ctx.query.user } }); return GSSUserPage({ ...ctx, query: { user: ctx.query.user, redirect: ctx.query.redirect } });
}; };
type Props = UserPageProps | TeamPageProps; type Props = UserPageProps | TeamPageProps;

View File

@ -155,7 +155,7 @@
"webhook_updated_successfully": "Webhook erfolgreich aktualisiert!", "webhook_updated_successfully": "Webhook erfolgreich aktualisiert!",
"webhook_removed_successfully": "Webhook erfolgreich entfernt!", "webhook_removed_successfully": "Webhook erfolgreich entfernt!",
"payload_template": "Payload Vorlage", "payload_template": "Payload Vorlage",
"dismiss": "Abbrechen", "dismiss": "Ignorieren",
"no_data_yet": "Noch keine Daten", "no_data_yet": "Noch keine Daten",
"ping_test": "Pingtest", "ping_test": "Pingtest",
"add_to_homescreen": "Fügen Sie diese App Ihrem Startbildschirm für schnelleren Zugriff hinzu.", "add_to_homescreen": "Fügen Sie diese App Ihrem Startbildschirm für schnelleren Zugriff hinzu.",
@ -295,7 +295,7 @@
"other": "Sonstige", "other": "Sonstige",
"email_sign_in_subject": "Ihr Anmelde-Link für {{appName}}", "email_sign_in_subject": "Ihr Anmelde-Link für {{appName}}",
"emailed_you_and_attendees": "Wir haben eine E-Mail mit einer Kalendereinladung mit den Details an alle gesendet.", "emailed_you_and_attendees": "Wir haben eine E-Mail mit einer Kalendereinladung mit den Details an alle gesendet.",
"emailed_you_and_attendees_recurring": "Wir haben eine E-Mail mit einer Kalendereinladung mit den Details für das erste dieser wiederkehrenden Ereignisse an alle gesendet.", "emailed_you_and_attendees_recurring": "Wir haben eine E-Mail mit einer Kalendereinladung mit den Details für das erste dieser wiederkehrenden Termine an alle gesendet.",
"emailed_you_and_any_other_attendees": "Wir haben eine E-Mail mit diesen Informationen an alle gesendet.", "emailed_you_and_any_other_attendees": "Wir haben eine E-Mail mit diesen Informationen an alle gesendet.",
"needs_to_be_confirmed_or_rejected": "Ihr Termin muss noch bestätigt oder abgelehnt werden.", "needs_to_be_confirmed_or_rejected": "Ihr Termin muss noch bestätigt oder abgelehnt werden.",
"needs_to_be_confirmed_or_rejected_recurring": "Ihr wiederkehrender Termin muss noch bestätigt oder abgelehnt werden.", "needs_to_be_confirmed_or_rejected_recurring": "Ihr wiederkehrender Termin muss noch bestätigt oder abgelehnt werden.",
@ -683,7 +683,7 @@
"plan_upgrade_teams": "Du musst deinen Plan upgraden, um ein Team zu erstellen.", "plan_upgrade_teams": "Du musst deinen Plan upgraden, um ein Team zu erstellen.",
"plan_upgrade_instructions": "Sie können <1>hier upgraden</1>.", "plan_upgrade_instructions": "Sie können <1>hier upgraden</1>.",
"event_types_page_title": "Ereignistypen", "event_types_page_title": "Ereignistypen",
"event_types_page_subtitle": "Erstellen Sie teilbare Ereignisse, die andere Personen buchen können.", "event_types_page_subtitle": "Erstellen Sie teilbare Termine, die andere Personen buchen können.",
"new": "Neu", "new": "Neu",
"new_event_type_btn": "Neuer Ereignistyp", "new_event_type_btn": "Neuer Ereignistyp",
"new_event_type_heading": "Erstellen Sie Ihren ersten Ereignistyp", "new_event_type_heading": "Erstellen Sie Ihren ersten Ereignistyp",
@ -703,7 +703,7 @@
"repeats_up_to_other": "Wiederholt sich bis zu {{count}} mal", "repeats_up_to_other": "Wiederholt sich bis zu {{count}} mal",
"every_for_freq": "Alle {{freq}} für", "every_for_freq": "Alle {{freq}} für",
"event_remaining_one": "{{count}} Ereignis übrig", "event_remaining_one": "{{count}} Ereignis übrig",
"event_remaining_other": "{{count}} Ereignisse übrig", "event_remaining_other": "{{count}} Termine übrig",
"repeats_every": "Wiederholt sich alle", "repeats_every": "Wiederholt sich alle",
"occurrence_one": "Vorkommnis", "occurrence_one": "Vorkommnis",
"occurrence_other": "Vorkommnisse", "occurrence_other": "Vorkommnisse",
@ -1110,7 +1110,7 @@
"zapier_invite_link": "Zapier Einladungs-Link", "zapier_invite_link": "Zapier Einladungs-Link",
"meeting_url_provided_after_confirmed": "Eine Termin-URL wird angelegt, sobald der Termin bestätigt wurde.", "meeting_url_provided_after_confirmed": "Eine Termin-URL wird angelegt, sobald der Termin bestätigt wurde.",
"dynamically_display_attendee_or_organizer": "Zeigt dynamisch entweder Ihnen den Namen Ihres Teilnehmers bzw. Ihrer Teilnehmerin an oder zeigt Ihrem/Ihrer Teilnehmerin Ihren Namen an", "dynamically_display_attendee_or_organizer": "Zeigt dynamisch entweder Ihnen den Namen Ihres Teilnehmers bzw. Ihrer Teilnehmerin an oder zeigt Ihrem/Ihrer Teilnehmerin Ihren Namen an",
"event_location": "Ort des Ereignisses", "event_location": "Ort des Termins",
"reschedule_optional": "Grund für die Verschiebung (optional)", "reschedule_optional": "Grund für die Verschiebung (optional)",
"reschedule_placeholder": "Lassen Sie andere wissen, warum Sie den Termin verschieben müssen", "reschedule_placeholder": "Lassen Sie andere wissen, warum Sie den Termin verschieben müssen",
"event_cancelled": "Dieser Termin ist abgesagt", "event_cancelled": "Dieser Termin ist abgesagt",
@ -1277,7 +1277,7 @@
"2fa_required": "Zwei-Faktor-Authentifizierung erforderlich", "2fa_required": "Zwei-Faktor-Authentifizierung erforderlich",
"incorrect_2fa": "Falscher Zwei-Faktor-Authentifizierungscode", "incorrect_2fa": "Falscher Zwei-Faktor-Authentifizierungscode",
"which_event_type_apply": "Auf welchen Termintyp wird dies angewandt?", "which_event_type_apply": "Auf welchen Termintyp wird dies angewandt?",
"no_workflows_description": "Workflows ermöglichen die einfache Automatisierung des Versands von Benachrichtigungen und Erinnerungen, so dass Sie Prozesse rund um Ihre Ereignisse erstellen können.", "no_workflows_description": "Workflows ermöglichen die einfache Automatisierung des Versands von Benachrichtigungen und Erinnerungen, so dass Sie Prozesse rund um Ihre Termine erstellen können.",
"timeformat_profile_hint": "Dies ist eine interne Einstellung, die keinen Einfluss darauf hat, wie die Zeiten auf den öffentlichen Buchungsseiten für Sie oder jemanden, der Sie buchen möchte, angezeigt werden.", "timeformat_profile_hint": "Dies ist eine interne Einstellung, die keinen Einfluss darauf hat, wie die Zeiten auf den öffentlichen Buchungsseiten für Sie oder jemanden, der Sie buchen möchte, angezeigt werden.",
"create_workflow": "Einen Workflow erstellen", "create_workflow": "Einen Workflow erstellen",
"do_this": "Mache dies", "do_this": "Mache dies",
@ -1362,7 +1362,7 @@
"add_dynamic_variables": "Dynamische Textvariablen hinzufügen", "add_dynamic_variables": "Dynamische Textvariablen hinzufügen",
"event_name_info": "Name des Ereignistyps", "event_name_info": "Name des Ereignistyps",
"event_date_info": "Das Datum der Veranstaltung", "event_date_info": "Das Datum der Veranstaltung",
"event_time_info": "Die Startzeit des Ereignisses", "event_time_info": "Die Startzeit des Termins",
"location_info": "Der Ort des Events", "location_info": "Der Ort des Events",
"additional_notes_info": "Die zusätzlichen Anmerkungen der Buchung", "additional_notes_info": "Die zusätzlichen Anmerkungen der Buchung",
"attendee_name_info": "Name der buchenden Person", "attendee_name_info": "Name der buchenden Person",
@ -1380,7 +1380,7 @@
"create_your_first_webhook_description": "Mit Webhooks können Sie Meetingdaten in Echtzeit erhalten, sobald etwas in {{appName}} passiert.", "create_your_first_webhook_description": "Mit Webhooks können Sie Meetingdaten in Echtzeit erhalten, sobald etwas in {{appName}} passiert.",
"for_a_maximum_of": "Für maximal", "for_a_maximum_of": "Für maximal",
"event_one": "Ereignis", "event_one": "Ereignis",
"event_other": "Ereignisse", "event_other": "Termine",
"profile_team_description": "Einstellungen für Ihr Teamprofil verwalten", "profile_team_description": "Einstellungen für Ihr Teamprofil verwalten",
"profile_org_description": "Einstellungen für Ihr Organization-Profil verwalten", "profile_org_description": "Einstellungen für Ihr Organization-Profil verwalten",
"members_team_description": "Benutzer in der Gruppe", "members_team_description": "Benutzer in der Gruppe",
@ -1502,13 +1502,13 @@
"require_additional_notes": "Zusätzliche Notizen erforderlich", "require_additional_notes": "Zusätzliche Notizen erforderlich",
"require_additional_notes_description": "Zusätzliche Notizen bei der Buchung erforderlich machen", "require_additional_notes_description": "Zusätzliche Notizen bei der Buchung erforderlich machen",
"email_address_action": "eine E-Mail an eine bestimmte E-Mail-Adresse senden", "email_address_action": "eine E-Mail an eine bestimmte E-Mail-Adresse senden",
"after_event_trigger": "nach Ende des Ereignisses", "after_event_trigger": "nach Ende des Termins",
"how_long_after": "Wie lange nach Ende des Ereignisses?", "how_long_after": "Wie lange nach Ende des Termins?",
"no_available_slots": "Keine verfügbaren Plätze", "no_available_slots": "Keine verfügbaren Plätze",
"time_available": "Zeit verfügbar", "time_available": "Zeit verfügbar",
"cant_find_the_right_video_app_visit_our_app_store": "Sie können die richtige Video-App nicht finden? Besuchen Sie unseren <1>App Store</1>.", "cant_find_the_right_video_app_visit_our_app_store": "Sie können die richtige Video-App nicht finden? Besuchen Sie unseren <1>App Store</1>.",
"install_new_calendar_app": "Neue Kalender-App installieren", "install_new_calendar_app": "Neue Kalender-App installieren",
"make_phone_number_required": "Telefonnummer für die Buchung des Ereignisses erforderlich machen", "make_phone_number_required": "Telefonnummer für die Buchung des Termins erforderlich machen",
"new_event_type_availability": "{{eventTypeTitle}} | Verfügbarkeit", "new_event_type_availability": "{{eventTypeTitle}} | Verfügbarkeit",
"error_editing_availability": "Fehler beim Bearbeiten der Verfügbarkeit", "error_editing_availability": "Fehler beim Bearbeiten der Verfügbarkeit",
"dont_have_permission": "Ihnen fehlt die Berechtigung, auf diese Ressource zuzugreifen.", "dont_have_permission": "Ihnen fehlt die Berechtigung, auf diese Ressource zuzugreifen.",
@ -1813,7 +1813,7 @@
"can_you_try_again": "Können Sie es zu einem anderen Zeitpunkt erneut versuchen?", "can_you_try_again": "Können Sie es zu einem anderen Zeitpunkt erneut versuchen?",
"verify": "Bestätigen", "verify": "Bestätigen",
"timezone_info": "Die Zeitzone der empfangenden Person", "timezone_info": "Die Zeitzone der empfangenden Person",
"event_end_time_variable": "Endzeitpunkt des Ereignisses", "event_end_time_variable": "Endzeitpunkt des Termins",
"event_end_time_info": "Der Endzeitpunkt des Termins", "event_end_time_info": "Der Endzeitpunkt des Termins",
"cancel_url_variable": "Absage-URL", "cancel_url_variable": "Absage-URL",
"cancel_url_info": "Die URL, um die Buchung abzusagen", "cancel_url_info": "Die URL, um die Buchung abzusagen",
@ -1849,15 +1849,15 @@
"select_user": "Benutzer auswählen", "select_user": "Benutzer auswählen",
"select_event_type": "Ereignistyp auswählen", "select_event_type": "Ereignistyp auswählen",
"select_date_range": "Datumsbereich auswählen", "select_date_range": "Datumsbereich auswählen",
"popular_events": "Beliebte Ereignisse", "popular_events": "Beliebte Termine",
"no_event_types_found": "Keine Ereignistypen gefunden", "no_event_types_found": "Keine Ereignistypen gefunden",
"average_event_duration": "Durchschnittliche Ereignisdauer", "average_event_duration": "Durchschnittliche Ereignisdauer",
"most_booked_members": "Meistgebuchte Mitglieder", "most_booked_members": "Meistgebuchte Mitglieder",
"least_booked_members": "Am wenigsten gebuchte Mitglieder", "least_booked_members": "Am wenigsten gebuchte Mitglieder",
"events_created": "Ereignisse erstellt", "events_created": "Termine erstellt",
"events_completed": "Ereignisse abgeschlossen", "events_completed": "Termine abgeschlossen",
"events_cancelled": "Termine abgesagt", "events_cancelled": "Termine abgesagt",
"events_rescheduled": "Ereignisse neu geplant", "events_rescheduled": "Termine neu geplant",
"from_last_period": "seit dem letzten Zeitraum", "from_last_period": "seit dem letzten Zeitraum",
"from_to_date_period": "Von: {{startDate}} Bis: {{endDate}}", "from_to_date_period": "Von: {{startDate}} Bis: {{endDate}}",
"redirect_url_warning": "Das Hinzufügen einer Umleitung wird die Erfolgsseite deaktivieren. Erwähnen Sie \"Buchung bestätigt\" auf Ihrer benutzerdefinierten Erfolgsseite.", "redirect_url_warning": "Das Hinzufügen einer Umleitung wird die Erfolgsseite deaktivieren. Erwähnen Sie \"Buchung bestätigt\" auf Ihrer benutzerdefinierten Erfolgsseite.",
@ -1996,7 +1996,7 @@
"insights_all_org_filter": "Alle Apps", "insights_all_org_filter": "Alle Apps",
"insights_team_filter": "Team: {{teamName}}", "insights_team_filter": "Team: {{teamName}}",
"insights_user_filter": "Benutzer: {{userName}}", "insights_user_filter": "Benutzer: {{userName}}",
"insights_subtitle": "Sehen Sie sich Buchungs-Insights zu Ihren Termine an", "insights_subtitle": "Erfahren Sie mehr über Ihre Termine und Ihr Team",
"location_options": "{{locationCount}} Veranstaltungsort-Optionen", "location_options": "{{locationCount}} Veranstaltungsort-Optionen",
"custom_plan": "Maßgeschneiderter Tarif", "custom_plan": "Maßgeschneiderter Tarif",
"email_embed": "E-Mail Einbettung", "email_embed": "E-Mail Einbettung",

View File

@ -6,84 +6,12 @@ import { Card } from "@calcom/ui";
export const tips = [ export const tips = [
{ {
id: 1, id: 12,
thumbnailUrl: "https://img.youtube.com/vi/60HJt8DOVNo/0.jpg", thumbnailUrl: "https://cal.com/og-image-cal-ai.jpg",
mediaLink: "https://go.cal.com/dynamic-video", mediaLink: "https://go.cal.com/cal-ai",
title: "Dynamic booking links", title: "Cal.ai",
description: "Booking link that allows people to quickly schedule meetings.", description: "Your personal AI scheduling assistant",
href: "https://cal.com/blog/cal-v-1-9", href: "https://go.cal.com/cal-ai",
},
{
id: 2,
thumbnailUrl: "https://img.youtube.com/vi/EAc46SPL6iA/0.jpg",
mediaLink: "https://go.cal.com/teams-video",
title: "How to set up Teams",
description: "Learn how to use round-robin and collective events.",
href: "https://cal.com/docs/enterprise-features/teams",
},
{
id: 3,
thumbnailUrl: "https://img.youtube.com/vi/c7ZKFuLy1fg/0.jpg",
mediaLink: "https://go.cal.com/routing-video",
title: "Routing Forms, Workflows",
description: "Ask screening questions of potential bookers to connect them with the right person",
href: "https://cal.com/blog/cal-v-1-8",
},
{
id: 4,
thumbnailUrl: "https://img.youtube.com/vi/zGr_s-fG84k/0.jpg",
mediaLink: "https://go.cal.com/confirmation-video",
title: "Requires Confirmation",
description: "Learn how to be in charge of your bookings",
href: "https://cal.com/resources/feature/opt-in",
},
{
id: 5,
thumbnailUrl: "https://img.youtube.com/vi/0v_nQtpxC_4/0.jpg",
mediaLink: "https://go.cal.com/payments-video",
title: "Accept Payments",
description: "Charge for your time with Cal.com's Stripe App",
href: "https://app.cal.com/apps/stripe",
},
{
id: 6,
thumbnailUrl: "https://img.youtube.com/vi/yGiZo1Ry5-8/0.jpg",
mediaLink: "https://go.cal.com/recurring-video",
title: "Recurring Bookings",
description: "Learn how to create a recurring schedule",
href: "https://go.cal.com/recurring-video",
},
{
id: 7,
thumbnailUrl: "https://img.youtube.com/vi/UVXgo12cY4g/0.jpg",
mediaLink: "https://go.cal.com/routing-forms",
title: "Routing Forms",
description: "Ask questions and route to the correct person",
href: "https://go.cal.com/routing-forms",
},
{
id: 8,
thumbnailUrl: "https://img.youtube.com/vi/piKlAiibAFo/0.jpg",
mediaLink: "https://go.cal.com/workflows",
title: "Automate Workflows",
description: "Make time work for you and automate tasks",
href: "https://go.cal.com/workflows",
},
{
id: 9,
thumbnailUrl: "https://img.youtube.com/vi/93iOmzHieCU/0.jpg",
mediaLink: "https://go.cal.com/round-robin",
title: "Round-Robin",
description: "Create advanced group meetings with round-robin",
href: "https://go.cal.com/round-robin",
},
{
id: 10,
thumbnailUrl: "https://img.youtube.com/vi/jvaBafzVUQc/0.jpg",
mediaLink: "https://go.cal.com/video",
title: "Cal Video",
description: "Free video conferencing with recording",
href: "https://go.cal.com/video",
}, },
{ {
id: 11, id: 11,
@ -94,13 +22,84 @@ export const tips = [
href: "https://go.cal.com/insights", href: "https://go.cal.com/insights",
}, },
{ {
id: 12, id: 10,
thumbnailUrl: thumbnailUrl: "https://img.youtube.com/vi/jvaBafzVUQc/0.jpg",
"https://cal.com/og-image-cal-ai.jpg", mediaLink: "https://go.cal.com/video",
mediaLink: "https://go.cal.com/cal-ai", title: "Cal Video",
title: "Cal.ai", description: "Free video conferencing with recording",
description: "Your personal AI scheduling assistant", href: "https://go.cal.com/video",
href: "https://go.cal.com/cal-ai", },
{
id: 9,
thumbnailUrl: "https://img.youtube.com/vi/93iOmzHieCU/0.jpg",
mediaLink: "https://go.cal.com/round-robin",
title: "Round-Robin",
description: "Create advanced group meetings with round-robin",
href: "https://go.cal.com/round-robin",
},
{
id: 8,
thumbnailUrl: "https://img.youtube.com/vi/piKlAiibAFo/0.jpg",
mediaLink: "https://go.cal.com/workflows",
title: "Automate Workflows",
description: "Make time work for you and automate tasks",
href: "https://go.cal.com/workflows",
},
{
id: 7,
thumbnailUrl: "https://img.youtube.com/vi/UVXgo12cY4g/0.jpg",
mediaLink: "https://go.cal.com/routing-forms",
title: "Routing Forms",
description: "Ask questions and route to the correct person",
href: "https://go.cal.com/routing-forms",
},
{
id: 6,
thumbnailUrl: "https://img.youtube.com/vi/yGiZo1Ry5-8/0.jpg",
mediaLink: "https://go.cal.com/recurring-video",
title: "Recurring Bookings",
description: "Learn how to create a recurring schedule",
href: "https://go.cal.com/recurring-video",
},
{
id: 5,
thumbnailUrl: "https://img.youtube.com/vi/0v_nQtpxC_4/0.jpg",
mediaLink: "https://go.cal.com/payments-video",
title: "Accept Payments",
description: "Charge for your time with Cal.com's Stripe App",
href: "https://app.cal.com/apps/stripe",
},
{
id: 4,
thumbnailUrl: "https://img.youtube.com/vi/zGr_s-fG84k/0.jpg",
mediaLink: "https://go.cal.com/confirmation-video",
title: "Requires Confirmation",
description: "Learn how to be in charge of your bookings",
href: "https://cal.com/resources/feature/opt-in",
},
{
id: 3,
thumbnailUrl: "https://img.youtube.com/vi/c7ZKFuLy1fg/0.jpg",
mediaLink: "https://go.cal.com/routing-video",
title: "Routing Forms, Workflows",
description: "Ask screening questions of potential bookers to connect them with the right person",
href: "https://cal.com/blog/cal-v-1-8",
},
{
id: 2,
thumbnailUrl: "https://img.youtube.com/vi/EAc46SPL6iA/0.jpg",
mediaLink: "https://go.cal.com/teams-video",
title: "How to set up Teams",
description: "Learn how to use round-robin and collective events.",
href: "https://cal.com/docs/enterprise-features/teams",
},
{
id: 1,
thumbnailUrl: "https://img.youtube.com/vi/60HJt8DOVNo/0.jpg",
mediaLink: "https://go.cal.com/dynamic-video",
title: "Dynamic booking links",
description: "Booking link that allows people to quickly schedule meetings.",
href: "https://cal.com/blog/cal-v-1-9",
}, },
]; ];