@@ -208,11 +212,14 @@ const ProfileView = () => {
showToast(t("error_updating_settings"), "error");
};
- if (isLoading || !user) return
;
+ if (isLoading || !user)
+ return
;
+
const isDisabled = isSubmitting || !isDirty;
return (
<>
+
@@ -68,4 +93,14 @@ const TwoFactorAuthView = () => {
TwoFactorAuthView.getLayout = getLayout;
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
+ const ssr = await ssrInit(context);
+
+ return {
+ props: {
+ trpcState: ssr.dehydrate(),
+ },
+ };
+};
+
export default TwoFactorAuthView;
diff --git a/apps/web/pages/settings/teams/[id]/appearance.tsx b/apps/web/pages/settings/teams/[id]/appearance.tsx
index a5514889ac..182e6fbdd4 100644
--- a/apps/web/pages/settings/teams/[id]/appearance.tsx
+++ b/apps/web/pages/settings/teams/[id]/appearance.tsx
@@ -1 +1,15 @@
+import { GetServerSidePropsContext } from "next";
+
+import { ssrInit } from "@server/lib/ssr";
+
export { default } from "@calcom/features/ee/teams/pages/team-appearance-view";
+
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
+ const ssr = await ssrInit(context);
+
+ return {
+ props: {
+ trpcState: ssr.dehydrate(),
+ },
+ };
+};
diff --git a/apps/web/pages/settings/teams/[id]/billing.tsx b/apps/web/pages/settings/teams/[id]/billing.tsx
index f127a20d53..4da2121863 100644
--- a/apps/web/pages/settings/teams/[id]/billing.tsx
+++ b/apps/web/pages/settings/teams/[id]/billing.tsx
@@ -1 +1,15 @@
+import { GetServerSidePropsContext } from "next";
+
+import { ssrInit } from "@server/lib/ssr";
+
export { default } from "@calcom/features/ee/teams/pages/team-billing-view";
+
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
+ const ssr = await ssrInit(context);
+
+ return {
+ props: {
+ trpcState: ssr.dehydrate(),
+ },
+ };
+};
diff --git a/apps/web/pages/settings/teams/[id]/members.tsx b/apps/web/pages/settings/teams/[id]/members.tsx
index cce1f79bd4..c6150cc754 100644
--- a/apps/web/pages/settings/teams/[id]/members.tsx
+++ b/apps/web/pages/settings/teams/[id]/members.tsx
@@ -1 +1,15 @@
+import { GetServerSidePropsContext } from "next";
+
+import { ssrInit } from "@server/lib/ssr";
+
export { default } from "@calcom/features/ee/teams/pages/team-members-view";
+
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
+ const ssr = await ssrInit(context);
+
+ return {
+ props: {
+ trpcState: ssr.dehydrate(),
+ },
+ };
+};
diff --git a/apps/web/pages/settings/teams/[id]/profile.tsx b/apps/web/pages/settings/teams/[id]/profile.tsx
index 5318cc8478..02434b0c86 100644
--- a/apps/web/pages/settings/teams/[id]/profile.tsx
+++ b/apps/web/pages/settings/teams/[id]/profile.tsx
@@ -1 +1,15 @@
+import { GetServerSidePropsContext } from "next";
+
+import { ssrInit } from "@server/lib/ssr";
+
export { default } from "@calcom/features/ee/teams/pages/team-profile-view";
+
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
+ const ssr = await ssrInit(context);
+
+ return {
+ props: {
+ trpcState: ssr.dehydrate(),
+ },
+ };
+};
diff --git a/apps/web/pages/settings/teams/[id]/sso.tsx b/apps/web/pages/settings/teams/[id]/sso.tsx
index afb0724157..97db4771eb 100644
--- a/apps/web/pages/settings/teams/[id]/sso.tsx
+++ b/apps/web/pages/settings/teams/[id]/sso.tsx
@@ -1 +1,15 @@
+import { GetServerSidePropsContext } from "next";
+
+import { ssrInit } from "@server/lib/ssr";
+
export { default } from "@calcom/features/ee/sso/page/teams-sso-view";
+
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
+ const ssr = await ssrInit(context);
+
+ return {
+ props: {
+ trpcState: ssr.dehydrate(),
+ },
+ };
+};
diff --git a/apps/web/pages/settings/teams/new/index.tsx b/apps/web/pages/settings/teams/new/index.tsx
index a1b2da4ba0..e0d9aa8a47 100644
--- a/apps/web/pages/settings/teams/new/index.tsx
+++ b/apps/web/pages/settings/teams/new/index.tsx
@@ -1,14 +1,19 @@
+import { GetServerSidePropsContext } from "next";
import Head from "next/head";
import { CreateANewTeamForm } from "@calcom/features/ee/teams/components";
+import { useLocale } from "@calcom/lib/hooks/useLocale";
import { getWizardLayout as getLayout } from "@calcom/ui";
+import { ssrInit } from "@server/lib/ssr";
+
const CreateNewTeamPage = () => {
+ const { t } = useLocale();
return (
<>
-
Create a new Team
-
+
{t("create_new_team")}
+
>
@@ -17,4 +22,14 @@ const CreateNewTeamPage = () => {
CreateNewTeamPage.getLayout = getLayout;
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
+ const ssr = await ssrInit(context);
+
+ return {
+ props: {
+ trpcState: ssr.dehydrate(),
+ },
+ };
+};
+
export default CreateNewTeamPage;
diff --git a/apps/web/pages/teams/index.tsx b/apps/web/pages/teams/index.tsx
index 3f2248c50c..6039f38883 100644
--- a/apps/web/pages/teams/index.tsx
+++ b/apps/web/pages/teams/index.tsx
@@ -1,8 +1,12 @@
+import { GetServerSidePropsContext } from "next";
+
import { TeamsListing } from "@calcom/features/ee/teams/components";
import { WEBAPP_URL } from "@calcom/lib/constants";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { Button, Icon, Shell } from "@calcom/ui";
+import { ssrInit } from "@server/lib/ssr";
+
function Teams() {
const { t } = useLocale();
return (
@@ -22,4 +26,14 @@ function Teams() {
Teams.requiresLicense = false;
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
+ const ssr = await ssrInit(context);
+
+ return {
+ props: {
+ trpcState: ssr.dehydrate(),
+ },
+ };
+};
+
export default Teams;
diff --git a/apps/web/pages/workflows/index.tsx b/apps/web/pages/workflows/index.tsx
index a0ea681736..7e2a4b8500 100644
--- a/apps/web/pages/workflows/index.tsx
+++ b/apps/web/pages/workflows/index.tsx
@@ -1 +1,15 @@
+import { GetServerSidePropsContext } from "next";
+
+import { ssrInit } from "@server/lib/ssr";
+
export { default } from "@calcom/features/ee/workflows/pages/index";
+
+export const getServerSideProps = async (context: GetServerSidePropsContext) => {
+ const ssr = await ssrInit(context);
+
+ return {
+ props: {
+ trpcState: ssr.dehydrate(),
+ },
+ };
+};
diff --git a/apps/web/public/static/locales/ar/common.json b/apps/web/public/static/locales/ar/common.json
index 1bb83744e6..2352a58d0b 100644
--- a/apps/web/public/static/locales/ar/common.json
+++ b/apps/web/public/static/locales/ar/common.json
@@ -653,7 +653,7 @@
"show_advanced_settings": "عرض الإعدادات المتقدمة",
"event_name": "اسم الحدث",
"event_name_tooltip": "الاسم الذي سيظهر في التقاويم",
- "meeting_with_user": "الاجتماع مع {ATTENDEE}",
+ "meeting_with_user": "الاجتماع مع {{attendeeName}}",
"additional_inputs": "مدخلات إضافية",
"additional_input_description": "يتطلب من المجدول إدخال مدخلات إضافية قبل تأكيد الحجز",
"label": "العلامة",
diff --git a/apps/web/public/static/locales/cs/common.json b/apps/web/public/static/locales/cs/common.json
index 00679b39bc..2a0bf74781 100644
--- a/apps/web/public/static/locales/cs/common.json
+++ b/apps/web/public/static/locales/cs/common.json
@@ -653,7 +653,7 @@
"show_advanced_settings": "Zobrazit pokročilá nastavení",
"event_name": "Název události",
"event_name_tooltip": "Název, který se zobrazí v kalendářích",
- "meeting_with_user": "Schůzka s {ATTENDEE}",
+ "meeting_with_user": "Schůzka s {{attendeeName}}",
"additional_inputs": "Další pole",
"additional_input_description": "Před potvrzením rezervace vyžadovat od plánující osoby zadání dalších vstupů",
"label": "Popisek",
diff --git a/apps/web/public/static/locales/de/common.json b/apps/web/public/static/locales/de/common.json
index aa8046c8f0..7075b3dd08 100644
--- a/apps/web/public/static/locales/de/common.json
+++ b/apps/web/public/static/locales/de/common.json
@@ -142,7 +142,7 @@
"install_another": "Weitere installieren",
"until": "bis",
"powered_by": "betrieben von",
- "unavailable": "Unverfügbar",
+ "unavailable": "Nicht verfügbar",
"set_work_schedule": "Arbeitszeiten festlegen",
"change_bookings_availability": "Verfügbarkeit für Buchungen ändern",
"select": "Auswählen...",
@@ -604,6 +604,7 @@
"teams": "Teams",
"team": "Team",
"team_billing": "Abrechnung der Teams",
+ "team_billing_description": "Verwalte die Abrechungen deines Teams",
"upgrade_to_flexible_pro_title": "Wir haben die Abrechnung für Teams geändert",
"upgrade_to_flexible_pro_message": "Es gibt Mitglieder in Ihrem Team ohne Lizenz. Upgraden Sie Ihren Pro-Plan um fehlende Lizenzen abzudecken.",
"changed_team_billing_info": "Ab Januar 2022 berechnen wir pro Sitzplatz für Teammitglieder. Mitglieder deines Teams, die Pro kostenlos hatten, sind jetzt in einer 14 Tage Testphase. Sobald die Testversion abläuft, werden diese Mitglieder vor Ihrem Team verborgen, es sei denn, Sie upgraden jetzt.",
@@ -637,7 +638,7 @@
"show_advanced_settings": "Erweiterte Einstellungen anzeigen",
"event_name": "Termin-Name",
"event_name_tooltip": "Der Name, der in Kalendern angezeigt wird",
- "meeting_with_user": "Meeting mit {ATTENDEE}",
+ "meeting_with_user": "Meeting mit {{attendeeName}}",
"additional_inputs": "Zusätzliche Notizen",
"additional_input_description": "Erfordert die Eingabe zusätzlicher Eingaben durch den Planer vor der Buchungsbestätigung",
"label": "Bezeichnung",
@@ -688,6 +689,8 @@
"confirm_delete_account": "Ja, Account löschen",
"integrations": "Integrationen",
"apps": "Apps",
+ "apps_description": "Hier findest du eine Auflistung deiner Apps",
+ "apps_listing": "App-Liste",
"category_apps": "{{category}} Apps",
"app_store": "App Store",
"app_store_description": "Verbindet Menschen, Technologie und den Arbeitsplatz.",
@@ -1119,7 +1122,11 @@
"invoices": "Rechnungen",
"embeds": "Embeds",
"impersonation": "Benutzeridentitätswechsel",
+ "impersonation_description": "Einstellungen um Benutzeridentitätswechsel zu verwalten",
"users": "Benutzer",
+ "profile_description": "Einstellungen für Ihr {{appName}} Profil verwalten",
+ "users_description": "Hier findest du eine Auflistung aller Benutzer",
+ "users_listing": "Benutzerliste",
"general_description": "Einstellungen für Ihre Sprache und Zeitzone verwalten",
"calendars_description": "Konfigurieren Sie, wie Ihre Event-Typen mit Ihren Kalendern interagieren sollen",
"appearance_description": "Einstellungen für Ihre Buchungsdarstellung verwalten",
@@ -1293,6 +1300,10 @@
"saml_sp_acs_url_copied": "ACS-URL kopiert!",
"saml_sp_entity_id_copied": "SP-Entitäts-ID kopiert!",
"saml_btn_configure": "Konfigurieren",
+ "kbar_search_placeholder": "Geben Sie einen Befehl ein oder suchen Sie...",
+ "free_to_use_apps": "Kostenlos",
+ "enterprise_license": "Das ist eine Enterprise-Funktion",
+ "enterprise_license_description": "Um diese Funktion zu aktivieren, holen Sie sich einen Deployment-Schlüssel von der {{consoleUrl}}-Konsole und fügen Sie ihn als CALCOM_LICENSE_KEY zu Ihrer .env hinzu. Wenn Ihr Team bereits eine Lizenz hat, wenden Sie sich bitte an {{supportMail}} für Hilfe.",
"add_calendar": "Kalender hinzufügen",
"limit_future_bookings": "Zukünftige Termine begrenzen",
"limit_future_bookings_description": "Begrenzt, wie weit in die Zukunft dieser Termin gebucht werden kann",
diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json
index 985c55e135..90cc695bf1 100644
--- a/apps/web/public/static/locales/en/common.json
+++ b/apps/web/public/static/locales/en/common.json
@@ -629,6 +629,7 @@
"teams": "Teams",
"team": "Team",
"team_billing": "Team Billing",
+ "team_billing_description": "Manage billing for your team",
"upgrade_to_flexible_pro_title": "We've changed billing for teams",
"upgrade_to_flexible_pro_message": "There are members in your team without a seat. Upgrade your pro plan to cover missing seats.",
"changed_team_billing_info": "As of January 2022 we charge on a per-seat basis for team members. Members of your team who had PRO for free are now on a 14 day trial. Once their trial expires these members will be hidden from your team unless you upgrade now.",
@@ -663,7 +664,7 @@
"show_advanced_settings": "Show advanced settings",
"event_name": "Event Name",
"event_name_tooltip": "The name that will appear in calendars",
- "meeting_with_user": "Meeting with {ATTENDEE}",
+ "meeting_with_user": "Meeting with {{attendeeName}}",
"additional_inputs": "Additional Inputs",
"additional_input_description": "Require scheduler to input additional inputs prior the booking is confirmed",
"label": "Label",
@@ -724,6 +725,8 @@
"delete_account_confirmation_message": "Are you sure you want to delete your {{appName}} account? Anyone who you've shared your account link with will no longer be able to book using it and any preferences you have saved will be lost.",
"integrations": "Integrations",
"apps": "Apps",
+ "apps_description": "Here you can find a list of your apps",
+ "apps_listing": "App listing",
"category_apps": "{{category}} apps",
"app_store": "App Store",
"app_store_description": "Connecting people, technology and the workplace.",
@@ -1176,12 +1179,15 @@
"invoices": "Invoices",
"embeds": "Embeds",
"impersonation": "Impersonation",
+ "impersonation_description": "Settings to manage user impersonation",
"users": "Users",
"profile_description": "Manage settings for your {{appName}} profile",
+ "users_description": "Here you can find a list of all users",
+ "users_listing": "User listing",
"general_description": "Manage settings for your language and timezone",
"calendars_description": "Configure how your event types interact with your calendars",
"appearance_description": "Manage settings for your booking appearance",
- "conferencing_description": "Manage your video conferencing apps for your meetings",
+ "conferencing_description": "Add your favourite video conferencing apps for your meetings",
"password_description": "Manage settings for your account passwords",
"2fa_description": "Manage settings for your account passwords",
"we_just_need_basic_info": "We just need some basic info to get your profile setup.",
@@ -1382,6 +1388,10 @@
"number_sms_notifications": "Phone number (SMS\u00a0notifications)",
"attendee_email_workflow": "Attendee email",
"attendee_email_info": "The person booking's email",
+ "kbar_search_placeholder": "Type a command or search...",
+ "free_to_use_apps": "Free",
+ "enterprise_license": "This is an enterprise feature",
+ "enterprise_license_description": "To enable this feature, get a deployment key at {{consoleUrl}} console and add it to your .env as CALCOM_LICENSE_KEY. If your team already has a license, please contact {{supportMail}} for help.",
"invalid_credential": "Oh no! Looks like permission expired or was revoked. Please reinstall again.",
"choose_common_schedule_team_event": "Choose a common schedule",
"choose_common_schedule_team_event_description": "Enable this if you want to use a common schedule between hosts. When disabled, each host will be booked based on their default schedule.",
diff --git a/apps/web/public/static/locales/es/common.json b/apps/web/public/static/locales/es/common.json
index f06fc7ce95..3fa4dec3a0 100644
--- a/apps/web/public/static/locales/es/common.json
+++ b/apps/web/public/static/locales/es/common.json
@@ -653,7 +653,7 @@
"show_advanced_settings": "Mostrar Opciones Avanzadas",
"event_name": "Nombre del Evento",
"event_name_tooltip": "Nombre que aparecerá en los calendarios",
- "meeting_with_user": "Reunión con {ATTENDEE}",
+ "meeting_with_user": "Reunión con {{attendeeName}}",
"additional_inputs": "Campos Adicionales",
"additional_input_description": "Requerir que el planificador introduzca entradas adicionales antes de confirmar la reserva",
"label": "Etiqueta",
diff --git a/apps/web/public/static/locales/fr/common.json b/apps/web/public/static/locales/fr/common.json
index 994f352daa..30cec2d5f6 100644
--- a/apps/web/public/static/locales/fr/common.json
+++ b/apps/web/public/static/locales/fr/common.json
@@ -653,7 +653,7 @@
"show_advanced_settings": "Afficher les paramètres avancés",
"event_name": "Nom de l'événement",
"event_name_tooltip": "Le nom qui apparaîtra dans les calendriers",
- "meeting_with_user": "Rendez-vous avec {ATTENDEE}",
+ "meeting_with_user": "Rendez-vous avec {{attendeeName}}",
"additional_inputs": "Entrées additionnelles",
"additional_input_description": "Exiger que le planificateur saisisse des entrées supplémentaires avant que la réservation soit confirmée",
"label": "Libellé",
diff --git a/apps/web/public/static/locales/he/common.json b/apps/web/public/static/locales/he/common.json
index 7484d9b96e..d47b25f681 100644
--- a/apps/web/public/static/locales/he/common.json
+++ b/apps/web/public/static/locales/he/common.json
@@ -653,7 +653,7 @@
"show_advanced_settings": "הצגת הגדרות מתקדמות",
"event_name": "שם האירוע",
"event_name_tooltip": "השם שיופיע בלוחות השנה",
- "meeting_with_user": "פגישה עם {ATTENDEE}",
+ "meeting_with_user": "פגישה עם {{attendeeName}}",
"additional_inputs": "אפשרויות קלט נוספות",
"additional_input_description": "לדרוש מכלי התזמון להוסיף פרטים לפני אישור ההזמנה",
"label": "תווית",
diff --git a/apps/web/public/static/locales/it/common.json b/apps/web/public/static/locales/it/common.json
index c3a06d4561..62d89a36ba 100644
--- a/apps/web/public/static/locales/it/common.json
+++ b/apps/web/public/static/locales/it/common.json
@@ -653,7 +653,7 @@
"show_advanced_settings": "Mostra impostazioni avanzate",
"event_name": "Nome Dell'Evento",
"event_name_tooltip": "Il nome che apparirà nei calendari",
- "meeting_with_user": "Riunione con {ATTENDEE}",
+ "meeting_with_user": "Riunione con {{attendeeName}}",
"additional_inputs": "Input Aggiuntivi",
"additional_input_description": "Chiedi al creatore del programma di inserire dei campi di input aggiuntivi prima che la prenotazione sia confermata",
"label": "Etichetta",
diff --git a/apps/web/public/static/locales/ja/common.json b/apps/web/public/static/locales/ja/common.json
index 55761eb610..ea5d9670e2 100644
--- a/apps/web/public/static/locales/ja/common.json
+++ b/apps/web/public/static/locales/ja/common.json
@@ -653,7 +653,7 @@
"show_advanced_settings": "詳細設定を表示",
"event_name": "イベント名",
"event_name_tooltip": "カレンダーに表示される名前",
- "meeting_with_user": "{ATTENDEE} とのミーティング",
+ "meeting_with_user": "{{attendeeName}} とのミーティング",
"additional_inputs": "追加入力",
"additional_input_description": "予約確認前にスケジュール設定者の追加入力が必要です",
"label": "ラベル",
diff --git a/apps/web/public/static/locales/ko/common.json b/apps/web/public/static/locales/ko/common.json
index 943021836b..c7a3b4886e 100644
--- a/apps/web/public/static/locales/ko/common.json
+++ b/apps/web/public/static/locales/ko/common.json
@@ -653,7 +653,7 @@
"show_advanced_settings": "고급 설정 표시",
"event_name": "이벤트 이름",
"event_name_tooltip": "캘린더에 표시될 이름",
- "meeting_with_user": "{ATTENDEE} 님과의 회의",
+ "meeting_with_user": "{{attendeeName}} 님과의 회의",
"additional_inputs": "추가 입력",
"additional_input_description": "예약이 확정되기 전 스케줄러가 추가 입력을 해야 합니다",
"label": "레이블",
diff --git a/apps/web/public/static/locales/nl/common.json b/apps/web/public/static/locales/nl/common.json
index 7207ed37c8..45129bc9ac 100644
--- a/apps/web/public/static/locales/nl/common.json
+++ b/apps/web/public/static/locales/nl/common.json
@@ -653,7 +653,7 @@
"show_advanced_settings": "Toon geavanceerde instellingen",
"event_name": "Naam van evenement",
"event_name_tooltip": "De naam die in kalenders wordt weergegeven",
- "meeting_with_user": "Afspraak met {ATTENDEE}",
+ "meeting_with_user": "Afspraak met {{attendeeName}}",
"additional_inputs": "Extra invoer",
"additional_input_description": "Planner vereist om extra gegevens in te voeren voordat de boeking wordt bevestigd",
"label": "Omschrijving",
diff --git a/apps/web/public/static/locales/pl/common.json b/apps/web/public/static/locales/pl/common.json
index 525506f282..968fc948df 100644
--- a/apps/web/public/static/locales/pl/common.json
+++ b/apps/web/public/static/locales/pl/common.json
@@ -653,7 +653,7 @@
"show_advanced_settings": "Pokaż ustawienia zaawansowane",
"event_name": "Nazwa wydarzenia",
"event_name_tooltip": "Nazwa, która pojawi się w kalendarzach",
- "meeting_with_user": "Spotkanie z {ATTENDEE}",
+ "meeting_with_user": "Spotkanie z {{attendeeName}}",
"additional_inputs": "Dodatkowe Wejścia",
"additional_input_description": "Wymagaj od osoby układającej harmonogram wprowadzania dodatkowych danych przed potwierdzeniem rezerwacji",
"label": "Etykieta",
diff --git a/apps/web/public/static/locales/pt-BR/common.json b/apps/web/public/static/locales/pt-BR/common.json
index 7e039d9b91..269bb3ff97 100644
--- a/apps/web/public/static/locales/pt-BR/common.json
+++ b/apps/web/public/static/locales/pt-BR/common.json
@@ -654,7 +654,7 @@
"show_advanced_settings": "Mostrar Configurações Avançadas",
"event_name": "Nome do Evento",
"event_name_tooltip": "O nome que aparecerá nos calendários",
- "meeting_with_user": "Reunião com {ATTENDEE}",
+ "meeting_with_user": "Reunião com {{attendeeName}}",
"additional_inputs": "Campos adicionais",
"additional_input_description": "Solicitar que o agendador insira entradas adicionais antes que o pedido seja confirmado",
"label": "Etiqueta",
diff --git a/apps/web/public/static/locales/pt/common.json b/apps/web/public/static/locales/pt/common.json
index 56e70f716c..acf4fa98bc 100644
--- a/apps/web/public/static/locales/pt/common.json
+++ b/apps/web/public/static/locales/pt/common.json
@@ -653,7 +653,7 @@
"show_advanced_settings": "Mostrar Configurações Avançadas",
"event_name": "Nome do Evento",
"event_name_tooltip": "O nome que será mostrado nos calendários",
- "meeting_with_user": "Reunião com {ATTENDEE}",
+ "meeting_with_user": "Reunião com {{attendeeName}}",
"additional_inputs": "Campos adicionais",
"additional_input_description": "Requerer que o responsável pelo agendamento especifique entradas complementares antes do pedido ser confirmado",
"label": "Etiqueta",
diff --git a/apps/web/public/static/locales/ro/common.json b/apps/web/public/static/locales/ro/common.json
index 351b85668d..d20abc5d44 100644
--- a/apps/web/public/static/locales/ro/common.json
+++ b/apps/web/public/static/locales/ro/common.json
@@ -654,7 +654,7 @@
"show_advanced_settings": "Afișează setările avansate",
"event_name": "Denumirea evenimentului",
"event_name_tooltip": "Numele care va apărea în calendare",
- "meeting_with_user": "Întâlnire cu {ATTENDEE}",
+ "meeting_with_user": "Întâlnire cu {{attendeeName}}",
"additional_inputs": "Date suplimentare",
"additional_input_description": "Solicitați planificatorului să introducă intrări suplimentare înainte ca rezervarea să fie confirmată",
"label": "Eticheta",
diff --git a/apps/web/public/static/locales/ru/common.json b/apps/web/public/static/locales/ru/common.json
index 177595ce37..0519f0c39e 100644
--- a/apps/web/public/static/locales/ru/common.json
+++ b/apps/web/public/static/locales/ru/common.json
@@ -654,7 +654,7 @@
"show_advanced_settings": "Показать дополнительные параметры",
"event_name": "Название события",
"event_name_tooltip": "Название, которое будет отображаться в календарях",
- "meeting_with_user": "Встреча с {ATTENDEE}",
+ "meeting_with_user": "Встреча с {{attendeeName}}",
"additional_inputs": "Дополнительные вопросы",
"additional_input_description": "Необходимо ввести в планировщик дополнительную информацию до подтверждения бронирования",
"label": "Название",
diff --git a/apps/web/public/static/locales/sr/common.json b/apps/web/public/static/locales/sr/common.json
index 41a04e1912..282b6d2b26 100644
--- a/apps/web/public/static/locales/sr/common.json
+++ b/apps/web/public/static/locales/sr/common.json
@@ -653,7 +653,7 @@
"show_advanced_settings": "Pokaži napredna podešavanja",
"event_name": "Ime Događaja",
"event_name_tooltip": "Ime koje će se pojaviti u kalendarima",
- "meeting_with_user": "Sastanak sa {ATTENDEE}",
+ "meeting_with_user": "Sastanak sa {{attendeeName}}",
"additional_inputs": "Dodatni unosi",
"additional_input_description": "Zahtevaj od planera da unese dodatne unose pre potvrde rezervacije",
"label": "Oznaka",
diff --git a/apps/web/public/static/locales/sv/common.json b/apps/web/public/static/locales/sv/common.json
index 4d9cb937e1..b2a466ddd5 100644
--- a/apps/web/public/static/locales/sv/common.json
+++ b/apps/web/public/static/locales/sv/common.json
@@ -653,7 +653,7 @@
"show_advanced_settings": "Visa avancerade inställningar",
"event_name": "Händelsenamn",
"event_name_tooltip": "Namnet som kommer visas i kalendrar",
- "meeting_with_user": "Möte med {ATTENDEE}",
+ "meeting_with_user": "Möte med {{attendeeName}}",
"additional_inputs": "Ytterligare inmatningar",
"additional_input_description": "Kräv schemaläggaren att mata in ytterligare ingångar innan bokningen bekräftas",
"label": "Etikett",
diff --git a/apps/web/public/static/locales/tr/common.json b/apps/web/public/static/locales/tr/common.json
index 347844d472..0ca4887855 100644
--- a/apps/web/public/static/locales/tr/common.json
+++ b/apps/web/public/static/locales/tr/common.json
@@ -653,7 +653,7 @@
"show_advanced_settings": "Gelişmiş ayarları göster",
"event_name": "Etkinlik Adı",
"event_name_tooltip": "Takvimlerde görünecek isim",
- "meeting_with_user": "{ATTENDEE} ile toplantı",
+ "meeting_with_user": "{{attendeeName}} ile toplantı",
"additional_inputs": "Ek Girişler",
"additional_input_description": "Rezervasyon onaylanmadan önce planlayıcının ek veri girişi yapması gereklidir",
"label": "Etiket",
diff --git a/apps/web/public/static/locales/uk/common.json b/apps/web/public/static/locales/uk/common.json
index 6981eed5d8..3b22b4777a 100644
--- a/apps/web/public/static/locales/uk/common.json
+++ b/apps/web/public/static/locales/uk/common.json
@@ -653,7 +653,7 @@
"show_advanced_settings": "Показати додаткові параметри",
"event_name": "Тип заходу",
"event_name_tooltip": "Ім’я, яке показуватиметься в календарях",
- "meeting_with_user": "Нарада з користувачем {ATTENDEE}",
+ "meeting_with_user": "Нарада з користувачем {{attendeeName}}",
"additional_inputs": "Додаткові поля введення",
"additional_input_description": "Вимагати від особи, що хоче створити бронювання, надавати додаткові відомості",
"label": "Мітка",
diff --git a/apps/web/public/static/locales/vi/common.json b/apps/web/public/static/locales/vi/common.json
index 91c754f9eb..5e2ec04b1b 100644
--- a/apps/web/public/static/locales/vi/common.json
+++ b/apps/web/public/static/locales/vi/common.json
@@ -653,7 +653,7 @@
"show_advanced_settings": "Hiển thị cài đặt nâng cao",
"event_name": "Tên sự kiện",
"event_name_tooltip": "Tên sẽ xuất hiện trong lịch",
- "meeting_with_user": "Gặp gỡ với {ATTENDEE}",
+ "meeting_with_user": "Gặp gỡ với {{attendeeName}}",
"additional_inputs": "Trường bổ sung",
"additional_input_description": "Yêu cầu người đặt lịch hãy nhập thông tin đầu vào bổ sung trước khi lịch hẹn được xác nhận",
"label": "Label",
diff --git a/apps/web/public/static/locales/zh-CN/common.json b/apps/web/public/static/locales/zh-CN/common.json
index fed78e42ac..bb80f1b785 100644
--- a/apps/web/public/static/locales/zh-CN/common.json
+++ b/apps/web/public/static/locales/zh-CN/common.json
@@ -653,7 +653,7 @@
"show_advanced_settings": "显示高级设置",
"event_name": "活动名称",
"event_name_tooltip": "在日历中显示的名称",
- "meeting_with_user": "与 {ATTENDEE} 的会议",
+ "meeting_with_user": "与 {{attendeeName}} 的会议",
"additional_inputs": "更多输入框",
"additional_input_description": "在确认预约之前,需要预约者输入额外的信息",
"label": "标签",
diff --git a/apps/web/public/static/locales/zh-TW/common.json b/apps/web/public/static/locales/zh-TW/common.json
index 931f224577..03d0d9a7a8 100644
--- a/apps/web/public/static/locales/zh-TW/common.json
+++ b/apps/web/public/static/locales/zh-TW/common.json
@@ -653,7 +653,7 @@
"show_advanced_settings": "顯示進階設定",
"event_name": "活動名稱",
"event_name_tooltip": "會顯示在行事曆上的名字",
- "meeting_with_user": "與 {ATTENDEE} 的會議",
+ "meeting_with_user": "與 {{attendeeName}} 的會議",
"additional_inputs": "額外輸入欄",
"additional_input_description": "確認預約前,預約者需先輸入額外的內容",
"label": "標籤",
diff --git a/package.json b/package.json
index e33d21f123..1fc291ea9c 100644
--- a/package.json
+++ b/package.json
@@ -60,6 +60,7 @@
},
"devDependencies": {
"@snaplet/copycat": "^0.3.0",
+ "@types/dompurify": "^2.4.0",
"@types/jest": "^28.1.7",
"dotenv-checker": "^1.1.5",
"husky": "^8.0.1",
diff --git a/packages/features/ee/common/components/LicenseRequired.tsx b/packages/features/ee/common/components/LicenseRequired.tsx
index 801048caf2..ebeac9467d 100644
--- a/packages/features/ee/common/components/LicenseRequired.tsx
+++ b/packages/features/ee/common/components/LicenseRequired.tsx
@@ -3,6 +3,7 @@
* All new changes should be made to the V2 file in
* `/packages/features/ee/common/components/v2/LicenseRequired.tsx`
*/
+import DOMPurify from "dompurify";
import { useSession } from "next-auth/react";
import React, { AriaRole, ComponentType, Fragment } from "react";
@@ -35,18 +36,20 @@ const LicenseRequired = ({ children, as = "", ...rest }: LicenseRequiredProps) =
) : (
+ __html: DOMPurify.sanitize(
+ t("enterprise_license_description", {
+ consoleUrl: `
${APP_NAME}
`,
- supportMail: `
+ supportMail: `
${SUPPORT_MAIL_ADDRESS}
`,
- }),
+ })
+ ),
}}
/>
}
diff --git a/packages/features/ee/common/components/v2/LicenseRequired.tsx b/packages/features/ee/common/components/v2/LicenseRequired.tsx
index 5331818e2a..4bf783f25f 100644
--- a/packages/features/ee/common/components/v2/LicenseRequired.tsx
+++ b/packages/features/ee/common/components/v2/LicenseRequired.tsx
@@ -1,3 +1,4 @@
+import DOMPurify from "dompurify";
import { useSession } from "next-auth/react";
import React, { AriaRole, ComponentType, Fragment } from "react";
@@ -28,18 +29,20 @@ const LicenseRequired = ({ children, as = "", ...rest }: LicenseRequiredProps) =
) : (
+ __html: DOMPurify.sanitize(
+ t("enterprise_license_description", {
+ consoleUrl: `
${APP_NAME}
`,
- supportMail: `
+ supportMail: `
${SUPPORT_MAIL_ADDRESS}
`,
- }),
+ })
+ ),
}}
/>
}
diff --git a/packages/features/ee/sso/components/SAMLConfiguration.tsx b/packages/features/ee/sso/components/SAMLConfiguration.tsx
index 1e6f0385c3..1fd0b614e7 100644
--- a/packages/features/ee/sso/components/SAMLConfiguration.tsx
+++ b/packages/features/ee/sso/components/SAMLConfiguration.tsx
@@ -60,7 +60,7 @@ export default function SAMLConfiguration({ teamId }: { teamId: number | null })
};
if (isLoading) {
- return ;
+ return ;
}
if (hasError) {
diff --git a/packages/features/ee/teams/pages/team-appearance-view.tsx b/packages/features/ee/teams/pages/team-appearance-view.tsx
index e6c46bcefd..2daee4274f 100644
--- a/packages/features/ee/teams/pages/team-appearance-view.tsx
+++ b/packages/features/ee/teams/pages/team-appearance-view.tsx
@@ -47,7 +47,7 @@ const ProfileView = () => {
return (
<>
-
+
{!isLoading && (
<>
{isAdmin ? (
diff --git a/packages/features/ee/teams/pages/team-billing-view.tsx b/packages/features/ee/teams/pages/team-billing-view.tsx
index c4185dbdf3..e9e4d1e420 100644
--- a/packages/features/ee/teams/pages/team-billing-view.tsx
+++ b/packages/features/ee/teams/pages/team-billing-view.tsx
@@ -9,10 +9,9 @@ const BillingView = () => {
const router = useRouter();
const returnTo = router.asPath;
const billingHref = `/api/integrations/stripepayment/portal?returnTo=${WEBAPP_URL}${returnTo}`;
-
return (
<>
-
+
{t("billing_manage_details_title")}
diff --git a/packages/features/ee/teams/pages/team-members-view.tsx b/packages/features/ee/teams/pages/team-members-view.tsx
index 9e8a9311a5..f8148bd822 100644
--- a/packages/features/ee/teams/pages/team-members-view.tsx
+++ b/packages/features/ee/teams/pages/team-members-view.tsx
@@ -46,7 +46,7 @@ const MembersView = () => {
return (
<>
-
+
{!isLoading && (
<>
diff --git a/packages/features/ee/teams/pages/team-profile-view.tsx b/packages/features/ee/teams/pages/team-profile-view.tsx
index e45f7672d5..edee0c771e 100644
--- a/packages/features/ee/teams/pages/team-profile-view.tsx
+++ b/packages/features/ee/teams/pages/team-profile-view.tsx
@@ -132,7 +132,7 @@ const ProfileView = () => {
return (
<>
-
+
{!isLoading && (
<>
{isAdmin ? (
diff --git a/packages/features/ee/workflows/pages/index.tsx b/packages/features/ee/workflows/pages/index.tsx
index 7fc3c16f69..113548233c 100644
--- a/packages/features/ee/workflows/pages/index.tsx
+++ b/packages/features/ee/workflows/pages/index.tsx
@@ -35,11 +35,11 @@ function WorkflowsPage() {
},
});
- return session.data ? (
+ return (
0 ? (
- ) : (
- <>>
);
}
diff --git a/packages/features/webhooks/pages/webhook-edit-view.tsx b/packages/features/webhooks/pages/webhook-edit-view.tsx
index 4e348ef9cb..b196df7ec9 100644
--- a/packages/features/webhooks/pages/webhook-edit-view.tsx
+++ b/packages/features/webhooks/pages/webhook-edit-view.tsx
@@ -54,7 +54,7 @@ const EditWebhook = () => {
return (
<>
diff --git a/packages/features/webhooks/pages/webhook-new-view.tsx b/packages/features/webhooks/pages/webhook-new-view.tsx
index d45a32b6e3..6aa45e1082 100644
--- a/packages/features/webhooks/pages/webhook-new-view.tsx
+++ b/packages/features/webhooks/pages/webhook-new-view.tsx
@@ -62,7 +62,7 @@ const NewWebhookView = () => {
return (
<>
diff --git a/packages/ui/Kbar.tsx b/packages/ui/Kbar.tsx
index 8634e12a8b..92a67379a1 100644
--- a/packages/ui/Kbar.tsx
+++ b/packages/ui/Kbar.tsx
@@ -52,151 +52,151 @@ export const KBarRoot = ({ children }: { children: React.ReactNode }) => {
{
id: "workflows",
- name: "Workflows",
- section: "Workflows",
+ name: "workflows",
+ section: "workflows",
shortcut: ["w", "f"],
keywords: "workflows automation",
perform: () => router.push("/workflows"),
},
{
id: "event-types",
- name: "Event Types",
- section: "Event Types",
+ name: "event_types_page_title",
+ section: "event_types_page_title",
shortcut: ["e", "t"],
keywords: "event types",
perform: () => router.push("/event-types"),
},
{
id: "app-store",
- name: "App Store",
- section: "Apps",
+ name: "app_store",
+ section: "apps",
shortcut: ["a", "s"],
keywords: "app store",
perform: () => router.push("/apps"),
},
{
id: "upcoming-bookings",
- name: "Upcoming Bookings",
- section: "Bookings",
+ name: "upcoming",
+ section: "bookings",
shortcut: ["u", "b"],
keywords: "upcoming bookings",
perform: () => router.push("/bookings/upcoming"),
},
{
id: "recurring-bookings",
- name: "Recurring Bookings",
- section: "Bookings",
+ name: "recurring",
+ section: "bookings",
shortcut: ["r", "b"],
keywords: "recurring bookings",
perform: () => router.push("/bookings/recurring"),
},
{
id: "past-bookings",
- name: "Past Bookings",
- section: "Bookings",
+ name: "past",
+ section: "bookings",
shortcut: ["p", "b"],
keywords: "past bookings",
perform: () => router.push("/bookings/past"),
},
{
id: "cancelled-bookings",
- name: "Cancelled Bookings",
- section: "Bookings",
+ name: "cancelled",
+ section: "bookings",
shortcut: ["c", "b"],
keywords: "cancelled bookings",
perform: () => router.push("/bookings/cancelled"),
},
{
id: "schedule",
- name: "Schedule",
- section: "Availability",
+ name: "availability",
+ section: "availability",
shortcut: ["s", "a"],
keywords: "schedule availability",
perform: () => router.push("/availability"),
},
{
id: "profile",
- name: "Profile",
- section: "Profile Settings",
+ name: "profile",
+ section: "profile",
shortcut: ["p", "s"],
keywords: "setting profile",
- perform: () => router.push("/settings/profile"),
+ perform: () => router.push("/settings/my-account/profile"),
},
{
id: "avatar",
- name: "Change Avatar",
- section: "Profile Settings",
+ name: "change_avatar",
+ section: "profile",
shortcut: ["c", "a"],
keywords: "remove change modify avatar",
- perform: () => router.push("/settings/profile"),
+ perform: () => router.push("/settings/my-account/profile"),
},
{
id: "timezone",
- name: "Change Timezone",
- section: "Profile Settings",
+ name: "timezone",
+ section: "profile",
shortcut: ["c", "t"],
keywords: "change modify timezone",
perform: () => router.push("/settings/my-account/general"),
},
{
id: "brand-color",
- name: "Change Brand Color",
- section: "Profile Settings",
+ name: "brand_color",
+ section: "profile",
shortcut: ["b", "c"],
keywords: "change modify brand color",
perform: () => router.push("/settings/my-account/appearance"),
},
{
id: "teams",
- name: "Teams",
+ name: "teams",
shortcut: ["t", "s"],
keywords: "add manage modify team",
perform: () => router.push("/settings/teams"),
},
{
id: "password",
- name: "Change Password",
- section: "Security Settings",
+ name: "change_password",
+ section: "security",
shortcut: ["c", "p"],
keywords: "change modify password",
- perform: () => router.push("/settings/security"),
+ perform: () => router.push("/settings/security/password"),
},
{
id: "two-factor",
- name: "Two Factor Authentication",
- section: "Security Settings",
+ name: "two_factor_auth",
+ section: "security",
shortcut: ["t", "f", "a"],
keywords: "two factor authentication",
perform: () => router.push("/settings/security/two-factor-auth"),
},
{
id: "impersonation",
- name: "User Impersonation",
- section: "Security Settings",
+ name: "user_impersonation_heading",
+ section: "security",
shortcut: ["u", "i"],
keywords: "user impersonation",
perform: () => router.push("/settings/security/impersonation"),
},
{
id: "webhooks",
- name: "Webhook",
- section: "Developer Settings",
+ name: "Webhooks",
+ section: "developer",
shortcut: ["w", "h"],
keywords: "webhook automation",
perform: () => router.push("/settings/developer/webhooks"),
},
{
id: "api-keys",
- name: "API Keys",
- section: "Developer Settings",
+ name: "api_keys",
+ section: "developer",
shortcut: ["a", "p", "i"],
keywords: "api keys",
perform: () => router.push("/settings/developer/api-keys"),
},
{
id: "billing",
- name: "View and Manage Billing",
- section: "Billing",
+ name: "manage_billing",
+ section: "billing",
shortcut: ["m", "b"],
keywords: "billing view manage",
perform: () => router.push("/settings/billing"),
@@ -272,13 +272,14 @@ const DisplayShortcuts = (item: shortcutArrayType) => {
function RenderResults() {
const { results } = useMatches();
+ const { t } = useLocale();
return (
typeof item === "string" ? (
- {item}
+ {t(item)}
) : (
- {item.name}
+ {t(item.name)}
)
diff --git a/packages/ui/v2/core/EmptyScreen.tsx b/packages/ui/v2/core/EmptyScreen.tsx
index 65a0952d53..99edf9bed0 100644
--- a/packages/ui/v2/core/EmptyScreen.tsx
+++ b/packages/ui/v2/core/EmptyScreen.tsx
@@ -31,9 +31,9 @@ export default function EmptyScreen({
{headline}
-
+
{description}
-
+
{buttonOnClick && buttonText &&
}
{buttonRaw}
diff --git a/packages/ui/v2/core/Shell.tsx b/packages/ui/v2/core/Shell.tsx
index 36efbc1d8e..df8b1753a9 100644
--- a/packages/ui/v2/core/Shell.tsx
+++ b/packages/ui/v2/core/Shell.tsx
@@ -203,8 +203,6 @@ export default function Shell(props: LayoutProps) {
useRedirectToLoginIfUnauthenticated(props.isPublic);
useRedirectToOnboardingIfNeeded();
useTheme("light");
- const { session } = useRedirectToLoginIfUnauthenticated(props.isPublic);
- if (!session && !props.isPublic) return null;
return (
diff --git a/packages/ui/v2/core/apps/SkeletonLoader.tsx b/packages/ui/v2/core/apps/SkeletonLoader.tsx
index 66ce4ec9ab..f9c56e2615 100644
--- a/packages/ui/v2/core/apps/SkeletonLoader.tsx
+++ b/packages/ui/v2/core/apps/SkeletonLoader.tsx
@@ -1,10 +1,21 @@
+import Meta from "../Meta";
import { ShellSubHeading } from "../Shell";
import { SkeletonText } from "../skeleton";
-function SkeletonLoader({ className }: { className?: string }) {
+function SkeletonLoader({
+ className,
+ title,
+ description,
+}: {
+ className?: string;
+ title?: string;
+ description?: string;
+}) {
return (
<>
} {...{ className }} />
+ {title && description && }
+
diff --git a/packages/ui/v2/core/layouts/SettingsLayout.tsx b/packages/ui/v2/core/layouts/SettingsLayout.tsx
index 4e2c7db4b5..53ff1a5d7c 100644
--- a/packages/ui/v2/core/layouts/SettingsLayout.tsx
+++ b/packages/ui/v2/core/layouts/SettingsLayout.tsx
@@ -122,7 +122,7 @@ const SettingsSidebarContainer = ({ className = "" }) => {
<>
}
diff --git a/yarn.lock b/yarn.lock
index 2f0a51f231..7774b92ba0 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7861,6 +7861,13 @@
resolved "https://registry.yarnpkg.com/@types/detect-port/-/detect-port-1.3.2.tgz#8c06a975e472803b931ee73740aeebd0a2eb27ae"
integrity sha512-xxgAGA2SAU4111QefXPSp5eGbDm/hW6zhvYl9IeEPZEry9F4d66QAHm5qpUXjb6IsevZV/7emAEx5MhP6O192g==
+"@types/dompurify@^2.4.0":
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/@types/dompurify/-/dompurify-2.4.0.tgz#fd9706392a88e0e0e6d367f3588482d817df0ab9"
+ integrity sha512-IDBwO5IZhrKvHFUl+clZxgf3hn2b/lU6H1KaBShPkQyGJUQ0xwebezIPSuiyGwfz1UzJWQl4M7BDxtHtCCPlTg==
+ dependencies:
+ "@types/trusted-types" "*"
+
"@types/eslint-scope@^3.7.3":
version "3.7.4"
resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16"
@@ -8383,7 +8390,7 @@
resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397"
integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==
-"@types/trusted-types@^2.0.2":
+"@types/trusted-types@*", "@types/trusted-types@^2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756"
integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==