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"
/>
-
);
};
-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;