From 7ae1082547bdcf4f02f44860ad4ccabf6a917d8d Mon Sep 17 00:00:00 2001 From: Ruidy Nemausat Date: Fri, 15 May 2020 11:15:57 +0200 Subject: [PATCH] enable add experience form --- src/models/Dev.ts | 2 + src/pages/AddEducation.tsx | 3 +- src/pages/AddExperience.tsx | 160 ++++++++++++++++++++++++++++++++---- src/types/Experience.ts | 3 +- 4 files changed, 151 insertions(+), 17 deletions(-) diff --git a/src/models/Dev.ts b/src/models/Dev.ts index 556d31f..0c86d43 100644 --- a/src/models/Dev.ts +++ b/src/models/Dev.ts @@ -60,11 +60,13 @@ export const dummyDev: Dev = { from: new Date(2011, 10), to: 'Current', position: 'Senior Developer', + location: 'USA', description: 'Lorem ipsum dolor sit, amet consectetur adipisicing elit. Voluptas corrupti rem eius, accusantium ipsum vel eveniet magnam voluptatum? Minus, voluptatum!', }, { company: 'Sun Microsystems', + location: 'USA', from: new Date(2004, 10), to: new Date(2010, 11), position: 'System Admin', diff --git a/src/pages/AddEducation.tsx b/src/pages/AddEducation.tsx index 2320086..d927097 100644 --- a/src/pages/AddEducation.tsx +++ b/src/pages/AddEducation.tsx @@ -72,7 +72,6 @@ const AddEducation: FC = ({firebase, educations}) => { return newEdu; }; const newEdu = makeEducation(formData); - console.log(JSON.stringify(newEdu, null, 4)); try { firebase.updateProfile( @@ -156,7 +155,7 @@ const AddEducation: FC = ({firebase, educations}) => { name="current" checked={formData.current} onChange={handleCheckboxesChange} - /> + />{' '} Current School

diff --git a/src/pages/AddExperience.tsx b/src/pages/AddExperience.tsx index a8f18c3..6ee63e9 100644 --- a/src/pages/AddExperience.tsx +++ b/src/pages/AddExperience.tsx @@ -1,10 +1,98 @@ -import React, {FC} from 'react'; +import React, {FC, useState, FormEvent} from 'react'; +// Routing +import {Link} from 'react-router-dom'; +import Routes from '../constants/routes'; +// Redux +import {WithFirebaseProps} from 'react-redux-firebase'; +import {enhance} from '../store/firebase'; +// Style import FormHeader from '../components/FormHeader'; +import Alert from '../components/Alert'; +// Typing +import Dev from '../models/Dev'; +import User from '../models/User'; +import IAlert, {formAlert} from '../types/Alert'; +import Experience from '../types/Experience'; +import {parseDate} from '../types/TimePeriod'; +// Form +import useForm from '../hooks'; + +interface FormData { + position: string; + company: string; + location: string; + from: string; + to: string; + current: boolean; + description: string; +} + +interface IProps extends Dev, WithFirebaseProps {} /** - * Form to add an Education step to Profile + * Form to add an Experience step to Profile */ -const AddExperience: FC = () => { +const AddExperience: FC = ({firebase, experiences}) => { + const [alert, setAlert] = useState(formAlert); + + const initFormData: FormData = { + position: '', + company: '', + location: '', + from: '', + to: '', + current: false, + description: '', + }; + const {formData, handleChange, handleCheckboxesChange, resetForm} = useForm< + FormData + >(initFormData); + + const isDisabled: boolean = + formData.position === '' || formData.company === ''; + + const handleSubmit = (e: FormEvent): void => { + e.preventDefault(); + const makeExperience = ({ + position, + company, + from, + location, + to, + current, + description, + }: FormData): Experience => { + if (current) to = 'Current'; + const newExp: Experience = { + position, + company, + location, + from: parseDate(from), + to: parseDate(to), + description, + }; + return newExp; + }; + const newExp = makeExperience(formData); + console.log(JSON.stringify(newExp, null, 4)); + + try { + firebase.updateProfile( + {experiences: [...experiences, newExp]}, + {useSet: true, merge: true}, + ); + setAlert({ + show: true, + color: 'success', + text: + 'Profile successfully updated. You may continue or go back to your dashboard.', + }); + resetForm(); + } catch (err) { + setAlert({...alert, show: true}); + } + }; + return (
{ icon="code-branch" /> -
+
- +
- +
- +

From Date

- +

To Date

- +

- Current Job + {' '} + Current Job

@@ -43,15 +167,23 @@ const AddExperience: FC = () => { cols={30} rows={5} placeholder="Job Description" + value={formData.description} + onChange={handleChange} >
- - + {alert.show && } + + Go Back - +
); }; -export default AddExperience; +export default enhance(AddExperience); diff --git a/src/types/Experience.ts b/src/types/Experience.ts index face0b0..9d28bfd 100644 --- a/src/types/Experience.ts +++ b/src/types/Experience.ts @@ -2,10 +2,11 @@ import TimePeriod from '../types/TimePeriod'; interface Experience { company: string; - from: Date; + from: TimePeriod; to: TimePeriod; position: string; description: string; + location: string; } export default Experience;