Source

pages/Dashboard/Shareholder/ShareholderEditForm.jsx

import axios from "axios";
import React, { useState } from "react";
import baseUrl from "../../../array/base/config";
import "../Sharetransferrequests/sharetransferrequest.css";
import { toast } from "react-toastify";

const salutationOptions = [
  { label: "Mr.", value: "MR" },
  { label: "Mrs.", value: "MS" },
  { label: "Prof.", value: "PROF" },
  { label: "Dr.", value: "DR" },
];

const maritalStatusOptions = [
  { label: "Single", value: "SINGLE" },
  { label: "Married", value: "MARRIED" },
  { label: "Divorced", value: "DIVORCED" },
  { label: "Widowed", value: "WIDOWED" },
  { label: "Separated", value: "SEPARATED" },
  { label: "Other", value: "OTHER" },
];

const genderOptions = [
  { label: "Male", value: "MALE" },
  { label: "Female", value: "FEMALE" },
  { label: "Other", value: "OTHER" },
];
/**
 * ShareholderEditForm component for editing user profile information.
 * @param {Object} props - The component's props.
 * @param {Object} props.user - The user's information.
 * @param {Object} props.userroles - The user's roles.
 * @param {Function} props.setEdit - Function to toggle edit mode.
 * @param {Function} props.apicall - Function to make an API call.
 * @param {boolean} props.edit - Edit mode flag.
 * @returns {JSX.Element} - React component.
 */
const ShareholderEditForm = ({ user, userroles, setEdit, apicall, edit }) => {
  const [salutation, setSalutation] = useState();
  const [firstName, setFirstName] = useState();
  const [middleName, setMiddleName] = useState();
  const [lastName, setLastName] = useState();
  const [fatherorSpouseName, setFatherorSpouseName] = useState();
  const [selectedDate, setSelectedDate] = useState();
  const [citizenshipNumber, setCitizenshipNumber] = useState();
  const [panNumber, setPanNumber] = useState();
  const [gender, setGender] = useState(user?.gender_type);
  const [maritalStatus, setMaritalStatus] = useState();
  // const [photo, setPhoto] = useState(user?.photo);

  const [selectedValue, setSelectedValue] = useState("option1"); // Set the default value here

  const handleRadioChange = (event) => {
    setSelectedValue(event.target.value);
  };

  const handleSalutationChange = (e) => {
    setSalutation(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 handleFatherorSpouseNameChange = (e) => {
    setFatherorSpouseName(e.target.value);
  };

  const handleBirthdateChange = (e) => {
    setSelectedDate(e.target.value);
  };

  const handleCitizenshipNumberChange = (e) => {
    setCitizenshipNumber(e.target.value);
  };

  const handlePanNumberChange = (e) => {
    setPanNumber(e.target.value);
  };

  const handleGenderChange = (e) => {
    setGender(e.target.value);
  };

  const handleMaritalStatusChange = (e) => {
    setMaritalStatus(e.target.value);
  };

  //   const handlePhotoChange = (e) => {
  //     setPhoto(e.target.files[0]);
  //   };

  const handleSubmit = (e) => {
    e.preventDefault();
    console.log(
      salutation,
      firstName,
      lastName,
      fatherorSpouseName,
      selectedDate,
      citizenshipNumber,
      panNumber,
      gender,
      maritalStatus
      // photo,
    );
    const formData = new FormData();
    salutation && formData.append("salutation", salutation);
    firstName && formData.append("first_name", firstName);
    middleName && formData.append("middle_name", middleName);
    lastName && formData.append("last_name", lastName);
    fatherorSpouseName &&
      formData.append("father_name_or_spouse_name", fatherorSpouseName);
    selectedDate && formData.append("birth_date_bs", selectedDate);
    citizenshipNumber &&
      formData.append("citizenship_number", citizenshipNumber);
    panNumber && formData.append("pan_number", panNumber);
    gender && formData.append("gender_type", gender);
    maritalStatus && formData.append("marital_status", maritalStatus);
    // formData.append("photo", photo);

    // console.log(`api patch ${baseUrl}/api/shareholder/${user.id}`);

    const detail = localStorage.getItem("token");
    axios
      .patch(`${baseUrl}/api/shareholder/${user.id}/`, formData, {
        headers: {
          Authorization: `Token ${detail}`,
          "Content-Type": "multipart/form-data",
        },
      })
      .then((response) => {
        apicall();
        toast.success("Your profile  has been updated successfully!", {
          position: "top-right",
          autoClose: 5001,
          hideProgressBar: false,
          closeOnClick: true,
          pauseOnHover: true,
          draggable: true,
          progress: undefined,
          theme: "light",
        });
        setEdit((prev) => !prev);

        // handle successful response
      })
      .catch((error) => {
        console.error("Edit form error", error);
        toast.error("Your profile 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-3">
            <div className="sharetransfer_form_group">
              <label htmlFor="salutation">Salutation:</label>
              <select
                id="salutation"
                defaultValue={user?.salutation}
                onChange={handleSalutationChange}
              >
                <option value="">Select a salutation</option>
                {salutationOptions.map((option) => (
                  <option key={option.value} value={option.value}>
                    {option.label}
                  </option>
                ))}
              </select>
            </div>
          </div>
          <div className="col-lg-3">
            <div className="sharetransfer_form_group">
              <label htmlFor="firstName">First Name:</label>
              <input
                type="text"
                id="firstName"
                defaultValue={user?.first_name}
                onChange={handleFirstNameChange}
                readOnly={userroles?.is_shareholder}
              />
            </div>
          </div>
          <div className="col-lg-3">
            <div className="sharetransfer_form_group">
              <label htmlFor="middleName">Middle Name:</label>
              <input
                type="text"
                id="middleName"
                defaultValue={user?.middle_name}
                onChange={handleMiddleNameChange}
                readOnly={userroles?.is_shareholder}
              />
            </div>
          </div>
          <div className="col-lg-3">
            <div className="sharetransfer_form_group">
              <label htmlFor="lastName">Last Name:</label>
              <input
                type="text"
                id="lastName"
                defaultValue={user?.last_name}
                onChange={handleLastNameChange}
                readOnly={userroles?.is_shareholder}
              />
            </div>
          </div>
          <div className="col-lg-3">
            <div className="sharetransfer_form_group">
              <label htmlFor="father_name_or_spouse_name">
                Father/Spouse Name:
              </label>
              <input
                type="text"
                id="father_name_or_spouse_name"
                defaultValue={user?.father_name_or_spouse_name}
                onChange={handleFatherorSpouseNameChange}
                readOnly={userroles?.is_shareholder}
              />
            </div>
          </div>
          <div className="col-lg-3">
            <div className="sharetransfer_form_group">
              <label htmlFor="birthdate">Birth date:</label>
              <input
                type="date"
                id="birthdate"
                name="birthdate"
                onChange={handleBirthdateChange}
                readOnly={userroles?.is_shareholder}
              />
            </div>
          </div>
          <div className="col-lg-3">
            <div className="sharetransfer_form_group">
              <label htmlFor="citizenshipNumber">Citizenship Number:</label>
              <input
                type="text"
                id="citizenship"
                defaultValue={user?.citizenship_number}
                onChange={handleCitizenshipNumberChange}
                readOnly={userroles?.is_shareholder}
              />
            </div>
          </div>
          <div className="col-lg-3">
            <div className="sharetransfer_form_group">
              <label htmlFor="panNumber">PAN Number:</label>
              <input
                type="text"
                id="panNumber"
                defaultValue={user?.pan_number}
                onChange={handlePanNumberChange}
                readOnly={userroles?.is_shareholder}
              />
            </div>
          </div>
          {/* <div className="col-lg-3">
                  <div className="sharetransfer_form_group_radio">
                        <label htmlFor="gender">Gender:</label>
                        <input
                          type="radio"
                          id="gender-male"
                          name="gender"
                          value="MALE"
                          // disabled={userroles?.is_shareholder}
                          checked={gender === "MALE"}
                          onChange={handleGenderChange}
                        />
                        <label htmlFor="gender-male">Male</label>
                        <input
                          type="radio"
                          id="gender-female"
                          name="gender"
                          value="FEMALE"
                          // disabled={userroles?.is_shareholder}
                          checked={gender === "FEMALE"}
                          onChange={handleGenderChange}
                        />
                        <label htmlFor="gender-female">Female</label>
                        <input
                          type="radio"
                          id="gender-other"
                          name="gender"
                          value="OTHER"
                          // disabled={userroles?.is_shareholder}
                          checked={gender === "OTHER"}
                          onChange={handleGenderChange}
                        />
                        <label htmlFor="gender-other">Other</label>
                  </div>
            </div> */}
          <div className="col-lg-3">
            <div className="sharetransfer_form_group">
              <label htmlFor="genderOptions">Gender:</label>
              <select
                id="genderOptions"
                defaultValue={user?.gender_type}
                onChange={handleGenderChange}
              >
                <option value="">Select your gender</option>
                {genderOptions.map((option) => (
                  <option key={option.value} value={option.value}>
                    {option.label}
                  </option>
                ))}
              </select>
            </div>
          </div>
          <div className="col-lg-3">
            <div className="sharetransfer_form_group">
              <label htmlFor="maritalStatus">Marital Status:</label>
              <select
                id="maritalStatus"
                defaultValue={user?.marital_status}
                onChange={handleMaritalStatusChange}
              >
                <option value="">Select a marital status</option>
                {maritalStatusOptions.map((option) => (
                  <option key={option.value} value={option.value}>
                    {option.label}
                  </option>
                ))}
              </select>
            </div>
          </div>
        </div>
        <div className="row d-flex justify-end">
          <div className="form-footer d-md-flex justify-end">
            <div className=" ">
              <button
                type="submit"
                className="cancel-btn"
                onClick={() => {
                  setEdit(false);
                }}
              >
                Cancel
              </button>
            </div>
            <div className=" ">
              <button type="submit" className="sharetransfer_button">
                Update
              </button>
            </div>
          </div>
        </div>
      </form>
    </div>
  );
};

export default ShareholderEditForm;