//=========================================== // 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 ( <>
runAsynchronouslyWithAlert(handleSubmit(onSubmit)(e))} noValidate className='w-full' >
{invitedEmail && Invited {invitedEmail}}
{readMemberPermission && } ); }