diff --git a/database.rules.json b/database.rules.json index 8c1c0a8d..bd6f82b1 100644 --- a/database.rules.json +++ b/database.rules.json @@ -9,6 +9,7 @@ } }, "users": { + ".indexOn": "isAnonymous", "$uid": { ".read": "$uid === auth.uid", ".write": "$uid === auth.uid" diff --git a/gatsby-browser.js b/gatsby-browser.js index 1626bd79..f998b2f6 100644 --- a/gatsby-browser.js +++ b/gatsby-browser.js @@ -4,7 +4,6 @@ import 'firebase/analytics'; import 'firebase/auth'; import 'firebase/database'; import 'firebase/functions'; -import 'firebase/storage'; import React from 'react'; import { DatabaseProvider } from './src/contexts/DatabaseContext'; import { ModalProvider } from './src/contexts/ModalContext'; diff --git a/gatsby-ssr.js b/gatsby-ssr.js index 75f5bb39..b8679def 100644 --- a/gatsby-ssr.js +++ b/gatsby-ssr.js @@ -2,4 +2,3 @@ import 'firebase/analytics'; import 'firebase/auth'; import 'firebase/database'; import 'firebase/functions'; -import 'firebase/storage'; diff --git a/src/contexts/ResumeContext.js b/src/contexts/ResumeContext.js index 92f083c1..1136c2cf 100644 --- a/src/contexts/ResumeContext.js +++ b/src/contexts/ResumeContext.js @@ -85,7 +85,7 @@ const ResumeProvider = ({ children }) => { return newState; case 'change_language': - newState = clone(state); + newState = set(clone(state), 'metadata.language', payload); items = get( i18next.getDataByLanguage(payload), 'translation.builder.sections', @@ -94,6 +94,7 @@ const ResumeProvider = ({ children }) => { has(newState, `${key}.heading`) && set(newState, `${key}.heading`, items[key]); }); + debouncedUpdateResume(newState); return newState; case 'reset_layout': diff --git a/src/templates/blocks/Awards/AwardsA.js b/src/templates/blocks/Awards/AwardsA.js index e98fb601..cecd24b8 100644 --- a/src/templates/blocks/Awards/AwardsA.js +++ b/src/templates/blocks/Awards/AwardsA.js @@ -1,11 +1,9 @@ -import dayjs from 'dayjs'; import React, { memo, useContext } from 'react'; -import { useTranslation } from 'react-i18next'; import ReactMarkdown from 'react-markdown'; import PageContext from '../../../contexts/PageContext'; -import { safetyCheck } from '../../../utils'; +import { formatDate, safetyCheck } from '../../../utils'; -const AwardItem = ({ item, i18n }) => ( +const AwardItem = ({ item, language }) => (
@@ -14,9 +12,7 @@ const AwardItem = ({ item, i18n }) => (
{item.date && (
- {dayjs(item.date) - .locale(i18n.language.substr(0, 2)) - .format('MMMM YYYY')} + {formatDate({ date: item.date, language })}
)}
@@ -27,7 +23,6 @@ const AwardItem = ({ item, i18n }) => ( ); const AwardsA = () => { - const { i18n } = useTranslation(); const { data, heading: Heading } = useContext(PageContext); return safetyCheck(data.awards) ? ( @@ -35,7 +30,7 @@ const AwardsA = () => { {data.awards.heading}
{data.awards.items.map((x) => ( - + ))}
diff --git a/src/templates/blocks/Certifications/CertificationsA.js b/src/templates/blocks/Certifications/CertificationsA.js index 607c1285..45a22a5e 100644 --- a/src/templates/blocks/Certifications/CertificationsA.js +++ b/src/templates/blocks/Certifications/CertificationsA.js @@ -1,11 +1,9 @@ -import dayjs from 'dayjs'; import React, { memo, useContext } from 'react'; -import { useTranslation } from 'react-i18next'; import ReactMarkdown from 'react-markdown'; import PageContext from '../../../contexts/PageContext'; -import { safetyCheck } from '../../../utils'; +import { formatDate, safetyCheck } from '../../../utils'; -const CertificationItem = ({ item, i18n }) => ( +const CertificationItem = ({ item, language }) => (
@@ -14,9 +12,7 @@ const CertificationItem = ({ item, i18n }) => (
{item.date && (
- {dayjs(item.date) - .locale(i18n.language.substr(0, 2)) - .format('MMMM YYYY')} + {formatDate({ date: item.date, language })}
)}
@@ -27,7 +23,6 @@ const CertificationItem = ({ item, i18n }) => ( ); const CertificationsA = () => { - const { i18n } = useTranslation(); const { data, heading: Heading } = useContext(PageContext); return safetyCheck(data.certifications) ? ( @@ -35,7 +30,11 @@ const CertificationsA = () => { {data.certifications.heading}
{data.certifications.items.map((x) => ( - + ))}
diff --git a/src/templates/blocks/Education/EducationA.js b/src/templates/blocks/Education/EducationA.js index 284bacf8..2ac50d87 100644 --- a/src/templates/blocks/Education/EducationA.js +++ b/src/templates/blocks/Education/EducationA.js @@ -1,10 +1,9 @@ import React, { memo, useContext } from 'react'; -import { useTranslation } from 'react-i18next'; import ReactMarkdown from 'react-markdown'; import PageContext from '../../../contexts/PageContext'; import { formatDateRange, safetyCheck } from '../../../utils'; -const EducationItem = ({ item, i18n }) => ( +const EducationItem = ({ item, language }) => (
@@ -20,7 +19,7 @@ const EducationItem = ({ item, i18n }) => ( {formatDateRange({ startDate: item.startDate, endDate: item.endDate, - language: i18n.language, + language, })} ) @@ -35,7 +34,6 @@ const EducationItem = ({ item, i18n }) => ( ); const EducationA = () => { - const { i18n } = useTranslation(); const { data, heading: Heading } = useContext(PageContext); return safetyCheck(data.education) ? ( @@ -43,7 +41,11 @@ const EducationA = () => { {data.education.heading}
{data.education.items.map((x) => ( - + ))}
diff --git a/src/templates/blocks/Projects/ProjectsA.js b/src/templates/blocks/Projects/ProjectsA.js index 06b824f9..017166e1 100644 --- a/src/templates/blocks/Projects/ProjectsA.js +++ b/src/templates/blocks/Projects/ProjectsA.js @@ -1,11 +1,9 @@ -import dayjs from 'dayjs'; import React, { memo, useContext } from 'react'; -import { useTranslation } from 'react-i18next'; import ReactMarkdown from 'react-markdown'; import PageContext from '../../../contexts/PageContext'; -import { safetyCheck } from '../../../utils'; +import { formatDate, safetyCheck } from '../../../utils'; -const ProjectItem = ({ item, i18n }) => ( +const ProjectItem = ({ item, language }) => (
@@ -18,9 +16,7 @@ const ProjectItem = ({ item, i18n }) => (
{item.date && (
- {dayjs(item.date) - .locale(i18n.language.substr(0, 2)) - .format('MMMM YYYY')} + {formatDate({ date: item.date, language })}
)}
@@ -31,7 +27,6 @@ const ProjectItem = ({ item, i18n }) => ( ); const ProjectsA = () => { - const { i18n } = useTranslation(); const { data, heading: Heading } = useContext(PageContext); return safetyCheck(data.projects) ? ( @@ -39,7 +34,7 @@ const ProjectsA = () => { {data.projects.heading}
{data.projects.items.map((x) => ( - + ))}
diff --git a/src/templates/blocks/Work/WorkA.js b/src/templates/blocks/Work/WorkA.js index ab0da695..35be6948 100644 --- a/src/templates/blocks/Work/WorkA.js +++ b/src/templates/blocks/Work/WorkA.js @@ -1,10 +1,9 @@ import React, { memo, useContext } from 'react'; -import { useTranslation } from 'react-i18next'; import ReactMarkdown from 'react-markdown'; import PageContext from '../../../contexts/PageContext'; import { formatDateRange, safetyCheck } from '../../../utils'; -const WorkItem = ({ item, i18n }) => ( +const WorkItem = ({ item, language }) => (
@@ -17,7 +16,7 @@ const WorkItem = ({ item, i18n }) => ( {formatDateRange({ startDate: item.startDate, endDate: item.endDate, - language: i18n.language, + language, })} ) @@ -30,7 +29,6 @@ const WorkItem = ({ item, i18n }) => ( ); const WorkA = () => { - const { i18n } = useTranslation(); const { data, heading: Heading } = useContext(PageContext); return safetyCheck(data.work) ? ( @@ -38,7 +36,7 @@ const WorkA = () => { {data.work.heading}
{data.work.items.map((x) => ( - + ))}
diff --git a/src/utils/dayjs.js b/src/utils/dayjs.js index 00751724..60fca335 100644 --- a/src/utils/dayjs.js +++ b/src/utils/dayjs.js @@ -5,6 +5,7 @@ import 'dayjs/locale/en'; import 'dayjs/locale/es'; import 'dayjs/locale/fi'; import 'dayjs/locale/fr'; +import 'dayjs/locale/ja'; import 'dayjs/locale/kn'; import 'dayjs/locale/nl'; import 'dayjs/locale/pt'; diff --git a/src/utils/index.js b/src/utils/index.js index 1440bc03..286a0a2f 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -22,7 +22,11 @@ export const isFileImage = (file) => { return file && acceptedImageTypes.includes(file.type); }; -export const formatDateRange = ({ startDate, endDate, language }) => { +export const formatDate = ({ date, language = 'en' }) => { + return dayjs(date).locale(language.substr(0, 2)).format('MMMM YYYY'); +}; + +export const formatDateRange = ({ startDate, endDate, language = 'en' }) => { const start = `${dayjs(startDate) .locale(language.substr(0, 2)) .format('MMMM YYYY')}`;