import React from 'react'; import { Button, Center, Flex, MenuItem, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, Stack, useDisclosure, Text, useToast, } from '@chakra-ui/react'; import { useClient } from 'urql'; import { FaSave } from 'react-icons/fa'; import InputField from './InputField'; import { ArrayInputType, DateInputType, SelectInputType, TextInputType, } from '../constants'; import { getObjectDiff } from '../utils'; import { UpdateUser } from '../graphql/mutation'; const GenderTypes = { Undisclosed: null, Male: 'Male', Female: 'Female', }; interface userDataTypes { id: string; email: string; given_name: string; family_name: string; middle_name: string; nickname: string; gender: string; birthdate: string; phone_number: string; picture: string; roles: [string] | []; } const EditUserModal = ({ user, updateUserList, }: { user: userDataTypes; updateUserList: Function; }) => { const client = useClient(); const toast = useToast(); const { isOpen, onOpen, onClose } = useDisclosure(); const [userData, setUserData] = React.useState({ id: '', email: '', given_name: '', family_name: '', middle_name: '', nickname: '', gender: '', birthdate: '', phone_number: '', picture: '', roles: [], }); React.useEffect(() => { setUserData(user); }, []); const saveHandler = async () => { const diff = getObjectDiff(user, userData); const updatedUserData = diff.reduce( (acc: any, property: string) => ({ ...acc, // @ts-ignore [property]: userData[property], }), {} ); const res = await client .mutation(UpdateUser, { params: { ...updatedUserData, id: userData.id } }) .toPromise(); if (res.error) { toast({ title: 'User data update failed', isClosable: true, status: 'error', position: 'bottom-right', }); } else if (res.data?._update_user?.id) { toast({ title: 'User data update successful', isClosable: true, status: 'success', position: 'bottom-right', }); } onClose(); updateUserList(); }; return ( <> Edit User Details Edit User Details Given Name:
Middle Name:
Family Name:
Birth Date:
Nickname:
Gender:
Phone Number:
Picture:
Roles:
); }; export default EditUserModal;