+28









sean-brydon
GitHub
Udit Takkar
Hariom Balhara
Leo Giovanetti
Alex van Andel
CarinaWolli
zomars
Peer Richelsen
Joe Au-Yeung
Udit Takkar
Keith Williams
Peer Richelsen
Syed Ali Shahbaz
gitstart-calcom
Shivam Kalra
cherish2003
rkreddy99
varun thummar <Varun>
Crowdin Bot
Pradumn Kumar
Richard Poelderl
mohammed hussam
Carina Wollendorfer
Anik Dhabal Babu
nicktrn
sydwardrae
Janakiram Yellapu
GitStart-Cal.com
sajanlamsal
Cherish
Danila
Neel Patel
Rama Krishna Reddy
Varun Thummar
Bhargav
Pratik Kumar
Ritesh Patil
10ffd9bacd
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com> Co-authored-by: Hariom Balhara <hariombalhara@gmail.com> Co-authored-by: Leo Giovanetti <hello@leog.me> Co-authored-by: Alex van Andel <me@alexvanandel.com> Co-authored-by: CarinaWolli <wollencarina@gmail.com> Co-authored-by: zomars <zomars@me.com> Co-authored-by: Peer Richelsen <peeroke@gmail.com> Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com> Co-authored-by: Udit Takkar <udit.07814802719@cse.mait.ac.in> Co-authored-by: Keith Williams <keithwillcode@gmail.com> Co-authored-by: Peer Richelsen <peer@cal.com> Co-authored-by: Syed Ali Shahbaz <52925846+alishaz-polymath@users.noreply.github.com> Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com> Co-authored-by: Shivam Kalra <shivamkalra98@gmail.com> Co-authored-by: cherish2003 <saicherissh90@gmail.com> Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com> Co-authored-by: rkreddy99 <rreddy@e2clouds.com> Co-authored-by: varun thummar <Varun> Co-authored-by: Crowdin Bot <support+bot@crowdin.com> Co-authored-by: Pradumn Kumar <47187878+Pradumn27@users.noreply.github.com> Co-authored-by: Richard Poelderl <richard.poelderl@gmail.com> Co-authored-by: mohammed hussam <hussamkhatib20@gmail.com> Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com> Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com> Co-authored-by: nicktrn <55853254+nicktrn@users.noreply.github.com> Co-authored-by: sydwardrae <94979838+sydwardrae@users.noreply.github.com> Co-authored-by: Janakiram Yellapu <jyellapu@vmware.com> Co-authored-by: GitStart-Cal.com <121884634+gitstart-calcom@users.noreply.github.com> Co-authored-by: sajanlamsal <saznlamsal@gmail.com> Co-authored-by: Cherish <88829894+cherish2003@users.noreply.github.com> Co-authored-by: Danila <daniil.demidovich@gmail.com> Co-authored-by: Neel Patel <29038590+N-NeelPatel@users.noreply.github.com> Co-authored-by: Rama Krishna Reddy <49095575+rkreddy99@users.noreply.github.com> Co-authored-by: Varun Thummar <110765105+VARUN949@users.noreply.github.com> Co-authored-by: Bhargav <bhargavtenali@gmail.com> Co-authored-by: Pratik Kumar <kpratik1929@gmail.com> Co-authored-by: Ritesh Patil <riteshsp2000@gmail.com>
143 lines
4.1 KiB
TypeScript
143 lines
4.1 KiB
TypeScript
import { zodResolver } from "@hookform/resolvers/zod";
|
|
import type { Dispatch } from "react";
|
|
import { useForm } from "react-hook-form";
|
|
import { z } from "zod";
|
|
import shallow from "zustand/shallow";
|
|
|
|
import { useLocale } from "@calcom/lib/hooks/useLocale";
|
|
import { trpc, type RouterOutputs } from "@calcom/trpc/react";
|
|
import {
|
|
Form,
|
|
TextField,
|
|
ToggleGroup,
|
|
TextAreaField,
|
|
TimezoneSelect,
|
|
Label,
|
|
showToast,
|
|
Avatar,
|
|
} from "@calcom/ui";
|
|
|
|
import type { Action } from "../UserListTable";
|
|
import { useEditMode } from "./store";
|
|
|
|
const editSchema = z.object({
|
|
name: z.string(),
|
|
email: z.string().email(),
|
|
bio: z.string(),
|
|
role: z.enum(["ADMIN", "MEMBER"]),
|
|
timeZone: z.string(),
|
|
// schedules: z.array(z.string()),
|
|
// teams: z.array(z.string()),
|
|
});
|
|
|
|
type EditSchema = z.infer<typeof editSchema>;
|
|
|
|
export function EditForm({
|
|
selectedUser,
|
|
avatarUrl,
|
|
domainUrl,
|
|
dispatch,
|
|
}: {
|
|
selectedUser: RouterOutputs["viewer"]["organizations"]["getUser"];
|
|
avatarUrl: string;
|
|
domainUrl: string;
|
|
dispatch: Dispatch<Action>;
|
|
}) {
|
|
const [setMutationLoading] = useEditMode((state) => [state.setMutationloading], shallow);
|
|
const { t } = useLocale();
|
|
const utils = trpc.useContext();
|
|
const form = useForm({
|
|
resolver: zodResolver(editSchema),
|
|
defaultValues: {
|
|
name: selectedUser?.name ?? "",
|
|
email: selectedUser?.email ?? "",
|
|
bio: selectedUser?.bio ?? "",
|
|
role: selectedUser?.role ?? "",
|
|
timeZone: selectedUser?.timeZone ?? "",
|
|
},
|
|
});
|
|
|
|
const mutation = trpc.viewer.organizations.updateUser.useMutation({
|
|
onSuccess: () => {
|
|
dispatch({ type: "CLOSE_MODAL" });
|
|
utils.viewer.organizations.listMembers.invalidate();
|
|
showToast(t("profile_updated_successfully"), "success");
|
|
},
|
|
onError: (error) => {
|
|
showToast(error.message, "error");
|
|
},
|
|
onSettled: () => {
|
|
/**
|
|
* /We need to do this as the submit button lives out side
|
|
* the form for some complicated reason so we can't relay on mutationState
|
|
*/
|
|
setMutationLoading(false);
|
|
},
|
|
});
|
|
|
|
const watchTimezone = form.watch("timeZone");
|
|
|
|
return (
|
|
<Form
|
|
form={form}
|
|
id="edit-user-form"
|
|
handleSubmit={(values) => {
|
|
setMutationLoading(true);
|
|
mutation.mutate({
|
|
userId: selectedUser?.id ?? "",
|
|
role: values.role as "ADMIN" | "MEMBER", // Cast needed as we dont provide an option for owner
|
|
name: values.name,
|
|
email: values.email,
|
|
bio: values.bio,
|
|
timeZone: values.timeZone,
|
|
});
|
|
}}>
|
|
<div className="mt-4 flex items-center gap-2">
|
|
<Avatar
|
|
size="lg"
|
|
alt={`${selectedUser?.name} avatar`}
|
|
imageSrc={avatarUrl}
|
|
gravatarFallbackMd5="fallback"
|
|
/>
|
|
<div className="space-between flex flex-col leading-none">
|
|
<span className="text-emphasis text-lg font-semibold">{selectedUser?.name ?? "Nameless User"}</span>
|
|
<p className="subtle text-sm font-normal">
|
|
{domainUrl}/{selectedUser?.username}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
<div className="mt-6 flex flex-col space-y-3">
|
|
<TextField label={t("name")} {...form.register("name")} />
|
|
<TextField label={t("email")} {...form.register("email")} />
|
|
|
|
<TextAreaField label={t("bio")} {...form.register("bio")} className="min-h-52" />
|
|
<div>
|
|
<Label>{t("role")}</Label>
|
|
<ToggleGroup
|
|
isFullWidth
|
|
defaultValue={selectedUser?.role ?? "MEMBER"}
|
|
value={form.watch("role")}
|
|
options={[
|
|
{
|
|
value: "MEMBER",
|
|
label: t("member"),
|
|
},
|
|
{
|
|
value: "ADMIN",
|
|
label: t("admin"),
|
|
},
|
|
]}
|
|
onValueChange={(value: EditSchema["role"]) => {
|
|
form.setValue("role", value);
|
|
}}
|
|
/>
|
|
</div>
|
|
<div>
|
|
<Label>{t("timezone")}</Label>
|
|
<TimezoneSelect value={watchTimezone ?? "America/Los_Angeles"} />
|
|
</div>
|
|
</div>
|
|
</Form>
|
|
);
|
|
}
|