import React, { Fragment, useState, useEffect } from "react"; import { Link, useMatch, useNavigate } from "react-router-dom"; import { createProfile, getCurrentProfile } from "../../actions/profile"; import { useAppDispatch, useAppSelector } from "../../utils/hooks"; const initialState = { company: "", website: "", location: "", status: "", skills: "", githubusername: "", bio: "", twitter: "", facebook: "", linkedin: "", youtube: "", instagram: "", }; const ProfileForm = () => { const dispatch = useAppDispatch(); const { profile, loading }: { profile: any, loading: boolean } = useAppSelector((state) => state.profile); //TODO // issue with for in const [formData, setFormData] = useState(initialState); const creatingProfile = useMatch("/create-profile"); const [displaySocialInputs, toggleSocialInputs] = useState(false); const navigate = useNavigate(); useEffect(() => { // if there is no profile, attempt to fetch one async function fetchData() { await dispatch(getCurrentProfile()) } if (!profile) fetchData(); // if we finished loading and we do have a profile // then build our profileData if (!loading && profile) { const profileData: any = { ...initialState }; // cant figure out how to type key to be keyof profile so they are any now for (const key in profile) { if (key in profileData) profileData[key] = profile[key]; } for (const key in profile.social) { if (key in profileData) profileData[key] = profile.social[key]; } // the skills may be an array from our API response if (Array.isArray(profileData.skills)) profileData.skills = profileData.skills.join(", "); // set local state with the profileData setFormData(profileData); } }, [loading, dispatch, profile]); const { company, website, location, status, skills, githubusername, bio, twitter, facebook, linkedin, youtube, instagram, } = formData; const onChange = (e: React.ChangeEvent) => setFormData({ ...formData, [e.target.name]: e.target.value }); const onSubmit = async (e: React.SyntheticEvent) => { const editing = profile ? true : false; e.preventDefault(); await dispatch(createProfile(formData, editing)).then(() => { if (!editing) navigate("/dashboard"); }); }; return (

{creatingProfile ? "Create Your Profile" : "Edit Your Profile"}

{creatingProfile ? ` Let's get some information to make your` : " Add some changes to your profile"}

* = required field
Give us an idea of where you are at in your career
Could be your own company or one you work for
Could be your own or a company website
City & state suggested (eg. Boston, MA)
Please use comma separated values (eg. HTML,CSS,JavaScript,PHP)
If you want your latest repos and a Github link, include your username