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')}`;