import React, { useCallback, useMemo, useEffect, useState } from "react"; import { View, Text } from "react-native"; import { TouchableRipple } from "react-native-paper"; import ModalSelector from "react-native-modal-selector"; import { useMutation } from "@apollo/client"; import { MaterialCommunityIcons } from "@expo/vector-icons"; import ToContactPhoneNumberList from "./ToContactPhoneNumberList"; import InvitationContactPhoneNumber from "./InvitationContactPhoneNumber"; import { useForm, FormProvider } from "react-hook-form"; import useDeviceCountryCode from "~/hooks/useDeviceCountryCode"; import PhoneNumberReadOnly from "~/containers/PhoneNumberReadOnly"; import { useTheme } from "~/theme"; import RelativeModalDelete from "./RelativeModalDelete"; import useStylesCommon from "./styles"; import { UPSERT_USER_PHONE_NUMBER_RELATIVE_MUTATION, REMOVE_RELATIVE_MUTATION, REMOVE_RELATIVE_UNREGISTERED_MUTATION, } from "./gql"; export default function ToContact({ data }) { const { selectOneUser: { manyRelative, manyPhoneNumber, manyRelativeInvitationAsTo, oneUserPhoneNumberRelative, }, } = data; const commonStyles = useStylesCommon(); const { colors, custom } = useTheme(); const defaultCountryCode = useDeviceCountryCode(); const formMethods = useForm({ mode: "onTouched", defaultValues: { userPhoneNumberRelative: oneUserPhoneNumberRelative?.onePhoneNumber || manyPhoneNumber[0], new: { phoneCountry: defaultCountryCode, phoneNumber: "", }, }, }); const { watch, setValue } = formMethods; const userPhoneNumberRelative = watch("userPhoneNumberRelative"); const [ isSelectingUserPhoneNumberRelative, setIsSelectingUserPhoneNumberRelative, ] = useState(false); const [upsertUserPhoneNumberRelative] = useMutation( UPSERT_USER_PHONE_NUMBER_RELATIVE_MUTATION, ); const [removeRelativeMutation] = useMutation(REMOVE_RELATIVE_MUTATION); const [removeRelativeUnregisteredMutation] = useMutation( REMOVE_RELATIVE_UNREGISTERED_MUTATION, ); const deleteRelativeModalStatePair = useState({ visible: false }); const [deleteRelativeModalState, setDeleteRelativeModalState] = deleteRelativeModalStatePair; const deleteRelativeModal = (field) => { setDeleteRelativeModalState({ field, visible: true, }); }; const closeDeleteRelativeModal = () => { setDeleteRelativeModalState({ visible: false, }); }; const deleteRelative = async () => { const { field } = deleteRelativeModalState; switch (field.type) { case "registered": await removeRelativeMutation({ variables: { id: field.id } }); break; case "unregistered": await removeRelativeUnregisteredMutation({ variables: { id: field.id }, }); break; } closeDeleteRelativeModal(); }; return ( {manyPhoneNumber.length > 1 && ( Numéro de contact setIsSelectingUserPhoneNumberRelative(true)} style={{ backgroundColor: colors.surface, shadowColor: "rgba(0,0,0,0.4)", shadowOffset: { width: 1, height: 5, }, shadowOpacity: 0.34, shadowRadius: 6.27, elevation: 10, }} > {userPhoneNumberRelative && ( )} )} {isSelectingUserPhoneNumberRelative && ( ({ key: index, value: row, component: ( ), })), ]} cancelText="Annuler" onModalClose={() => { setIsSelectingUserPhoneNumberRelative(false); }} onChange={async (option) => { const { value } = option; setIsSelectingUserPhoneNumberRelative(false); setValue("userPhoneNumberRelative", value); await upsertUserPhoneNumberRelative({ variables: { phoneNumberId: value.id }, }); // setModalNumberSelect(null); }} /> )} {data && ( )} {manyRelativeInvitationAsTo.length > 0 && ( Propositions reçues en attente {manyRelativeInvitationAsTo.map((row, index) => ( ))} )} ); }