1
0
mirror of https://github.com/kremalicious/portfolio.git synced 2024-06-15 17:03:26 +02:00
portfolio/src/components/pages/Resume/ResumeItem.jsx

78 lines
2.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React from 'react'
import PropTypes from 'prop-types'
import remark from 'remark'
import remark2react from 'remark-react'
import parse from 'remark-parse'
import html from 'remark-html'
import breaks from 'remark-breaks'
import {
resumeItem,
time,
styleTitle,
styleSubTitle
} from './ResumeItem.module.css'
const markdownOutput = (text) =>
remark()
.use(parse, { gfm: true, commonmark: true, pedantic: true })
.use(html)
.use(breaks)
.use(remark2react)
.processSync(text).result
function normalizeData(content) {
const title = content.company || content.title || content.institution
const subTitle = content.position || content.awarder || content.area
const text = content.summary || content.studyType
const startDate = content.date || content.startDate
const endDate = content.endDate
return { title, subTitle, text, startDate, endDate }
}
export default function ResumeItem({ content }) {
const { title, subTitle, text, startDate, endDate } = normalizeData(content)
const dateStart = new Date(startDate).getFullYear()
const dateEnd = endDate && new Date(endDate).getFullYear()
const isSameYear = dateStart === dateEnd
return (
<div className={resumeItem}>
<span className={time}>
{dateStart}
{dateEnd ? !isSameYear && `${dateEnd}` : 'present'}{' '}
</span>
<h4 className={styleTitle}>{title}</h4>
<h5 className={styleSubTitle}>{subTitle}</h5>
{text && markdownOutput(text)}
</div>
)
}
export const ResumeItemContentProps = PropTypes.oneOfType([
PropTypes.shape({
startDate: PropTypes.string.isRequired,
endDate: PropTypes.string,
company: PropTypes.string.isRequired,
position: PropTypes.string.isRequired,
summary: PropTypes.string
}),
PropTypes.shape({
startDate: PropTypes.string.isRequired,
endDate: PropTypes.string,
institution: PropTypes.string.isRequired,
area: PropTypes.string.isRequired,
studyType: PropTypes.string
}),
PropTypes.shape({
date: PropTypes.string.isRequired,
title: PropTypes.string.isRequired,
awarder: PropTypes.string.isRequired,
summary: PropTypes.string
})
])
ResumeItem.propTypes = {
content: ResumeItemContentProps
}