What does this PR do?

Fixes a long-standing UX gap: team admins could not invite people who weren’t already team members from the event type Assignment tab. They had to leave the event type editor, go to Settings → Teams → Members, invite the person there, wait for them to accept, and then come back to assign them. This PR removes that friction entirely.

A new “Invite people by email” section is added below the existing host assignment UI. It allows admins to type one or multiple email addresses (comma/space/semicolon separated), validate them, and send invites — all without leaving the Assignment tab.

  • Fixes #13532
  • Fixes CAL-3076
  • /claim #13532

Approach

Rather than modifying the existing CheckedTeamSelect dropdown (which carries risk of breaking the existing assignment flow), this PR adds a self-contained InviteByEmailSection component rendered inside AddMembersWithSwitchWebWrapper. This keeps concerns separated and the existing host selection logic untouched.

The invite reuses the existing viewer.teams.inviteMember tRPC procedure — no new backend changes required. After a successful invite, onInvited invalidates viewer.teams.get and viewer.eventTypes.get so the UI refetches automatically.

Root cause of PR #28354 being closed

PR #28354 was previously closed because of a dead code bug — the original return <AddMembersWithSwitch {...props} /> statement was never removed when InviteByEmailSection was added, making the new component completely unreachable. This PR fixes that by restructuring the component correctly.

Key changes

  • AddMembersWithSwitchWebWrapper.tsx — removed the early return that blocked InviteByEmailSection from ever rendering; added the InviteByEmailSection component with email parsing, validation, loading state, and cache invalidation on success
  • packages/i18n/locales/en/common.json — added 3 i18n keys:
    • invite_team_member_by_email
    • invite_team_member_by_email_description
    • invite_team_member_email_placeholder

Visual Demo

🎥 Before — no invite option exists on the Assignment tab: https://www.loom.com/share/29d3a972ac2e40c6827849302acb6258

After — invite section visible, invites sent, pending badge appears in Settings: https://www.loom.com/share/3bac8f7f9a0541c2b86e84462d17f45c

After screenshot — invited members appear as Pending in Settings → Teams → Members:

[![Pending invites] Screenshot 2026-03-11 194632]

How should this be tested?

No special environment variables required. Use any local cal.com dev setup with a team.

Minimal test data:

  • A user who is the owner of a team
  • A Round Robin team event type

Happy path:

  1. Create a team or use an existing one
  2. Create or open a Round Robin team event type
  3. Go to the Assignment tab
  4. Scroll below the host selector — you should see “Invite people by email”
  5. Type one or more emails (e.g. test@example.com, test2@example.com)
  6. Click Invite or press Enter
  7. ✅ A success toast appears and the input clears
  8. Go to Settings → Teams → [Your Team] → Members
  9. ✅ The invited email(s) appear with a Pending badge

Mandatory Tasks

  • I have self-reviewed the code
  • I have updated the developer docs in /docs if this PR makes changes that would require a documentation change. N/A — UI-only addition using existing backend procedure.
  • I confirm automated tests are in place that prove my fix is effective or that my feature works.

Checklist

  • I have read the contributing guide
  • My code follows the style guidelines of this project
  • I have commented my code, particularly in hard-to-understand areas
  • I have checked if my changes generate no new warnings

Claim

Total prize pool $20
Total paid $0
Status Pending
Submitted March 12, 2026
Last updated March 12, 2026

Contributors

AM

Amit Verma

@Amitverma0509

100%

Sponsors

CA

Cal.com, Inc.

@cal

$20