mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-14 00:32:35 +10:00
- fix label in contact
- fix importing from json - fix reset everything - update dependencies
This commit is contained in:
@ -5,7 +5,7 @@ module.exports = {
|
|||||||
title: 'Reactive Resume',
|
title: 'Reactive Resume',
|
||||||
siteUrl: 'https://rxresu.me',
|
siteUrl: 'https://rxresu.me',
|
||||||
description: 'A free and open source resume builder.',
|
description: 'A free and open source resume builder.',
|
||||||
version: '2.1.1',
|
version: '2.1.2',
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
'gatsby-plugin-react-helmet',
|
'gatsby-plugin-react-helmet',
|
||||||
|
|||||||
1120
package-lock.json
generated
1120
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
19
package.json
19
package.json
@ -18,31 +18,30 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@material-ui/core": "^4.11.0",
|
"@material-ui/core": "^4.11.0",
|
||||||
"@reach/router": "^1.3.4",
|
"@reach/router": "^1.3.4",
|
||||||
"ajv": "^6.12.3",
|
|
||||||
"animate.css": "^4.1.0",
|
"animate.css": "^4.1.0",
|
||||||
"array-move": "^3.0.0",
|
"array-move": "^3.0.0",
|
||||||
"classnames": "^2.2.6",
|
"classnames": "^2.2.6",
|
||||||
"dayjs": "^1.8.30",
|
"dayjs": "^1.8.31",
|
||||||
"dotenv": "^8.2.0",
|
"dotenv": "^8.2.0",
|
||||||
"downloadjs": "^1.4.7",
|
"downloadjs": "^1.4.7",
|
||||||
"firebase": "^7.17.1",
|
"firebase": "^7.17.1",
|
||||||
"formik": "^2.1.5",
|
"formik": "^2.1.5",
|
||||||
"gatsby": "^2.24.11",
|
"gatsby": "^2.24.15",
|
||||||
"gatsby-image": "^2.4.13",
|
"gatsby-image": "^2.4.14",
|
||||||
"gatsby-plugin-create-client-paths": "^2.3.10",
|
"gatsby-plugin-create-client-paths": "^2.3.10",
|
||||||
"gatsby-plugin-firebase": "^0.2.0-beta.4",
|
"gatsby-plugin-firebase": "^0.2.0-beta.4",
|
||||||
"gatsby-plugin-manifest": "^2.4.21",
|
"gatsby-plugin-manifest": "^2.4.21",
|
||||||
"gatsby-plugin-material-ui": "^2.1.9",
|
"gatsby-plugin-material-ui": "^2.1.10",
|
||||||
"gatsby-plugin-postcss": "^2.3.11",
|
"gatsby-plugin-postcss": "^2.3.11",
|
||||||
"gatsby-plugin-prefetch-google-fonts": "^1.4.3",
|
"gatsby-plugin-prefetch-google-fonts": "^1.4.3",
|
||||||
"gatsby-plugin-react-helmet": "^3.3.10",
|
"gatsby-plugin-react-helmet": "^3.3.10",
|
||||||
"gatsby-plugin-remove-serviceworker": "^1.0.0",
|
"gatsby-plugin-remove-serviceworker": "^1.0.0",
|
||||||
"gatsby-plugin-sharp": "^2.6.22",
|
"gatsby-plugin-sharp": "^2.6.24",
|
||||||
"gatsby-plugin-sitemap": "^2.4.11",
|
"gatsby-plugin-sitemap": "^2.4.11",
|
||||||
"gatsby-source-filesystem": "^2.3.23",
|
"gatsby-source-filesystem": "^2.3.23",
|
||||||
"gatsby-source-gravatar": "^1.0.0",
|
"gatsby-source-gravatar": "^1.0.0",
|
||||||
"gatsby-transformer-remark": "^2.8.27",
|
"gatsby-transformer-remark": "^2.8.27",
|
||||||
"gatsby-transformer-sharp": "^2.5.11",
|
"gatsby-transformer-sharp": "^2.5.12",
|
||||||
"i18next": "^19.6.3",
|
"i18next": "^19.6.3",
|
||||||
"lodash": "^4.17.19",
|
"lodash": "^4.17.19",
|
||||||
"nanoevents": "^5.1.8",
|
"nanoevents": "^5.1.8",
|
||||||
@ -60,17 +59,17 @@
|
|||||||
"yup": "^0.29.2"
|
"yup": "^0.29.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"autoprefixer": "^9.8.5",
|
"autoprefixer": "^9.8.6",
|
||||||
"eslint": "^7.5.0",
|
"eslint": "^7.5.0",
|
||||||
"eslint-config-airbnb": "^18.2.0",
|
"eslint-config-airbnb": "^18.2.0",
|
||||||
"eslint-config-prettier": "^6.11.0",
|
"eslint-config-prettier": "^6.11.0",
|
||||||
"eslint-loader": "^4.0.2",
|
"eslint-loader": "^4.0.2",
|
||||||
"eslint-plugin-jsx-a11y": "^6.3.1",
|
"eslint-plugin-jsx-a11y": "^6.3.1",
|
||||||
"eslint-plugin-prettier": "^3.1.4",
|
"eslint-plugin-prettier": "^3.1.4",
|
||||||
"eslint-plugin-react": "^7.20.4",
|
"eslint-plugin-react": "^7.20.5",
|
||||||
"gatsby-plugin-eslint": "^2.0.8",
|
"gatsby-plugin-eslint": "^2.0.8",
|
||||||
"prettier": "2.0.5",
|
"prettier": "2.0.5",
|
||||||
"tailwindcss": "^1.5.2"
|
"tailwindcss": "^1.6.0"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|||||||
@ -82,9 +82,18 @@
|
|||||||
"hobbies": {
|
"hobbies": {
|
||||||
"heading": "Hobbies",
|
"heading": "Hobbies",
|
||||||
"items": [
|
"items": [
|
||||||
{ "id": "788dcf5a-78ca-4866-8397-c7a29073d9a1", "name": "Poetry" },
|
{
|
||||||
{ "id": "e3523371-f50c-4348-8c5e-35fe84c0006d", "name": "Travelling" },
|
"id": "788dcf5a-78ca-4866-8397-c7a29073d9a1",
|
||||||
{ "id": "92c35e3b-6cd7-4cea-b505-61347ec61b68", "name": "Photography" },
|
"name": "Poetry"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "e3523371-f50c-4348-8c5e-35fe84c0006d",
|
||||||
|
"name": "Travelling"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "92c35e3b-6cd7-4cea-b505-61347ec61b68",
|
||||||
|
"name": "Photography"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "d36f2089-93a9-4f30-a425-3dd81c6b89df",
|
"id": "d36f2089-93a9-4f30-a425-3dd81c6b89df",
|
||||||
"name": "Playing Badminton"
|
"name": "Playing Badminton"
|
||||||
@ -129,22 +138,64 @@
|
|||||||
"text": "#212121"
|
"text": "#212121"
|
||||||
},
|
},
|
||||||
"font": "Open Sans",
|
"font": "Open Sans",
|
||||||
|
"language": "en",
|
||||||
"layout": {
|
"layout": {
|
||||||
"castform": [
|
"castform": [
|
||||||
["awards", "certifications", "languages", "hobbies"],
|
[
|
||||||
["objective", "work", "education", "skills", "projects", "references"]
|
"awards",
|
||||||
|
"certifications",
|
||||||
|
"languages",
|
||||||
|
"hobbies"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"objective",
|
||||||
|
"work",
|
||||||
|
"education",
|
||||||
|
"skills",
|
||||||
|
"projects",
|
||||||
|
"references"
|
||||||
|
]
|
||||||
],
|
],
|
||||||
"celebi": [
|
"celebi": [
|
||||||
["awards", "certifications", "languages", "hobbies"],
|
[
|
||||||
["objective", "work", "education", "skills", "projects", "references"]
|
"awards",
|
||||||
|
"certifications",
|
||||||
|
"languages",
|
||||||
|
"hobbies"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"objective",
|
||||||
|
"work",
|
||||||
|
"education",
|
||||||
|
"skills",
|
||||||
|
"projects",
|
||||||
|
"references"
|
||||||
|
]
|
||||||
],
|
],
|
||||||
"gengar": [
|
"gengar": [
|
||||||
["objective", "skills"],
|
[
|
||||||
["awards", "certifications", "languages", "references", "hobbies"],
|
"objective",
|
||||||
["work", "education", "projects"]
|
"skills"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"awards",
|
||||||
|
"certifications",
|
||||||
|
"languages",
|
||||||
|
"references",
|
||||||
|
"hobbies"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"work",
|
||||||
|
"education",
|
||||||
|
"projects"
|
||||||
|
]
|
||||||
],
|
],
|
||||||
"glalie": [
|
"glalie": [
|
||||||
["awards", "certifications", "hobbies"],
|
[
|
||||||
|
"awards",
|
||||||
|
"certifications",
|
||||||
|
"hobbies"
|
||||||
|
],
|
||||||
[
|
[
|
||||||
"objective",
|
"objective",
|
||||||
"work",
|
"work",
|
||||||
@ -156,13 +207,37 @@
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
"onyx": [
|
"onyx": [
|
||||||
["objective", "work", "education", "projects"],
|
[
|
||||||
["hobbies", "languages", "awards", "certifications"],
|
"objective",
|
||||||
["skills", "references"]
|
"work",
|
||||||
|
"education",
|
||||||
|
"projects"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"hobbies",
|
||||||
|
"languages",
|
||||||
|
"awards",
|
||||||
|
"certifications"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"skills",
|
||||||
|
"references"
|
||||||
|
]
|
||||||
],
|
],
|
||||||
"pikachu": [
|
"pikachu": [
|
||||||
["skills", "languages", "hobbies", "awards", "certifications"],
|
[
|
||||||
["work", "education", "projects", "references"]
|
"skills",
|
||||||
|
"languages",
|
||||||
|
"hobbies",
|
||||||
|
"awards",
|
||||||
|
"certifications"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"work",
|
||||||
|
"education",
|
||||||
|
"projects",
|
||||||
|
"references"
|
||||||
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"template": "castform"
|
"template": "castform"
|
||||||
@ -172,6 +247,7 @@
|
|||||||
"heading": "Objective",
|
"heading": "Objective",
|
||||||
"visible": true
|
"visible": true
|
||||||
},
|
},
|
||||||
|
"preview": "https://images.unsplash.com/photo-1594483672645-895b77326094?crop=entropy&cs=tinysrgb&fit=crop&fm=jpg&h=600&ixid=eyJhcHBfaWQiOjF9&ixlib=rb-1.2.1&q=80&w=400",
|
||||||
"profile": {
|
"profile": {
|
||||||
"address": {
|
"address": {
|
||||||
"city": "Bangalore, India -",
|
"city": "Bangalore, India -",
|
||||||
|
|||||||
@ -70,6 +70,7 @@
|
|||||||
"items": []
|
"items": []
|
||||||
},
|
},
|
||||||
"metadata": {
|
"metadata": {
|
||||||
|
"language": "en",
|
||||||
"template": "onyx",
|
"template": "onyx",
|
||||||
"font": "Montserrat",
|
"font": "Montserrat",
|
||||||
"layout": {
|
"layout": {
|
||||||
|
|||||||
@ -1,466 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-04/schema#",
|
|
||||||
"$id": "http://json-schema.org/draft-04/schema#",
|
|
||||||
"definitions": {
|
|
||||||
"iso8601": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. 2014-06-29",
|
|
||||||
"pattern": "^([1-2][0-9]{3}-[0-1][0-9]-[0-3][0-9]|[1-2][0-9]{3}-[0-1][0-9]|[1-2][0-9]{3})$"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"properties": {
|
|
||||||
"basics": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": true,
|
|
||||||
"properties": {
|
|
||||||
"name": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"label": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Web Developer"
|
|
||||||
},
|
|
||||||
"image": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "URL (as per RFC 3986) to a image in JPEG or PNG format"
|
|
||||||
},
|
|
||||||
"email": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. thomas@gmail.com",
|
|
||||||
"format": "email"
|
|
||||||
},
|
|
||||||
"phone": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Phone numbers are stored as strings so use any format you like, e.g. 712-117-2923"
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "URL (as per RFC 3986) to your website, e.g. personal homepage",
|
|
||||||
"format": "uri"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Write a short 2-3 sentence biography about yourself"
|
|
||||||
},
|
|
||||||
"location": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": true,
|
|
||||||
"properties": {
|
|
||||||
"address": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "To add multiple address lines, use \n. For example, 1234 Glücklichkeit Straße\nHinterhaus 5. Etage li."
|
|
||||||
},
|
|
||||||
"postalCode": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"city": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"countryCode": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "code as per ISO-3166-1 ALPHA-2, e.g. US, AU, IN"
|
|
||||||
},
|
|
||||||
"region": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "The general region where you live. Can be a US state, or a province, for instance."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"profiles": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "Specify any number of social networks that you participate in",
|
|
||||||
"additionalItems": false,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": true,
|
|
||||||
"properties": {
|
|
||||||
"network": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Facebook or Twitter"
|
|
||||||
},
|
|
||||||
"username": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. neutralthoughts"
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. http://twitter.example.com/neutralthoughts",
|
|
||||||
"format": "uri"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"work": {
|
|
||||||
"type": "array",
|
|
||||||
"additionalItems": false,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": true,
|
|
||||||
"properties": {
|
|
||||||
"name": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Facebook"
|
|
||||||
},
|
|
||||||
"location": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Menlo Park, CA"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Social Media Company"
|
|
||||||
},
|
|
||||||
"position": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Software Engineer"
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. http://facebook.example.com",
|
|
||||||
"format": "uri"
|
|
||||||
},
|
|
||||||
"startDate": {
|
|
||||||
"$ref": "#/definitions/iso8601"
|
|
||||||
},
|
|
||||||
"endDate": {
|
|
||||||
"$ref": "#/definitions/iso8601"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Give an overview of your responsibilities at the company"
|
|
||||||
},
|
|
||||||
"highlights": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "Specify multiple accomplishments",
|
|
||||||
"additionalItems": false,
|
|
||||||
"items": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Increased profits by 20% from 2011-2012 through viral advertising"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"volunteer": {
|
|
||||||
"type": "array",
|
|
||||||
"additionalItems": false,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": true,
|
|
||||||
"properties": {
|
|
||||||
"organization": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Facebook"
|
|
||||||
},
|
|
||||||
"position": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Software Engineer"
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. http://facebook.example.com",
|
|
||||||
"format": "uri"
|
|
||||||
},
|
|
||||||
"startDate": {
|
|
||||||
"$ref": "#/definitions/iso8601"
|
|
||||||
},
|
|
||||||
"endDate": {
|
|
||||||
"$ref": "#/definitions/iso8601"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Give an overview of your responsibilities at the company"
|
|
||||||
},
|
|
||||||
"highlights": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "Specify accomplishments and achievements",
|
|
||||||
"additionalItems": false,
|
|
||||||
"items": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Increased profits by 20% from 2011-2012 through viral advertising"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"education": {
|
|
||||||
"type": "array",
|
|
||||||
"additionalItems": false,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": true,
|
|
||||||
"properties": {
|
|
||||||
"institution": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Massachusetts Institute of Technology"
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. http://facebook.example.com",
|
|
||||||
"format": "uri"
|
|
||||||
},
|
|
||||||
"area": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Arts"
|
|
||||||
},
|
|
||||||
"studyType": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Bachelor"
|
|
||||||
},
|
|
||||||
"startDate": {
|
|
||||||
"$ref": "#/definitions/iso8601"
|
|
||||||
},
|
|
||||||
"endDate": {
|
|
||||||
"$ref": "#/definitions/iso8601"
|
|
||||||
},
|
|
||||||
"gpa": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "grade point average, e.g. 3.67/4.0"
|
|
||||||
},
|
|
||||||
"courses": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "List notable courses/subjects",
|
|
||||||
"additionalItems": false,
|
|
||||||
"items": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. H1302 - Introduction to American history"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"awards": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "Specify any awards you have received throughout your professional career",
|
|
||||||
"additionalItems": false,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": true,
|
|
||||||
"properties": {
|
|
||||||
"title": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. One of the 100 greatest minds of the century"
|
|
||||||
},
|
|
||||||
"date": {
|
|
||||||
"$ref": "#/definitions/iso8601"
|
|
||||||
},
|
|
||||||
"awarder": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Time Magazine"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Received for my work with Quantum Physics"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"publications": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "Specify your publications through your career",
|
|
||||||
"additionalItems": false,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": true,
|
|
||||||
"properties": {
|
|
||||||
"name": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. The World Wide Web"
|
|
||||||
},
|
|
||||||
"publisher": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. IEEE, Computer Magazine"
|
|
||||||
},
|
|
||||||
"releaseDate": {
|
|
||||||
"$ref": "#/definitions/iso8601"
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. http://www.computer.org.example.com/csdl/mags/co/1996/10/rx069-abs.html",
|
|
||||||
"format": "uri"
|
|
||||||
},
|
|
||||||
"summary": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Short summary of publication. e.g. Discussion of the World Wide Web, HTTP, HTML."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"skills": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "List out your professional skill-set",
|
|
||||||
"additionalItems": false,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": true,
|
|
||||||
"properties": {
|
|
||||||
"name": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Web Development"
|
|
||||||
},
|
|
||||||
"level": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Master"
|
|
||||||
},
|
|
||||||
"keywords": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "List some keywords pertaining to this skill",
|
|
||||||
"additionalItems": false,
|
|
||||||
"items": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. HTML"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"languages": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "List any other languages you speak",
|
|
||||||
"additionalItems": false,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": true,
|
|
||||||
"properties": {
|
|
||||||
"language": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. English, Spanish"
|
|
||||||
},
|
|
||||||
"fluency": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Fluent, Beginner"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"interests": {
|
|
||||||
"type": "array",
|
|
||||||
"additionalItems": false,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": true,
|
|
||||||
"properties": {
|
|
||||||
"name": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Philosophy"
|
|
||||||
},
|
|
||||||
"keywords": {
|
|
||||||
"type": "array",
|
|
||||||
"additionalItems": false,
|
|
||||||
"items": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Friedrich Nietzsche"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"references": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "List references you have received",
|
|
||||||
"additionalItems": false,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": true,
|
|
||||||
"properties": {
|
|
||||||
"name": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Timothy Cook"
|
|
||||||
},
|
|
||||||
"reference": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Joe blogs was a great employee, who turned up to work at least once a week. He exceeded my expectations when it came to doing nothing."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"projects": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "Specify career projects",
|
|
||||||
"additionalItems": false,
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": true,
|
|
||||||
"properties": {
|
|
||||||
"name": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. The World Wide Web"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Short summary of project. e.g. Collated works of 2017."
|
|
||||||
},
|
|
||||||
"highlights": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "Specify multiple features",
|
|
||||||
"additionalItems": false,
|
|
||||||
"items": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Directs you close but not quite there"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"keywords": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "Specify special elements involved",
|
|
||||||
"additionalItems": false,
|
|
||||||
"items": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. AngularJS"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"startDate": {
|
|
||||||
"$ref": "#/definitions/iso8601"
|
|
||||||
},
|
|
||||||
"endDate": {
|
|
||||||
"$ref": "#/definitions/iso8601"
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri",
|
|
||||||
"description": "e.g. http://www.computer.org/csdl/mags/co/1996/10/rx069-abs.html"
|
|
||||||
},
|
|
||||||
"roles": {
|
|
||||||
"type": "array",
|
|
||||||
"description": "Specify your role on this project or in company",
|
|
||||||
"additionalItems": false,
|
|
||||||
"items": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "e.g. Team Lead, Speaker, Writer"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"entity": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Specify the relevant company/entity affiliations e.g. 'greenpeace', 'corporationXYZ'"
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
"type": "string",
|
|
||||||
"description": " e.g. 'volunteering', 'presentation', 'talk', 'application', 'conference'"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"meta": {
|
|
||||||
"type": "object",
|
|
||||||
"description": "The schema version and any other tooling configuration lives here",
|
|
||||||
"additionalProperties": true,
|
|
||||||
"properties": {
|
|
||||||
"canonical": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "URL (as per RFC 3986) to latest version of this document",
|
|
||||||
"format": "uri"
|
|
||||||
},
|
|
||||||
"version": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "A version field which follows semver - e.g. v1.0.0"
|
|
||||||
},
|
|
||||||
"lastModified": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "Using ISO 8601 with YYYY-MM-DDThh:mm:ss"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"title": "Resume Schema",
|
|
||||||
"type": "object"
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -1,19 +1,15 @@
|
|||||||
import { Tooltip } from '@material-ui/core';
|
import { Tooltip } from '@material-ui/core';
|
||||||
import Ajv from 'ajv';
|
|
||||||
import React, { memo, useContext, useEffect, useRef, useState } from 'react';
|
import React, { memo, useContext, useEffect, useRef, useState } from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { toast } from 'react-toastify';
|
|
||||||
import Button from '../../components/shared/Button';
|
import Button from '../../components/shared/Button';
|
||||||
import ModalContext from '../../contexts/ModalContext';
|
import ModalContext from '../../contexts/ModalContext';
|
||||||
import { useDispatch } from '../../contexts/ResumeContext';
|
import { useDispatch } from '../../contexts/ResumeContext';
|
||||||
import reactiveResumeSchema from '../../data/schema/reactiveResume.json';
|
|
||||||
import jsonResumeSchema from '../../data/schema/jsonResume.json';
|
|
||||||
import BaseModal from '../BaseModal';
|
import BaseModal from '../BaseModal';
|
||||||
|
|
||||||
const ImportModal = () => {
|
const ImportModal = () => {
|
||||||
const ajv = new Ajv();
|
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const fileInputRef = useRef(null);
|
const reactiveResumeFileInputRef = useRef(null);
|
||||||
|
const jsonResumeFileInputRef = useRef(null);
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
@ -29,11 +25,6 @@ const ImportModal = () => {
|
|||||||
const fr = new FileReader();
|
const fr = new FileReader();
|
||||||
fr.addEventListener('load', () => {
|
fr.addEventListener('load', () => {
|
||||||
const payload = JSON.parse(fr.result);
|
const payload = JSON.parse(fr.result);
|
||||||
const valid = ajv.validate(reactiveResumeSchema, payload);
|
|
||||||
if (!valid) {
|
|
||||||
ajv.errors.forEach((x) => toast.error(`Invalid Data: ${x.message}`));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch({ type: 'on_import', payload });
|
dispatch({ type: 'on_import', payload });
|
||||||
setOpen(false);
|
setOpen(false);
|
||||||
});
|
});
|
||||||
@ -44,11 +35,6 @@ const ImportModal = () => {
|
|||||||
const fr = new FileReader();
|
const fr = new FileReader();
|
||||||
fr.addEventListener('load', () => {
|
fr.addEventListener('load', () => {
|
||||||
const payload = JSON.parse(fr.result);
|
const payload = JSON.parse(fr.result);
|
||||||
const valid = ajv.validate(jsonResumeSchema, payload);
|
|
||||||
if (!valid) {
|
|
||||||
ajv.errors.forEach((x) => toast.error(`Invalid Data: ${x.message}`));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dispatch({ type: 'on_import_jsonresume', payload });
|
dispatch({ type: 'on_import_jsonresume', payload });
|
||||||
setOpen(false);
|
setOpen(false);
|
||||||
});
|
});
|
||||||
@ -70,11 +56,14 @@ const ImportModal = () => {
|
|||||||
{t('modals.import.reactiveResume.text')}
|
{t('modals.import.reactiveResume.text')}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<Button className="mt-5" onClick={() => fileInputRef.current.click()}>
|
<Button
|
||||||
|
className="mt-5"
|
||||||
|
onClick={() => reactiveResumeFileInputRef.current.click()}
|
||||||
|
>
|
||||||
{t('modals.import.button')}
|
{t('modals.import.button')}
|
||||||
</Button>
|
</Button>
|
||||||
<input
|
<input
|
||||||
ref={fileInputRef}
|
ref={reactiveResumeFileInputRef}
|
||||||
type="file"
|
type="file"
|
||||||
className="hidden"
|
className="hidden"
|
||||||
onChange={importReactiveResumeJson}
|
onChange={importReactiveResumeJson}
|
||||||
@ -90,11 +79,14 @@ const ImportModal = () => {
|
|||||||
|
|
||||||
<p className="leading-loose">{t('modals.import.jsonResume.text')}</p>
|
<p className="leading-loose">{t('modals.import.jsonResume.text')}</p>
|
||||||
|
|
||||||
<Button className="mt-5" onClick={() => fileInputRef.current.click()}>
|
<Button
|
||||||
|
className="mt-5"
|
||||||
|
onClick={() => jsonResumeFileInputRef.current.click()}
|
||||||
|
>
|
||||||
{t('modals.import.button')}
|
{t('modals.import.button')}
|
||||||
</Button>
|
</Button>
|
||||||
<input
|
<input
|
||||||
ref={fileInputRef}
|
ref={jsonResumeFileInputRef}
|
||||||
type="file"
|
type="file"
|
||||||
className="hidden"
|
className="hidden"
|
||||||
onChange={importJsonResume}
|
onChange={importJsonResume}
|
||||||
|
|||||||
@ -14,7 +14,7 @@ import styles from './view.module.css';
|
|||||||
import Celebi from '../../templates/Celebi';
|
import Celebi from '../../templates/Celebi';
|
||||||
|
|
||||||
const ResumeViewer = ({ id }) => {
|
const ResumeViewer = ({ id }) => {
|
||||||
const { t } = useTranslation();
|
const { t, i18n } = useTranslation();
|
||||||
const [resume, setResume] = useState(null);
|
const [resume, setResume] = useState(null);
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const { getResume } = useContext(DatabaseContext);
|
const { getResume } = useContext(DatabaseContext);
|
||||||
@ -32,6 +32,7 @@ const ResumeViewer = ({ id }) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setResume(data);
|
setResume(data);
|
||||||
|
i18n.changeLanguage(data.metadata.language || 'en');
|
||||||
return setLoading(false);
|
return setLoading(false);
|
||||||
})();
|
})();
|
||||||
}, [id]);
|
}, [id]);
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import { get } from 'lodash';
|
import { get } from 'lodash';
|
||||||
import React, { memo, useContext } from 'react';
|
import React, { memo, useContext } from 'react';
|
||||||
|
import { useTranslation } from 'react-i18next';
|
||||||
import { FaCaretRight } from 'react-icons/fa';
|
import { FaCaretRight } from 'react-icons/fa';
|
||||||
import PageContext from '../../../contexts/PageContext';
|
import PageContext from '../../../contexts/PageContext';
|
||||||
import { safetyCheck } from '../../../utils';
|
import { safetyCheck } from '../../../utils';
|
||||||
@ -7,7 +8,7 @@ import Icons from '../Icons';
|
|||||||
|
|
||||||
const ContactItem = ({ value, icon, link }) => {
|
const ContactItem = ({ value, icon, link }) => {
|
||||||
const { data } = useContext(PageContext);
|
const { data } = useContext(PageContext);
|
||||||
const Icon = get(Icons, icon.toLowerCase(), FaCaretRight);
|
const Icon = get(Icons, icon && icon.toLowerCase(), FaCaretRight);
|
||||||
|
|
||||||
return value ? (
|
return value ? (
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
@ -28,22 +29,23 @@ const ContactItem = ({ value, icon, link }) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const ContactA = () => {
|
const ContactA = () => {
|
||||||
|
const { t } = useTranslation();
|
||||||
const { data } = useContext(PageContext);
|
const { data } = useContext(PageContext);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="text-xs grid gap-2">
|
<div className="text-xs grid gap-2">
|
||||||
<ContactItem
|
<ContactItem
|
||||||
icon="phone"
|
label={t('shared.forms.phone')}
|
||||||
value={data.profile.phone}
|
value={data.profile.phone}
|
||||||
link={`tel:${data.profile.phone}`}
|
link={`tel:${data.profile.phone}`}
|
||||||
/>
|
/>
|
||||||
<ContactItem
|
<ContactItem
|
||||||
icon="website"
|
label={t('shared.forms.website')}
|
||||||
value={data.profile.website}
|
value={data.profile.website}
|
||||||
link={data.profile.website}
|
link={data.profile.website}
|
||||||
/>
|
/>
|
||||||
<ContactItem
|
<ContactItem
|
||||||
icon="email"
|
label={t('shared.forms.email')}
|
||||||
value={data.profile.email}
|
value={data.profile.email}
|
||||||
link={`mailto:${data.profile.email}`}
|
link={`mailto:${data.profile.email}`}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import { get } from 'lodash';
|
import { get } from 'lodash';
|
||||||
import React, { memo, useContext } from 'react';
|
import React, { memo, useContext } from 'react';
|
||||||
|
import { useTranslation } from 'react-i18next';
|
||||||
import { FaCaretRight } from 'react-icons/fa';
|
import { FaCaretRight } from 'react-icons/fa';
|
||||||
import PageContext from '../../../contexts/PageContext';
|
import PageContext from '../../../contexts/PageContext';
|
||||||
import { safetyCheck } from '../../../utils';
|
import { safetyCheck } from '../../../utils';
|
||||||
@ -28,22 +29,23 @@ const ContactItem = ({ value, icon, link }) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const ContactA = () => {
|
const ContactA = () => {
|
||||||
|
const { t } = useTranslation();
|
||||||
const { data } = useContext(PageContext);
|
const { data } = useContext(PageContext);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="text-xs grid gap-2">
|
<div className="text-xs grid gap-2">
|
||||||
<ContactItem
|
<ContactItem
|
||||||
icon="phone"
|
label={t('shared.forms.phone')}
|
||||||
value={data.profile.phone}
|
value={data.profile.phone}
|
||||||
link={`tel:${data.profile.phone}`}
|
link={`tel:${data.profile.phone}`}
|
||||||
/>
|
/>
|
||||||
<ContactItem
|
<ContactItem
|
||||||
icon="website"
|
label={t('shared.forms.website')}
|
||||||
value={data.profile.website}
|
value={data.profile.website}
|
||||||
link={data.profile.website}
|
link={data.profile.website}
|
||||||
/>
|
/>
|
||||||
<ContactItem
|
<ContactItem
|
||||||
icon="email"
|
label={t('shared.forms.email')}
|
||||||
value={data.profile.email}
|
value={data.profile.email}
|
||||||
link={`mailto:${data.profile.email}`}
|
link={`mailto:${data.profile.email}`}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -40,17 +40,17 @@ const ContactC = () => {
|
|||||||
)}
|
)}
|
||||||
|
|
||||||
<ContactItem
|
<ContactItem
|
||||||
label="phone"
|
label={t('shared.forms.phone')}
|
||||||
value={data.profile.phone}
|
value={data.profile.phone}
|
||||||
link={`tel:${data.profile.phone}`}
|
link={`tel:${data.profile.phone}`}
|
||||||
/>
|
/>
|
||||||
<ContactItem
|
<ContactItem
|
||||||
label="website"
|
label={t('shared.forms.website')}
|
||||||
value={data.profile.website}
|
value={data.profile.website}
|
||||||
link={data.profile.website}
|
link={data.profile.website}
|
||||||
/>
|
/>
|
||||||
<ContactItem
|
<ContactItem
|
||||||
label="email"
|
label={t('shared.forms.email')}
|
||||||
value={data.profile.email}
|
value={data.profile.email}
|
||||||
link={`mailto:${data.profile.email}`}
|
link={`mailto:${data.profile.email}`}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -58,17 +58,17 @@ const ContactD = () => {
|
|||||||
)}
|
)}
|
||||||
|
|
||||||
<ContactItem
|
<ContactItem
|
||||||
label="phone"
|
label={t('shared.forms.phone')}
|
||||||
value={data.profile.phone}
|
value={data.profile.phone}
|
||||||
link={`tel:${data.profile.phone}`}
|
link={`tel:${data.profile.phone}`}
|
||||||
/>
|
/>
|
||||||
<ContactItem
|
<ContactItem
|
||||||
label="website"
|
label={t('shared.forms.website')}
|
||||||
value={data.profile.website}
|
value={data.profile.website}
|
||||||
link={data.profile.website}
|
link={data.profile.website}
|
||||||
/>
|
/>
|
||||||
<ContactItem
|
<ContactItem
|
||||||
label="email"
|
label={t('shared.forms.email')}
|
||||||
value={data.profile.email}
|
value={data.profile.email}
|
||||||
link={`mailto:${data.profile.email}`}
|
link={`mailto:${data.profile.email}`}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -40,17 +40,17 @@ const ContactE = () => {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ContactItem
|
<ContactItem
|
||||||
label="phone"
|
label={t('shared.forms.phone')}
|
||||||
value={data.profile.phone}
|
value={data.profile.phone}
|
||||||
link={`tel:${data.profile.phone}`}
|
link={`tel:${data.profile.phone}`}
|
||||||
/>
|
/>
|
||||||
<ContactItem
|
<ContactItem
|
||||||
label="website"
|
label={t('shared.forms.website')}
|
||||||
value={data.profile.website}
|
value={data.profile.website}
|
||||||
link={data.profile.website}
|
link={data.profile.website}
|
||||||
/>
|
/>
|
||||||
<ContactItem
|
<ContactItem
|
||||||
label="email"
|
label={t('shared.forms.email')}
|
||||||
value={data.profile.email}
|
value={data.profile.email}
|
||||||
link={`mailto:${data.profile.email}`}
|
link={`mailto:${data.profile.email}`}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
|
import 'dayjs/locale/ar';
|
||||||
import 'dayjs/locale/da';
|
import 'dayjs/locale/da';
|
||||||
import 'dayjs/locale/de';
|
import 'dayjs/locale/de';
|
||||||
import 'dayjs/locale/en';
|
import 'dayjs/locale/en';
|
||||||
|
|||||||
Reference in New Issue
Block a user