diff --git a/src/pages/Profile.tsx b/src/pages/Profile.tsx index d9093f0..7d28c36 100644 --- a/src/pages/Profile.tsx +++ b/src/pages/Profile.tsx @@ -15,16 +15,26 @@ import { faEye, faCodeBranch, } from '@fortawesome/free-solid-svg-icons'; -import Dev, {dummyDev as dev} from '../models/Dev'; +import Dev from '../models/Dev'; import Experience from '../types/Experience'; import {getTimePeriod} from '../types/TimePeriod'; import Education from '../types/Education'; import Repo from '../types/Repo'; +import {compose} from '@reduxjs/toolkit'; +import {firestoreConnect} from 'react-redux-firebase'; +import {connect} from 'react-redux'; +import {RootState} from '../store'; +import Routes from '../constants/routes'; +import {Link, useParams} from 'react-router-dom'; + +interface IProps { + dev: Dev; +} /** * Dev personal profile as seen by other people. */ -const Profile: FC = () => { +const Profile: FC = ({dev}) => { /** return the icon corresponding to the social name */ const renderSocialIcon = (name: string): IconDefinition => { switch (name) { @@ -45,9 +55,9 @@ const Profile: FC = () => { return (
- + Back to profiles - +
@@ -56,25 +66,25 @@ const Profile: FC = () => { alt="Some guy" className="round-img my-1" /> -

{dev.displayName}

-

{dev.description}

-

{dev.location}

+

{dev?.displayName}

+

{dev?.description}

+

{dev?.location}

- {Object.entries(dev.links).map(([icon, webAddress], i: number) => ( + {/* {Object.entries(dev?.links).map(([icon, webAddress], i: number) => ( - ))} + ))} */}
-

{`${dev.displayName}'s Bio`}

-

{dev.bio}

+

{`${dev?.displayName}'s Bio`}

+

{dev?.bio}

Skill Set

- {dev.skills.map((s: string, i: number) => ( + {dev?.skills?.map((s: string, i: number) => (
{s}
@@ -84,7 +94,7 @@ const Profile: FC = () => {

Experiences

- {dev.experiences.map((exp: Experience, i: number) => ( + {dev?.experiences?.map((exp: Experience, i: number) => (

{exp.company}

{getTimePeriod(exp.from, exp.to)}

@@ -102,7 +112,7 @@ const Profile: FC = () => {

Education

- {dev.educations.map((edu: Education, i: number) => ( + {dev?.educations?.map((edu: Education, i: number) => (

{edu.school}

{getTimePeriod(edu.from, edu.to)}

@@ -127,7 +137,7 @@ const Profile: FC = () => { GitHub Repos - {dev.repos.map((r: Repo, i: number) => ( + {dev?.repos?.map((r: Repo, i: number) => (

@@ -156,4 +166,20 @@ const Profile: FC = () => { ); }; -export default Profile; +/** + * Container to fetch id params from thr URI and pass it to Profile page + */ +const ProfileContainer: FC = () => { + const {id} = useParams(); + + const Component = compose( + firestoreConnect(() => [`users/${id}`]), + connect(({firestore: {data}}: RootState) => ({ + dev: data.users && data.users[id], + })), + )(Profile); + + return ; +}; + +export default ProfileContainer;