diff --git a/package-lock.json b/package-lock.json index 87828aab..0754ec2e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -51,6 +51,7 @@ "react-markdown": "^6.0.2", "react-scroll": "^1.8.2", "react-toastify": "^7.0.4", + "remark-gfm": "^1.0.0", "short-unique-id": "^4.3.3", "uuid": "^8.3.2", "yup": "^0.32.9" diff --git a/package.json b/package.json index b87a214c..ba6376c7 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,7 @@ "react-markdown": "^6.0.2", "react-scroll": "^1.8.2", "react-toastify": "^7.0.4", + "remark-gfm": "^1.0.0", "short-unique-id": "^4.3.3", "uuid": "^8.3.2", "yup": "^0.32.9" diff --git a/src/components/shared/Markdown.js b/src/components/shared/Markdown.js new file mode 100644 index 00000000..895540a1 --- /dev/null +++ b/src/components/shared/Markdown.js @@ -0,0 +1,16 @@ +import React, { memo } from 'react'; +import ReactMarkdown from 'react-markdown'; +import gfm from 'remark-gfm'; +import cx from 'classnames'; + +const Markdown = ({ children, className, ...props }) => ( + + {children} + +); + +export default memo(Markdown); diff --git a/src/pages/app/dashboard.js b/src/pages/app/dashboard.js index cde51d5d..5e781aa6 100644 --- a/src/pages/app/dashboard.js +++ b/src/pages/app/dashboard.js @@ -10,7 +10,7 @@ import TopNavbar from '../../components/dashboard/TopNavbar'; const Dashboard = ({ user }) => { const { t } = useTranslation(); const [resumes, setResumes] = useState([]); - const [loading, setLoading] = useState(true); + const [loading, setLoading] = useState(false); useEffect(() => { const resumesRef = 'resumes'; diff --git a/src/styles/global.css b/src/styles/global.css index f18504f9..2745b4f1 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -55,6 +55,52 @@ section { padding-left: 1.5em; } +.markdown table { + border-collapse: collapse; + border-spacing: 0; + display: block; + overflow: auto; + word-break: normal; + word-break: keep-all; +} + +.markdown table th { + font-weight: bold; +} + +.markdown table th, +.markdown table td { + padding: 6px 13px; + border: 1px solid #ddd; +} + +.markdown table tr { + background-color: #fff; + border-top: 1px solid #ccc; +} + +.markdown table tr .odd { + background-color: #f8f8f8; +} + +.markdown table tr .fail { + background-color: #f9f2f4; + color: #c7254e; + font-weight: bold; +} + +.markdown table tr .pass { + background-color: #dff0d8; + color: #468847; + font-weight: bold; +} + +.markdown table tr .warn { + background-color: #fcf8e3; + color: #ec971f; + font-weight: bold; +} + input[type="range"]::-webkit-slider-thumb { cursor: ew-resize; box-shadow: -405px 0 0 400px #605e5c; diff --git a/src/templates/Pikachu.js b/src/templates/Pikachu.js index f9b1984c..1398d1ab 100644 --- a/src/templates/Pikachu.js +++ b/src/templates/Pikachu.js @@ -1,5 +1,5 @@ import React from 'react'; -import ReactMarkdown from 'react-markdown'; +import Markdown from '../components/shared/Markdown'; import AwardsA from './blocks/Awards/AwardsA'; import CertificationsA from './blocks/Certifications/CertificationsA'; import ContactA from './blocks/Contact/ContactA'; @@ -77,9 +77,9 @@ const Pikachu = ({ data }) => { style={{ borderColor: data.metadata.colors.background }} /> - + {data.objective.body} - + )} diff --git a/src/templates/blocks/Awards/AwardsA.js b/src/templates/blocks/Awards/AwardsA.js index 033cec1d..acd97a67 100644 --- a/src/templates/blocks/Awards/AwardsA.js +++ b/src/templates/blocks/Awards/AwardsA.js @@ -1,5 +1,5 @@ import React, { memo, useContext } from 'react'; -import ReactMarkdown from 'react-markdown'; +import Markdown from '../../../components/shared/Markdown'; import { formatDate, isItemVisible, safetyCheck } from '../../../utils'; import PageContext from '../../../contexts/PageContext'; @@ -17,9 +17,7 @@ const AwardItem = ({ item, language }) => ( )} {item.summary && ( - - {item.summary} - + {item.summary} )} ); diff --git a/src/templates/blocks/Certifications/CertificationsA.js b/src/templates/blocks/Certifications/CertificationsA.js index d0f976bd..c830906d 100644 --- a/src/templates/blocks/Certifications/CertificationsA.js +++ b/src/templates/blocks/Certifications/CertificationsA.js @@ -1,5 +1,5 @@ import React, { memo, useContext } from 'react'; -import ReactMarkdown from 'react-markdown'; +import Markdown from '../../../components/shared/Markdown'; import { formatDate, isItemVisible, safetyCheck } from '../../../utils'; import PageContext from '../../../contexts/PageContext'; @@ -17,9 +17,7 @@ const CertificationItem = ({ item, language }) => ( )} {item.summary && ( - - {item.summary} - + {item.summary} )} ); diff --git a/src/templates/blocks/Education/EducationA.js b/src/templates/blocks/Education/EducationA.js index e425769d..fbc37c70 100644 --- a/src/templates/blocks/Education/EducationA.js +++ b/src/templates/blocks/Education/EducationA.js @@ -1,6 +1,6 @@ import { useTranslation } from 'react-i18next'; import React, { memo, useContext } from 'react'; -import ReactMarkdown from 'react-markdown'; +import Markdown from '../../../components/shared/Markdown'; import PageContext from '../../../contexts/PageContext'; import { formatDateRange, isItemVisible, safetyCheck } from '../../../utils'; @@ -34,9 +34,7 @@ const EducationItem = ({ item, language }) => { {item.summary && ( - - {item.summary} - + {item.summary} )} ); diff --git a/src/templates/blocks/Objective/ObjectiveA.js b/src/templates/blocks/Objective/ObjectiveA.js index f806572f..c5f39554 100644 --- a/src/templates/blocks/Objective/ObjectiveA.js +++ b/src/templates/blocks/Objective/ObjectiveA.js @@ -1,5 +1,5 @@ import React, { memo, useContext } from 'react'; -import ReactMarkdown from 'react-markdown'; +import Markdown from '../../../components/shared/Markdown'; import { safetyCheck } from '../../../utils'; import PageContext from '../../../contexts/PageContext'; @@ -10,9 +10,7 @@ const ObjectiveA = () => { safetyCheck(data.objective, 'body') && (
{data.objective.heading} - - {data.objective.body} - + {data.objective.body}
) ); diff --git a/src/templates/blocks/Projects/ProjectsA.js b/src/templates/blocks/Projects/ProjectsA.js index feb035c5..9f3da086 100644 --- a/src/templates/blocks/Projects/ProjectsA.js +++ b/src/templates/blocks/Projects/ProjectsA.js @@ -1,6 +1,6 @@ import { useTranslation } from 'react-i18next'; import React, { memo, useContext } from 'react'; -import ReactMarkdown from 'react-markdown'; +import Markdown from '../../../components/shared/Markdown'; import PageContext from '../../../contexts/PageContext'; import { formatDateRange, isItemVisible, safetyCheck } from '../../../utils'; @@ -33,9 +33,7 @@ const ProjectItem = ({ item, language }) => { )} {item.summary && ( - - {item.summary} - + {item.summary} )} ); diff --git a/src/templates/blocks/References/ReferencesA.js b/src/templates/blocks/References/ReferencesA.js index bdb24a5d..8eaed4d1 100644 --- a/src/templates/blocks/References/ReferencesA.js +++ b/src/templates/blocks/References/ReferencesA.js @@ -1,5 +1,5 @@ import React, { memo, useContext } from 'react'; -import ReactMarkdown from 'react-markdown'; +import Markdown from '../../../components/shared/Markdown'; import { isItemVisible, safetyCheck } from '../../../utils'; import PageContext from '../../../contexts/PageContext'; @@ -10,7 +10,7 @@ const ReferenceItem = ({ id, name, position, phone, email, summary }) => ( {phone} {email} {summary && ( - {summary} + {summary} )} ); diff --git a/src/templates/blocks/References/ReferencesB.js b/src/templates/blocks/References/ReferencesB.js index 99b7581d..c26b47cd 100644 --- a/src/templates/blocks/References/ReferencesB.js +++ b/src/templates/blocks/References/ReferencesB.js @@ -1,5 +1,5 @@ import React, { memo, useContext } from 'react'; -import ReactMarkdown from 'react-markdown'; +import Markdown from '../../../components/shared/Markdown'; import { isItemVisible, safetyCheck } from '../../../utils'; import PageContext from '../../../contexts/PageContext'; @@ -10,7 +10,7 @@ const ReferenceItem = ({ id, name, position, phone, email, summary }) => ( {phone} {email} {summary && ( - {summary} + {summary} )} ); diff --git a/src/templates/blocks/Work/WorkA.js b/src/templates/blocks/Work/WorkA.js index f8ed1e44..2d8bd632 100644 --- a/src/templates/blocks/Work/WorkA.js +++ b/src/templates/blocks/Work/WorkA.js @@ -1,6 +1,6 @@ import { useTranslation } from 'react-i18next'; import React, { memo, useContext } from 'react'; -import ReactMarkdown from 'react-markdown'; +import Markdown from '../../../components/shared/Markdown'; import PageContext from '../../../contexts/PageContext'; import { formatDateRange, isItemVisible, safetyCheck } from '../../../utils'; @@ -29,9 +29,7 @@ const WorkItem = ({ item, language }) => { )} {item.summary && ( - - {item.summary} - + {item.summary} )} );