From b377cc12f6808db09703f5002ed1dcc9a1a7d768 Mon Sep 17 00:00:00 2001 From: Anghel Date: Mon, 1 Aug 2022 00:21:46 -0500 Subject: [PATCH 1/3] react challenge --- .eslintrc | 5 +- .gitignore | 3 + PULL_REQUEST_TEMPLATE.md | 12 +- data.json | 117 ++++++++++-------- package-lock.json | 131 ++++++++++++--------- package.json | 4 +- public/about.txt | 6 + public/android-chrome-192x192.png | Bin 0 -> 10073 bytes public/android-chrome-512x512.png | Bin 0 -> 28590 bytes public/apple-touch-icon.png | Bin 0 -> 9062 bytes public/favicon-16x16.png | Bin 0 -> 464 bytes public/favicon-32x32.png | Bin 0 -> 1140 bytes public/favicon.ico | Bin 0 -> 15406 bytes public/index.html | 27 +++-- public/site.webmanifest | 1 + src/__test__/components/About.test.js | 5 +- src/__test__/components/Academic.test.js | 5 +- src/__test__/components/Experience.test.js | 5 +- src/__test__/components/Header.test.js | 5 +- src/__test__/components/Interest.test.js | 5 +- src/__test__/components/Languages.test.js | 5 +- src/__test__/components/Profile.test.js | 5 +- src/__test__/components/Skills.test.js | 5 +- src/components/About.jsx | 28 +++++ src/components/Academic.jsx | 35 ++++++ src/components/Experience.jsx | 44 +++++++ src/components/Header.jsx | 20 ++++ src/components/Interest.jsx | 19 +++ src/components/Languages.jsx | 25 ++++ src/components/Profile.jsx | 14 +++ src/components/Skills.jsx | 22 ++++ src/containers/App.jsx | 25 ++-- src/hooks/useGetData.js | 17 +++ src/index.js | 5 +- src/styles/components/App.styl | 88 +++++++++++++- src/utils/getData.js | 18 +++ 36 files changed, 543 insertions(+), 163 deletions(-) create mode 100644 public/about.txt create mode 100644 public/android-chrome-192x192.png create mode 100644 public/android-chrome-512x512.png create mode 100644 public/apple-touch-icon.png create mode 100644 public/favicon-16x16.png create mode 100644 public/favicon-32x32.png create mode 100644 public/favicon.ico create mode 100644 public/site.webmanifest create mode 100644 src/components/About.jsx create mode 100644 src/components/Academic.jsx create mode 100644 src/components/Experience.jsx create mode 100644 src/components/Header.jsx create mode 100644 src/components/Interest.jsx create mode 100644 src/components/Languages.jsx create mode 100644 src/components/Profile.jsx create mode 100644 src/components/Skills.jsx create mode 100644 src/hooks/useGetData.js diff --git a/.eslintrc b/.eslintrc index 316d5e03..02138c2a 100644 --- a/.eslintrc +++ b/.eslintrc @@ -19,7 +19,7 @@ "expect": true, "sinon": true }, - "parser": "babel-eslint", + "parser": "@babel/eslint-parser", "plugins": [ "react", "jsx-a11y", @@ -27,6 +27,7 @@ ], "rules": { "react/jsx-filename-extension": 0, + "react/no-array-index-key": false, "array-bracket-spacing": 2, "arrow-body-style": 0, "block-scoped-var": 2, @@ -241,7 +242,7 @@ ], "radix": 2, "jsx-quotes": [ - 2, + "error", "prefer-single" ], "jsx-a11y/click-events-have-key-events": 0, diff --git a/.gitignore b/.gitignore index 67045665..eb293710 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,9 @@ npm-debug.log* yarn-debug.log* yarn-error.log* lerna-debug.log* +package-lock.json +build/ +dist/ # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index 67105c53..0789685d 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -7,10 +7,10 @@ Usuario Platzi: ## Reto: -- [ ] Primer problema -- [ ] Segundo problema -- [ ] Tercer problema -- [ ] Cuarto Problema -- [ ] Quinto Problema -- [ ] Sexto Problema +- [x] Primer problema +- [x] Segundo problema +- [x] Tercer problema +- [x] Cuarto Problema +- [x] Quinto Problema +- [x] Sexto Problema - [ ] Septimo Problema diff --git a/data.json b/data.json index 94dbaad5..3005534b 100644 --- a/data.json +++ b/data.json @@ -1,110 +1,125 @@ { "data": { - "name": "Melissa Walsh", + "name": "Anghel Melanie Trillo Hernández", "profession": "FrontEnd Developer", - "address": "Bogotá, Colombia.", - "email": "melissa@example.com", - "website": "https://example.com", - "phone": "3042034240", - "avatar": "https://arepa.s3.amazonaws.com/melissa.jpg", - "Profile": "Ignore the squirrels, you'll never catch them anyway hack, for floof tum, tickle bum, jellybean footies curly toes climb leg roll over and sun my belly, ", + "address": "Lima, Perú", + "email": "amelanietrillo27@gmail.com", + "website": "https://www.linkedin.com/in/angheltrillo/", + "phone": "999999999", + "avatar": "https://media-exp1.licdn.com/dms/image/C4D03AQH05RUDJ2KmAw/profile-displayphoto-shrink_400_400/0/1636944769917?e=1664409600&v=beta&t=LFfBR9Ejahvl9mkzXyijUA4M_H2Ezt574SyxrQggwAc", + "Profile": "Web developer specialised in Frontend, with 2 years of experience in the accounting and finance sector, I am proficient in agile methodologies (SCRUM), javascript, node, Firebase, SQL, HTML, CSS. Committed to the development of an inclusive society. Interested in the design of interactive software, based on the use of web technologies.", "certificate": [ { - "date": "Jan 2021", - "description": "Hack up furballs try to jump onto window and fall while scratching at wall. ", - "institution": "Platzi", - "name": "FrontEnd Developer" + "date": "Nov 2021", + "description": "Specialisation in frontend development", + "institution": "Laboratoria", + "name": "Frontend Developer" }, { - "date": "Jan 2021", - "description": "Scratch at the door then walk away wack the mini furry mouse", - "institution": "Platzi", - "name": "Backend Developer" + "date": "May 2021", + "description": "SCRUM master specialisation", + "institution": "Projectum Institute", + "name": "SCRUM Master" } ], "Academic": [ { - "degree": "Atomic Master", - "description": " I’m so hungry i’m so hungry but ew not for that pelt around the house and up and down stairs chasing phantoms", - "endDate": "Jan 2017", - "institution": "MIT", - "startDate": "Jan 2018" + "degree": "Frontend Developer", + "description": "The Laboratoria bootcamp allows you to develop as a Frontend Developer. Throughout the bootcamp, soft and technical skills are acquired, and agile methodologies with the SCRUM framework are used in all the projects developed.", + "endDate": "Nov 2021", + "institution": "Laboratoria", + "startDate": "May 2021" }, { - "degree": "Space Engineering", - "description": "Meow in empty rooms. Find empty spot in cupboard and sleep all day check cat door for ambush 10 times before coming in for hack. ", - "endDate": "Decenber 2015", - "institution": "Harvard", - "startDate": "Jan 2017" + "degree": "Software engineering", + "description": "Student", + "endDate": "Present", + "institution": "Universidad Peruana de Ciencias Aplicadas", + "startDate": "2019" + }, + { + "degree": "Web application development", + "description": "Technical course provided by SENATI together with PRONABEC, with the MI VOCACIÓN TÉCNICA grant.", + "endDate": "Dec 2018", + "institution": "SENATI", + "startDate": "Jul 2017" } ], "experience": [ { - "company": "PugStar", + "company": "Kambista", "endDate": "Present", - "jobDescription": "scratch the furniture. Good now the other hand, too lay on arms while you're using the keyboard.", - "jobTitle": "Frontend", - "startDate": "Jan 2020" + "jobDescription": "Web development - Front end development - Agile methodologies - Web applications - JavaScript - Scrum", + "jobTitle": "Frontend Web Developer", + "startDate": "Dec 2021" + }, + { + "company": "Laboratoria", + "endDate": "Nov 2021", + "jobDescription": "Web development - Front end development - Agile methodologies - Web applications - JavaScript - Continuous integration and continuous delivery (CI/CD) - Scrum - Customer-driven design", + "jobTitle": "Frontend Web Developer", + "startDate": "May 2021" }, { - "company": "CatStore", - "endDate": "Jan 2016", - "jobDescription": "Meow in empty rooms lick left leg for ninety minutes, still dirty.", - "jobTitle": "Backend", - "startDate": "Sept 2019" + "company": "Laesystems", + "endDate": "Nov 2021", + "jobDescription": "Web development - Web applications - JavaScript - ERP software - WordPress - Technical support service - Customer-oriented design - Tax accounting - Video production - Video editing - Video post-production", + "jobTitle": "Programming Analyst", + "startDate": "Mar 2020" } ], "skills": [ { "name": "HTML5", - "percentage": "75%" + "percentage": "100%" }, { "name": "CSS", - "percentage": "25%" + "percentage": "100%" }, { "name": "JavaScript", - "percentage": "55%" + "percentage": "100%" }, { "name": "React", - "percentage": "90%" + "percentage": "100%" + }, + { + "name": "Vue", + "percentage": "100%" } ], - "interest": [ - "javascript", - "develop", - "backend", - "frontend" - ], + "interest": ["javascript", "develop", "backend", "frontend"], "languages": [ { "name": "Spanish", - "percentage": "90%" + "percentage": "100%", + "level": "Native" }, { "name": "English", - "percentage": "50%" + "percentage": "75%", + "level": "B2" } ], "social": [ { "name": "facebook", - "url": "https://facebook.com/" + "url": "https://www.facebook.com/am27th/" }, { "name": "twitter", - "url": "https://twitter.com/" + "url": "https://twitter.com/am27th" }, { "name": "github", - "url": "https://github.com/" + "url": "https://github.com/AM27TH" }, { "name": "linkedin", - "url": "https://www.linkedin.com/" + "url": "https://www.linkedin.com/in/angheltrillo/?locale=en_US" } ] } -} \ No newline at end of file +} diff --git a/package-lock.json b/package-lock.json index 75c4a203..8ffcdcf7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "webpack-dev-server": "4.9.3" }, "devDependencies": { - "babel-eslint": "10.1.0", + "@babel/eslint-parser": "^7.18.9", "css-loader": "6.7.1", "eslint": "8.19.0", "eslint-config-airbnb": "19.0.4", @@ -105,6 +105,46 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/eslint-parser": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz", + "integrity": "sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ==", + "dev": true, + "dependencies": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/@babel/generator": { "version": "7.18.7", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", @@ -3571,27 +3611,6 @@ "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", "dev": true }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">= 4.12.1" - } - }, "node_modules/babel-jest": { "version": "28.1.2", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.2.tgz", @@ -5748,7 +5767,7 @@ "eslint": ">=5" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "node_modules/eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", @@ -5757,15 +5776,6 @@ "node": ">=10" } }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -13360,6 +13370,35 @@ "semver": "^6.3.0" } }, + "@babel/eslint-parser": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz", + "integrity": "sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ==", + "dev": true, + "requires": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } + }, "@babel/generator": { "version": "7.18.7", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", @@ -15917,20 +15956,6 @@ "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", "dev": true }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - } - }, "babel-jest": { "version": "28.1.2", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.2.tgz", @@ -17697,20 +17722,12 @@ "dev": true, "requires": { "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } } }, "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, "espree": { diff --git a/package.json b/package.json index d56de193..577b3c7a 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "react", "webpack" ], - "author": "Oscar Barajas ", + "author": "Anghel Melanie Trillo Hernandez", "license": "MIT", "dependencies": { "@babel/core": "7.18.6", @@ -34,7 +34,7 @@ "webpack-dev-server": "4.9.3" }, "devDependencies": { - "babel-eslint": "10.1.0", + "@babel/eslint-parser": "^7.18.9", "css-loader": "6.7.1", "eslint": "8.19.0", "eslint-config-airbnb": "19.0.4", diff --git a/public/about.txt b/public/about.txt new file mode 100644 index 00000000..7e036924 --- /dev/null +++ b/public/about.txt @@ -0,0 +1,6 @@ +This favicon was generated using the following font: + +- Font Title: Roboto +- Font Author: Copyright 2011 Google Inc. All Rights Reserved. +- Font Source: http://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmYUtvAx05IsDqlA.ttf +- Font License: Apache License, version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.html)) diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..be3df292f150257d881b262754bc6f1e9632e5e5 GIT binary patch literal 10073 zcmajFWmHvP*!H{jW&@iLkZ#z3Al)gk>5^_FMM5N{d(&MaNQ2TKCEc4wKsu!x=|<9* z|2v-NjB`Gn4{Oa2Gsax^oZ}w%x_(!rx~lv$Oma*B0G=r-$Y?&b$p0QF+S6Ne(GLBo z0l8?(O92%llz#w#7EqLt)b=zvG{*4Mo}Tv~eJus`ne%{PMI8la1)Bi1AuP*Jb8 zWv#vaGGjYk%C7#!@QdMl<1yXZAO-?~XAU~^I-h%ERo*?jql3XorFdK(ciNJW@3u#V zvxYwzj9iO)`Mx_68}b?PIr3;f_gi_cuIUF!VOQ>ad~h?X&ZlQD7od#$4WvsBMgz6s zy%XfB*2)hnAp^h|9$XCg155z=EG!=2m#AjwPULXzd^WHXA@LAQC<`4Rl!{oo?Jy{} z)-d!YRxP5k|DD-6khnE{Ec3C0`BTfC<9tC5M-ml z-5Ja#RNSv7J=l%6PK$U*_(;Q+A_lli4rbZR*fGh)iBf1sD&AMo!E-ws<_)C=$E)<^ zBnKZI$~=vMI&d3x!OAG;rSQK?U`BE<9@Zm2Rx7PxD{Z8k2X!)^gJ5D#m^WA>*KDw& zw+x}&#BdtmG%5*F1=8dQoV=m_KI5mL#wlgRsKfr4a)DooLeU;rGjH4Z=K!b7O}!U$ zRHywFV(LT(pWsC@Xbx<~9-@yGZt;vQg?)_AU+k0ar!PQ_)wHBspC=%QvJ1*}?%n1i zV?^ly`ayPJE_7L0EH2Bzw0FCW)-*}sz+|DpSltKd{GtYVuNxJ>0cDJj41Fngv>zCj zQyMgyI}DwxFDK=-8skYm`9uk+nim28RqS1fh>ErA!gb&m(Z@DJMOs4VEj@~rPA z_b?)U%}{HqhT>_v*?h}?Fjh2!6w^_Kea52gd2M58zN)u=9@#^WJeaRb%w9&5TEu}d zvhp)+MtWguwqrA!hAy?!G%Tg4TVqGc0vYxI!VVy~NYa0?CW9~yyaCQ~-&GP&(4>6+jt?7frjhF;@F$1>!SUIfbt?jn{&<#}&Bf z(7+dixJwWIDc0JdilMqg35ggAuKUXXT;6+M^1!yJ63$ql8h^Bj+t&2>L7E~kh%tvr z=buT`(?*F139$MS=n=GP3mpgU@n4n*LmJPNz3`FYfIo?&t;YT9?1tsi_=$;q*p?Pv z5TnYA>M+ER@+Gc<@|&3bidRG*e(~C>9S|T`eH|Q3^~<$DPD#oE-Y=@7fekX^&b8FY z%*@N`cEJdH@Njx^R9~!P*yn)Kxy?Rz9}5pnxfaVsyyGyu_|?Cs!l^u=ah}}F)xuvJ z_c#rwuq`dGL92=m-@L5)Hs3*g^71!(aw4aun4G(x$y=O$!1H-Jw(kiag+l)FB3Qe{ zUzQ@%;by}5_gEqN7%CeEQo{-d&uJz8F)G{$0_7V*crUEbgyhJjl6QfSMj8VH7mIuq zZ{D}zfXj{*(zXqqcu2Y$l3=Tx`rJu`Cb;_)+o3s9@*h7(wIl)+O9c7Hmk>^z|E?bL zA~FhrH|(E?8@**7Lo;gjNS>U|guK7WT6O&mT!0fa^K6O-^Fo2iM&D=AvfUvVukv(C zG{pGj0cQ4rQJUiLP0(xJZwxnhtD7BU1_n9O5#*8ZGGXwXodqBYf_cC62;0oKsh}!8 zlIv{TM9+PHJO#nzmqy(C?%i@0n3`>shh+6i}VosjmYBNXx?}V&n&t{h%-r7A#cv)rGFF$Bc#{Ax0kGRDufGarHbc|3a&r%w0Zz*#Vi|o}MI^ zg&D(~Kp?r4a=4O`Kws=Dd>pebUX8T2uNrwBQV~8~<1cl>q>!9oP4Qp?rbp5^JA$tS zh|2u!eah%mE&^X<#vX{DVP%U$1OV0i2h_s+F3 zF6Z@Tbr$Scpu#nDRL_Wy#L(dDg;ZNc4Ae=23;q3jkI+wH+_j1yYE-~TByn;D7g>?n zuj{n;q{ktJ<7fKpCE}pe0t2OOf9*)yGSoJ2W;SRe{@GQzgYMqmbHvTf{>+PgPol)9 zSg6o*(Y$z(RO%ujc>-}V@MDAz>P@-j@rxamK4LA2S_14oA%LgBs{x-CdfM zV#NU!`;oe3Sbu^7^~ES;A?_%o3dycDPt7r(o$?RkO}gXQb~!L$AXw& z99+X!KZCpDZTQYs)Goe^%bJjpWFOS!&RLMn|2Cmm#i(*dYbGj5dFp~lEERpm+_-!Rl1{n zwBTL^MY2HWjdlUs49BM|&^oY=%RL91W(b8>K}AtjT1G`dR=-MvW3ZRke)G+xPn}~1 zlFF=-Mn#F34Swd$wWH@@}zM-fb=p`r=ZCJB7=6!10-vzlqJI%t%k(dOhWv4;ZV6=A{>j{U(>?UEnG5bob&? zqL-Y<+fjFIgi4r!J#vWa7)$GY5@C}$$bwxBXfb_GOs`D~>NFEQKQP$*00yP7m&NAE z&w_VL08OY2R$%o0Z2vCt^8BS*O0xNBAj)b0Jp;w~cY}Z!O0Stq)T((7(1|$0{duW6 z(VIYo4wO$tS-R~rp+1o5BBG(K8>VGxNfO7D1Sx;R(G0D;K0cmaSbFh-wC*jcd-7)) z%*ZytAFQ%)KnM4K)K^eE9*t3$P95HwsWv>VnJIU+FVk)OZZ18grYITJ`)xl*mDvsd zpl+f1e&G4=N(1gnmWX8(wqc8VW36OxG5l^lj!MYs%1(d3R1!=m8Sy3|xi0?`&=L4q z4JDVU_!Adwtl8cEU4vu%U9+3?(C<2xWF;OpVJ9HoaVbiLNp1amaO6mg<#Mj%z4E`pvyn`+Vx4H}kMl6XB9n4B zk`D4?p}u#r&HJmHx6Mz!5g|%X%N^ClhiSbq77aGM)ijf~F`?-Nm+d9#@PrP>oE0yP zU{j!;6?bPuh1m1_7qNn3TIG(89zG8^IGs=OF;~*&O_Az=r4I2)OJ(~+2L#7!Ia==@ zvmqpxzi{F1cq5^c+H5qH+s1Khw!?lY3cdY7AO)j}d~1sULd>>{I6I4n$?R0c>VG1Z z*&k_<4*wRg(H92&ESxpxdBz|>OtKN~vZH?FN|&e0eqlQWZ6gvxv^`8F)nhu1kEITOoG$aQ*i|&y=j5Jr1J^MR#8ZEbvAUxBzK- zJcKDM%6nh+NH4YcKnxl&#hi~Qsed;qujkMqdpT(w1Xiq6znCr{@b`}wVh_|y5^8zswN>O{p5gBq(Yeh!TFN7~Zs zC~=@=TDVJCzwp1~+>*u)`bUz_=T}0CmA^bME=EQ0yKWNqZS!>H@#M@etzW`ESG!D^ zqQ5!ZCe35X+J8Tab!;>|bm(7Md!py|Z z#EW)l)rv!ZUWVXCSiSvaA@7ap-@B?3=c=(xQY z*U8??bohw+u(HfWb_R@%b2PE1%NQ-+DJ|3GsU%In z_cE(B{NKkCq~eqpgBPDyd~XW;uhf~x8Gw!%qwmG4=q_O+*Nvu47E2;d6%ayZy$Q@7 zg&XAuvDavE@8|I=aYzw`jJm(zL|Wy4x0>C;a##Z(Q0S@smd_D(3C| zg$dE14mL70rf-W$V{tT|g6o(gtFy^PW!c;6dm9$Im1uhXPSE{tgICwfZEaT++GLd` zO+N;|h@?ZH1p%3Vul*nRtqvDUjxkUM8W@12)!Vj*L<-!6)z00FwFQIE?)Ls+`Y+Oy z>yTg6ld_x5QL-z?IG1vw2|-|(`ISdHkK@fcRtJT2jir~k-h0$D?ShCucBPu8eg%~= zYj_+G7c}fKG3}+$jK{QF!6Wy2bk=( zZgHs~`YT7@FC0PIi@V|}k|yuV(E()eQcGT0=T36(8Q*6Ls!_Rg7?AcWn9Sk(ER_UK z%VeZgovpdTWMS%DyO?3xMeAnY=ZtsYzT|XqcDv&q_d};9+#fj{oc+l|U*vnpd8-r& zS|waxl6(0U=XPI}m>IR6csTkFu(a;EM7BCnVRM;+4s)!2g zWKv}Bk(>HnuS#;7<{lQQn%6B*_svox+uj;>=u*E5TkMjud*!C|kLR)2-|t=B`{1=- z>0~2{9DTK|?6`JZLaN{~)jyLTqHpcjQn_zSkC+!JHIogzHzU@NPRU-5b6nV5b3)E% z5BJfW>Z{H|gb{!d$cs;{MT9A=XpHW11%!gV|J^sGjFRagpR=8dZ<0rU>(3BJH>Zdj z&myZ6&B><6N?NAvHuZ;uPu~{S|A_4|uVf1ae$XukkAk~k+VjMw&ZvFljT%nt@dkB+ z7uhfHt<}R{YVBDH^FP{+AZ7vC!XIO!WM( zPo+tislk!(E|g^VzDL{g^^JA4*=YjoZ%OCgXeAwP`{F|^IGF+iJZ5{nz}Yc1trdVp z)qj)h|8UVQt@gD#cj?tJL=^j(0m|ZBTQfxjv`I8H~sj)Jz_>jmIi%zPMiAd zrQaLU$Sr0DTs>jlaTQUjE%81rn=bpdcadbQ(z!QzG#6v#^8*E`EXcYt-9L%uYxsMQ zUcu=5Ogl$iiaBjo&xj9KXtZ?_X@OA(Id;>yEXKD%UN%Z)X+=J);KM=Jw`P;H&H(qFV6ES^){N3m!*+;j{mQoLAH@0PIpVlK2wRwL#^X4f~ z_iO!a;|Grq&XJu=nLb$(_KU@D2Eot1&2xWSzV{r>PW@dFJu8gUQE@*(dUJorDuEAy zGQRXz+8OaIQKPA3#IK3zjYi2r-(^WyQK_mNIX|D|q(_;pwZlLQ9Mc|zJ65b7g_GR( zOe&de)>9~g7gx$DvKxnA{p45sRH@%Q6%&cwJ_tnz?P_v)jM0kWAQfzMHmHa6g!1PV zj~^Fh-S*eJ*Sg)VQAei(Znu9mn|H<>C*8I1s{q-S!+ZN#zmgy}t)ARU_cRfIGFA~* zV}m#@Z_gvzd6uVb&Yuq>8CXG{pGG9}sE@oR6mxRwWM%)J4kqvX8tgRNJ2o(Uoz0_9 zSZr(Qe-?RkPyD?{805-pgAC>hk|Nr<6|i^G+ZkzI9-J1}R+Iye@!gLOamu^5xSQBQ zuXRLc8~qLqmxj1Ar8>&p^5iLw_&o>u2pl{tLgt${GJ#u3eYhU9l>cJDCtn`7G8nH0 zPA2xn4zhX!&f4DnX}hW1`|LJ0Cm>FzKQ7cV_%QA!*wss5jv!ev(uBrW-JT{-hzZ$H zn7L*noXecVUD+NYLL%sJ&v`kZw7}9qAUeOfJ*V|45;%|$*^$JTJT2vALVc% zo`ZR2-;d|?*lJrlM8tdfWfeXAAXn=~;ApJ&fUV<9NsP2pOX#OZws@?ieEfO_0h8-a ziN(&y*Qqt9M7WX|>golx7`FY{Pbq){+;KR88gMk;&AOeEI-!%vlzs6IyI~A^Iuu8B z>1jGjOM#ZGeqHp?(Tu+X(Z}PW-A=)wI{A$Ng*lYC2CfF8=4JcJZkIGWLL0dmr3kz zulFLd)F}_v(*bXV{G41*5o9?T|KQl{dg8B)(;bxzFpd%rftmhfVRO^ufYEFD_M-MX zoOs81{KVuO6zR)w2i!C?EYc-m{~xx=)Ma>4Pj`dyMkQLxnqDNCOgQAhyBkfcl{ z`M9SVJe#;z?JXPiTmm4vbxDY(az7(qUo~j$HQ?eFP25}=t-&yZwa~C}O}!Shc7|G7 zl4N$3##Da(RA*^@^}&oq!MZx^rrMvCKLbOTCS-=P5@|?kM7gHTY31d3WzJ<0Obrgb z4;l)wq+Nem6Eo^ZcOQYTH}`XJ4)DmgWA==IBz3-fY|ZtC)QCYbKCr)^g*z)}goOMqib7$Kme} zZD$zOs{zN0B}t1pA@srybr`f;Pm-X~mY^_)UQH7U`kscaTo-VN-hLw&|5zd_yZK5_ zz%g#c?a#NO1zybj61Jh27E+=Fh|XKDU^G~b3PmNHTvfF1IoFV3BlwN43dgp{dRI61 z$#5}T(7f5e4rfyFyfl$sQfEkuw7UOuRC3yZ5T|EcPehGUi3S)T`ss|4FK?X^EB&QaOH)gpZ1KC6LE_D7CJxb`4%&Dc_?;L# zaTzKyCMrK*P*XTqidPBA)nl@-YjTXrPlX}Ho_^tfDsx^MKK$ublE^djdwjUuDPn)~ zcAQ9$G~20JMc0OkAEBlHoZYo^Ft~eYDgUTzL(zG8@3dc9>vLpS&d4A%!6p zh!i=%kXDBH&flE6`F*@eC1v=}_I#&MZiKIf#YRUr-Ew?`UN{7vMgfmIiBD8ww6OAd z-kNCW9&XK#HtN2)w=0>>4e5n@1M0N04jm-CS`;VQ?rwL}IZzQD8p#u=M8V1MbF0vTPgI zBaIt7Y(J1_h2pdIZ+2nRQT|?r&@(MsAa!6gqC?NF!>)0%DQ)$=0vsDU5o)pE?i0aah!Eu<^qD zRo{vndBBTofb)!3BzCC5muMrh?H0p3>(LS=AR~4q z5k*Jgxn1X;S19~|9{#J2pHC%Tw6r>Qng@x_M_|XaoJv=6cQ`&AFY@l z3lHyTc&8WjHjjcoPrmQWN)`xHKNL<$XBLjLa}_lw)&!SO6eh2CZykzBXWA3 zcXTF+z>ay}4|Eq@wKSYe5$`A2cE>F+5!O>_h;&)!sQb6n`uMW|;E2)! zv}=+mKqeKUnCbOHB-oD_$cD4C>@d7*2En+}Yv)KnE9af{%6{cx;FA!{%}(jE$ed(j zG!m3=&*%8Ci>1Q)AAhJsTHvjB=7(y!i9X^boH@UcV1f<2Y{W;XF-ak4 zrLqqdco7`nP$v<27!#A(qrVFzRjfr|Z^kc1&lq&le#p_BrB%laxreO+C;w^nUG@!G z&mhUd;3~rZSZ6O_h{~eD!n-dp<_o9Q(~Lk>JOdIk(SSIg(rulp(b=CPe_FVs_-*uc_A_D z!JF$DW;TF|s$$;IfdP|~9$a0)Ep*#62t|-VLRQNUXkcOwa__9r-1a?A2vSqzoZkQd zI{JTJfF%FNdyIrLqAg}yE7vJr4R|i8)M6k8!FKRFs8kRWfaQ@UOJ>Xqi)fz8!wgh_ z{a>guoGKBY zePd+e6ch4A9;KYr>~bvCbQDA$b;S^nea5<4_6Oc@9d}}t5Wd9P@m6V zT$DGjTgGCZ?3z&0QTRwtE5rQ1EH5wu8ig3i0&DS(ML{;P;d0}8o128_y{r6+8I5D6rD>$$2FQ%!~G8M zTi{=!&pGtj^ennUvJ&^~-eIi%CdEZVet7RKS4vR27$RdvkN7!OJ4!d-GC%-V!a6&z zL`BN9ur%p1$n!c6TB#5H2R?D7NVhMr_4Me~5Q8b(JJyneUjRNFy$u~DJuy9^J}|iUcqQih_fdNL!_(>c zbb7dDv{AU_;>Crg13@(xQ{DvH-e1%1x8rnP1D1tM{Axh`CkF!6ojkyXMF+>#N{+)M z=c@%p!V~OXQ)m)|ps3j4A=nF1vZlRp*-{W+$RU%Gmv%9*RabGe@QpMDp?aO7qH1Xb z7V) za6}2n|6p@h_03g1mf0`qlx*Y4ah1Ra!P-wgjf`R$i=pD1gz-zFBKP^y2qVD zxx;FhsudA~)I19^8-3WpcUrw!km{vnr?}U?Uu2W51w%X`{qdt1@>gLBozL$GqD+Gq z7u%~0i@=SN1?DkR+R!&muk{+CIQ_3TH@Q6Q)aTQ?XE2jcd&NO4uhx~iJ;m~Um0oP} z3pbDZ4<{F2{pWk2RBG`KPD|28E;c@ z^KikYpF^vmn&Q-sdvVWMA|(-6cPJ*?S;o$8T6YmD!JBN230~r)v({Jmd!7j9YN&eC z6SmtSS#yVS8=x+Qh(3#dy3MeyvZ{sa{=DpC+`t}sxXyI3SpKHsnJ3UX#3r`+CxH@m z4n+AsmKSope<7cH7?G&c5e>8V`Rnn27AP1uZNipI-ikd4owPp|y>F4?|A^avWSq*)8bCknz%`$1~~LB#J^#WPE47 zi`e{j70pz=CBG~l&`e}w!Pm*$07&Cs{jb$WKkf6lo%|X8YLK@!ma4Ufet9shWdLx$ zk3&0t^eWGKn;7^2>oF9f{9smX7g(4Ty&V!=*GvfFh>3tpN{Sp@VGB{(n^zlQ!TP|v z1pR@+t}+V%^Oq;12d?hEczzKHj5o;?k?O7)O|0>sL}_1B7xFm|)}sU5>e%IaasNN2 zsHUhdKrWM2b$i#VEam@?EedbAiv5i)g?zkw5Z>#JiRY@;=+JT94g!@yT_TfG26=|i zq!@EA#p-={|Yo07Y3lU$jg;d3ZmG!~SFG@?=wpUU41(aY1i{R?KSk~)bk#Slq;@vR7z*R*h~;Wy-PWykaVr~2;csAvzt zY1nX4#}(-@;1hIc!~`C@4afy5+4O3K&Um5KFqU6XIlf>u%V*Y}sYC0PkWho1%XOlMnmlM~3$q2q>Di?jSflXDFm zBL`fdRP)O^&5Zj7GG{31F1K#cjGMxzn@emqPGKU=3C%SfFW($I+sp#D8ygAPZRF z?Xic3N z=dho}wj~Y0M53zL*O38{-~}l7kI8D3UbB=o%H0ZJpan*Pl5f0Y8zNVt`z)~~pZzn$ z497?IO@}yil7@;ALlQGQSgowR^7LgtUadSd`5q4O#ARohFdEg7xo=u34kb4RcUE0O z5Ajh+AieQV9(8sOQA|rRJ$j%cLsbsi5Gus$f=R&OBJFrEo~?li|JY$c?O%>Nfn2i8 z#B`4H4kwf7Vg9D2FCI8^*#Wk%J)@FM;L?&k^c)#}6tKr7Lg(*NrgvMG8rIf zY`oa*66M7>KZ-m0WvI+RhkZnA7F3NIPC8B*6y#1JRF|pwz)%uO=YS3gWmVBQW(+60 zK%R_-PlF1cVMrM|t=5!bD1+>)0|rNrkgk-VrTD{dAn546!Pce8h_`8Xh>L{Ac4h)NVk8jb=2oo zTm;C3KI`Nq(}@?L z++K-|i;EWj91eva<+?y~rHOJ3n(S#4E|K6oA@31osCW_iVO#U2t9^dP--*}APzTB{ zwwRFMZOt8{y4-@8x?(_kwJ}Wp*5RRPS+Iw z3X}j1dLfF!p!hi~C#MM_1Uzc}oxr1O?98KMSQ=)f=DtChq+wtDuzLJ5`ErhfyS>2Ep>tFa?vn_-e6|krRfv@Yyo(TDR zYY`F(qm>9fEf`<{6?Y*6E9_+AXnjO0#n#ikyDp!}3^=)dBnZ_VzBFWV)hl(2xuJpJ z?|*=gMZpTaOmv!r?Lyb8?&B54u!uc(O#SyrBy8T3W_ErUm`t}2$EF)#Y+I}PdseL{ zQBbNRDeoU2M^*K&QL8DE{33#tHC#|+k`5|j>C4w?#F1Brap@pGfEz=-aMFMMTV zt5L9z0tmbt@wrq0x37+v@im54>`Tq~?)O5&)n}GWz*qjB<*t)wCX0Squ2tm?N`A6% zM5lPT+7{@}uHj_84qvHBOu>y|j>Rc!!qT6fiCg#1bc;hl-F~6X`gt=^v1~ZweH61G zC>^Cl4`zmUf{#taojbS$}@!peu#v?4!X+r0Hc3W6JtM=4ax{aN!yB>wW5 zihd3yC@b9p3#5dy^Y%up^JJXT`K^nH@2NbMn#n}Yk z%O@^nOc{U4pEGhmeIyjWs|K7uwmCQ-%K91L%iGBh4v?WbMyzhdsF>IjpO1pO!=df{ zkRMOqN-p6cpB>|(M9DiOjC}Dge2iOz?ZqMn(4F2 zf&`!bkm+|zMkdIO)jnyL`bp#-Iz8&p%q;PsFZGwd`8=omlp7Tx3k+ju1XHvLu>yDR z>{9aB?}t%AY{cof2|I#0=`q|vc-42{$uOXZZ-oM{8!Teo?!^P6JWV-|1L=ac6@#8=Sl!{zK|5P~`zl{3cBw4r% z>u_GFx6mwMnVEep3hLYR`=#DW!$}eP$qCTmmAD55MhyfZME84y8Kdoo7$-|eKvYO5 zkT1}-?NcKEOpc65%vM0CO$gBYCvz=6{HUgE&h_Q5+eX7w(5!9@zL{c@diR~H0BKK6 z;(GChF9o|!aei|q`~G>q3z1i?P?h+xsdpEjb3GKPJv6|JH*e4U3^4qmjDoXegjlUVwoGCCV^q|K{uTv>Edm@ZF7D+sheN5?4}eff z2%HF_zeZ_S`)@reC?_pR3%*<)bS2KdbfpXk>Au6v^Iaf)#s6=FFjQCUz4mtS7w7L@ zQHSclw`H*aHJmq5N$meNlK~%dr+#>4uyErt`Q@4bkVd!(cTT1qxK|z+4U*w%w0IF~ zFS4?(@qsvon&+w``oOQR!pfUMf3dZNc$!^aj`9vmZ?|z3PV$`+!eys#Mo8Gx(e?_~ z{nqa9Jmz4`-inbsY43?4t=fENWV;>={0U=Beg@aj{(mkdE^AB;Z!IrI$UYWD$Uk}x z2%{~0!mQs{`vXG%Yx;cw?XiJ|xtkdxpm!yG_%frrlB1@G8A8CUTT`m$b?j_e)jaHPB#nk)gD5lDo}b4UH}c~Oeq-TI zFMtGeT(3)ithj6i}=-T4sh?M?mPT6Spn zNs9(Qh9`~B=~eUu(O)r(2_^zGK4VCQpL1iXat^dc(tb4K@B6xF(bL5b}h5LH*tCU(>B1`*Y%kx^(R?QU*5& zEj|R4MRg!G)@>a}w|Rf+$LfG%`8E&EFtS z1!3aD9@!|!ibHJ$J%a;*OK^i~^DneP>I_?O(jM!7#(-}FiI({ZEysk7Qb~NY|2sEW zd-~9eL(LGq~$icRxal>XQG{nC=0G7MmpVM)R6)gPU zb9u1!@eYsnVZ4{YLk`qW0I|r^x3#uJ;#-kA#$Or!<_MW~a;O}8*Ws!G*Gq*y@_=0( zv`=8Xu@6?mX&6`31sU{x=JaO+T?6}@DUM~~iCQXF20;9Wh$JEukn?IE|KSdx!pLwZ zKssAXEa;RQ(3tT8Ed!8YxI-u@J1Xwx1xe~3jrkI&{C*^vYjoB$SviG~2#&adZPmR+ z3~Bv~+-Nu}V*KwgE0;vpT752jG6)sv-Bh&>W>yQvO%B>WA3-JY&(p5RF;n43M3x2- zQ3v(lwaR_|$4T!~>vO0W+(Kk6N2L4HTWa8M8T119Ewqcq`WH3PuzfU}=O&96#QZj1 zwFX%4K;zsZE=1aN7+?L<{sMx3u(6K&<*-t+qPY>c2s=;=s63wLx~F-6pmz>i;DYm) z7ylBie({>%87{yHt>;d~o#6lPxxxay_Sg&2I!`s{$p^rJhY{1sOMXbX?LR4c&>gY#VPvQ7WPuRnl40W9cik3qzI`riT3a54Pz;GjR= z0V;Zd=?{mwK zD6ogrK2edNT9VRyBQTf{V&}YwB;ltR`N`FEx(iM?jx~vw4CC8 zpXbznb|hoK4YKe&#XQjjbK6n2#yA-TnOnra>6>ZFfy7?}tjlv~aL47#+$`fyT9Kn1 z|LnUW?7y@GAr?Hu;=J5Uzjro_63(-)ul|tdd#`P#%KB+8nXBb7qGgW=qj98wpS3uA z;QtR{L#WknEqoT-GF$KgCznNry7at1eEL2vNgK&(OCI^ZhxaY*_(sB!jUu}P2QAR~I1%c9vaehH z7inY`{J_STg~8fGoHNAsdPmFbtObHPvfTfBUmcZ@C^I64cD(URrwACA=TJ)a+&Y-2 z{w@yw%j6GNI|FG}Hx@sbij#RTDqOeT09dmQ@Bb7!e=s0NSB`eFCC~|nJpbf9g9pY~ zqac|TBy~&e%>P^u+`gSp|W|qeP1|>u!BO zA#DP+v$OKrD7vG3lJB3asObKtgoM1EeB<7BOVJHrB-(}U!$S#*<^P3Dx@bKA%#KQm z?*(1VL`~FyCiKbtH?*;T00M0l($1o-xfTApo&{h~*of44T^fq;e{V0qVRSzbI)aCs zRYprqYoWMNV#s-|d)1Er3Jp*f4l=Nre7}5+s_Y@!1|^vPD@?*62U&;LcRXQNz^cnYs*{rocY4Q*OoUPgj!PvG?6~56f50QV~ z5)B7QZLV70yZcy_tUag?I9!Mkv^FRH=WC1$3p}tj5U4Ux;$0v63Fv<>!cq_!+ADKj z8Cn}9CWHF<3`}5VNijtHS4M#%D5Lcp`XOkK`Mc=#DgX)}9FWuslYa0GZvFEGIHETV zZm53fV#g@rJ`uVk(>ShK1KpLYLxbN zhKsHen9t(&KpwD3yvp~_JTRyZbvbe3FXr^bQ34Rhj{s5mZmK^;-yZ|@u=q2S7h|n@ zMuXX3?DmZ$jdGG@xZmHp2DD)hx4*`3K+>p`^=L9Uo+0b$84NT7R$qm#7xUxz3O?rSrpfg*Ojm>nz3c|!o>o+Qv6LNjpR3IDvYWYJ*S9|9iyQURgS*0mxk6HJbkqLb$rnX%n53A4C8F z1Ftko4MX*8-oIA_pDn!aia4n0iio&8?E9qn;e66kieKD75ML0bBiPUTHKp7f;uGKN znh?nhG}quw;XfOMZJ=FOx>{d1Dw5{<3h&=u)q72H(~@SFrpXxuPVr~_z zqjP|E4&c|nF_o|^7&C978WQ_wE$N~ZKF2qCas~P-@V=Oko3i+T&dw()`r!eEgtcVC zAtEtcx-}})_>Mo_+8nx=_scsRX6%w)^UIu?ivfnB5%%2`+C&8d}}CzsRaoefk0nect5lZ3eGn zUxM-qQ&EY{*tz~*n0h(jV6og~rTJ?*WVXm{uM2}zU@6mje5pgkOL#-Imq94ajpQK~ z38K!3@db;2QzA#_p6EGM{s`E|;%}aZTioP>MTCMVVo6)2PCFlw6<8UAQJVz`sXT?h z^K3{E#bE2FqfPh6rRnL~#RER;XzezN=ensMSn4>CV3Q$CKwrA}DUzojI*f|xgezx6 zs80`a??K1qhb*A$ilGv+ShVf*I~MSW_)aU=iS@hheEpEXdT{*?i|JGb>~Mic7f4jI zM&=FU18@s0Hf3NN(LuN2lLrKBRdFJ|87m2s7IKr!pQ`bB#W^bV$$s+f9-F?EJ%vlt z{kxzTr$v|0MAsjRD=RqG_wncOiGHkg)~gW2a5Rngk`6-`>&vB@C1my+JZ?0K2u+b> zUvP*xyZpvV0#YfFn1K5~Kd$jUx$6*UkG)$?%3uR2$wKzbTj1Ya0P5j4a&O!`9)SDN zLL4mB#9H<`E*H2A%In#LOh)s+=|m@!&C_>Gg@WfgAVe~MsM6{hg==s74V}k<<(IEe z{F|Q6HLLpr9tr5-uvej0S-bbv(6CSV)v@|ay+by+S$p+gSw7spS1KqwArI-K;IKtn zV7BrJ2pbq71mhbr;^ohxU|A8b9K$@hM?cZ$@;L2gLR6jCNl*xLfPE$K@H^9n%~o}Q zZEdF$XQz8X*;qFI=a7cr+@2_~R9WQXj3^Q9oZ`BfBrcltYM>H+H~9omVc z8|xiiZ_5#y+#v`dFozD;x;m~vkV%f0w;cFdl**s{fvJiE30`D1?{9I!rUQ~rp)3uq zI+CV7c$W;7HX@zVe08hONS4#8vEa*%filhFc6+T-m*&UO(5!99`EAqQ5~p>VgoXtU9<{8;B&y1DMFCiGp!*Z>nEu?{O*cAi;B)AKl75e~$I|b^J}hwHg>ae6mjT z7Wc@#V9-TsDu}On-5sA|N?`XUrbxo@7m=6W+Xp*>d5Xbfh4{#AdrH4>y@%{h&5h!a z=mVGU5$JL!&v~D2nS()Q9>~k+i=e0^qQk|83JBOoGCp+|eHI$rv8T}Dy?=A&cvflg zNUWF%kYiwHWfl3P+#So=+T+4>>n?%>H*;AmEjWn?>C6y)0nFg!`BLm=jCkRr;y`2< zs*H!Jex6x%w;`^_F!>xtYqz*_)>1wVOqY&?-TF0LjF)JSC=tvwzi~Y-&?8FXwF&th z6qEtXsA~icj()Oe)=PtCtt@`HzF0q>N)wc#{=f_fC;$E;@cAb~h}0gq9$l6O@A=%Q z1U{-5MArT)s?@;oM#r*Y>QU%d0oPH6>&*_FgRZfXM?39FKbwrKXNUzdeE5;md>e~= zLo2#9%W89xUg9&W@IUWkk>$ukXl-^hbKytbVuK`cB#TT_SjK@pY;n$St~E+D537_O zf;~8>)hzwD*_;;clp&rvn~J2#_1y^*b9IW^juhT6X5>PRZ&*y4 zY;;q(kw|eUcn>+hC#;67FMSD!_#wbK(?HN-`5o?!%*9LyFdT~;xZ|<)`;PfFpmD`a zFciJb-hG(P=#PsVjk3)%+hn$qY}vR}5;&W%-{g0`fS@&cl<}g3#Bg_(w8VPMrBnH_ zsgunBA7iD}MxyiJ7lQPsk31bZ-Xak9jaQRKGQvr`lErX`L?InO)~CRk+2?@WD|E2Dg^SztU9X@hLT zWAT2uYO4#|d<0f4OYn`ed3fVnH)kSew@;B~!w(E}K#S|$FBvcGvC3uW0yhxXF-35x z2sNQr$;$#TP_UdVbPQcM_2cMPx8J#LTOIE|-Cf>ypZoG{=#X{Gqf-Wv z=kg>V(92ENjZ8EgTRnfN3IQc8w}jXT2>#XxA%(4p&j6c29rt`zl20&PgAbK`GgB_GbeV>>OTw(F<1LVWrl3LC!OIETj5Im8H#4=y`y}pyGDN7m@6sMlZjIPpy0A^J z&S|ov1Npfz2q*E4lp`A=-C~gN1TQ&kmoNh=|91Qkrl8&yuW5+8LZ7tPY1ZggnVG$6 zOlWfW))*68byRt}ddr(GSLI@=XQAfIUVe@hG3n(RiL{w}`Yw1YJn+%OA6*f|r>E0W z{(effsnGUKs};!>zps_0Vy#dvBwd`|P`e5OI$Ra#Az<*>g(*d|Xudr2)0=X>t9z3t_Vsmvv6wU`%v*|)R78;vj^Ut+89|;pbz??%|H5s<< z!t}a*nTu)v1F;u_llS$disNHl6^-I3n!&z*JGZ093=?VC-=&VyNj{vQ<3 zM`anVTRHOSPftY--;OF(Nx1djNbiOnF2utWyue&v+Y!8Tl|5r-uEaUjK(MznwaRqy zVhTIOu;9e$o9Rv@2D}7FvsdPG{gigO^ig=9)BY!_&(^r~-kXzfyBtP-Mg#_GzI?m6 zaOPD0i%Tw{nrTbTlJ`cnb~{hD3l(Gp88pT^6dCp`B1jhdx*{HfD=o)_+8s!e8U#X1$%XHx;BMU|V^UNLs8%TGVICJhMswm({7W zr<_ts|9y3M=a{MYtHA&49p+=*L5?3&gBayMJNG6T6k0yBo|TBXZNPJJ%NLPtb)W8?7ks0Lv&t+WBFR5#7 zg)mD7YUxR_lzS6a2X09%(}T(ctdScIJPcZ&I3W)CTr$%Qta%~p)TUidf}D1Hg-gjD zJq)nAnX;yD)u}0Zfl-(4#j%1l7;!X1f1*04WORG&EQEbiT%s32@tOOPMfb%HyWY}o zoK9{jl@ZWPDE_QQU0MexI-C*l5+JD5}0IjhAY9 z^WXtK+GNbJ=hOqA`f{HV-P6?ane%i}OvM?(69)TWoMPP|!Rguye&bJ2*j%x>^RK?y zrn~VQY{v5VJjb^8#hk~xw`Q(Z-CP}vTJ+-@wavw$6mQ=q zsRInp1N%zCh*CdreP)%$;&Djawf-rV&5bP2eh1|Oo2U1CsuP1-xo!_8P5>Ij!vh{|| zkqQ&DV`;8zD+6V1k$F1W7Cf6?46YWO@6$eTp=GmercNuTCXTfPL#ccqR9C^bQw=;T zzNry3smAs?)jfs}_LoP^9{JdmaXBslghWF<$RW$NeeSPR`^5zJgte-28-6iP0*s#( z6GK|axYQw3ttaV%qqm~0IHZ$s!ob6o6u#OJ7Iv>>nHHcLucBd~|Uqz+~ z3>iY4a%CvHPc}^a%y^jvIP^pEMX+!568#SK44#^YjLbY$(YFakP_n!j4}8JD^?o>R zK1(*{7e(mthe45GXqGo*zi74pAlG@Q(|)>k;L=%2^UI2QVex(l)u0?RQ@xBP@J^ns zz4!@`r8tmsu6(wuqi(i&s%IS`tyR`Fl*k_7-FBGs0UbDy6*a)L8*U%9UsJl|NHu9~ zF#e)75vm=NfIi9eApS+>@=aVIYej?e&Or93=ZNj!GDLQUbQvsGW*Ugwd|N`%avN({ zG}=FhalZ4OchfarP9j72-X)8fFKVf#ti&u^EqxKcSsfzt`|@&2+wtpqbESs_DlbOLW<=)E)Y}$`7*T>8vk@x=8g_v%-&PpbMRb zEe=78>k&ok-@kx$>Qnb`!7m z&6qET#PU$j3gZw0O0t%1a~+hvA(Wg3DW}>^8wUgEe{Y&_kg$)(U$dD@A4`xwB_^+7 zs-uqL@G$8>_VS$ANr3AU0o-J5x)snigN7fG<5c$F@B^qeEJnWsY}|E`o>O&TMKGSS zY9YeYA~N`l;Uljjwu>s}JQ+*!cCv;d)NkS*l#E}UKBo-uWcTu2dMAo^md|+Pai%cXRwlQP3Ag3lBQfdJ)3iWQL`EV;EvEO z$+mU|EiU?bEA=GL`P;W{o`1;teuZb55qgAqX3=wacZDoY7bj@=qsA%zcoBnxi=fP$Fd)*#im0JAQPQnJDr*Usi zzP>=te7xdLTf|(YKc)W&V7qgEW@weMH#vG9H&%1BHc1-E1Jd&3Vf3|{duA^oN_i*w zJ0MA!i7svkwq@;Og?aOPyqmSfEBEu4GYPS4g*vQBx-qXc1sM%N0dyodDPc<$_44fM z$vAbd&0&R%q*N$`iaII%p`g;VTOZ;44`QK{QCX3To4z$M+4Svd?`rola(dOTNtS9% z0C)C-@7AlGOIt^4i<6k0nagubC&k4;GwOm|x73f~i7Y1zA=<=m_Ct9zXiquPMM$M1 zZEbiqNs-`aB7VR7-bbY^4s^eOZw)=gP zWPE}q4rf<^)P0ntQHSm($D1{#4y~6(bIwx-ZE)o7cytHrX{^rRzyyL)gJ_Q{hb)fXI#`o>9kIxXUCJbxkRat`SYHh1JGst@5 zz6Zo+Xd`9@8b0{K=o_|Rt<%ydvQF2LH2r+;*5Uz76X7ts$6hprqX`#U9N4;iU8`%E7WE3vL#&!ualJC$iFRNp!N zN|9ti1BgP0zZSjQ&LSo<+|W(T8^R%LA4=lvuG$(C#Lk|`Qll3hZf!}2^p)g>+!;2F zVLO=}+D=$QsC4#j&%dCYuD@5PoReL`l;Zxv1JZ?RHqTnpe zyhYGvnQmQIf@Rv`6d7R!v$WgG^#!HV*oi)O+l$s6;bN@q3kFgqt-ME*9J7zHzq*Q9 z|3b$hVYrE@-=|$0WIub}HE`SK(K?kMmHu$%qyAItL~{S1MN7c|E;Y?rQoiWL%186p zt0%JDB7HswDD1lRm$An!?(>}l)?@MG&71RDVL)_!j-mp4f`(D+P1{UU-2tMIofp_~ zskgiJmN9-fN)vY{B-G6y_TEAwSUhoFG3=vNi|-exmb-Kx4y<+hrqw_ww>E=mCtrlEh&*uQCG=-=8*Ku6sG5uGiMDi9Ed@h+Kww|cb5=#GXFEhu= zGDp;Q4sKf;T#LwwW$dULbkP$kCHPVqxbR0jM^f$AR^ErQHQlwy6Xh~fvC48MDV*V2 z{FZFR048lNN-mBb|60iKp>f6wC_C9St5!X&7m+2JvFnQuj|zDC1f}*p5Irn0Sfv?1 zvJ_#N8R18K`{Y|QSxsE9Hbei|=G*Ahv@{js)vstlD4Hc-XZw@#r;oKto%Mho_uKxL zL+@;2U7C(dj40JFj}PdI5@%4KZ(ERH(x;2|F&276QFM`tuU37#aLNz~P{!XpC;DjJ z%G`b1=<@hh;dDNN)bV86emzY)_Irp^bwj{2U7eVy*acZbhii@tHh^yK>uQx{lW&SN zf9eqFlVOjjgll0K`DyvDgYU+A`yze#?o!QaGA z!i&m>6}eAF#Dd@3yQ!C*3Wf2P9VZKp&V5^Y9+TQlOQa8{%w|cKp8tIpeZ@kUNcpy{)Q+3Fg}udEciTq3tyF}ZeSCp*^FqdFSiMdOB5QTc+*c4$B^%ZV+e zT_gU!hLQ)S_0k}P+Qqj~vrCtr$7Gyg#m8)<+=yV&`ugYhGO$Tx@5ELZVKd{Cqt56R zQ2Z+9SCbvc$ob|dExBF!mM;$%GUq_B=hF#(o${UH?OFe56Yos`R2GYF@6P!0^+ zM&V-iyE`|VskVv<4Q>C`vYO_+9ryTC5$%u17x714C?>WDD653Qfe~ysemmhj;ra;z zemamI&0YZrReqKoNOgwxIJqDb;<$?bvEiqRTIEv0|pS z(vz8%6OEPW8=qPCI_L^($gU0S#MYah+9*G0q-2Y%qb{^zJo|0Y?81CX*B;MSvu0XO zH+d|umlLMayWkS%uz7vCZ?7&Cc0lyObWP+y+SK92~u z@kkyiqom`2%QpD^Vi6)qGJ5_N+MADYF#js1yw*umOY}uhjRq^*Hw+OkQqXnbl<1Ed>R04XsvB`46u> zQJ=EoD=H`zo*#tv6-MR#ic7%pOl_&Mkk?Y^57-F~BU-NbRb)^>BuOh4Q@*$}P1;cF zbY|xjXNSu#tp*TdStKWbQPHVb|5V!Zg)kPH&3-U*?}vq_W5PcIc+%Jjyu zdE>_r=4>tHDx@I`n7mp*nxnItys3c98>7+O)b44+3NL}nfwW}R&o3E$Evp8xy47e> z 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 Y|NVqiXO1*I?*IS*07*qoM6N<$g6qXe5dZ)H literal 0 HcmV?d00001 diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..73753ffbda0bdb7de08199104d62309bcb33923f GIT binary patch literal 464 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 h`J(Ro4W}$7|8DZYCLf9YvZlYEamw)j - - - React Base - - -
- - + + + + Anghel Melanie Trillo Hernández + + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 00000000..45dc8a20 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/src/__test__/components/About.test.js b/src/__test__/components/About.test.js index 4f3bd51a..44eed891 100644 --- a/src/__test__/components/About.test.js +++ b/src/__test__/components/About.test.js @@ -1,9 +1,9 @@ import React from 'react'; -import { mount } from 'enzyme'; +import { shallow } from 'enzyme'; import About from '../../components/About'; describe('', () => { - const about = mount(); + const about = shallow(); test('About render', () => { expect(about.length).toEqual(1); @@ -16,5 +16,4 @@ describe('', () => { test('About haves 3 items', () => { expect(about.find('.About-item').length).toBeGreaterThan(2); }); - }); diff --git a/src/__test__/components/Academic.test.js b/src/__test__/components/Academic.test.js index 10718e5d..ee38154e 100644 --- a/src/__test__/components/Academic.test.js +++ b/src/__test__/components/Academic.test.js @@ -1,9 +1,9 @@ import React from 'react'; -import { mount } from 'enzyme'; +import { shallow } from 'enzyme'; import Academic from '../../components/Academic'; describe('', () => { - const academic = mount(); + const academic = shallow(); test('Academic render', () => { expect(academic.length).toEqual(1); @@ -16,5 +16,4 @@ describe('', () => { test('Academic has 3 items', () => { expect(academic.find('.Academic-item').length).toBeGreaterThan(2); }); - }); diff --git a/src/__test__/components/Experience.test.js b/src/__test__/components/Experience.test.js index 6ddf5fbf..0e4b4e8e 100644 --- a/src/__test__/components/Experience.test.js +++ b/src/__test__/components/Experience.test.js @@ -1,9 +1,9 @@ import React from 'react'; -import { mount } from 'enzyme'; +import { shallow } from 'enzyme'; import Experience from '../../components/Experience'; describe('', () => { - const experience = mount(); + const experience = shallow(); test('Experience render', () => { expect(experience.length).toEqual(1); @@ -16,5 +16,4 @@ describe('', () => { test('Experience haves 3 items', () => { expect(experience.find('.Experience-item').length).toBeGreaterThan(2); }); - }); diff --git a/src/__test__/components/Header.test.js b/src/__test__/components/Header.test.js index 894ec0ab..61c3922b 100644 --- a/src/__test__/components/Header.test.js +++ b/src/__test__/components/Header.test.js @@ -1,9 +1,9 @@ import React from 'react'; -import { mount } from 'enzyme'; +import { shallow } from 'enzyme'; import Header from '../../components/Header'; describe('
', () => { - const header = mount(
); + const header = shallow(
); test('Header render', () => { expect(header.length).toEqual(1); @@ -12,5 +12,4 @@ describe('
', () => { test('Header title', () => { expect(header.find('.Header-title').length).toEqual(1); }); - }); diff --git a/src/__test__/components/Interest.test.js b/src/__test__/components/Interest.test.js index cbf665b3..4ef2cc4b 100644 --- a/src/__test__/components/Interest.test.js +++ b/src/__test__/components/Interest.test.js @@ -1,9 +1,9 @@ import React from 'react'; -import { mount } from 'enzyme'; +import { shallow } from 'enzyme'; import Interest from '../../components/Interest'; describe('', () => { - const interest = mount(); + const interest = shallow(); test('Interest render', () => { expect(interest.length).toEqual(1); @@ -16,5 +16,4 @@ describe('', () => { test('Interest has 3 items', () => { expect(interest.find('.Interest-item').length).toBeGreaterThan(2); }); - }); diff --git a/src/__test__/components/Languages.test.js b/src/__test__/components/Languages.test.js index 1d10e137..a1084256 100644 --- a/src/__test__/components/Languages.test.js +++ b/src/__test__/components/Languages.test.js @@ -1,9 +1,9 @@ import React from 'react'; -import { mount } from 'enzyme'; +import { shallow } from 'enzyme'; import Languages from '../../components/Languages'; describe('', () => { - const languages = mount(); + const languages = shallow(); test('Languages render', () => { expect(languages.length).toEqual(1); @@ -16,5 +16,4 @@ describe('', () => { test('Languages has 3 items', () => { expect(languages.find('.Languages-item').length).toBeGreaterThan(2); }); - }); diff --git a/src/__test__/components/Profile.test.js b/src/__test__/components/Profile.test.js index f71ed22b..fb478b7e 100644 --- a/src/__test__/components/Profile.test.js +++ b/src/__test__/components/Profile.test.js @@ -1,9 +1,9 @@ import React from 'react'; -import { mount } from 'enzyme'; +import { shallow } from 'enzyme'; import Profile from '../../components/Profile'; describe('', () => { - const profile = mount(); + const profile = shallow(); test('Profile render', () => { expect(profile.length).toEqual(1); @@ -16,5 +16,4 @@ describe('', () => { test('Profile have a description', () => { expect(profile.find('.Profile-desc').length).toEqual(1); }); - }); diff --git a/src/__test__/components/Skills.test.js b/src/__test__/components/Skills.test.js index 4c3d9a53..4a39fd89 100644 --- a/src/__test__/components/Skills.test.js +++ b/src/__test__/components/Skills.test.js @@ -1,9 +1,9 @@ import React from 'react'; -import { mount } from 'enzyme'; +import { shallow } from 'enzyme'; import Skills from '../../components/Skills'; describe('', () => { - const skills = mount(); + const skills = shallow(); test('Skills render', () => { expect(skills.length).toEqual(1); @@ -16,5 +16,4 @@ describe('', () => { test('Skills has 3 items', () => { expect(skills.find('.Skills-item').length).toBeGreaterThan(2); }); - }); diff --git a/src/components/About.jsx b/src/components/About.jsx new file mode 100644 index 00000000..689a4021 --- /dev/null +++ b/src/components/About.jsx @@ -0,0 +1,28 @@ +import React from 'react'; + +function About(props) { + const { data } = props; + + return ( +
+

About

+

+ Email: + {' '} + {data?.email} +

+

+ Website: + {' '} + {data?.website} +

+

+ Country: + {' '} + {data?.address} +

+
+ ); +} + +export default About; diff --git a/src/components/Academic.jsx b/src/components/Academic.jsx new file mode 100644 index 00000000..abb691c1 --- /dev/null +++ b/src/components/Academic.jsx @@ -0,0 +1,35 @@ +import React from 'react'; + +function Academic(props) { + const { academic = new Array(3).fill({ + degree: 'No education', + description: '', + endDate: '', + institution: '', + startDate: '', + }) } = props; + return ( +
+

Academic

+
+ {academic.map((item, index) => ( +
    +

    +
  • + {item.degree} + {' '} + • + {' '} + {item?.institution} +
  • +

    +

    {`${item.startDate} - ${item.endDate}`}

    +

    {item.description}

    +
+ ))} +
+
+ ); +} + +export default Academic; diff --git a/src/components/Experience.jsx b/src/components/Experience.jsx new file mode 100644 index 00000000..174a98b2 --- /dev/null +++ b/src/components/Experience.jsx @@ -0,0 +1,44 @@ +import React from 'react'; + +function Experience(props) { + const { + experience = new Array(3).fill({ + jobDescription: 'No experience yet', + company: '', + jobTitle: 'No experience yet', + startDate: '', + endDate: '', + }), + } = props; + return ( +
+

Experience

+
+ {experience.map((item, index) => ( +
    +

    +
  • + {item?.jobTitle} + {' '} + • + {' '} + {`${item?.startDate} - ${item?.endDate}`} +
  • +

    +

    {item?.company}

    +

    + Stack: + {' '} + {item?.jobDescription} +

    +
+ ))} +
+
+ ); +} + +export default Experience; diff --git a/src/components/Header.jsx b/src/components/Header.jsx new file mode 100644 index 00000000..83050cbb --- /dev/null +++ b/src/components/Header.jsx @@ -0,0 +1,20 @@ +import React from 'react'; + +function Header(props) { + const { data, children } = props; + + return ( +
+
+ avatar +
+
+

{data?.name}

+

{data?.profession}

+ {children} +
+
+ ); +} + +export default Header; diff --git a/src/components/Interest.jsx b/src/components/Interest.jsx new file mode 100644 index 00000000..04811800 --- /dev/null +++ b/src/components/Interest.jsx @@ -0,0 +1,19 @@ +import React from 'react'; + +function Interest(props) { + const { interest = new Array(3).fill('No interests submitted') } = props; + return ( +
+

Interests

+
    + {interest.map((item, index) => ( +
  • + {item} +
  • + ))} +
+
+ ); +} + +export default Interest; diff --git a/src/components/Languages.jsx b/src/components/Languages.jsx new file mode 100644 index 00000000..484bdb39 --- /dev/null +++ b/src/components/Languages.jsx @@ -0,0 +1,25 @@ +import React from 'react'; + +function Languages(props) { + const { + languages = new Array(3).fill({ + name: 'No languages yet', + percentage: '0%', + }), + } = props; + + return ( +
+

Languages

+
+ {languages.map((item, index) => ( +
+ {item.name} {item.level && ({item.level})} +
+ ))} +
+
+ ); +} + +export default Languages; diff --git a/src/components/Profile.jsx b/src/components/Profile.jsx new file mode 100644 index 00000000..4101018b --- /dev/null +++ b/src/components/Profile.jsx @@ -0,0 +1,14 @@ +import React from 'react'; + +function Profile(props) { + const { data } = props; + + return ( +
+

Profile

+
{data?.Profile}
+
+ ); +} + +export default Profile; diff --git a/src/components/Skills.jsx b/src/components/Skills.jsx new file mode 100644 index 00000000..6ff7d0a7 --- /dev/null +++ b/src/components/Skills.jsx @@ -0,0 +1,22 @@ +import React from 'react'; + +function Skills(props) { + const { skills = new Array(3).fill({ + name: 'No skills yet', + percentage: '0%', + }) } = props; + return ( +
+

Skills

+
+ {skills.map((item, index) => ( +
+ {item.name} +
+ ))} +
+
+ ); +} + +export default Skills; diff --git a/src/containers/App.jsx b/src/containers/App.jsx index 57224430..f95d2376 100644 --- a/src/containers/App.jsx +++ b/src/containers/App.jsx @@ -8,21 +8,26 @@ import Academic from '../components/Academic'; import Skills from '../components/Skills'; import Interest from '../components/Interest'; import Languages from '../components/Languages'; +import useGetData from '../hooks/useGetData'; + +const API = 'https://raw.githubusercontent.com/AM27TH/react-eth-challenge/main/data.json'; + +const App = function () { + const data = useGetData(API); -const App = () => { return ( <> -
- +
+
- - - - - - + + + + + + - ) + ); }; export default App; diff --git a/src/hooks/useGetData.js b/src/hooks/useGetData.js new file mode 100644 index 00000000..38c9a828 --- /dev/null +++ b/src/hooks/useGetData.js @@ -0,0 +1,17 @@ +import { useEffect, useState } from 'react'; +import getData from '../utils/getData'; + +const useGetData = (API) => { + const [data, setData] = useState({}); + + useEffect(() => { + (async () => { + const response = await getData(API); + setData(response.data); + })(); + }, []); + + return data; +}; + +export default useGetData; diff --git a/src/index.js b/src/index.js index 9077e5ff..8845186e 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,6 @@ import React from 'react'; -import ReactDOM from 'react-dom'; +import ReactDOM from 'react-dom/client'; import App from './containers/App'; -ReactDOM.render(, document.getElementById('app')); +const root = ReactDOM.createRoot(document.getElementById('app')); +root.render(); diff --git a/src/styles/components/App.styl b/src/styles/components/App.styl index 4f92eccb..4cd0e647 100644 --- a/src/styles/components/App.styl +++ b/src/styles/components/App.styl @@ -1,2 +1,88 @@ +* + font-family Roboto, Arial, Helvetica, sans-serif; + box-sizing border-box + padding 0 + margin 0 + body - background-color blue \ No newline at end of file + font-size 16px + background-color #D9AFD9 + background-image linear-gradient(0deg, #D9AFD9 0%, #97D9E1 100%) + +h1 + font-size 2rem + +h2 + font-size 1.5rem + +h4 + font-size 1.1rem + margin-bottom 4px + +ul + list-style-type none + +#app + padding-left 2rem + padding-right 2rem + +#app section, .Experience-item, .Academic-item + margin-top 1rem + margin-bottom 1rem + +.Header-box, .Profile, .Experience, .Academic, .Skills, .Interest, .Languages + background rgba(255, 255, 255, .85); + padding 1rem + border-radius 20px + +#app section h2 + margin-bottom 0.2rem + +.Header + display flex + flex-wrap wrap + gap 2rem + justify-content center + +.Header-box + width 100% + +.avatar + width 200px + height 200px + object-fit cover + border-radius 50% + +.Header-job-title + font-size 1.2rem + +.Header-title, .Header-job-title + text-align center + +.Skills-items, .Interest-items, .Languages-items + display flex + flex-wrap wrap + gap 0.5rem + margin-top 1rem + margin-bottom 1rem + +.Skills-item, .Interest-item, .Languages-level + background rgb(151, 217, 225); + color #17494f + padding 0.5rem + border-radius 20px + +.job-company, .academic-dates + margin-bottom 4px + +.job-description, .academic-descr + margin-left 8px + +@media (min-width: 640px) { + .Header-box { + flex 1 + } + .Header-title, .Header-job-title { + text-align left + } + } \ No newline at end of file diff --git a/src/utils/getData.js b/src/utils/getData.js index e69de29b..dbeb5ffa 100644 --- a/src/utils/getData.js +++ b/src/utils/getData.js @@ -0,0 +1,18 @@ +/** + * Fetch data + * @param {string} url to fetch + * @returns {object} cv data + */ + +const getData = async (url) => { + try { + const response = await fetch(url); + const data = await response.json(); + return data; + } catch (err) { + console.info('An error ocurred using the API'); + console.error(err.message); + } +}; + +export default getData; From 5f50321440b2a8daaf09cfa0167186f729f7715b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anghel=20Melanie=20Trillo=20Hern=C3=A1ndez?= Date: Mon, 1 Aug 2022 00:34:18 -0500 Subject: [PATCH 2/3] Create deploy.yml --- .github/workflows/deploy.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .github/workflows/deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..21e88a45 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,20 @@ +name: Build and Deploy +on: [push] +permissions: + contents: write +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v3 + + - name: Install and Build + run: | + npm ci + npm run build + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@v4 + with: + branch: gh-pages + folder: dist # The folder the action should deploy. From 41221889a0b16830f98920d7e99f926220307d4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anghel=20Melanie=20Trillo=20Hern=C3=A1ndez?= Date: Mon, 1 Aug 2022 00:38:06 -0500 Subject: [PATCH 3/3] Update deploy.yml --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 21e88a45..e99eafa0 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -11,7 +11,7 @@ jobs: - name: Install and Build run: | - npm ci + npm ci --force npm run build - name: Deploy 🚀 uses: JamesIves/github-pages-deploy-action@v4