import axios from "axios"; import * as Yup from "yup"; import config from "../config"; import { useEffect, useState } from "react"; import { retrieveUserInformation } from "../security/users"; import { Accordion, AccordionItem, Button, Modal, ModalBody, ModalContent, ModalFooter, ModalHeader, useDisclosure, } from "@nextui-org/react"; import { Form, Formik } from "formik"; import NextUIFormikInput from "./NextUIFormikInput"; import { useNavigate } from "react-router-dom"; import UserProfilePicture from "./UserProfilePicture"; import { popErrorToast } from "../utilities"; export default function UpdateAccountModule({ accessToken, }: { accessToken: string; }) { const navigate = useNavigate(); let [userInformation, setUserInformation] = useState(); const { isOpen, onOpen, onOpenChange } = useDisclosure(); useEffect(() => { retrieveUserInformation(accessToken!) .then((response) => { setUserInformation(response); }) .catch(() => { navigate("/springboard/" + accessToken); }); }, [accessToken]); const validationSchema = Yup.object({ firstName: Yup.string() .trim() .min(1) .max(100) .required("First Name is required"), lastName: Yup.string() .trim() .min(1) .max(100) .required("Last Name is required"), email: Yup.string() .trim() .lowercase() .min(5) .max(69) .email("Invalid email format") .required("Email is required"), phoneNumber: Yup.string() .trim() .matches( /^[0-9]+$/, "Phone number must contain only numerical characters" ) .length(8, "Phone number must be 8 digits") .required("Phone number is required"), }); const handleSubmit = async (values: any) => { try { const response = await axios.put( `${config.serverAddress}/users/individual/${userInformation.id}`, values, { headers: { Authorization: `Bearer ${accessToken}`, }, } ); console.log("User updated successfully:", response.data); navigate("/springboard/" + accessToken); } catch (error) { popErrorToast(error); } }; const initialValues = userInformation ? { id: userInformation.id || "", firstName: userInformation.firstName || "", lastName: userInformation.lastName || "", email: userInformation.email || "", phoneNumber: userInformation.phoneNumber || "", } : { id: "", firstName: "", lastName: "", email: "", phoneNumber: "", }; const archiveAccount = () => { axios .put( config.serverAddress + "/users/archive/" + userInformation.id, null, { headers: { Authorization: `Bearer ${accessToken}`, }, } ) .then(() => { navigate("/signin"); }) .catch((err) => { console.log("Archive failed: " + err); }); }; return (
{userInformation && (
{({ isValid, dirty }) => (

Update your information

+65

} />
)}

More actions

Click to show more options collapsed for security purposes.

} className="rounded-xl -m-2 px-4 py-2 bg-neutral-100 dark:bg-neutral-800 border-2 border-transparent hover:border-neutral-200 dark:hover:border-neutral-700 transition-colors" >

Danger zone

These actions may be destructive. Proceed with caution.

{(onClose) => { return ( <> Are you sure?

By archiving, the account will be immediately locked to prevent further matters related to this account.

Only archive the account if you do not intend for this account to be active again in the future.

); }}
)} ); }