Merge branch 'main' into feat/organizations

This commit is contained in:
Leo Giovanetti 2023-06-12 14:51:23 -03:00
commit e91b908f2a
9 changed files with 289 additions and 824 deletions

View File

@ -50,6 +50,6 @@
"storybook-react-i18next": "^1.1.2",
"tailwindcss": "^3.2.1",
"typescript": "^4.9.4",
"vite": "^2.9.15"
"vite": "^4.1.2"
}
}

View File

@ -263,7 +263,8 @@ const AppearanceView = () => {
type="submit"
loading={mutation.isLoading}
color="primary"
className="mt-8">
className="mt-8"
data-testid="update-theme-btn">
{t("update")}
</Button>
</Form>

View File

@ -0,0 +1,45 @@
import { expect } from "@playwright/test";
import { test } from "./lib/fixtures";
test.describe("Change Theme Test", () => {
test("change theme to dark", async ({ page, users }) => {
const pro = await users.create();
await pro.apiLogin();
await page.goto("/settings/my-account/appearance");
await page.waitForLoadState("networkidle");
//Click the "Dark" theme label
await page.click('[data-testid="theme-dark"]');
//Click the update button
await page.click('[data-testid="update-theme-btn"]');
//Wait for the toast to appear
const toast = await page.waitForSelector("div[class*='data-testid-toast-success']");
expect(toast).toBeTruthy();
//Go to the profile page and check if the theme is dark
await page.goto(`/${pro.username}`);
const darkModeClass = await page.getAttribute("html", "class");
expect(darkModeClass).toContain("dark");
});
test("change theme to light", async ({ page, users }) => {
const pro = await users.create();
await pro.apiLogin();
await page.goto("/settings/my-account/appearance");
await page.waitForLoadState("networkidle");
//Click the "Light" theme label
await page.click('[data-testid="theme-light"]');
//Click the update theme button
await page.click('[data-testid="update-theme-btn"]');
//Wait for the toast to appear
const toast = await page.waitForSelector("div[class*='data-testid-toast-success']");
expect(toast).toBeTruthy();
//Go to the profile page and check if the theme is light
await page.goto(`/${pro.username}`);
const darkModeClass = await page.getAttribute("html", "class");
expect(darkModeClass).toContain("light");
});
});

View File

@ -18,6 +18,7 @@
"verify_email_email_header": "Vérifiez votre adresse e-mail",
"verify_email_email_button": "Vérifier l'adresse e-mail",
"verify_email_email_body": "Veuillez vérifier votre adresse e-mail en cliquant sur le bouton ci-dessous.",
"verify_email_email_link_text": "Si vous n'aimez pas cliquer sur les boutons, voici le lien :",
"email_sent": "E-mail envoyé avec succès",
"event_declined_subject": "Refusé : {{title}} le {{date}}",
"event_cancelled_subject": "Annulé : {{title}} le {{date}}",
@ -853,6 +854,7 @@
"installed_app_payment_description": "Configurez les services de traitement de paiement à utiliser lors de la facturation de vos clients.",
"installed_app_analytics_description": "Configurez les applications d'analyse à utiliser pour vos pages de réservation.",
"installed_app_other_description": "Toutes vos applications installées à partir d'autres catégories.",
"installed_app_conferencing_description": "Configurez les applications de conférence à utiliser.",
"installed_app_automation_description": "Configurez les applications d'automatisation à utiliser.",
"installed_app_web3_description": "Configurez les applications Web3 à utiliser pour vos pages de réservation.",
"analytics": "Analytiques",
@ -1208,6 +1210,7 @@
"start_of_week": "Début de la semaine",
"recordings_title": "Enregistrements",
"recording": "Enregistrement",
"happy_scheduling": "Bonne planification",
"select_calendars": "Sélectionnez les calendriers dont vous souhaitez vérifier les conflits afin d'éviter les doubles réservations.",
"check_for_conflicts": "Vérifier les conflits",
"view_recordings": "Voir les enregistrements",

View File

@ -18,6 +18,7 @@
"verify_email_email_header": "Verifica il tuo indirizzo e-mail",
"verify_email_email_button": "Verifica l'e-mail",
"verify_email_email_body": "Verifica il tuo indirizzo e-mail cliccando sul pulsante qui in basso.",
"verify_email_email_link_text": "Ecco il link nel caso tu non voglia fare clic su pulsanti:",
"email_sent": "Email inviata con successo",
"event_declined_subject": "Rifiutato: {{title}} il {{date}}",
"event_cancelled_subject": "Cancellato: {{title}} il {{date}}",
@ -390,6 +391,8 @@
"booking_rescheduled": "Prenotazione Riprogrammata",
"recording_ready": "Link per scaricare la registrazione pronto",
"booking_created": "Prenotazione Creata",
"booking_rejected": "Prenotazione Rifiutata",
"booking_requested": "Prenotazione Richiesta",
"meeting_ended": "Riunione terminata",
"form_submitted": "Modulo inviato",
"event_triggers": "Attivatori Evento",
@ -851,6 +854,7 @@
"installed_app_payment_description": "Configura quale servizio di elaborazione dei pagamenti usare per addebitare i clienti.",
"installed_app_analytics_description": "Imposta quali app di analisi usare per le tue pagine di prenotazione",
"installed_app_other_description": "Tutte le app installate appartenenti ad altre categorie.",
"installed_app_conferencing_description": "Configura quali app di conferenza utilizzare",
"installed_app_automation_description": "Imposta quali app di automazione usare",
"installed_app_web3_description": "Imposta quali app Web3 usare per le tue pagine di prenotazione",
"analytics": "Analisi",
@ -1047,6 +1051,7 @@
"new_event_trigger": "quando viene prenotato un nuovo evento",
"email_host_action": "invia e-mail all'organizzatore",
"email_attendee_action": "invia e-mail ai partecipanti",
"sms_attendee_action": "Invia SMS al partecipante",
"sms_number_action": "invia SMS a un numero specifico",
"workflows": "Flussi di lavoro",
"new_workflow_btn": "Nuovo flusso di lavoro",
@ -1205,6 +1210,7 @@
"start_of_week": "Inizio della settimana",
"recordings_title": "Registrazioni",
"recording": "Registrazione",
"happy_scheduling": "Buona pianificazione",
"select_calendars": "Seleziona su quali calendari desideri controllare i conflitti per evitare doppie prenotazioni.",
"check_for_conflicts": "Controlla conflitti",
"view_recordings": "Visualizza registrazioni",
@ -1246,6 +1252,7 @@
"conferencing_description": "Aggiungi le tue app di videoconferenza preferite per le tue riunioni",
"add_conferencing_app": "Aggiungi app di videoconferenza",
"password_description": "Gestisci le impostazioni relative alle password del tuo account",
"set_up_two_factor_authentication": "Imposta l'autenticazione a due fattori",
"we_just_need_basic_info": "Abbiamo bisogno di alcune semplici informazioni per completare la configurazione del tuo profilo.",
"skip": "Salta",
"do_this_later": "Più tardi",
@ -1277,6 +1284,7 @@
"download_responses_description": "Scarica tutte le risposte al tuo modulo in formato CSV.",
"download": "Scarica",
"download_recording": "Scarica registrazione",
"recording_from_your_recent_call": "Una registrazione della tua recente chiamata su {{appName}} è pronta per il download",
"create_your_first_form": "Crea il tuo primo modulo",
"create_your_first_form_description": "I Moduli di instradamento consentono di porre domande qualificanti agli utenti per indirizzarli a persone o eventi pertinenti.",
"create_your_first_webhook": "Crea il tuo primo Webhook",
@ -1462,6 +1470,8 @@
"find_the_best_person": "Trova la persona più adatta disponibile e fai ruotare i membri del team.",
"fixed_round_robin": "Round robin fisso",
"add_one_fixed_attendee": "Aggiungi un partecipante fisso e fai intervenire a turno altri partecipanti.",
"calcom_is_better_with_team": "{{appName}} funziona meglio in team",
"the_calcom_team": "Il team {{companyName}}",
"add_your_team_members": "Aggiungi i membri del tuo team ai tuoi tipi di eventi. Usa la pianificazione collettiva per includere tutti o trova la persona più adatta con la pianificazione round robin.",
"booking_limit_reached": "È stato raggiunto il limite di prenotazione per questo tipo di evento",
"duration_limit_reached": "È stato raggiunto il limite di durata per questo tipo di evento",
@ -1480,6 +1490,7 @@
"navigate_installed_apps": "Vai alle app installate",
"disabled_calendar": "Se hai un altro calendario installato, le nuove prenotazioni saranno aggiunte a quel calendario. Altrimenti, collega un nuovo calendario in modo da non perdere nessuna nuova prenotazione.",
"enable_apps": "Abilita app",
"enable_apps_description": "Abilita le app che gli utenti possono integrare con {{appName}}",
"purchase_license": "Acquista una licenza",
"already_have_key": "Ho già una chiave:",
"already_have_key_suggestion": "Copia qui la variabile di ambiente CALCOM_LICENSE_KEY esistente.",
@ -1634,6 +1645,7 @@
"booking_questions_title": "Domande per la prenotazione",
"booking_questions_description": "Personalizza le domande poste nella pagina di prenotazione",
"add_a_booking_question": "Aggiungi una domanda",
"identifier": "Identificatore",
"duplicate_email": "Indirizzo e-mail duplicato",
"booking_with_payment_cancelled": "Non è più possibile pagare per questo evento",
"booking_with_payment_cancelled_already_paid": "È in corso il rimborso del pagamento per questa prenotazione.",
@ -1674,6 +1686,7 @@
"spot_popular_event_types": "Individua i tipi di evento popolari",
"spot_popular_event_types_description": "Scopri quali tipi di evento ricevono più clic e prenotazioni",
"no_responses_yet": "Per ora non ci sono risposte",
"no_routes_defined": "Nessun percorso definito",
"this_will_be_the_placeholder": "Questo sarà il segnaposto",
"error_booking_event": "Si è verificato un errore durante la prenotazione dell'evento. Aggiornare la pagina e riprovare",
"timeslot_missing_title": "Nessuna fascia oraria selezionata",
@ -1682,6 +1695,7 @@
"switch_monthly": "Passa alla vista mensile",
"switch_weekly": "Passa alla vista settimanale",
"switch_multiday": "Passa alla vista giornaliera",
"switch_columnview": "Passa alla vista colonna",
"num_locations": "{{num}} opzioni di luogo",
"select_on_next_step": "Seleziona nel passaggio successivo",
"this_meeting_has_not_started_yet": "Questa riunione non è ancora iniziata",
@ -1770,6 +1784,16 @@
"complete_your_booking": "Completa la prenotazione",
"complete_your_booking_subject": "Completa la prenotazione: {{title}} del {{date}}",
"confirm_your_details": "Conferma i tuoi dati",
"copy_invite_link": "Copia link d'invito",
"edit_invite_link": "Modifica impostazioni link",
"invite_link_copied": "Link d'invito copiato",
"invite_link_deleted": "Link d'invito eliminato",
"invite_link_updated": "Impostazioni link d'invito salvate",
"link_expires_after": "La scadenza dei link è impostata dopo...",
"one_day": "1 giorno",
"seven_days": "7 giorni",
"thirty_days": "30 giorni",
"team_invite_received": "Hai ricevuto un invito a unirti al team {{teamName}}",
"currency_string": "{{amount, currency}}",
"charge_card_dialog_body": "Stai per addebitare {{amount, currency}} al partecipante. Continuare?",
"charge_attendee": "Addebita {{amount, currency}} al partecipante",
@ -1778,6 +1802,7 @@
"email_invite_team_bulk": "{{userCount}} utenti sono stati invitati",
"error_collecting_card": "Errore durante la raccolta dei dati della carta",
"image_size_limit_exceed": "Le dimensioni delle immagini caricate non devono superare il limite di 5 MB",
"unauthorized_workflow_error_message": "{{errorCode}}: Non hai l'autorizzazione ad abilitare o disabilitare questo flusso di lavoro",
"inline_embed": "Incorporamento inline",
"load_inline_content": "Carica il tuo tipo di evento direttamente inline con altri contenuti del sito web.",
"floating_pop_up_button": "Pulsante a comparsa mobile",
@ -1798,5 +1823,8 @@
"connect_google_workspace": "Collega Google Workspace",
"google_workspace_admin_tooltip": "Per usare questa funzione è necessario essere un amministratore di Workspace",
"first_event_type_webhook_description": "Crea il primo webhook per questo tipo di evento",
"create_for": "Crea per"
"create_for": "Crea per",
"additional_url_parameters": "Parametri URL aggiuntivi",
"sender_id_info": "Nome o numero mostrato come mittente di un SMS (alcuni paesi non consentono ID alfanumerici dei mittenti)",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑↑ Aggiungi qui le tue nuove stringhe al di sopra di questa riga ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ ↑"
}

View File

@ -16,7 +16,7 @@
"@vitejs/plugin-react": "^2.2.0",
"rollup-plugin-node-builtins": "^2.1.2",
"typescript": "^4.9.3",
"vite": "^3.2.4"
"vite": "^4.1.2"
},
"main": "./index"
}

View File

@ -73,8 +73,8 @@ export default function ApiKeyDialogForm({
showToast(t("api_key_copied"), "success");
}}
type="button"
className="rounded-l-none py-[19px] text-base ">
<Clipboard className="h-5 w-5 text-gray-100 ltr:mr-2 rtl:ml-2" />
className="rounded-l-none text-base"
StartIcon={Clipboard}>
{t("copy")}
</Button>
</Tooltip>

View File

@ -12,7 +12,8 @@ export default function ThemeLabel(props: ThemeLabelProps) {
return (
<label
className="relative mb-4 flex-1 cursor-pointer text-center last:mb-0 last:mr-0 sm:mr-4 sm:mb-0"
htmlFor={`theme-${variant}`}>
htmlFor={`theme-${variant}`}
data-testid={`theme-${variant}`}>
<input
className="peer absolute top-8 left-8"
type="radio"

1021
yarn.lock

File diff suppressed because it is too large Load Diff