feat(markdown): add gfm support

revert firebase changes
This commit is contained in:
Pierre Huyghe
2021-08-10 12:44:27 +02:00
committed by hpierre74
parent 99d7d3aad2
commit cfad352903
14 changed files with 84 additions and 32 deletions

1
package-lock.json generated
View File

@ -51,6 +51,7 @@
"react-markdown": "^6.0.2", "react-markdown": "^6.0.2",
"react-scroll": "^1.8.2", "react-scroll": "^1.8.2",
"react-toastify": "^7.0.4", "react-toastify": "^7.0.4",
"remark-gfm": "^1.0.0",
"short-unique-id": "^4.3.3", "short-unique-id": "^4.3.3",
"uuid": "^8.3.2", "uuid": "^8.3.2",
"yup": "^0.32.9" "yup": "^0.32.9"

View File

@ -60,6 +60,7 @@
"react-markdown": "^6.0.2", "react-markdown": "^6.0.2",
"react-scroll": "^1.8.2", "react-scroll": "^1.8.2",
"react-toastify": "^7.0.4", "react-toastify": "^7.0.4",
"remark-gfm": "^1.0.0",
"short-unique-id": "^4.3.3", "short-unique-id": "^4.3.3",
"uuid": "^8.3.2", "uuid": "^8.3.2",
"yup": "^0.32.9" "yup": "^0.32.9"

View File

@ -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 }) => (
<ReactMarkdown
className={cx('markdown', className)}
remarkPlugins={[gfm]}
{...props}
>
{children}
</ReactMarkdown>
);
export default memo(Markdown);

View File

@ -10,7 +10,7 @@ import TopNavbar from '../../components/dashboard/TopNavbar';
const Dashboard = ({ user }) => { const Dashboard = ({ user }) => {
const { t } = useTranslation(); const { t } = useTranslation();
const [resumes, setResumes] = useState([]); const [resumes, setResumes] = useState([]);
const [loading, setLoading] = useState(true); const [loading, setLoading] = useState(false);
useEffect(() => { useEffect(() => {
const resumesRef = 'resumes'; const resumesRef = 'resumes';

View File

@ -55,6 +55,52 @@ section {
padding-left: 1.5em; 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 { input[type="range"]::-webkit-slider-thumb {
cursor: ew-resize; cursor: ew-resize;
box-shadow: -405px 0 0 400px #605e5c; box-shadow: -405px 0 0 400px #605e5c;

View File

@ -1,5 +1,5 @@
import React from 'react'; import React from 'react';
import ReactMarkdown from 'react-markdown'; import Markdown from '../components/shared/Markdown';
import AwardsA from './blocks/Awards/AwardsA'; import AwardsA from './blocks/Awards/AwardsA';
import CertificationsA from './blocks/Certifications/CertificationsA'; import CertificationsA from './blocks/Certifications/CertificationsA';
import ContactA from './blocks/Contact/ContactA'; import ContactA from './blocks/Contact/ContactA';
@ -77,9 +77,9 @@ const Pikachu = ({ data }) => {
style={{ borderColor: data.metadata.colors.background }} style={{ borderColor: data.metadata.colors.background }}
/> />
<ReactMarkdown className="text-sm"> <Markdown className="text-sm">
{data.objective.body} {data.objective.body}
</ReactMarkdown> </Markdown>
</div> </div>
)} )}
</div> </div>

View File

@ -1,5 +1,5 @@
import React, { memo, useContext } from 'react'; import React, { memo, useContext } from 'react';
import ReactMarkdown from 'react-markdown'; import Markdown from '../../../components/shared/Markdown';
import { formatDate, isItemVisible, safetyCheck } from '../../../utils'; import { formatDate, isItemVisible, safetyCheck } from '../../../utils';
import PageContext from '../../../contexts/PageContext'; import PageContext from '../../../contexts/PageContext';
@ -17,9 +17,7 @@ const AwardItem = ({ item, language }) => (
)} )}
</div> </div>
{item.summary && ( {item.summary && (
<ReactMarkdown className="markdown mt-2 text-sm"> <Markdown className="markdown mt-2 text-sm">{item.summary}</Markdown>
{item.summary}
</ReactMarkdown>
)} )}
</div> </div>
); );

View File

@ -1,5 +1,5 @@
import React, { memo, useContext } from 'react'; import React, { memo, useContext } from 'react';
import ReactMarkdown from 'react-markdown'; import Markdown from '../../../components/shared/Markdown';
import { formatDate, isItemVisible, safetyCheck } from '../../../utils'; import { formatDate, isItemVisible, safetyCheck } from '../../../utils';
import PageContext from '../../../contexts/PageContext'; import PageContext from '../../../contexts/PageContext';
@ -17,9 +17,7 @@ const CertificationItem = ({ item, language }) => (
)} )}
</div> </div>
{item.summary && ( {item.summary && (
<ReactMarkdown className="markdown mt-2 text-sm"> <Markdown className="markdown mt-2 text-sm">{item.summary}</Markdown>
{item.summary}
</ReactMarkdown>
)} )}
</div> </div>
); );

View File

@ -1,6 +1,6 @@
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import React, { memo, useContext } from 'react'; import React, { memo, useContext } from 'react';
import ReactMarkdown from 'react-markdown'; import Markdown from '../../../components/shared/Markdown';
import PageContext from '../../../contexts/PageContext'; import PageContext from '../../../contexts/PageContext';
import { formatDateRange, isItemVisible, safetyCheck } from '../../../utils'; import { formatDateRange, isItemVisible, safetyCheck } from '../../../utils';
@ -34,9 +34,7 @@ const EducationItem = ({ item, language }) => {
</div> </div>
</div> </div>
{item.summary && ( {item.summary && (
<ReactMarkdown className="markdown mt-2 text-sm"> <Markdown className="markdown mt-2 text-sm">{item.summary}</Markdown>
{item.summary}
</ReactMarkdown>
)} )}
</div> </div>
); );

View File

@ -1,5 +1,5 @@
import React, { memo, useContext } from 'react'; import React, { memo, useContext } from 'react';
import ReactMarkdown from 'react-markdown'; import Markdown from '../../../components/shared/Markdown';
import { safetyCheck } from '../../../utils'; import { safetyCheck } from '../../../utils';
import PageContext from '../../../contexts/PageContext'; import PageContext from '../../../contexts/PageContext';
@ -10,9 +10,7 @@ const ObjectiveA = () => {
safetyCheck(data.objective, 'body') && ( safetyCheck(data.objective, 'body') && (
<div> <div>
<Heading>{data.objective.heading}</Heading> <Heading>{data.objective.heading}</Heading>
<ReactMarkdown className="markdown text-sm"> <Markdown className="markdown text-sm">{data.objective.body}</Markdown>
{data.objective.body}
</ReactMarkdown>
</div> </div>
) )
); );

View File

@ -1,6 +1,6 @@
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import React, { memo, useContext } from 'react'; import React, { memo, useContext } from 'react';
import ReactMarkdown from 'react-markdown'; import Markdown from '../../../components/shared/Markdown';
import PageContext from '../../../contexts/PageContext'; import PageContext from '../../../contexts/PageContext';
import { formatDateRange, isItemVisible, safetyCheck } from '../../../utils'; import { formatDateRange, isItemVisible, safetyCheck } from '../../../utils';
@ -33,9 +33,7 @@ const ProjectItem = ({ item, language }) => {
)} )}
</div> </div>
{item.summary && ( {item.summary && (
<ReactMarkdown className="markdown mt-2 text-sm"> <Markdown className="markdown mt-2 text-sm">{item.summary}</Markdown>
{item.summary}
</ReactMarkdown>
)} )}
</div> </div>
); );

View File

@ -1,5 +1,5 @@
import React, { memo, useContext } from 'react'; import React, { memo, useContext } from 'react';
import ReactMarkdown from 'react-markdown'; import Markdown from '../../../components/shared/Markdown';
import { isItemVisible, safetyCheck } from '../../../utils'; import { isItemVisible, safetyCheck } from '../../../utils';
import PageContext from '../../../contexts/PageContext'; import PageContext from '../../../contexts/PageContext';
@ -10,7 +10,7 @@ const ReferenceItem = ({ id, name, position, phone, email, summary }) => (
<span className="text-xs">{phone}</span> <span className="text-xs">{phone}</span>
<span className="text-xs">{email}</span> <span className="text-xs">{email}</span>
{summary && ( {summary && (
<ReactMarkdown className="markdown mt-2 text-sm">{summary}</ReactMarkdown> <Markdown className="markdown mt-2 text-sm">{summary}</Markdown>
)} )}
</div> </div>
); );

View File

@ -1,5 +1,5 @@
import React, { memo, useContext } from 'react'; import React, { memo, useContext } from 'react';
import ReactMarkdown from 'react-markdown'; import Markdown from '../../../components/shared/Markdown';
import { isItemVisible, safetyCheck } from '../../../utils'; import { isItemVisible, safetyCheck } from '../../../utils';
import PageContext from '../../../contexts/PageContext'; import PageContext from '../../../contexts/PageContext';
@ -10,7 +10,7 @@ const ReferenceItem = ({ id, name, position, phone, email, summary }) => (
<span className="text-xs">{phone}</span> <span className="text-xs">{phone}</span>
<span className="text-xs">{email}</span> <span className="text-xs">{email}</span>
{summary && ( {summary && (
<ReactMarkdown className="markdown mt-2 text-sm">{summary}</ReactMarkdown> <Markdown className="markdown mt-2 text-sm">{summary}</Markdown>
)} )}
</div> </div>
); );

View File

@ -1,6 +1,6 @@
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import React, { memo, useContext } from 'react'; import React, { memo, useContext } from 'react';
import ReactMarkdown from 'react-markdown'; import Markdown from '../../../components/shared/Markdown';
import PageContext from '../../../contexts/PageContext'; import PageContext from '../../../contexts/PageContext';
import { formatDateRange, isItemVisible, safetyCheck } from '../../../utils'; import { formatDateRange, isItemVisible, safetyCheck } from '../../../utils';
@ -29,9 +29,7 @@ const WorkItem = ({ item, language }) => {
)} )}
</div> </div>
{item.summary && ( {item.summary && (
<ReactMarkdown className="markdown mt-2 text-sm"> <Markdown className="markdown mt-2 text-sm">{item.summary}</Markdown>
{item.summary}
</ReactMarkdown>
)} )}
</div> </div>
); );