diff --git a/apps/web/components/ui/avatar/UserAvatarGroup.tsx b/apps/web/components/ui/avatar/UserAvatarGroup.tsx index ad3909641e..e9346fb401 100644 --- a/apps/web/components/ui/avatar/UserAvatarGroup.tsx +++ b/apps/web/components/ui/avatar/UserAvatarGroup.tsx @@ -1,3 +1,4 @@ +import { CAL_URL } from "@calcom/lib/constants"; import { getUserAvatarUrl } from "@calcom/lib/getAvatarUrl"; import type { User } from "@calcom/prisma/client"; import { AvatarGroup } from "@calcom/ui"; @@ -11,6 +12,7 @@ export function UserAvatarGroup(props: UserAvatarProps) { ({ + href: `${CAL_URL}/${user.username}?redirect=false`, alt: user.name || "", title: user.name || "", image: getUserAvatarUrl(user), diff --git a/apps/web/components/ui/avatar/UserAvatarGroupWithOrg.tsx b/apps/web/components/ui/avatar/UserAvatarGroupWithOrg.tsx index 9de57a0b57..6b265395d8 100644 --- a/apps/web/components/ui/avatar/UserAvatarGroupWithOrg.tsx +++ b/apps/web/components/ui/avatar/UserAvatarGroupWithOrg.tsx @@ -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 type { Team, User } from "@calcom/prisma/client"; import { AvatarGroup } from "@calcom/ui"; @@ -10,8 +11,11 @@ type UserAvatarProps = Omit, "items"> & export function UserAvatarGroupWithOrg(props: UserAvatarProps) { const { users, organization, ...rest } = props; + const orgBranding = useOrgBranding(); + const baseUrl = `${orgBranding?.fullDomain ?? CAL_URL}`; const items = [ { + href: baseUrl, image: `${WEBAPP_URL}/team/${organization.slug}/avatar.png`, alt: organization.name || undefined, title: organization.name, @@ -19,6 +23,7 @@ export function UserAvatarGroupWithOrg(props: UserAvatarProps) { ].concat( users.map((user) => { return { + href: `${baseUrl}/${user.username}/?redirect=false`, image: getUserAvatarUrl(user), alt: user.name || undefined, title: user.name || user.username || "", diff --git a/apps/web/pages/[user].tsx b/apps/web/pages/[user].tsx index 7d5cf4f9f7..493b8f3953 100644 --- a/apps/web/pages/[user].tsx +++ b/apps/web/pages/[user].tsx @@ -54,6 +54,7 @@ export function UserPage(props: InferGetServerSidePropsType = async (cont 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 markdownStrippedBio = stripMarkdown(user?.bio || ""); diff --git a/apps/web/pages/bookings/[status].tsx b/apps/web/pages/bookings/[status].tsx index db5dcb07a8..24b6cbc948 100644 --- a/apps/web/pages/bookings/[status].tsx +++ b/apps/web/pages/bookings/[status].tsx @@ -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(() => { if (!query.isFetching && query.hasNextPage && query.status === "success") { diff --git a/apps/web/pages/event-types/index.tsx b/apps/web/pages/event-types/index.tsx index 3b6fcb599f..d9f32aeeb5 100644 --- a/apps/web/pages/event-types/index.tsx +++ b/apps/web/pages/event-types/index.tsx @@ -13,7 +13,7 @@ import { getLayout } from "@calcom/features/MainLayout"; import { useOrgBranding } from "@calcom/features/ee/organizations/context/provider"; import useIntercom from "@calcom/features/ee/support/lib/intercom/useIntercom"; 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 { DuplicateDialog } from "@calcom/features/eventtypes/components/DuplicateDialog"; import { TeamsFilter } from "@calcom/features/filters/components/TeamsFilter"; diff --git a/apps/web/pages/org/[orgSlug]/[user]/index.tsx b/apps/web/pages/org/[orgSlug]/[user]/index.tsx index 7174a217d7..df0d6d6b97 100644 --- a/apps/web/pages/org/[orgSlug]/[user]/index.tsx +++ b/apps/web/pages/org/[orgSlug]/[user]/index.tsx @@ -26,7 +26,7 @@ export const getServerSideProps = async (ctx: GetServerSidePropsContext) => { if (team) { 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; diff --git a/apps/web/public/static/locales/de/common.json b/apps/web/public/static/locales/de/common.json index a9da73eb13..7c0859d374 100644 --- a/apps/web/public/static/locales/de/common.json +++ b/apps/web/public/static/locales/de/common.json @@ -155,7 +155,7 @@ "webhook_updated_successfully": "Webhook erfolgreich aktualisiert!", "webhook_removed_successfully": "Webhook erfolgreich entfernt!", "payload_template": "Payload Vorlage", - "dismiss": "Abbrechen", + "dismiss": "Ignorieren", "no_data_yet": "Noch keine Daten", "ping_test": "Pingtest", "add_to_homescreen": "Fügen Sie diese App Ihrem Startbildschirm für schnelleren Zugriff hinzu.", @@ -295,7 +295,7 @@ "other": "Sonstige", "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_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.", "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.", @@ -683,7 +683,7 @@ "plan_upgrade_teams": "Du musst deinen Plan upgraden, um ein Team zu erstellen.", "plan_upgrade_instructions": "Sie können <1>hier upgraden.", "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_event_type_btn": "Neuer Ereignistyp", "new_event_type_heading": "Erstellen Sie Ihren ersten Ereignistyp", @@ -703,7 +703,7 @@ "repeats_up_to_other": "Wiederholt sich bis zu {{count}} mal", "every_for_freq": "Alle {{freq}} für", "event_remaining_one": "{{count}} Ereignis übrig", - "event_remaining_other": "{{count}} Ereignisse übrig", + "event_remaining_other": "{{count}} Termine übrig", "repeats_every": "Wiederholt sich alle", "occurrence_one": "Vorkommnis", "occurrence_other": "Vorkommnisse", @@ -1110,7 +1110,7 @@ "zapier_invite_link": "Zapier Einladungs-Link", "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", - "event_location": "Ort des Ereignisses", + "event_location": "Ort des Termins", "reschedule_optional": "Grund für die Verschiebung (optional)", "reschedule_placeholder": "Lassen Sie andere wissen, warum Sie den Termin verschieben müssen", "event_cancelled": "Dieser Termin ist abgesagt", @@ -1277,7 +1277,7 @@ "2fa_required": "Zwei-Faktor-Authentifizierung erforderlich", "incorrect_2fa": "Falscher Zwei-Faktor-Authentifizierungscode", "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.", "create_workflow": "Einen Workflow erstellen", "do_this": "Mache dies", @@ -1362,7 +1362,7 @@ "add_dynamic_variables": "Dynamische Textvariablen hinzufügen", "event_name_info": "Name des Ereignistyps", "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", "additional_notes_info": "Die zusätzlichen Anmerkungen der Buchung", "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.", "for_a_maximum_of": "Für maximal", "event_one": "Ereignis", - "event_other": "Ereignisse", + "event_other": "Termine", "profile_team_description": "Einstellungen für Ihr Teamprofil verwalten", "profile_org_description": "Einstellungen für Ihr Organization-Profil verwalten", "members_team_description": "Benutzer in der Gruppe", @@ -1502,13 +1502,13 @@ "require_additional_notes": "Zusätzliche Notizen erforderlich", "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", - "after_event_trigger": "nach Ende des Ereignisses", - "how_long_after": "Wie lange nach Ende des Ereignisses?", + "after_event_trigger": "nach Ende des Termins", + "how_long_after": "Wie lange nach Ende des Termins?", "no_available_slots": "Keine verfügbaren Plätze", "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.", "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", "error_editing_availability": "Fehler beim Bearbeiten der Verfügbarkeit", "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?", "verify": "Bestätigen", "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", "cancel_url_variable": "Absage-URL", "cancel_url_info": "Die URL, um die Buchung abzusagen", @@ -1849,15 +1849,15 @@ "select_user": "Benutzer auswählen", "select_event_type": "Ereignistyp auswählen", "select_date_range": "Datumsbereich auswählen", - "popular_events": "Beliebte Ereignisse", + "popular_events": "Beliebte Termine", "no_event_types_found": "Keine Ereignistypen gefunden", "average_event_duration": "Durchschnittliche Ereignisdauer", "most_booked_members": "Meistgebuchte Mitglieder", "least_booked_members": "Am wenigsten gebuchte Mitglieder", - "events_created": "Ereignisse erstellt", - "events_completed": "Ereignisse abgeschlossen", + "events_created": "Termine erstellt", + "events_completed": "Termine abgeschlossen", "events_cancelled": "Termine abgesagt", - "events_rescheduled": "Ereignisse neu geplant", + "events_rescheduled": "Termine neu geplant", "from_last_period": "seit dem letzten Zeitraum", "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.", @@ -1996,7 +1996,7 @@ "insights_all_org_filter": "Alle Apps", "insights_team_filter": "Team: {{teamName}}", "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", "custom_plan": "Maßgeschneiderter Tarif", "email_embed": "E-Mail Einbettung", diff --git a/packages/features/tips/Tips.tsx b/packages/features/tips/Tips.tsx index 3ac41350c3..c5c24a10cc 100644 --- a/packages/features/tips/Tips.tsx +++ b/packages/features/tips/Tips.tsx @@ -6,84 +6,12 @@ import { Card } from "@calcom/ui"; export const tips = [ { - 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", - }, - { - 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: 12, + thumbnailUrl: "https://cal.com/og-image-cal-ai.jpg", + mediaLink: "https://go.cal.com/cal-ai", + title: "Cal.ai", + description: "Your personal AI scheduling assistant", + href: "https://go.cal.com/cal-ai", }, { id: 11, @@ -94,13 +22,84 @@ export const tips = [ href: "https://go.cal.com/insights", }, { - id: 12, - thumbnailUrl: - "https://cal.com/og-image-cal-ai.jpg", - mediaLink: "https://go.cal.com/cal-ai", - title: "Cal.ai", - description: "Your personal AI scheduling assistant", - href: "https://go.cal.com/cal-ai", + 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: 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", }, ];