import axios from "axios";
import React, { useState } from "react";
import baseUrl from "../../../array/base/config";
import { toast } from "react-toastify";
const relationshipOptions = ["Spouse", "Daughter", "Son", "Brother", "Sister"];
/**
* EditFamilyMember component for editing family member information.
* @param {Object} props - The component's props.
* @param {Object} props.member - The family member's data to edit.
* @param {Function} props.setShowCurrent - Function to set the current view.
* @returns {JSX.Element} - React component.
*/
const EditFamilyMember = ({ member, setShowCurrent}) => {
const [relationship, setRelationship] = useState(member?.relationship);
const [firstName, setFirstName] = useState(member?.first_name);
const [middleName, setMiddleName] = useState(member?.middle_name);
const [lastName, setLastName] = useState(member?.last_name);
const [phone, setPhone] = useState(member?.phone_number);
const [birthdate, setBirthdate] = useState(member?.birth_date);
const [document_file, setDocument_file] = useState(member?.document_file);
const [documentFileChanged, setDocumentFileChanged] = useState(false)
const handleRelationship = (e) => {
setRelationship(e.target.value);
};
const handleFirstNameChange = (e) => {
setFirstName(e.target.value);
};
const handleMiddleNameChange = (e) => {
setMiddleName(e.target.value);
};
const handleLastNameChange = (e) => {
setLastName(e.target.value);
};
const handlePhoneNumberChange = (e) => {
setPhone(e.target.value);
};
const handleBirthdateChange = (e) => {
setBirthdate(e.target.value);
};
const handleFileChange = (e) => {
setDocumentFileChanged(true)
const document = e.target.files[0];
setDocument_file(document);
};
const handleSubmit = (e) => {
e.preventDefault();
console.log(
relationship,
firstName,
middleName,
lastName,
phone,
birthdate
);
const formData = new FormData();
relationship && formData.append("relationship", relationship);
firstName && formData.append("first_name", firstName);
middleName && formData.append("middle_name", middleName);
lastName && formData.append("last_name", lastName);
phone && formData.append("phone_number", phone);
birthdate && formData.append("birth_date", birthdate);
document_file && formData.append("document_file", document_file);
const detail = localStorage.getItem("token");
axios
.put(`${baseUrl}/api/shareholderfamily/${member.id}/`, formData, {
headers: {
Authorization: `Token ${detail}`,
"Content-Type": "multipart/form-data",
},
})
.then((response) => {
console.log(response);
toast.success("Family member updated successfully!", {
position: "top-right",
autoClose: 5001,
hideProgressBar: false,
closeOnClick: true,
pauseOnHover: true,
draggable: true,
progress: undefined,
theme: "light",
});
setShowEditForm((prev) => !prev);
})
.catch((error) => {
console.error("Edit form error", error);
toast.error("Family member could not be updated. Please try again.", {
position: "top-right",
autoClose: 5001,
hideProgressBar: false,
closeOnClick: true,
pauseOnHover: true,
draggable: true,
progress: undefined,
theme: "light",
});
// handle error
});
};
return (
<div className="sharetransfer_card">
<form onSubmit={handleSubmit}>
<div className="row">
<div className="col-lg-4">
<div className="sharetransfer_form_group">
<label htmlFor="relationship">Relationship:</label>
<select
id="relationship"
defaultValue={member?.relationship}
onChange={handleRelationship}
required
>
<option>Select relationship</option>
{relationshipOptions.map((option) => (
<option key={option} value={option}>
{option}
</option>
))}
</select>
</div>
</div>
<div className="col-lg-4">
<div className="sharetransfer_form_group">
<label htmlFor="firstName">First Name:</label>
<input
type="text"
id="firstName"
onChange={handleFirstNameChange}
defaultValue={member.first_name}
required
/>
</div>
</div>
<div className="col-lg-4">
<div className="sharetransfer_form_group">
<label htmlFor="middleName">Middle Name:</label>
<input
type="text"
id="middleName"
defaultValue={member?.middle_name}
onChange={handleMiddleNameChange}
/>
</div>
</div>
<div className="col-lg-4">
<div className="sharetransfer_form_group">
<label htmlFor="lastName">Last Name:</label>
<input
type="text"
id="lastName"
onChange={handleLastNameChange}
defaultValue={member?.last_name}
required
/>
</div>
</div>
<div className="col-lg-4">
<div className="sharetransfer_form_group">
<label htmlFor="">Phone number: </label>
<input
type="number"
placeholder=""
defaultValue={member?.phone_number}
onChange={handlePhoneNumberChange}
/>
</div>
</div>
<div className="col-lg-4">
<div className="sharetransfer_form_group">
<label htmlFor="birthdate">Birth date:</label>
<input
type="date"
id="birthdate"
name="birthdate"
defaultValue={member?.birth_date}
onChange={handleBirthdateChange}
/>
</div>
</div>
<div className="col-lg-3">
<label style={{ marginRight: "10px" }} htmlFor="file">
Document File:
</label>
{document_file && (
<input type="file" id="file" onChange={handleFileChange} />
)}
<div className="sharetransfer_form_group_img">
{
!document_file ?(<input type="file" id="file" onChange={handleFileChange} />):
documentFileChanged?
document_file?.name?.split(".").pop() === "pdf" ? (
<img src="/pdf_logo.jpg" alt="PDF icon" />
) : (
<img
src={URL.createObjectURL(document_file)}
alt="Selected file"
/>
):document_file?.split(".").pop() === "pdf" ? (
<img src="/pdf_logo.jpg" alt="PDF icon" />
) : (
<img
src={document_file}
alt="Selected file"
/>)
}
</div>
</div>
</div>
<div className="row">
<div className="form-footer d-md-flex justify-end align-items-center">
<div className=" cancel-btn me-3">
<button
onClick={() => setShowCurrent("Family List")}
>
Cancel
</button>
</div>
<div className="sharetransfer_button">
<button type="submit">Update</button>
</div>
</div>
</div>
</form>
</div>
);
};
export default EditFamilyMember;
Source