{"version":3,"sources":["imgs/me-03-small.jpg","imgs/bg-00.png","components/Links.js","js/storage.js","js/theme.js","components/NavMenu.js","components/BasicData.js","components/TechChips.js","components/Layout.js","components/Summary.js","components/Home.js","components/ProjectCard.js","components/Projects.js","components/Project.js","components/Work.js","components/Education.js","components/Resume.js","components/ContactMe.js","components/Code.js","App.js","registerServiceWorker.js","index.js"],"names":["Links","this","getLinks3","className","href","target","name","NavLink","tag","Link","to","Component","displayName","rLocalStorage","key","value","JSON","stringify","window","localStorage","setItem","getItem","parse","gf","theme","onChange","getTheme","setTheme","wasSet","custom","init","current","root","document","getElementsByTagName","body","classList","contains","add","btn","getElementById","btnMovil","apply","remove","NavMenu","props","toggleNavbar","bind","state","collapsed","schema","setState","elems","querySelectorAll","M","Sidenav","addEventListener","onClick","id","src","background","me","BasicData","themeMode","alt","TechChips","items","loading","populateData","a","fetch","response","json","data","contents","drawData","map","item","index","replace","Layout","children","Summary","componentDidMount","scrollTo","Home","ProjectCard","drawCard","getCardContent","showCarousel","linkForMoreDetails","image","description","text","length","lines","links","url","imgs","i","images","event","preventDefault","title","getModalBody","innerHTML","modal","Modal","onOpenEnd","slidsElems","Slider","Materialbox","getInstance","open","Projects","allItems","searchTerm","drawElements","onChipsChanged","filterByChips","search","responseTechs","techs","filtered","filter","searchLowerCase","toLowerCase","includes","some","t","initChips","chips","push","autocompleteItems","temp","Chips","placeholder","secondaryPlaceholder","limit","autocompleteOptions","Infinity","minLength","onChipAdd","onChipDelete","onChipSelect","elements","instance","all","chipsData","c","querySelector","focus","URLSearchParams","location","get","console","log","projectRecentlyClosed","searchAdvancedUI","Project","initCloseButton","handleOnClose","FloatingActionButton","direction","onCloseProject","subtitle","closeButton","img","nav","Work","Collapsible","companyName","period","drawFunctions","functions","funs","i2","startsWith","Education","institute","when","order","Resume","ContactMe","getForm","handleInputChange","send","restartForm","serverResponse","email","subject","e","Error","method","headers","forceUpdate","alert","onSubmit","type","required","htmlFor","Code","App","exact","path","component","isLocalhost","Boolean","hostname","match","registerValidSW","swUrl","navigator","serviceWorker","register","then","registration","onupdatefound","installingWorker","installing","onstatechange","controller","catch","error","baseUrl","getAttribute","rootElement","ReactDOM","render","basename","URL","process","origin","status","indexOf","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.98a74306.chunk.js","sourcesContent":["export default __webpack_public_path__ + \"static/media/me-03-small.8e3bfcbf.jpg\";","export default __webpack_public_path__ + \"static/media/bg-00.4b83aced.png\";","import React, { Component } from 'react';\r\nimport LineIcon from 'react-lineicons';\r\nimport { NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\n\r\nexport class Links extends Component {\r\n static displayName = Links.name;\r\n\r\n render() {\r\n return this.getLinks3();\r\n }\r\n\r\n getLinks3() {\r\n return (\r\n <>\r\n
\r\n \r\n    \r\n \r\n    \r\n \r\n    \r\n {/**/}\r\n {/*   */}\r\n \r\n    \r\n \r\n
\r\n \r\n );\r\n }\r\n\r\n getLinks2() {\r\n return (\r\n <>\r\n
\r\n On LinkedIn\r\n On Stack Overflow\r\n Send me a message\r\n On Twitter - @giovanny.farto\r\n On Instagram - @gfarto\r\n
\r\n \r\n );\r\n }\r\n\r\n getLinks() {\r\n return (\r\n <>\r\n \r\n \r\n );\r\n }\r\n}","var rLocalStorage = {\r\n set: function (key, value) {\r\n if (!key)\r\n return;\r\n\r\n if (typeof value === 'object')\r\n value = JSON.stringify(value);\r\n\r\n window.localStorage.setItem(key, value);\r\n },\r\n get: function (key) {\r\n if (!key)\r\n return;\r\n\r\n var value = localStorage.getItem(key);\r\n if (!value)\r\n return;\r\n\r\n if (value[0] === '{' || value[0] === '[')\r\n value = JSON.parse(value);\r\n\r\n return value;\r\n }\r\n};\r\n\r\nvar rSessionStorage = {\r\n set: function (key, value) {\r\n if (!key)\r\n return;\r\n\r\n if (typeof value === 'object')\r\n value = JSON.stringify(value);\r\n\r\n window.sessionStorage.setItem(key, value);\r\n },\r\n get: function (key) {\r\n if (!key)\r\n return;\r\n\r\n var value = sessionStorage.getItem(key);\r\n if (!value)\r\n return;\r\n\r\n if (value[0] === '{' || value[0] === '[')\r\n value = JSON.parse(value);\r\n\r\n return value;\r\n }\r\n};\r\n\r\n\r\nexport const gf = {\r\n clearAll: function () {\r\n window.localStorage.clear();\r\n window.sessionStorage.clear();\r\n },\r\n clearLocalStorage: function () {\r\n window.localStorage.clear();\r\n },\r\n getTheme: function () {\r\n return rLocalStorage.get('theme');\r\n },\r\n setTheme: function (value) {\r\n rLocalStorage.set('theme', value);\r\n },\r\n getThemeCustomized: function () {\r\n return rLocalStorage.get('theme-custom');\r\n },\r\n setThemeCustomized: function (value) {\r\n rLocalStorage.set('theme-custom', value);\r\n }\r\n};\r\n\r\n","import { gf } from './storage';\r\n\r\nexport const theme = {\r\n onChange: null,\r\n getTheme: function () {\r\n\r\n let theme = gf.getTheme();\r\n if (!theme) {\r\n theme = \"light\";\r\n this.setTheme(theme, false);\r\n }\r\n\r\n return theme;\r\n },\r\n wasSet: function () {\r\n\r\n let custom = gf.getThemeCustomized();\r\n if (!custom) {\r\n return false;\r\n }\r\n\r\n return custom == 'user-selected';\r\n },\r\n init: function () {\r\n // remove previous theme\r\n let current = gf.getTheme();\r\n let root = document.getElementsByTagName('html')[0];\r\n if (!current) {\r\n current = 'light';\r\n }\r\n\r\n // add new theme\r\n if (!document.body.classList.contains(current))\r\n document.body.classList.add(current);\r\n if (!root.classList.contains(current))\r\n root.classList.add(current);\r\n\r\n let btn = document.getElementById('theme-btn');\r\n if (btn) {\r\n if (current == 'dark')\r\n btn.classList = 'lni lni-sun size-md';\r\n else\r\n btn.classList = 'lni lni-night size-md';\r\n }\r\n let btnMovil = document.getElementById('theme-btn-movil');\r\n if (btnMovil) {\r\n if (current == 'dark')\r\n btnMovil.classList = 'lni lni-sun size-md';\r\n else\r\n btnMovil.classList = 'lni lni-night size-md';\r\n }\r\n },\r\n apply: function (value) {\r\n if (!value)\r\n value = 'light';\r\n\r\n // remove previous theme\r\n let current = gf.getTheme();\r\n let root = document.getElementsByTagName('html')[0];\r\n if (current) {\r\n if (document.body.classList.contains(current))\r\n document.body.classList.remove(current);\r\n if (root.classList.contains(current))\r\n root.classList.remove(current);\r\n }\r\n\r\n // add new theme\r\n document.body.classList.add(value);\r\n root.classList.add(value);\r\n\r\n let btn = document.getElementById('theme-btn');\r\n if (btn) {\r\n if (value == 'dark')\r\n btn.classList = 'lni lni-sun size-md';\r\n else\r\n btn.classList = 'lni lni-night size-md';\r\n }\r\n let btnMovil = document.getElementById('theme-btn-movil');\r\n if (btnMovil) {\r\n if (value == 'dark')\r\n btnMovil.classList = 'lni lni-sun size-md';\r\n else\r\n btnMovil.classList = 'lni lni-night size-md';\r\n }\r\n },\r\n setTheme: function (value, custom) {\r\n this.apply(value);\r\n gf.setTheme(value);\r\n if (this.onChange) {\r\n this.onChange();\r\n }\r\n if (custom) {\r\n gf.setThemeCustomized('user-selected');\r\n }\r\n }//,\r\n //setColorScheme: function (scheme) {\r\n // console.log('dark');\r\n // this.setTheme(scheme, false);\r\n //},\r\n //getPreferredColorScheme: function () {\r\n // if (window.matchMedia) {\r\n // if (window.matchMedia('(prefers-color-scheme: dark)').matches) {\r\n // return 'dark';\r\n // } else {\r\n // return 'light';\r\n // }\r\n // }\r\n // return 'light';\r\n //},\r\n //updateColorScheme: function () {\r\n // setColorScheme(getPreferredColorScheme());\r\n //}\r\n};\r\n\r\n//if (window.matchMedia) {\r\n// var colorSchemeQuery = window.matchMedia('(prefers-color-scheme: dark)');\r\n// colorSchemeQuery.addEventListener('change', gf.updateColorScheme);\r\n//}\r\n\r\n//gf.updateColorScheme();\r\n\r\n","import React, { Component } from 'react';\r\nimport { NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport './NavMenu.css';\r\nimport M from 'materialize-css';\r\nimport me from '../imgs/me-03-small.jpg'\r\n//import background from '../imgs/background.jpg'\r\nimport background from '../imgs/bg-00.png'\r\nimport LineIcon from 'react-lineicons';\r\nimport { Links } from '../components/Links';\r\nimport { theme } from '../js/theme';\r\n\r\nexport class NavMenu extends Component {\r\n static displayName = NavMenu.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.toggleNavbar = this.toggleNavbar.bind(this);\r\n this.setTheme = this.setTheme.bind(this);\r\n this.state = {\r\n collapsed: true\r\n };\r\n }\r\n\r\n setTheme() {\r\n let schema = theme.getTheme();\r\n if (schema == 'light')\r\n schema = 'dark';\r\n else\r\n schema = 'light';\r\n\r\n theme.setTheme(schema, true);\r\n }\r\n\r\n toggleNavbar() {\r\n this.setState({\r\n collapsed: !this.state.collapsed\r\n });\r\n }\r\n\r\n componentDidMount() {\r\n // this.initSideNav();\r\n }\r\n\r\n componentDidUpdate() {\r\n var elems = document.querySelectorAll('.sidenav');\r\n M.Sidenav.init(elems);\r\n }\r\n\r\n initSideNav() {\r\n document.addEventListener('DOMContentLoaded', function () {\r\n var elems = document.querySelectorAll('.sidenav');\r\n M.Sidenav.init(elems);\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n\r\n {/*
*/}\r\n {/* menu*/}\r\n {/*
*/}\r\n\r\n {/**/}\r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport me from './../imgs/me-03-small.jpg';\r\nimport { theme } from '../js/theme';\r\n\r\nexport class BasicData extends Component {\r\n static displayName = BasicData.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n themeMode: theme.getTheme()\r\n };\r\n\r\n theme.onChange = () => {\r\n this.setState({ themeMode: theme.getTheme() });\r\n };\r\n }\r\n\r\n\r\n render() {\r\n\r\n let theme = this.state.themeMode;\r\n\r\n /*
*/\r\n /*
*/\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n \r\n C# developer for Windows, Web and Mobiles apps with some experience in Android using Java and Kotlin.\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\n\r\nexport class TechChips extends Component {\r\n static displayName = TechChips.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { items: [], loading: true };\r\n }\r\n\r\n componentDidMount() {\r\n this.populateData();\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('resume/techs');\r\n const data = await response.json();\r\n this.setState({ items: data, loading: false });\r\n }\r\n\r\n static drawData(items) {\r\n return items.map((item, index) => {\r\n return (\r\n
\r\n {item}\r\n {/*{item}*/}\r\n
\r\n );\r\n });\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : TechChips.drawData(this.state.items);\r\n\r\n return (\r\n
\r\n
\r\n {contents}\r\n
\r\n
\r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\n// import { Container } from 'reactstrap';\r\nimport { NavMenu } from './NavMenu';\r\n// import me from './../imgs/me.jpg';\r\nimport M from 'materialize-css';\r\nimport { BasicData } from './BasicData';\r\nimport { Links } from './Links';\r\nimport { TechChips } from './TechChips';\r\n/*import { Modal } from './Modal';*/\r\nimport { theme } from '../js/theme';\r\n\r\nexport class Layout extends Component {\r\n static displayName = Layout.name;\r\n\r\n componentDidMount() {\r\n document.addEventListener('DOMContentLoaded', function () {\r\n var elems = document.querySelectorAll('.sidenav');\r\n M.Sidenav.init(elems);\r\n });\r\n\r\n theme.init();\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n\r\n \r\n\r\n
\r\n
\r\n\r\n {/**/}\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {this.props.children}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n );\r\n }\r\n\r\n // render() {\r\n // return (\r\n //
\r\n // \r\n //
\r\n // \r\n // {this.props.children}\r\n // \r\n //
\r\n //
\r\n // );\r\n // }\r\n}\r\n","import React, { Component } from 'react';\r\n\r\nexport class Summary extends Component {\r\n static displayName = Summary.name;\r\n\r\n componentDidMount = () => window.scrollTo(0, 0);\r\n\r\n render() {\r\n return (\r\n
\r\n

Summary

\r\n

\r\n With over 15 years of experience in analysis, design, and development of software applications, I specialize in creating Windows Forms, web applications, and web services using C#.\r\n

\r\n

\r\n I am also an expert in designing and implementing data exchange solutions using http, AS2, and sftp protocols, which I have applied in international projects with esteemed clients such as Roche, GSK, Schering-Plough, Boehringer Ingelheim, and Acino.\r\n

\r\n

\r\n I have extensive functional domain experience in logistics and warehouse management systems, particularly in the pharmaceutical sector, which has given me the opportunity to understand the unique requirements of this industry.\r\n

\r\n {/*

*/}\r\n {/* In addition, I have more than 5 years of experience in designing and developing native Android and Windows Mobile (UWP) applications for a variety of use cases. With my diverse skill set and industry knowledge, I am confident that I can help you achieve your software development goals.*/}\r\n {/*

*/}\r\n\r\n

\r\n As an experienced C# developer, I specialize in creating high-quality Windows, Web, and Mobile applications. With a focus on delivering solutions that meet the needs of my clients, I have a proven track record of developing effective software solutions.\r\n

\r\n\r\n

\r\n In addition to my expertise in C#, I also have experience in Android development using Java and Kotlin. This diverse skill set allows me to develop solutions across multiple platforms and technologies.\r\n

\r\n\r\n

\r\n Whether you're looking to develop a new application or optimize an existing one, I have the skills and experience to help you achieve your goals.\r\n

\r\n\r\n
\r\n );\r\n }\r\n\r\n render_backup() {\r\n return (\r\n
\r\n

Summary

\r\n

\r\n 15+ years of experience in analysis, design and development of client/server, web based and n-tier applications. Expert in developing Windows Forms applications, web applications and web services with C#.\r\n

\r\n

\r\n Expertise in designing and developing solutions for data exchange through iDoc messages using http, AS2 and sftp protocols. This experience has been applied in international projects with companies like Roche, GSK, Schering-Plough, Boehringer Ingelheim, Acino, among others.\r\n

\r\n

\r\n Functional domain experience in logistics and warehouse management systems, especially for the pharmaceutical sector.\r\n

\r\n

\r\n Also, 5+ years of experience in design and development of native Android and Windows Mobile (UWP) applications for different areas.\r\n

\r\n\r\n
\r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { Summary } from './Summary';\r\nimport { NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\n\r\nexport class Home extends Component {\r\n static displayName = Home.name;\r\n\r\n render() {\r\n\r\n // devops\r\n // pass: 7px2fln6uhygzgyfhxcbbahidtodluk2dap32cknlkzk43vmxmjq\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n important_devices\r\n
Projects
\r\n

Explore my work: Take a look at my past projects and get a sense of my skills and experience as a software developer.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n description\r\n
Resume
\r\n

Learn more about me: See my skills and experience summarized in one place by checking out my resume.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n code\r\n
Code
\r\n

Check out my code: View my GitHub page to see my software development projects, including open-source libraries that you can use in your own work.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n message\r\n
Contact me
\r\n

Get in touch: Send me a message and let's start a conversation about your software development needs.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport M from 'materialize-css';\r\nimport { NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\n\r\nexport class ProjectCard extends Component {\r\n static displayName = ProjectCard.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.drawCard = this.drawCard.bind(this);\r\n this.getCardContent = this.getCardContent.bind(this);\r\n this.showCarousel = this.showCarousel.bind(this);\r\n }\r\n\r\n drawCard(item, id) {\r\n\r\n //let linkForImages = (\r\n //
\r\n // Screenshots\r\n //
);\r\n\r\n let linkForMoreDetails = (\r\n
\r\n More details\r\n
);\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n {item.name}more_vert\r\n

{item.description}

\r\n
\r\n
\r\n {item.name}close\r\n

{this.getCardContent(item)}

\r\n
\r\n {linkForMoreDetails}\r\n
\r\n );\r\n }\r\n\r\n getCardContent(item) {\r\n\r\n if (item.text)\r\n if (item.text.length > 0)\r\n return {item.text[0]};\r\n\r\n return No text found.;\r\n }\r\n\r\n getCardContent_nooooooo(item) {\r\n\r\n let lines = item.text.map((item, index) => {\r\n let id = `line_${index}`;\r\n return {item}
\r\n });\r\n\r\n let links = item.links.map((item, index) => {\r\n let id = `link_${index}`;\r\n return {`${item.name}: `} {`${item.url}`} \r\n });\r\n\r\n //let screenshots = '';\r\n //if (item.images) {\r\n // screenshots = Screenshots\r\n //}\r\n\r\n //
\r\n // {screenshots}\r\n return (\r\n <>\r\n {lines}\r\n
\r\n {links}\r\n
\r\n\r\n \r\n );\r\n }\r\n\r\n getModalBody_only_images_noooo(item) {\r\n //let imgs = item.images.map((item, index) => {\r\n // return ``;\r\n //});\r\n\r\n // \r\n let imgs = '';\r\n for (let i = 0; i < item.images.length; i++) {\r\n imgs += ``;\r\n }\r\n\r\n // class=\"row\">
\r\n return `
${imgs}
`;\r\n }\r\n\r\n getModalBody_carousel_noooo(item) {\r\n let imgs = '';\r\n for (let i = 0; i < item.images.length; i++) {\r\n imgs += ``;\r\n }\r\n\r\n return `
${imgs}
`;\r\n }\r\n\r\n getModalBody(item) {\r\n let imgs = '';\r\n for (let i = 0; i < item.images.length; i++) {\r\n // class=\"materialboxed\" width=\"400\" \r\n imgs += `
  • `;\r\n }\r\n\r\n //return `
      ${imgs}
    `;\r\n return `
      ${imgs}
    `;\r\n }\r\n\r\n showCarousel(event) {\r\n\r\n event.preventDefault();\r\n\r\n //let id = event.target.dataset.id;\r\n //console.log(id);\r\n\r\n let item = this.props.item;\r\n let title = item.name;\r\n let body = this.getModalBody(item);\r\n\r\n document.getElementById('modal-full-title').innerHTML = title;\r\n document.getElementById('modal-full-body').innerHTML = body;\r\n\r\n let modal = document.getElementById('modal-full');\r\n M.Modal.init(modal, {\r\n onOpenEnd: () => {\r\n\r\n //let carouselElems = document.querySelectorAll('.carousel');\r\n //M.Carousel.init(carouselElems, {\r\n // duration: 1000,\r\n // indicators: true\r\n //});\r\n\r\n let slidsElems = document.querySelectorAll('.slider');\r\n M.Slider.init(slidsElems);\r\n\r\n let elems = document.querySelectorAll('.materialboxed');\r\n M.Materialbox.init(elems);\r\n }\r\n });\r\n\r\n let instance = M.Modal.getInstance(modal);\r\n instance.open();\r\n }\r\n\r\n render() {\r\n return this.drawCard(this.props.item, this.props.id);\r\n }\r\n}\r\n\r\n","import React, { Component } from 'react';\r\nimport M from 'materialize-css';\r\nimport { ProjectCard } from './ProjectCard';\r\n\r\nexport class Projects extends Component {\r\n static displayName = Projects.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n allItems: [],\r\n items: [],\r\n loading: true,\r\n searchTerm: null\r\n };\r\n\r\n this.drawElements = this.drawElements.bind(this);\r\n //this.handleSelectedProject = this.handleSelectedProject.bind(this);\r\n //this.handleOnCloseProject = this.handleOnCloseProject.bind(this);\r\n this.onChipsChanged = this.onChipsChanged.bind(this);\r\n this.filterByChips = this.filterByChips.bind(this);\r\n }\r\n\r\n async populateData(search) {\r\n const response = await fetch('resume/projects');\r\n const data = await response.json();\r\n\r\n const responseTechs = await fetch('resume/techs');\r\n const techs = await responseTechs.json();\r\n\r\n let filtered = [...data];\r\n if (search) {\r\n filtered = data.filter(i => {\r\n let searchLowerCase = search.toLowerCase();\r\n return i.id.toLowerCase().includes(searchLowerCase)\r\n || i.name.toLowerCase().includes(searchLowerCase)\r\n || i.text.some(t => t.toLowerCase().includes(searchLowerCase));\r\n });\r\n }\r\n\r\n this.setState({\r\n allItems: data,\r\n items: filtered,\r\n loading: false,\r\n searchTerm: search,\r\n techs: techs\r\n });\r\n this.initChips(search);\r\n }\r\n\r\n initChips(search) {\r\n\r\n let data = [];\r\n if (this.state.chips)\r\n data = this.state.chips;\r\n\r\n if (search)\r\n data.push({\r\n tag: search\r\n });\r\n\r\n let autocompleteItems = {};\r\n let temp = [...this.state.techs];\r\n for (var i = 0; i < temp.length; i++) {\r\n autocompleteItems[temp[i]] = null;\r\n }\r\n\r\n // init chips in input\r\n let elems = document.querySelectorAll('.chips');\r\n let instances = M.Chips.init(elems,\r\n {\r\n placeholder: 'Search. Ex: C#',\r\n secondaryPlaceholder: '+Other',\r\n limit: 5,\r\n autocompleteOptions: {\r\n data: autocompleteItems,\r\n limit: Infinity,\r\n minLength: 1\r\n },\r\n data: data,\r\n onChipAdd: this.onChipsChanged,\r\n onChipDelete: this.onChipsChanged,\r\n onChipSelect: this.onChipsChanged\r\n });\r\n }\r\n\r\n filterByChips() {\r\n let elements = document.querySelectorAll('.chips');\r\n if (!elements)\r\n return;\r\n\r\n let instance = M.Chips.getInstance(elements[0]);\r\n\r\n let all = this.state.allItems;\r\n let filtered = [...all];\r\n\r\n let chips = instance.chipsData;\r\n if (chips && chips.length > 0) {\r\n filtered = all.filter(i => {\r\n return chips.some(\r\n c => i.id.toLowerCase().includes(c.tag.toLowerCase())\r\n || i.name.toLowerCase().includes(c.tag.toLowerCase())\r\n || i.text.some(t => t.toLowerCase().includes(c.tag.toLowerCase()))\r\n );\r\n });\r\n }\r\n\r\n if (chips.length == 0)\r\n document.querySelector('.chips input').focus();\r\n\r\n this.setState({ items: filtered, chips: chips });\r\n }\r\n\r\n onChipsChanged() {\r\n this.filterByChips();\r\n }\r\n\r\n componentDidMount() {\r\n const queryParams = new URLSearchParams(this.props.location.search);\r\n const search = queryParams.get('search');\r\n console.log(`__search__: ${search}`);\r\n\r\n this.populateData(search);\r\n console.log('Mount');\r\n\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.state.projectRecentlyClosed) {\r\n this.initChips();\r\n this.state.projectRecentlyClosed = false;\r\n }\r\n\r\n const queryParams = new URLSearchParams(this.props.location.search);\r\n const search = queryParams.get('search');\r\n if (search) {\r\n if (this.state.searchTerm != search) {\r\n console.log(`__search__: ${search}`);\r\n this.populateData(search);\r\n }\r\n }\r\n\r\n console.log('Update');\r\n }\r\n\r\n drawElements() {\r\n\r\n let searchAdvancedUI = (\r\n <>\r\n
    \r\n
    \r\n \r\n );\r\n\r\n if (!this.state.items || this.state.items.length == 0) {\r\n return (\r\n <>\r\n

    Projects

    \r\n

    These are some of the main or interesting projects that I have anytime participated in.

    \r\n\r\n {searchAdvancedUI}\r\n\r\n
    \r\n
    \r\n

    Sorry, there is no data to display with the selected filter.

    \r\n

    Please try selecting a different filter or check back later for updates.

    \r\n
    \r\n
    \r\n \r\n );\r\n } else {\r\n return (\r\n <>\r\n

    Projects

    \r\n

    These are some of the main or interesting projects that I have anytime participated in.

    \r\n\r\n {searchAdvancedUI}\r\n\r\n
    \r\n {this.state.items.map((item, index) => {\r\n let id = `card_${index}`;\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n )}\r\n
    \r\n \r\n );\r\n }\r\n }\r\n\r\n render() {\r\n\r\n if (this.state.loading)\r\n return (\r\n

    Loading...

    \r\n );\r\n\r\n let contents = this.state.loading\r\n ?

    Loading...

    \r\n : this.drawElements();\r\n\r\n return (\r\n
    \r\n {contents}\r\n
    \r\n );\r\n }\r\n\r\n}\r\n\r\n","import React, { Component } from 'react';\r\nimport M from 'materialize-css';\r\nimport { NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\n//import MyImage from './MyImage';\r\n\r\nexport class Project extends Component {\r\n static displayName = Project.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.drawData = this.drawData.bind(this);\r\n this.initCloseButton = this.initCloseButton.bind(this);\r\n this.handleOnClose = this.handleOnClose.bind(this);\r\n\r\n this.state = {\r\n id: null,\r\n item: null,\r\n loading: true\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n const queryParams = new URLSearchParams(this.props.location.search);\r\n const id = queryParams.get('id');\r\n this.populateData(id);\r\n }\r\n\r\n componentDidUpdate() {\r\n let elems = document.querySelectorAll('.materialboxed');\r\n M.Materialbox.init(elems);\r\n\r\n this.initCloseButton();\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n async populateData(id) {\r\n try {\r\n const response = await fetch(`resume/project?id=${id}`);\r\n const item = await response.json();\r\n this.setState({\r\n id: id,\r\n item: item,\r\n loading: false\r\n });\r\n } catch (error) {\r\n this.setState({\r\n id: id,\r\n item: null,\r\n loading: false\r\n });\r\n }\r\n }\r\n\r\n initCloseButton() {\r\n let elems = document.querySelectorAll('.fixed-action-btn');\r\n M.FloatingActionButton.init(elems, {\r\n direction: 'top'\r\n });\r\n }\r\n\r\n handleOnClose(event) {\r\n event.preventDefault();\r\n if (this.props.onCloseProject)\r\n this.props.onCloseProject();\r\n }\r\n\r\n drawData(item, id) {\r\n\r\n let title = (\r\n

    {item.name}

    \r\n );\r\n\r\n let subtitle = (\r\n

    {item.description}

    \r\n );\r\n\r\n let lines = item.text.map((item, index) => {\r\n let id = `line_${index}`;\r\n return

    {item}

    \r\n });\r\n\r\n let links = item.links.map((item, index) => {\r\n let id = `link_${index}`;\r\n return
    {`${item.name}: `}
    {`${item.url}`}

    \r\n });\r\n\r\n let images = (\r\n

    No images available.

    \r\n );\r\n\r\n let closeButton = (\r\n
    \r\n close\r\n
    \r\n );\r\n\r\n let closeButton_old = (\r\n
    \r\n \r\n close\r\n \r\n
    \r\n );\r\n\r\n let closeBtn = (\r\n close\r\n );\r\n\r\n if (item.images) {\r\n images = item.images.map((img, index) => {\r\n let id = `img_${index}`;\r\n // width=\"250\" \r\n return (\r\n
    \r\n \r\n {/**/}\r\n {/*loading=\"lazy\"*/}\r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n })\r\n }\r\n\r\n let temp = (\r\n
    \r\n
    \r\n {title}\r\n
    \r\n
    \r\n {closeBtn}\r\n
    \r\n
    \r\n );\r\n\r\n let nav = (\r\n \r\n );\r\n\r\n if (item.links && item.links.length > 0) {\r\n return (\r\n
    \r\n {nav}\r\n {title}\r\n {closeButton}\r\n {subtitle}\r\n
    \r\n
    \r\n {lines}\r\n
    \r\n
    \r\n {links}\r\n
    \r\n
    \r\n
    \r\n {images}\r\n
    \r\n
    \r\n );\r\n } else {\r\n return (\r\n
    \r\n {nav}\r\n {title}\r\n {closeButton}\r\n {subtitle}\r\n
    \r\n
    \r\n {lines}\r\n
    \r\n
    \r\n
    \r\n {images}\r\n
    \r\n
    \r\n );\r\n }\r\n }\r\n\r\n render() {\r\n\r\n if (this.state.loading) {\r\n return <>\r\n

    loading...

    \r\n \r\n }\r\n\r\n let item = this.state.item;\r\n let id = this.state.id;\r\n\r\n if (id && !item) {\r\n return <>\r\n

    {`Project '${id}' not found!`}

    \r\n

    You can check my projects here

    \r\n \r\n }\r\n\r\n if (id && item) {\r\n return this.drawData(item, id);\r\n }\r\n\r\n return

    loading...!!!

    \r\n }\r\n}\r\n\r\n","import React, { Component } from 'react';\r\nimport M from 'materialize-css';\r\n\r\nexport class Work extends Component {\r\n static displayName = Work.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { items: [], loading: true };\r\n //this.drawFunctions = this.drawFunctions.bind(this);\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

    Loading...

    \r\n : Work.drawData(this.state.items);\r\n\r\n return (\r\n
    \r\n

    Work experience

    \r\n {/*

    This is my work experience page.

    */}\r\n {contents}\r\n
    \r\n );\r\n }\r\n\r\n componentDidMount() {\r\n this.populateData();\r\n }\r\n\r\n componentDidUpdate() {\r\n let elems = document.querySelectorAll('.collapsible');\r\n M.Collapsible.init(elems);\r\n\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n static drawData(items) {\r\n return (\r\n
      \r\n {items.map((item, index) =>\r\n
    • \r\n
      \r\n {item.title}\r\n \r\n    |   \r\n {item.companyName}\r\n   \r\n ( {item.period} )\r\n \r\n
      \r\n
      \r\n
      \r\n
      \r\n {item.companyName}\r\n
      \r\n
      \r\n \r\n ( {item.period} )\r\n \r\n
      \r\n
      \r\n
      \r\n {this.drawFunctions(item.functions, index)}\r\n
      \r\n
    • \r\n )}\r\n
    \r\n );\r\n }\r\n\r\n static drawFunctions(funs, index) {\r\n return (\r\n <>\r\n \r\n {funs.map((item, i2) =>
    {item}
    )}\r\n
    \r\n \r\n );\r\n }\r\n\r\n static drawFunctions_old_2(funs) {\r\n return (\r\n
      \r\n {funs.map(function (item) {\r\n if (item.startsWith(\"//\")) {\r\n return
    • {item}
    • \r\n } else if (item.startsWith(\"--\")) {\r\n return
    • {item}
    • \r\n } else if (item.startsWith(\"\")) {\r\n return
    • ...
    • \r\n } else {\r\n return
    • {item}
    • \r\n }\r\n })}\r\n
    \r\n );\r\n }\r\n\r\n static drawFunctions_old(funs) {\r\n return (\r\n
      \r\n {funs.map(item =>\r\n
    • \r\n {item}\r\n
    • \r\n )}\r\n
    \r\n );\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('resume/work');\r\n const data = await response.json();\r\n this.setState({ items: data, loading: false });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\n// import M from 'materialize-css';\r\n\r\nexport class Education extends Component {\r\n static displayName = Education.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { items: [], loading: true };\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('resume/education');\r\n const data = await response.json();\r\n this.setState({ items: data, loading: false });\r\n }\r\n\r\n componentDidMount() {\r\n this.populateData();\r\n }\r\n\r\n componentDidUpdate() {\r\n // let elems = document.querySelectorAll('.collapsible');\r\n // M.Collapsible.init(elems);\r\n }\r\n\r\n static drawData(items) {\r\n return (\r\n
      \r\n {items.map(item =>\r\n
    • \r\n \r\n {item.title}\r\n \r\n

      \r\n {item.institute}\r\n
      \r\n {item.when}\r\n

      \r\n
    • \r\n )}\r\n
    \r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

    Loading...

    \r\n : Education.drawData(this.state.items);\r\n\r\n return (\r\n
    \r\n

    Education

    \r\n {/*

    This is my work education page.

    */}\r\n {contents}\r\n
    \r\n );\r\n }\r\n\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Work } from '../components/Work';\r\nimport { Education } from '../components/Education';\r\n\r\nexport class Resume extends Component {\r\n static displayName = Resume.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n // this.state = { currentCount: 0 };\r\n }\r\n\r\n componentDidMount = () => window.scrollTo(0, 0);\r\n\r\n render() {\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n}\r\n","import React, { Component } from 'react';\r\nimport { NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\n\r\nexport class ContactMe extends Component {\r\n static displayName = ContactMe.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.getForm = this.getForm.bind(this);\r\n this.handleInputChange = this.handleInputChange.bind(this);\r\n this.send = this.send.bind(this);\r\n this.restartForm = this.restartForm.bind(this);\r\n\r\n this.state = {\r\n serverResponse: null,\r\n name: '',\r\n email: '',\r\n subject: '',\r\n body: ''\r\n };\r\n }\r\n\r\n componentDidMount = () => window.scrollTo(0, 0);\r\n\r\n async send(e) {\r\n e.preventDefault();\r\n\r\n try {\r\n if (!this.state.name) {\r\n // TODO: Check Class for error on inputs\r\n document.querySelector('#name').classList.add('error');\r\n document.querySelector('#name').focus();\r\n throw new Error(\"You should write your name.\");\r\n }\r\n\r\n if (!this.state.email) {\r\n document.querySelector('#email').classList.add('error');\r\n document.querySelector('#email').focus();\r\n throw new Error(\"You should write your email.\");\r\n }\r\n\r\n if (!this.state.subject) {\r\n document.querySelector('#subject').classList.add('error');\r\n document.querySelector('#subject').focus();\r\n throw new Error(\"You should write a subject.\");\r\n }\r\n\r\n if (!this.state.body) {\r\n document.querySelector('#body').classList.add('error');\r\n document.querySelector('#body').focus();\r\n throw new Error(\"You should write a message.\");\r\n }\r\n\r\n // TODO: Validate email\r\n\r\n // TODO: Validate lenght\r\n\r\n // send message to the server\r\n let response = await fetch('resume/sendMessage', {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify({\r\n name: this.state.name,\r\n email: this.state.email,\r\n subject: this.state.subject,\r\n body: this.state.body\r\n })\r\n });\r\n\r\n let data = await response.json();\r\n\r\n this.setState({\r\n serverResponse: data,\r\n name: '',\r\n email: '',\r\n subject: '',\r\n body: ''\r\n });\r\n\r\n this.forceUpdate();\r\n\r\n } catch (ex) {\r\n // TODO: Show the error to the user\r\n alert(ex);\r\n }\r\n }\r\n\r\n handleInputChange(event) {\r\n const target = event.target;\r\n const value = target.value;\r\n const name = target.name;\r\n\r\n this.setState({\r\n [name]: value\r\n });\r\n }\r\n\r\n restartForm(e) {\r\n e.preventDefault();\r\n this.setState({\r\n serverResponse: null,\r\n name: '',\r\n email: '',\r\n subject: '',\r\n body: ''\r\n });\r\n\r\n this.forceUpdate();\r\n }\r\n\r\n getForm() {\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n
    \r\n account_circle\r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n email\r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n subject\r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n mode_edit\r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n }\r\n\r\n render() {\r\n\r\n if (!this.state.serverResponse) {\r\n\r\n return (\r\n
    \r\n

    Contact me

    \r\n\r\n

    Use this form to send me a short message.

    \r\n\r\n {this.getForm()}\r\n
    \r\n );\r\n\r\n } else {\r\n\r\n return (\r\n
    \r\n

    Contact me

    \r\n\r\n

    Thanks for reaching me!

    \r\n

    I'll be in touch with you as soon as possible.

    \r\n\r\n

    Meanwhile, you can continue checking my projects or leave another message.

    \r\n\r\n

    Additionally, you can download my Resume from here.

    \r\n
    \r\n );\r\n\r\n }\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\n\r\nexport class Code extends Component {\r\n static displayName = Code.name;\r\n\r\n componentDidMount = () => window.scrollTo(0, 0);\r\n\r\n render() {\r\n return (\r\n <>\r\n
    \r\n
    \r\n

    Code

    \r\n\r\n

    Sorry for this!

    \r\n

    I'm still preparing the projects to upload them to the final repo.

    \r\n\r\n

    Meanwhile, you can continue checking my projects or send me a message.

    \r\n
    \r\n
    \r\n \r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { Layout } from './components/Layout';\r\n\r\nimport { Home } from './components/Home';\r\nimport { Projects } from './components/Projects';\r\nimport { Project } from './components/Project';\r\nimport { Resume } from './components/Resume';\r\nimport { ContactMe } from './components/ContactMe';\r\nimport { Code } from './components/Code';\r\n\r\nimport './custom.css';\r\n\r\nexport default class App extends Component {\r\n static displayName = App.name;\r\n\r\n //constructor(props) {\r\n // super(props)\r\n // this.childDiv = React.createRef()\r\n //}\r\n\r\n //componentDidMount = () => this.handleScroll()\r\n\r\n //componentDidUpdate = () => this.handleScroll()\r\n\r\n //handleScroll = () => {\r\n // const { index, selected } = this.props\r\n // if (index === selected) {\r\n // setTimeout(() => {\r\n // window.scrollTo(0, 0);\r\n // //this.childDiv.current.scrollIntoView({ behavior: 'smooth' })\r\n // }, 500)\r\n // }\r\n //}\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register () {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW (swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker (swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister () {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","// import 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\n/*onUpdate = {() => window.scrollTo(0, 0)}*/\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement);\r\n\r\nregisterServiceWorker();\r\n\r\n"],"sourceRoot":""}