diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 00000000..3c8141c5
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,4 @@
+.cache/
+node_modules/
+functions/
+public/
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 00000000..aa6150ca
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,12 @@
+FROM node as builder
+
+WORKDIR /app
+COPY ./ /app/
+
+RUN npm install
+RUN npm run build
+
+FROM nginx:alpine
+RUN rm -rf /usr/share/nginx/html
+COPY --from=builder /app/public/ /usr/share/nginx/html
+COPY server.conf /etc/nginx/conf.d/default.conf
\ No newline at end of file
diff --git a/gatsby-config.js b/gatsby-config.js
index ff8bc9ee..5e353e6a 100644
--- a/gatsby-config.js
+++ b/gatsby-config.js
@@ -6,7 +6,7 @@ module.exports = {
title: 'Reactive Resume',
siteUrl: 'https://rxresu.me',
description: 'A free and open source resume builder.',
- version: '2.4.2',
+ version: '2.4.3',
},
plugins: [
'gatsby-plugin-react-helmet',
diff --git a/server.conf b/server.conf
new file mode 100644
index 00000000..3b2c3863
--- /dev/null
+++ b/server.conf
@@ -0,0 +1,19 @@
+server {
+ listen 80;
+ root /usr/share/nginx/html;
+
+ index index.html;
+ autoindex off;
+ charset urtf-8;
+
+ error_page 404 /404.html;
+
+ location ~* \.(html)$ {
+ add_header Cache-Control "no-store";
+ expires off;
+ }
+
+ rewrite ^([^.\?]*[^/])$ $1/ permanent;
+
+ try_files $uri $uri/ $uri/index.html =404;
+}
\ No newline at end of file
diff --git a/src/templates/Castform.js b/src/templates/Castform.js
index b5039fe6..3c32798e 100644
--- a/src/templates/Castform.js
+++ b/src/templates/Castform.js
@@ -12,7 +12,6 @@ import ProjectsA from './blocks/Projects/ProjectsA';
import ReferencesA from './blocks/References/ReferencesA';
import SkillsA from './blocks/Skills/SkillsA';
import WorkA from './blocks/Work/WorkA';
-import BirthDateA from './blocks/BirthDate/BirthDateA';
const Blocks = {
objective: ObjectiveA,
@@ -77,10 +76,7 @@ const Castform = ({ data }) => {
{data.profile.heading}
-
-
-
-
+
{layout[0] &&
diff --git a/src/templates/Celebi.js b/src/templates/Celebi.js
index bd66aab0..85d4e862 100644
--- a/src/templates/Celebi.js
+++ b/src/templates/Celebi.js
@@ -14,7 +14,6 @@ import ProjectsA from './blocks/Projects/ProjectsA';
import ReferencesA from './blocks/References/ReferencesA';
import SkillsA from './blocks/Skills/SkillsA';
import WorkA from './blocks/Work/WorkA';
-import BirthDateA from './blocks/BirthDate/BirthDateA';
const Blocks = {
objective: ObjectiveA,
@@ -102,7 +101,6 @@ const Celebi = ({ data }) => {
{t('builder.sections.profile')}
-
diff --git a/src/templates/Gengar.js b/src/templates/Gengar.js
index 3186cecd..dd21b20d 100644
--- a/src/templates/Gengar.js
+++ b/src/templates/Gengar.js
@@ -1,6 +1,7 @@
import React from 'react';
+import { useTranslation } from 'react-i18next';
import PageContext from '../contexts/PageContext';
-import { hexToRgb } from '../utils';
+import { hasAddress, hexToRgb } from '../utils';
import AwardsA from './blocks/Awards/AwardsA';
import CertificationsA from './blocks/Certifications/CertificationsA';
import ContactB from './blocks/Contact/ContactB';
@@ -13,7 +14,6 @@ import ProjectsA from './blocks/Projects/ProjectsA';
import ReferencesB from './blocks/References/ReferencesB';
import SkillsA from './blocks/Skills/SkillsA';
import WorkA from './blocks/Work/WorkA';
-import BirthDateC from './blocks/BirthDate/BirthDateC';
const Blocks = {
objective: ObjectiveA,
@@ -29,6 +29,7 @@ const Blocks = {
};
const Gengar = ({ data }) => {
+ const { t } = useTranslation();
const layout = data.metadata.layout.gengar;
const { r, g, b } = hexToRgb(data.metadata.colors.primary) || {};
@@ -80,29 +81,28 @@ const Gengar = ({ data }) => {
-
-
- Address
-
- {data.profile.address.line1}
- {data.profile.address.line2}
-
- {data.profile.address.city} {data.profile.address.pincode}
-
-
+ {hasAddress(data.profile.address) && (
+
+
+ {t('shared.forms.address')}
+
+ {data.profile.address.line1}
+ {data.profile.address.line2}
+
+ {data.profile.address.city} {data.profile.address.pincode}
+
+
+ )}
-
-
- Contacts
-
-
-
-
+
+ Contact
+
+
{
>
-
-
-
-
-
+
{layout[0] &&
layout[0].map((x) => {
diff --git a/src/templates/Onyx.js b/src/templates/Onyx.js
index c9f0840e..148958a2 100644
--- a/src/templates/Onyx.js
+++ b/src/templates/Onyx.js
@@ -1,4 +1,5 @@
import React, { memo } from 'react';
+import { useTranslation } from 'react-i18next';
import PageContext from '../contexts/PageContext';
import AwardsA from './blocks/Awards/AwardsA';
import CertificationsA from './blocks/Certifications/CertificationsA';
@@ -12,7 +13,7 @@ import ProjectsA from './blocks/Projects/ProjectsA';
import ReferencesA from './blocks/References/ReferencesA';
import SkillsA from './blocks/Skills/SkillsA';
import WorkA from './blocks/Work/WorkA';
-import BirthDateB from './blocks/BirthDate/BirthDateB';
+import { hasAddress } from '../utils';
const Blocks = {
objective: ObjectiveA,
@@ -28,6 +29,7 @@ const Blocks = {
};
const Onyx = ({ data }) => {
+ const { t } = useTranslation();
const layout = data.metadata.layout.onyx;
return (
@@ -61,20 +63,22 @@ const Onyx = ({ data }) => {
{data.profile.subtitle}
-
- {data.profile.address.line1}
- {data.profile.address.line2}
-
- {data.profile.address.city} {data.profile.address.pincode}
-
-
+ {hasAddress(data.profile.address) && (
+
+
+ {t('shared.forms.address')}
+
+ {data.profile.address.line1}
+ {data.profile.address.line2}
+
+ {data.profile.address.city} {data.profile.address.pincode}
+
+
+ )}
-
-
-
-
+
{
-
{layout[0] &&
diff --git a/src/templates/blocks/Contact/ContactA.js b/src/templates/blocks/Contact/ContactA.js
index 8cbcafd5..224c80ba 100644
--- a/src/templates/blocks/Contact/ContactA.js
+++ b/src/templates/blocks/Contact/ContactA.js
@@ -4,6 +4,7 @@ import { useTranslation } from 'react-i18next';
import { FaCaretRight } from 'react-icons/fa';
import PageContext from '../../../contexts/PageContext';
import { safetyCheck } from '../../../utils';
+import BirthDateB from '../BirthDate/BirthDateB';
import Icons from '../Icons';
const ContactItem = ({ value, icon, link }) => {
@@ -53,6 +54,8 @@ const ContactA = () => {
link={`mailto:${data.profile.email}`}
/>
+
+
{safetyCheck(data.social) &&
data.social.items.map((x) => (
{
@@ -53,6 +54,8 @@ const ContactB = () => {
link={`mailto:${data.profile.email}`}
/>
+
+
{safetyCheck(data.social) &&
data.social.items.map((x) => (
value ? (
@@ -23,7 +24,7 @@ const ContactC = () => {
return (
- {data.profile.address.line1 && (
+ {hasAddress(data.profile.address) && (
{t('shared.forms.address')}
@@ -54,6 +55,8 @@ const ContactC = () => {
link={`mailto:${data.profile.email}`}
/>
+
+
{safetyCheck(data.social) &&
data.social.items.map((x) => (
value ? (
@@ -41,7 +42,7 @@ const ContactD = () => {
- {data.profile.address.line1 && (
+ {hasAddress(data.profile.address) && (
{t('shared.forms.address')}
@@ -72,6 +73,8 @@ const ContactD = () => {
link={`mailto:${data.profile.email}`}
/>
+
+
{safetyCheck(data.social) &&
data.social.items.map((x) => (
{
return response.url;
};
+export const hasAddress = (address) =>
+ !!address.line1 || !!address.line2 || !!address.city || !!address.pincode;
+
export const hexToRgb = (hex) => {
const shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
hex = hex.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b);