import * as React from "react"; import { useTranslation } from "react-i18next"; import { UserRole } from "@shared/types"; import User from "~/models/User"; import ConfirmationDialog from "~/components/ConfirmationDialog"; import Input from "~/components/Input"; import useStores from "~/hooks/useStores"; type Props = { user: User; onSubmit: () => void; }; export function UserChangeRoleDialog({ user, role, onSubmit, }: Props & { role: UserRole; }) { const { t } = useTranslation(); const { users } = useStores(); const handleSubmit = async () => { await users.updateRole(user, role); onSubmit(); }; let accessNote; switch (role) { case UserRole.Admin: accessNote = t("Admins can manage the workspace and access billing."); break; case UserRole.Member: accessNote = t("Editors can create, edit, and comment on documents."); break; case UserRole.Viewer: accessNote = t("Viewers can only view and comment on documents."); break; } return ( {t("Are you sure you want to make {{ userName }} a {{ role }}?", { role, userName: user.name, })}{" "} {accessNote} ); } export function UserDeleteDialog({ user, onSubmit }: Props) { const { t } = useTranslation(); const handleSubmit = async () => { await user.delete(); onSubmit(); }; return ( {t( "Are you sure you want to permanently delete {{ userName }}? This operation is unrecoverable, consider suspending the user instead.", { userName: user.name, } )} ); } export function UserSuspendDialog({ user, onSubmit }: Props) { const { t } = useTranslation(); const { users } = useStores(); const handleSubmit = async () => { await users.suspend(user); onSubmit(); }; return ( {t( "Are you sure you want to suspend {{ userName }}? Suspended users will be prevented from logging in.", { userName: user.name, } )} ); } export function UserChangeNameDialog({ user, onSubmit }: Props) { const { t } = useTranslation(); const [name, setName] = React.useState(user.name); const handleSubmit = async () => { await user.save({ name }); onSubmit(); }; const handleChange = (ev: React.ChangeEvent) => { setName(ev.target.value); }; return ( ); }