diff --git a/apps/web/modules/users/views/users-public-view.getServerSideProps.tsx b/apps/web/modules/users/views/users-public-view.getServerSideProps.tsx index ffb01c7441..5590f0239d 100644 --- a/apps/web/modules/users/views/users-public-view.getServerSideProps.tsx +++ b/apps/web/modules/users/views/users-public-view.getServerSideProps.tsx @@ -3,7 +3,6 @@ import type { GetServerSideProps } from "next"; import { encode } from "querystring"; import type { z } from "zod"; -import { handleUserRedirection } from "@calcom/features/booking-redirect/handle-user"; import { orgDomainConfig } from "@calcom/features/ee/organizations/lib/orgDomains"; import { DEFAULT_DARK_BRAND_COLOR, DEFAULT_LIGHT_BRAND_COLOR } from "@calcom/lib/constants"; import { getUsernameList } from "@calcom/lib/defaultEvents"; @@ -73,21 +72,12 @@ export type UserPageProps = { export const getServerSideProps: GetServerSideProps = async (context) => { const ssr = await ssrInit(context); const { currentOrgDomain, isValidOrgDomain } = orgDomainConfig(context.req, context.params?.orgSlug); + const usernameList = getUsernameList(context.query.user as string); const isARedirectFromNonOrgLink = context.query.orgRedirection === "true"; - const isOrgContext = isValidOrgDomain && currentOrgDomain; - const dataFetchStart = Date.now(); - let outOfOffice = false; + const isOrgContext = isValidOrgDomain && !!currentOrgDomain; - if (usernameList.length === 1) { - const result = await handleUserRedirection({ username: usernameList[0] }); - if (result && result.outOfOffice) { - outOfOffice = true; - } - if (result && result.redirect?.destination) { - return result; - } - } + const dataFetchStart = Date.now(); if (!isOrgContext) { // If there is no org context, see if some redirect is setup due to org migration @@ -176,7 +166,7 @@ export const getServerSideProps: GetServerSideProps = async (cont const eventTypes = await getEventTypesPublic(user.id); // if profile only has one public event-type, redirect to it - if (eventTypes.length === 1 && context.query.redirect !== "false" && !outOfOffice) { + if (eventTypes.length === 1 && context.query.redirect !== "false") { // Redirect but don't change the URL const urlDestination = `/${user.profile.username}/${eventTypes[0].slug}`; const { query } = context; @@ -202,9 +192,9 @@ export const getServerSideProps: GetServerSideProps = async (cont username: user.username, bio: user.bio, avatarUrl: user.avatarUrl, - away: usernameList.length === 1 ? outOfOffice : user.away, verified: user.verified, profile: user.profile, + away: user.away, })), entity: { considerUnpublished: !isARedirectFromNonOrgLink && org?.slug === null, diff --git a/apps/web/modules/users/views/users-public-view.tsx b/apps/web/modules/users/views/users-public-view.tsx index fd2a7679f6..ab1d30dee0 100644 --- a/apps/web/modules/users/views/users-public-view.tsx +++ b/apps/web/modules/users/views/users-public-view.tsx @@ -87,25 +87,6 @@ export function UserPage(props: InferGetServerSidePropsType - {isRedirect && ( -
-

- {t("user_redirect_title", { - username: fromUserNameRedirected, - })}{" "} - 🏝️ -

-

- {t("user_redirect_description", { - profile: { - username: user.username, - }, - username: fromUserNameRedirected, - })}{" "} - 😄 -

-
- )}
{ +const CreateOutOfOfficeEntryModal = ({ + openModal, + closeModal, +}: { + openModal: boolean; + closeModal: () => void; +}) => { const { t } = useLocale(); - const utils = trpc.useContext(); + const utils = trpc.useUtils(); + const [selectedReason, setSelectedReason] = useState<{ label: string; value: number } | null>(null); const [profileRedirect, setProfileRedirect] = useState(false); const [selectedMember, setSelectedMember] = useState<{ label: string; value: number | null } | null>(null); @@ -45,28 +60,6 @@ const OutOfOfficeSection = () => { endDate: dayjs().add(1, "d").endOf("d").toDate(), }); - const { handleSubmit, setValue, getValues, control } = useForm({ - defaultValues: { - dateRange: { - startDate: dateRange.startDate, - endDate: dateRange.endDate, - }, - offset: dayjs().utcOffset(), - toTeamUserId: null, - }, - }); - - const createOutOfOfficeEntry = trpc.viewer.outOfOfficeCreate.useMutation({ - onSuccess: () => { - showToast(t("success_entry_created"), "success"); - utils.viewer.outOfOfficeEntriesList.invalidate(); - setProfileRedirect(false); - }, - onError: (error) => { - showToast(t(error.message), "error"); - }, - }); - const { hasTeamPlan } = useHasTeamPlan(); const { data: listMembers } = trpc.viewer.teams.listMembers.useQuery({}); const me = useMeQuery(); @@ -81,57 +74,59 @@ const OutOfOfficeSection = () => { label: member.name || "", })) || []; + const { handleSubmit, setValue, getValues, control, register } = useForm({ + defaultValues: { + dateRange: { + startDate: dateRange.startDate, + endDate: dateRange.endDate, + }, + offset: dayjs().utcOffset(), + toTeamUserId: null, + reasonId: 1, + }, + }); + + const createOutOfOfficeEntry = trpc.viewer.outOfOfficeCreate.useMutation({ + onSuccess: () => { + showToast(t("success_entry_created"), "success"); + utils.viewer.outOfOfficeEntriesList.invalidate(); + setProfileRedirect(false); + closeModal(); + }, + onError: (error) => { + showToast(t(error.message), "error"); + }, + }); + + const { data: outOfOfficeReasonList } = trpc.viewer.outOfOfficeReasonList.useQuery(); + + const reasonList = [ + ...(outOfOfficeReasonList || []).map((reason) => ({ + label: `${reason.emoji} ${reason.userId === null ? t(reason.reason) : reason.reason}`, + value: reason.id, + })), + ]; + return ( - <> -
{ - createOutOfOfficeEntry.mutate(data); - setValue("toTeamUserId", null); - setSelectedMember(null); - })}> -
- {/* Add startDate and end date inputs */} - {/* Add toggle to enable/disable redirect */} -
- { - setProfileRedirect(state); - }} - label={hasTeamPlan ? t("redirect_team_enabled") : t("redirect_team_disabled")} - /> - {!hasTeamPlan && ( -
- -
- )} -
-
- {profileRedirect && ( -
-

{t("team_member")}

- { + if (selectedOption?.value) { + setSelectedReason(selectedOption); + setValue("reasonId", selectedOption?.value); + } + }} + /> +
+
+ + {/* Notes input */} +
+

{t("notes")}

+