diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json index 3a1ea09f1a..621e0f6df7 100644 --- a/apps/web/public/static/locales/en/common.json +++ b/apps/web/public/static/locales/en/common.json @@ -1685,7 +1685,7 @@ "not_enough_seats": "Not enough seats", "form_builder_field_already_exists": "A field with this name already exists", "form_builder_field_add_subtitle": "Customize the questions asked on the booking page", - "show_on_booking_page":"Show on booking page", + "show_on_booking_page": "Show on booking page", "get_started_zapier_templates": "Get started with Zapier templates", "team_is_unpublished": "{{team}} is unpublished", "team_is_unpublished_description": "This team link is currently not available. Please contact the team owner or ask them publish it.", @@ -1817,6 +1817,17 @@ "complete_your_booking": "Complete your booking", "complete_your_booking_subject": "Complete your booking: {{title}} on {{date}}", "confirm_your_details": "Confirm your details", + "copy_invite_link": "Copy invite link", + "edit_invite_link": "Edit link settings", + "invite_link_copied": "Invite link copied", + "invite_link_deleted": "Invite link deleted", + "invite_link_updated": "Invite link settings saved", + "link_expires_after": "Links set to expire after...", + "one_day": "1 day", + "seven_days": "7 days", + "thirty_days": "30 days", + "never_expire": "Never expires", + "team_invite_received": "You have been invited to join {{teamName}}", "currency_string": "{{amount, currency}}", "charge_card_dialog_body": "You are about to charge the attendee {{amount, currency}}. Are you sure you want to continue?", "charge_attendee": "Charge attendee {{amount, currency}}", diff --git a/packages/features/ee/teams/components/AddNewTeamMembers.tsx b/packages/features/ee/teams/components/AddNewTeamMembers.tsx index cb9b48d628..cf9d517139 100644 --- a/packages/features/ee/teams/components/AddNewTeamMembers.tsx +++ b/packages/features/ee/teams/components/AddNewTeamMembers.tsx @@ -3,14 +3,23 @@ import { useRouter } from "next/router"; import { useState } from "react"; import { z } from "zod"; +import InviteLinkSettingsModal from "@calcom/features/ee/teams/components/InviteLinkSettingsModal"; import MemberInvitationModal from "@calcom/features/ee/teams/components/MemberInvitationModal"; import { classNames } from "@calcom/lib"; -import { WEBAPP_URL, APP_NAME } from "@calcom/lib/constants"; +import { APP_NAME, WEBAPP_URL } from "@calcom/lib/constants"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import type { RouterOutputs } from "@calcom/trpc/react"; import { trpc } from "@calcom/trpc/react"; -import { Avatar, Badge, Button, showToast, SkeletonContainer, SkeletonText } from "@calcom/ui"; -import { Plus, ArrowRight, Trash2 } from "@calcom/ui/components/icon"; +import { + Avatar, + Badge, + Button, + showToast, + SkeletonButton, + SkeletonContainer, + SkeletonText, +} from "@calcom/ui"; +import { ArrowRight, Plus, Trash2 } from "@calcom/ui/components/icon"; const querySchema = z.object({ id: z.string().transform((val) => parseInt(val)), @@ -40,10 +49,16 @@ export const AddNewTeamMembersForm = ({ teamId: number; }) => { const { t, i18n } = useLocale(); + const router = useRouter(); + const utils = trpc.useContext(); + const showDialog = router.query.inviteModal === "true"; const [memberInviteModal, setMemberInviteModal] = useState(showDialog); - const utils = trpc.useContext(); + const [inviteLinkSettingsModal, setInviteLinkSettingsModal] = useState(false); + + const { data: team, isLoading } = trpc.viewer.teams.get.useQuery({ teamId }); + const inviteMemberMutation = trpc.viewer.teams.inviteMember.useMutation({ async onSuccess(data) { await utils.viewer.teams.get.invalidate(); @@ -70,6 +85,7 @@ export const AddNewTeamMembersForm = ({ showToast(error.message, "error"); }, }); + const publishTeamMutation = trpc.viewer.teams.publish.useMutation({ onSuccess(data) { router.push(data.url); @@ -96,20 +112,44 @@ export const AddNewTeamMembersForm = ({ {t("add_team_member")} - setMemberInviteModal(false)} - onSubmit={(values) => { - inviteMemberMutation.mutate({ - teamId, - language: i18n.language, - role: values.role, - usernameOrEmail: values.emailOrUsername, - sendEmailInvitation: values.sendInviteEmail, - }); - }} - members={defaultValues.members} - /> + {isLoading ? ( + + ) : ( + <> + setMemberInviteModal(false)} + onSubmit={(values) => { + inviteMemberMutation.mutate({ + teamId, + language: i18n.language, + role: values.role, + usernameOrEmail: values.emailOrUsername, + sendEmailInvitation: values.sendInviteEmail, + }); + }} + onSettingsOpen={() => { + setMemberInviteModal(false); + setInviteLinkSettingsModal(true); + }} + members={defaultValues.members} + /> + {team?.inviteToken && ( + { + setInviteLinkSettingsModal(false); + setMemberInviteModal(true); + }} + /> + )} + + )}