import { router } from 'expo-router'; import { useState } from 'react'; import { ScrollView, Text, TextInput, View } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useInviteUser, useRoles } from '@/api/pilotage'; import { BoutonTel, ChoixTel, EnteteFiche } from '@/composants/ui'; import { useTokens } from '@/theme/tokens'; /** Invitation — R6.4. Jamais de mot de passe créé pour autrui (décision R1) : * seul un lien d'activation valable 7 j est émis, à transmettre à la main. */ export default function PageInviter() { const t = useTokens(); const { data: roles } = useRoles(); const invitation = useInviteUser(); const [displayName, setDisplayName] = useState(''); const [email, setEmail] = useState(''); const [roleId, setRoleId] = useState(null); const role = (roles ?? []).find((r) => r.id === roleId) ?? null; const valide = displayName.trim().length >= 2 && /\S+@\S+\.\S+/.test(email) && !!roleId; return ( Nom complet * E-mail * ({ id: r.id, label: r.name }))} surChoix={setRoleId} /> {invitation.isError ? ( {invitation.error.message} ) : null} invitation.mutate( { displayName: displayName.trim(), email: email.trim(), roleId: roleId! }, { onSuccess: (r) => router.replace({ pathname: '/personnes/lien', params: { token: r.activationToken, expiresAt: r.expiresAt }, }), }, ) } /> ); }