Skip to content
Snippets Groups Projects
MyAccountAdminView.js 12.4 KiB
Newer Older
  • Learn to ignore specific revisions
  • import React, { useState, useEffect } from 'react';
    import './MyAccountAdminView.css';
    
    const MyAccountAdminView = () => {
      const [formData, setFormData] = useState({
        firstName: '',
        lastName: '',
        middleName: '',
        suffix: '',
        maidenName: '',
        nickname: '',
        gender: '',
        techAlumChapter: '',
        classYear: '',
        gradYear: '',
        gradSemester: '',
        degrees: [{ subject: '', degreeType: '', degreeYear: '', degreeDescription: '', degreeDepartment: '', degreeCollege: ''}],
        addresses: [{ address1: '', address2: '', city: '', state: '', country: '', zipCode: '', preferredAddress: false }],
        contacts: [{ contactNumber: '', contactType: '', preferredContact: false }],
        involvements: ['', ''],
      });
    
    
      const techAlumChapters = ['Chapter A', 'Chapter B', 'Chapter C'];
      const degreeTypes = ['AS', 'BS', 'MS', 'PhD'];
      const genders = ['male', 'female', 'other'];
      const contactTypes = ['phone', 'email'];
    
      useEffect(() => {
        const savedData = JSON.parse(localStorage.getItem('myAccountData'));
        if (savedData) {
          setFormData(savedData);
        }
      }, []);
    
      const handleChange = (e) => {
        const { name, value } = e.target;
        setFormData({ ...formData, [name]: value });
      };
    
      const handleDegreeChange = (index, e) => {
        const updatedDegrees = [...formData.degrees];
        updatedDegrees[index][e.target.name] = e.target.value;
        setFormData({ ...formData, degrees: updatedDegrees });
      };
      
    
      const handleAddDegree = () => {
        setFormData({
          ...formData,
          degrees: [...formData.degrees, { subject: '', degreeType: '', degreeYear: '', degreeDescription: '' }]
        });
      };
    
      const handleDeleteDegree = (index) => {
        const updatedDegrees = formData.degrees.filter((_, i) => i !== index);
        setFormData({ ...formData, degrees: updatedDegrees });
      };
    
      const handleAddressChange = (index, e) => {
        const updatedAddresses = [...formData.addresses];
        updatedAddresses[index][e.target.name] = e.target.value;
        setFormData({ ...formData, addresses: updatedAddresses });
      };
    
      const handleAddAddress = () => {
        setFormData({
          ...formData,
          addresses: [...formData.addresses, { address1: '', address2: '', city: '', state: '', country: '', zipCode: '', preferredAddress: false }]
        });
      };
    
      const handleDeleteAddress = (index) => {
        const updatedAddresses = formData.addresses.filter((_, i) => i !== index);
        setFormData({ ...formData, addresses: updatedAddresses });
      };
    
      const handleContactChange = (index, e) => {
        const updatedContacts = [...formData.contacts];
        updatedContacts[index][e.target.name] = e.target.value;
        setFormData({ ...formData, contacts: updatedContacts });
      };
    
      const handleAddContact = () => {
        setFormData({
          ...formData,
          contacts: [...formData.contacts, { contactNumber: '', contactType: '', preferredContact: false }]
        });
      };
    
      const handleDeleteContact = (index) => {
        const updatedContacts = formData.contacts.filter((_, i) => i !== index);
        setFormData({ ...formData, contacts: updatedContacts });
      };
    
      const handleSave = () => {
        localStorage.setItem('myAccountData', JSON.stringify(formData));
        alert('Your information has been saved!');
        // Update this with the backend call later we need to use PUT for updating
        // and use POST for creating the new entry
      };
    
      const handleClear = () => {
        setFormData({
          firstName: '',
          lastName: '',
          middleName: '',
          suffix: '',
          maidenName: '',
          nickname: '',
          gender: '',
          techAlumChapter: '',
          classYear: '',
          gradYear: '',
          gradSemester: '',
          degrees: [{ subject: '', degreeType: '', degreeYear: '', degreeDescription: '', degreeDepartment: '', degreeCollege: '' }],
          addresses: [{ address1: '', address2: '', city: '', state: '', country: '', zipCode: '', preferredAddress: false }],
          contacts: [{ contactNumber: '', contactType: '', preferredContact: false }],
          involvements: ['', ''],
        });
      };
     
    
      return (
        <div className="my-account-container">
          <h1>My Account</h1>
          <form className="account-form">
            <h2>Personal Information</h2>
            <label>First Name</label>
            <input name="firstName" placeholder="First Name" value={formData.firstName} onChange={handleChange} required />
            
            <label>Last Name</label>
            <input name="lastName" placeholder="Last Name" value={formData.lastName} onChange={handleChange} required />
            
            <label>Middle Name</label>
            <input name="middleName" placeholder="Middle Name" value={formData.middleName} onChange={handleChange} />
            
            <label>Maiden Name</label>
            <input name="maidenName" placeholder="Maiden Name" value={formData.maidenName} onChange={handleChange} />
    
            <label>Suffix</label>
            <input name="suffix" placeholder="Suffix" value={formData.suffix} onChange={handleChange} />
            
            <label>Nickname</label>
            <input name="nickname" placeholder="Nickname" value={formData.nickname} onChange={handleChange} />
            
            <label>Gender</label>
            <select name="gender" value={formData.gender} onChange={handleChange} required>
              <option value="">Select Gender</option>
              {genders.map(gender => <option key={gender} value={gender}>{gender}</option>)}
            </select>
      
            <label>Tech Alumni Chapter</label>
            <select name="techAlumChapter" value={formData.techAlumChapter} onChange={handleChange}>
              <option value="">Select Chapter</option>
              {techAlumChapters.map(chapter => <option key={chapter} value={chapter}>{chapter}</option>)}
            </select>
      
            <label>Class Year</label>
            <input 
              name="classYear" 
              placeholder="Class Year" 
              value={formData.classYear} 
              onChange={handleChange} 
              required 
              type="number" 
            />
            
            <label>Grad Year</label>
            <input 
              name="gradYear" 
              placeholder="Grad Year" 
              value={formData.gradYear} 
              onChange={handleChange} 
              required 
              type="number" 
            />
            
            <label>Grad Semester</label>
            <input 
              name="gradSemester" 
              placeholder="Grad Semester" 
              value={formData.gradSemester} 
              onChange={handleChange} 
              maxLength="6" 
            />
      
      
          <h2>Degrees</h2>
          {formData.degrees.map((degree, index) => (
            <div key={index} className="form-section">
              <label>Subject</label>
              <input 
                name="subject" 
                placeholder="Subject" 
                value={degree.subject} 
                onChange={(e) => handleDegreeChange(index, e)} 
                required 
              />
              
              <label>Degree Type</label>
              <select 
                name="degreeType" 
                value={degree.degreeType} 
                onChange={(e) => handleDegreeChange(index, e)} 
                required
              >
                <option value="">Select Degree Type</option>
                {degreeTypes.map(type => (
                  <option key={type} value={type}>{type}</option>
                ))}
              </select>
              
              <label>Degree Year</label>
              <input 
                name="degreeYear" 
                type="number"
                min="1900"
                max={new Date().getFullYear()} 
                placeholder="Degree Year/Expected Graduation" 
                value={degree.degreeYear} 
                onChange={(e) => handleDegreeChange(index, e)} 
                required 
              />
              
              <label>Degree Description</label>
              <input 
                name="degreeDescription" 
                placeholder="Degree Description" 
                value={degree.degreeDescription} 
                onChange={(e) => handleDegreeChange(index, e)} 
                maxLength="255" 
              />
    
              <label>Degree Department</label>
              <input 
                name="degreeDepartment" 
                placeholder="Degree Department" 
                value={degree.degreeDepartment} 
                onChange={(e) => handleDegreeChange(index, e)} 
              />
    
              <label>Degree College</label>
              <input 
                name="degreeCollege" 
                placeholder="Degree College" 
                value={degree.degreeCollege} 
                onChange={(e) => handleDegreeChange(index, e)} 
              />
    
              <button type="button" onClick={() => handleDeleteDegree(index)}>Delete Degree</button>
            </div>
          ))}
    
            <button type="button" onClick={handleAddDegree}>Add Degree</button>
      
            <h2>Addresses</h2>
            {formData.addresses.map((address, index) => (
              <div key={index} className="form-section">
                <label>Address Line 1</label>
                <input name="address1" placeholder="Address Line 1" value={address.address1} onChange={(e) => handleAddressChange(index, e)} required />
                
                <label>Address Line 2</label>
                <input name="address2" placeholder="Address Line 2" value={address.address2} onChange={(e) => handleAddressChange(index, e)} />
                
                <label>City</label>
                <input name="city" placeholder="City" value={address.city} onChange={(e) => handleAddressChange(index, e)} required />
                
                <label>State</label>
                <input name="state" placeholder="State" value={address.state} onChange={(e) => handleAddressChange(index, e)} required />
                
                <label>Country</label>
                <input name="country" placeholder="Country" value={address.country} onChange={(e) => handleAddressChange(index, e)} required />
                
                <label>Zip Code</label>
                <input name="zipCode" placeholder="Zip Code" value={address.zipCode} onChange={(e) => handleAddressChange(index, e)} />
                
                <label>
                  Preferred Address
                  <input type="checkbox" name="preferredAddress" checked={address.preferredAddress} onChange={(e) => handleAddressChange(index, { ...e, target: { name: 'preferredAddress', value: e.target.checked } })} />
                </label>
                <button type="button" onClick={() => handleDeleteAddress(index)}>Delete Address</button>
              </div>
            ))}
            <button type="button" onClick={handleAddAddress}>Add Address</button>
      
            <h2>Contacts</h2>
            {formData.contacts.map((contact, index) => (
              <div key={index} className="form-section">
                <label>Contact Number</label>
                <input 
                  name="contactNumber" 
                  placeholder="Contact Number" 
                  value={contact.contactNumber} 
                  onChange={(e) => handleContactChange(index, e)} 
                  required 
                />
                
                <label>Contact Type</label>
                <select 
                  name="contactType" 
                  value={contact.contactType} 
                  onChange={(e) => handleContactChange(index, e)} 
                  required
                >
                  <option value="">Select Contact Type</option>
                  {contactTypes.map(type => <option key={type} value={type}>{type}</option>)}
                </select>
                
                <label>
                  Preferred Contact
                  <input 
                    type="checkbox" 
                    name="preferredContact" 
                    checked={contact.preferredContact} 
                    onChange={(e) => handleContactChange(index, { ...e, target: { name: 'preferredContact', value: e.target.checked } })} 
                  />
                </label>
                <button type="button" onClick={() => handleDeleteContact(index)}>Delete Contact</button>
              </div>
            ))}
            <button type="button" onClick={handleAddContact}>Add Contact</button>
      
            <h2>Involvements</h2>
            {formData.involvements.map((involvement, index) => (
              <div key={index}>
                <label>Involvement</label>
                <input 
                  name={`involvement${index}`} 
                  placeholder="Involvement" 
                  value={involvement} 
                  onChange={(e) => {
                    const updatedInvolvements = [...formData.involvements];
                    updatedInvolvements[index] = e.target.value;
                    setFormData({ ...formData, involvements: updatedInvolvements });
                  }} 
                />
              </div>
            ))}
      
            <button type="button" onClick={handleSave}>Save/Update</button>
            <button type="button" onClick={handleSave}>Create User</button>
            <button type="button" onClick={handleClear}>Clear</button>
          </form>
        </div>
      );
      
      
    };
    
    export default MyAccountAdminView;