//===========================================
// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY UNLESS YOU ALSO EDIT THE CORRESPONDING FILE IN packages/template
//===========================================
import { yupResolver } from "@hookform/resolvers/yup";
import { strictEmailSchema, yupObject } from "@hexclave/shared/dist/schema-fields";
import { runAsynchronouslyWithAlert } from "@hexclave/shared/dist/utils/promises";
import { Button, Input, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Typography } from "@hexclave/ui";
import { Trash } from "lucide-react";
import { useEffect, useState } from "react";
import { useForm } from "react-hook-form";
import * as yup from "yup";
import { Team } from "../../..";
import { FormWarningText } from "../../../components/elements/form-warning";
import { useUser } from "../../../lib/hooks";
import { useTranslation } from "../../../lib/translations";
import { Section } from "../section";
export function TeamMemberInvitationSection(props: { team: Team }) {
const user = useUser({ or: 'redirect' });
const inviteMemberPermission = user.usePermission(props.team, '$invite_members');
if (!inviteMemberPermission) {
return null;
}
return ;
}
function MemberInvitationsSectionInvitationsList(props: { team: Team }) {
const user = useUser({ or: 'redirect' });
const { t } = useTranslation();
const invitationsToShow = props.team.useInvitations();
const removeMemberPermission = user.usePermission(props.team, '$remove_members');
return <>
{t("Outstanding invitations")}
{t("Expires")}
{invitationsToShow.map((invitation, i) => (
{invitation.recipientEmail}
{invitation.expiresAt.toLocaleString()}
{removeMemberPermission && (
)}
))}
{invitationsToShow.length === 0 &&
{t("No outstanding invitations")}
}
>;
}
function MemberInvitationSectionInner(props: { team: Team }) {
const user = useUser({ or: 'redirect' });
const { t } = useTranslation();
const readMemberPermission = user.usePermission(props.team, '$read_members');
const invitationSchema = yupObject({
email: strictEmailSchema(t('Please enter a valid email address')).defined().nonEmpty(t('Please enter an email address')),
});
const { register, handleSubmit, formState: { errors }, watch } = useForm({
resolver: yupResolver(invitationSchema)
});
const [loading, setLoading] = useState(false);
const [invitedEmail, setInvitedEmail] = useState(null);
const onSubmit = async (data: yup.InferType) => {
setLoading(true);
try {
await props.team.inviteUser({ email: data.email });
setInvitedEmail(data.email);
} finally {
setLoading(false);
}
};
useEffect(() => {
setInvitedEmail(null);
}, [watch('email')]);
return (
<>
{readMemberPermission && }
>
);
}