YOUR_WEALTH
\ No newline at end of file
+YOUR_WEALTH
\ No newline at end of file
diff --git a/static/js/main.554fb693.chunk.js b/static/js/main.554fb693.chunk.js
new file mode 100644
index 0000000..71fcae8
--- /dev/null
+++ b/static/js/main.554fb693.chunk.js
@@ -0,0 +1,2 @@
+(this.webpackJsonpyour_wealth=this.webpackJsonpyour_wealth||[]).push([[0],{33:function(e,t,n){},36:function(e,t,n){},42:function(e,t,n){},43:function(e,t,n){},44:function(e,t,n){},45:function(e,t,n){},46:function(e,t,n){},47:function(e,t,n){"use strict";n.r(t);var c=n(0),a=n.n(c),r=n(24),s=n.n(r),i=(n(33),n(11)),o=n(28),u=n(12),l=n.n(u),d=n(16),j=n(18),b=n(5),f=[{label:"Gold g",rate:1},{label:"Gold kg",rate:1e3},{label:"Gold oz",rate:31.1034768}],p=n(1),O=Object(c.createContext)(null),h=function(e){var t=e.children,n=Object(c.useState)([]),a=Object(b.a)(n,2),r=a[0],s=a[1],i=Object(c.useState)(0),u=Object(b.a)(i,2),h=u[0],m=u[1],x=Object(c.useState)({}),v=Object(b.a)(x,2),_=v[0],N=v[1],y=Object(c.useState)([]),g=Object(b.a)(y,2),U=g[0],k=g[1],w=Object(c.useState)([]),S=Object(b.a)(w,2),C=S[0],E=S[1],L=Object(c.useState)(f.map((function(e){return e.label}))),M=Object(b.a)(L,1)[0],T=function(){var e=Object(j.a)(l.a.mark((function e(){var t,n;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,fetch("https://api.nbp.pl/api/exchangerates/tables/a");case 3:return t=e.sent,e.next=6,t.json();case 6:n=e.sent,n=[{currency:"z\u0142oty",code:"PLN",mid:1}].concat(Object(d.a)(n[0].rates)),s(n),e.next=14;break;case 11:e.prev=11,e.t0=e.catch(0),console.warn(e.t0);case 14:case"end":return e.stop()}}),e,null,[[0,11]])})));return function(){return e.apply(this,arguments)}}(),I=function(){var e=Object(j.a)(l.a.mark((function e(){var t,n;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,fetch("http://api.nbp.pl/api/cenyzlota");case 3:return t=e.sent,e.next=6,t.json();case 6:n=e.sent,m(n[0].cena),e.next=13;break;case 10:e.prev=10,e.t0=e.catch(0),console.warn(e.t0);case 13:case"end":return e.stop()}}),e,null,[[0,10]])})));return function(){return e.apply(this,arguments)}}(),P=function(){var e=Object(j.a)(l.a.mark((function e(){var t,n;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,fetch("https://api.zonda.exchange/rest/trading/ticker");case 3:return t=e.sent,e.next=6,t.json();case 6:n=e.sent,N(n.items),e.next=13;break;case 10:e.prev=10,e.t0=e.catch(0),console.warn(e.t0);case 13:case"end":return e.stop()}}),e,null,[[0,10]])})));return function(){return e.apply(this,arguments)}}(),G=function(){T(),I(),P()};Object(c.useEffect)((function(){G()}),[]);return Object(c.useEffect)((function(){var e=r.map((function(e){return e.code}));e.sort(),k(e)}),[r]),Object(c.useEffect)((function(){var e=Object(o.a)({},_);for(var t in e)"PLN"!==t.slice(t.indexOf("-")+1)&&delete e[t];(e=Object.keys(e).map((function(e){return e=e.slice(0,e.indexOf("-"))}))).sort(),E(e)}),[_]),Object(p.jsx)(O.Provider,{value:{currenciesMarket:r,gramOfGoldValue:h,cryptoCurrenciesMarket:_,possibleCurrencies:U,possibleCrypto:C,possibleGoldUnits:M,refreshRates:G},children:t})},m=n(49),x=n(50),v=(n(36),function(e){var t=e.content,n=Object(c.useContext)(O).refreshRates;return Object(p.jsxs)("div",{className:"header",children:[Object(p.jsx)(i.b,{to:"/",className:"header__link",children:Object(p.jsxs)("div",{className:"header__logo",children:[" ",Object(p.jsx)(m.a,{})," "]})}),Object(p.jsx)("h1",{className:"header__text",children:t}),Object(p.jsx)("button",{className:"header__button tooltip","data-tooltip-content":"update data",onClick:n,children:Object(p.jsx)(x.a,{className:"icon"})})]})}),_=n(3),N=(n(42),function(){return Object(p.jsxs)("div",{className:"home",children:[Object(p.jsx)("h2",{className:"home__title",children:"ABOUT"}),Object(p.jsx)("p",{className:"home__paragraph",children:'This is "YOUR_WEALTH" - a simple web app, done for training purposes. The app is fetching data from public API ( api.nbp.pl and api.zonda.exchange) on currencies, cryptocurrencies, and gold rate. You can input assets in various units and the app will calculate for you the sum of these assets in a unit of your choice using the current rate. Used: React.js, Sass, ant-design/icons.'}),Object(p.jsx)(i.b,{className:"button home__button",to:"/main",children:"START"})]})}),y=n(52),g=n(51),U="currency",k="crypto",w="gold",S=function(e){var t=e.defaultUnits,n=e.exportUnit,a=e.className,r=Object(c.useContext)(O),s=r.possibleCurrencies,i=r.possibleCrypto,o=r.possibleGoldUnits,u=Object(c.useState)(t.code),l=Object(b.a)(u,2),d=l[0],j=l[1];Object(c.useEffect)((function(){var e;s.findIndex((function(e){return e===d}))>=0?e=U:i.findIndex((function(e){return e===d}))>=0?e=k:o.findIndex((function(e){return e===d}))>=0&&(e=w),n({code:d,type:e})}),[d]);var f=s.map((function(e){return Object(p.jsx)("option",{value:e,children:e},e)})),h=i.map((function(e){return Object(p.jsx)("option",{value:e,children:e},e)})),m=o.map((function(e,t){return Object(p.jsx)("option",{value:e,children:e},t)}));return Object(p.jsxs)("select",{name:"unit",value:d,onChange:function(e){j(e.target.value)},className:a,children:[Object(p.jsx)("optgroup",{label:"Fiat",children:f}),Object(p.jsx)("optgroup",{label:"Crypto",children:h}),Object(p.jsx)("optgroup",{label:"Gold",children:m})]})},C=a.a.memo(S),E=(n(43),function(e){var t=e.id,n=e.defaultUnit,a=e.deleteField,r=e.updateInputField,s=Object(c.useState)(""),i=Object(b.a)(s,2),o=i[0],u=i[1],l=Object(c.useState)(n),d=Object(b.a)(l,2),j=d[0],f=d[1];return Object(c.useEffect)((function(){r({id:t,value:o,unit:j})}),[o,j]),Object(c.useEffect)((function(){0===o&&u("")}),[o]),Object(p.jsxs)("form",{onSubmit:function(e){e.preventDefault()},className:"form",children:[Object(p.jsx)("input",{className:"form__number",type:"number",min:"0",name:"value",value:o,onChange:function(e){u(Number(e.target.value))},placeholder:"Input value"}),Object(p.jsx)(C,{defaultUnits:j,exportUnit:function(e){f(e)},className:"form__select"}),Object(p.jsx)("button",{type:"button",onClick:function(){a(t)},className:"form__delete tooltip","data-tooltip-content":"close",children:Object(p.jsx)(g.a,{})})]})}),L=a.a.memo(E),M=(n(44),function(e){var t=e.sum,n=e.mainUnit,c=e.setMainUnit;return Object(p.jsxs)("div",{className:"sum",children:[Object(p.jsx)("h3",{className:"sum__text",children:t}),Object(p.jsx)(C,{defaultUnits:n,exportUnit:c,className:"sum__select"})]})}),T=(n(45),0),I=function(){var e=Object(c.useContext)(O),t=e.currenciesMarket,n=e.gramOfGoldValue,a=e.cryptoCurrenciesMarket,r=Object(c.useState)({code:"PLN",type:U}),s=Object(b.a)(r,2),i=s[0],o=s[1],u=Object(c.useState)([{id:0,value:0,unit:i}]),l=Object(b.a)(u,2),j=l[0],h=l[1],m=Object(c.useState)(0),x=Object(b.a)(m,2),v=x[0],_=x[1],N=function(e){var t=j.filter((function(t){return t.id!==e}));h(t)},g=function(e){var t=j.findIndex((function(t){return t.id===e.id})),n=Object(d.a)(j);n[t]=e,h(n)};Object(c.useEffect)((function(){!function(){var e,c,r=j.reduce((function(e,c){if(0===c.value||"PLN"===c.unit.code)return e+c.value;if(c.unit.type===U){var r=t.find((function(e){return e.code===c.unit.code})).mid;return e+c.value*r}if(c.unit.type===k){var s=a["".concat(c.unit.code,"-PLN")].rate;return e+c.value*s}if(c.unit.type===w){var i=f.find((function(e){return e.label===c.unit.code})).rate,o=n*i;return e+c.value*o}}),0);"PLN"===i.code||0===r?c=1:i.type===U?c=t.find((function(e){return i.code===e.code})).mid:i.type===k?c=a["".concat(i.code,"-PLN")].rate:i.type===w&&(c=f.find((function(e){return i.code===e.label})).rate*n),e=r/c;var s=i.type===k||i.type===w;e=e<1&&s?Math.round(1e5*e)/1e5:e<5&&s?Math.round(1e3*e)/1e3:Math.round(100*e)/100,_(e)}()}),[j,i,t,n,a]);var S=j.map((function(e){return Object(p.jsx)(L,{id:e.id,defaultUnit:e.unit,deleteField:N,updateInputField:g},e.id)}));return Object(p.jsxs)("div",{className:"main",children:[Object(p.jsx)("h2",{className:"main__title",children:"INPUT_YOUR_WEALTH"}),S,Object(p.jsx)("button",{className:"main__add tooltip",onClick:function(){var e={id:T+1,value:0,unit:i};T++,h((function(t){return[].concat(Object(d.a)(t),[e])}))},"data-tooltip-content":"add new field",children:Object(p.jsx)(y.a,{})}),Object(p.jsx)("h2",{className:"main__sumTitle",children:"SUM_OF_YOUR_WEALTH"}),Object(p.jsx)(M,{sum:v,mainUnit:i,setMainUnit:o})]})},P=function(){return Object(p.jsxs)(_.d,{children:[Object(p.jsx)(_.b,{path:"/",exact:!0,component:N}),Object(p.jsx)(_.b,{path:"/main",component:I}),Object(p.jsx)(_.a,{to:"/"})]})},G=function(e){var t=e.content;return Object(p.jsx)("footer",{className:"footer",children:Object(p.jsx)("p",{className:"footer__text",children:t})})};n(46);var R=function(){return Object(p.jsx)(h,{children:Object(p.jsxs)(i.a,{children:[Object(p.jsxs)("div",{className:"app",children:[Object(p.jsx)("header",{className:"app__header",children:Object(p.jsx)(v,{content:"YOUR_WEALTH"})}),Object(p.jsx)("main",{className:"app__main",children:Object(p.jsx)(P,{})})]}),Object(p.jsx)("footer",{className:"app__footer",children:Object(p.jsx)(G,{content:"contact: functionalweasel@gmail.com"})})]})})};s.a.render(Object(p.jsx)(a.a.StrictMode,{children:Object(p.jsx)(R,{})}),document.getElementById("root"))}},[[47,1,2]]]);
+//# sourceMappingURL=main.554fb693.chunk.js.map
\ No newline at end of file
diff --git a/static/js/main.dbd130ae.chunk.js.map b/static/js/main.554fb693.chunk.js.map
similarity index 55%
rename from static/js/main.dbd130ae.chunk.js.map
rename to static/js/main.554fb693.chunk.js.map
index cfa279d..2748f10 100644
--- a/static/js/main.dbd130ae.chunk.js.map
+++ b/static/js/main.554fb693.chunk.js.map
@@ -1 +1 @@
-{"version":3,"sources":["helpers/goldUnits.js","store/StoreProvider.jsx","layouts/Header.jsx","pages/Home.jsx","helpers/VAR.js","components/SelectUnits.jsx","components/InputField.jsx","components/Sum.jsx","pages/Main.jsx","layouts/Content.jsx","layouts/Footer.jsx","App.js","index.js"],"names":["goldUnits","label","rate","StoreContext","createContext","StoreProvider","children","useState","currenciesMarket","setCurrenciesMarket","gramOfGoldValue","setGramOfGoldValue","cryptoCurrenciesMarket","setCryptoCurrenciesMarket","possibleCurrencies","setPossibleCurrencies","possibleCrypto","setPossibleCrypto","map","unit","possibleGoldUnits","fetchCurrencies","a","fetch","response","json","data","currency","code","mid","rates","console","warn","fetchGramOfGoldValue","cena","fetchCryptoCurrencies","items","fetchData","useEffect","units","curr","sort","slice","indexOf","Object","keys","item","Provider","value","refreshRates","Header","content","useContext","className","to","DollarOutlined","onClick","SyncOutlined","Home","CURRENCY","CRYPTO","GOLD","SelectUnits","defaultUnits","exportUnit","setUnit","unitType","findIndex","crypto","goldUnit","type","optionsCurrencies","optionsCrypto","optionsGold","index","name","onChange","event","target","React","memo","InputField","id","defaultUnit","deleteField","updateInputField","setValue","onSubmit","e","preventDefault","min","Number","placeholder","CloseOutlined","Sum","sum","mainUnit","setMainUnit","lastId","Main","inputFields","setInputFields","setSum","newInputFields","filter","field","updatedField","sumInPLN","reduce","total","current","rateToPLN","find","IsCryptoOrGold","Math","round","calculateSum","displayInputFields","newField","prevState","PlusOutlined","Content","path","exact","component","Footer","App","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.dbd130ae.chunk.js","sourcesContent":["const goldUnits = [\r\n {label: 'Gold g', rate: 1},\r\n {label: 'Gold kg', rate: 1000},\r\n {label: 'Gold oz', rate: 31.1034768 }\r\n]\r\n \r\nexport default goldUnits;\r\n","import React, {createContext, useEffect, useState} from 'react';\r\n\r\nimport goldUnits from '../helpers/goldUnits';\r\n\r\nexport const StoreContext = createContext(null);\r\n\r\nconst StoreProvider = ({children}) => {\r\n const [ currenciesMarket, setCurrenciesMarket ] = useState([]);\r\n const [ gramOfGoldValue, setGramOfGoldValue ] = useState(0);\r\n const [ cryptoCurrenciesMarket, setCryptoCurrenciesMarket ] = useState({});\r\n const [ possibleCurrencies, setPossibleCurrencies ] = useState([]);\r\n const [ possibleCrypto, setPossibleCrypto ] = useState([]);\r\n const [ possibleGoldUnits ] = useState(goldUnits.map(unit => unit.label));\r\n\r\n const fetchCurrencies = async () => {\r\n try {\r\n const response = await fetch('https://api.nbp.pl/api/exchangerates/tables/a');\r\n let data = await response.json();\r\n data = [{currency: 'złoty', code: 'PLN', mid: 1}, ...data[0].rates]\r\n setCurrenciesMarket(data);\r\n } catch(error) {\r\n console.warn(error);\r\n }\r\n }\r\n\r\n const fetchGramOfGoldValue = async () => {\r\n try {\r\n const response = await fetch('http://api.nbp.pl/api/cenyzlota');\r\n const data = await response.json();\r\n setGramOfGoldValue(data[0].cena);\r\n } catch(error) {\r\n console.warn(error);\r\n }\r\n }\r\n\r\n const fetchCryptoCurrencies = async () => {\r\n try {\r\n const response = await fetch('https://api.zonda.exchange/rest/trading/ticker');\r\n const data = await response.json();\r\n setCryptoCurrenciesMarket(data.items);\r\n } catch(error) {\r\n console.warn(error);\r\n }\r\n }\r\n\r\n const fetchData = () => {\r\n fetchCurrencies()\r\n fetchGramOfGoldValue();\r\n fetchCryptoCurrencies();\r\n }\r\n\r\n useEffect(()=> {\r\n fetchData();\r\n }, []);\r\n\r\n const getCurrenciesCodes = () => {\r\n const units = currenciesMarket.map(curr => curr.code);\r\n units.sort()\r\n setPossibleCurrencies(units);\r\n };\r\n\r\n const getCryptoCodes = () => {\r\n let units = {...cryptoCurrenciesMarket};\r\n\r\n for(const code in units) {\r\n if(code.slice(code.indexOf('-')+1) !== 'PLN') {\r\n delete units[code];\r\n }\r\n }\r\n\r\n units = Object.keys(units).map(item => {\r\n item = item.slice(0, item.indexOf('-'))\r\n return item;\r\n });\r\n\r\n units.sort();\r\n setPossibleCrypto(units);\r\n };\r\n\r\n useEffect(getCurrenciesCodes, [currenciesMarket]);\r\n\r\n useEffect(getCryptoCodes, [cryptoCurrenciesMarket]);\r\n\r\n return(\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default StoreProvider;\r\n","import React, { useContext } from 'react';\r\nimport { DollarOutlined, SyncOutlined } from '@ant-design/icons';\r\nimport { Link } from 'react-router-dom'\r\n\r\nimport { StoreContext } from '../store/StoreProvider';\r\n\r\nimport './Header.scss'\r\n\r\nconst Header = ({content}) => {\r\n const { refreshRates } = useContext(StoreContext);\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n
{content}
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default Header;","import React from 'react';\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport './Home.scss';\r\n\r\nconst Home = () => {\r\n return (\r\n
\r\n
ABOUT
\r\n
\r\n This is \"YOUR_WEALTH\" - a simple web app, done for training purposes. The app is fetching data from public API (\r\n api.nbp.pl and api.zonda.exchange) on currencies, cryptocurrencies, and gold rate. You can input assets in\r\n various units and the app will calculate for you the sum of these assets in a unit of your choice using the\r\n current rate. Used: React.js, Sass.\r\n
\r\n )\r\n}\r\n\r\nexport default Header;","import React from 'react';\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport './Home.scss';\r\n\r\nconst Home = () => {\r\n return (\r\n
\r\n
ABOUT
\r\n
\r\n This is \"YOUR_WEALTH\" - a simple web app, done for training purposes. The app is fetching data from public API (\r\n api.nbp.pl and api.zonda.exchange) on currencies, cryptocurrencies, and gold rate. You can input assets in\r\n various units and the app will calculate for you the sum of these assets in a unit of your choice using the\r\n current rate. Used: React.js, Sass, ant-design/icons.\r\n
\r\n )\r\n}\r\n\r\nexport default Main;\r\n","import React from 'react'\r\nimport { Route, Switch, Redirect } from 'react-router-dom';\r\n\r\nimport Home from '../pages/Home';\r\nimport Main from '../pages/Main';\r\n\r\nconst Content = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n};\r\n\r\nexport default Content","import React from \"react\";\r\n\r\nconst Footer = ({content}) => {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default Footer;\r\n","import React from 'react';\r\nimport { BrowserRouter as Router } from 'react-router-dom';\r\n\r\nimport StoreProvider from './store/StoreProvider';\r\nimport Header from './layouts/Header';\r\nimport Content from './layouts/Content';\r\nimport Footer from './layouts/Footer';\r\n\r\nimport './layouts/layouts.scss'\r\n\r\nfunction App() {\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\nexport default App;\r\n\r\n// @todo add hamburger\r\n// @todo add dark mode\r\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.scss';\nimport App from './App';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/static/js/main.dbd130ae.chunk.js b/static/js/main.dbd130ae.chunk.js
deleted file mode 100644
index b2adbcc..0000000
--- a/static/js/main.dbd130ae.chunk.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(this.webpackJsonpyour_wealth=this.webpackJsonpyour_wealth||[]).push([[0],{33:function(e,t,n){},36:function(e,t,n){},42:function(e,t,n){},43:function(e,t,n){},44:function(e,t,n){},45:function(e,t,n){},46:function(e,t,n){},47:function(e,t,n){"use strict";n.r(t);var c=n(0),a=n.n(c),r=n(24),s=n.n(r),i=(n(33),n(11)),o=n(28),u=n(12),l=n.n(u),d=n(16),j=n(18),b=n(5),f=[{label:"Gold g",rate:1},{label:"Gold kg",rate:1e3},{label:"Gold oz",rate:31.1034768}],p=n(1),O=Object(c.createContext)(null),h=function(e){var t=e.children,n=Object(c.useState)([]),a=Object(b.a)(n,2),r=a[0],s=a[1],i=Object(c.useState)(0),u=Object(b.a)(i,2),h=u[0],m=u[1],x=Object(c.useState)({}),v=Object(b.a)(x,2),_=v[0],N=v[1],y=Object(c.useState)([]),g=Object(b.a)(y,2),U=g[0],k=g[1],w=Object(c.useState)([]),S=Object(b.a)(w,2),C=S[0],E=S[1],L=Object(c.useState)(f.map((function(e){return e.label}))),M=Object(b.a)(L,1)[0],T=function(){var e=Object(j.a)(l.a.mark((function e(){var t,n;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,fetch("https://api.nbp.pl/api/exchangerates/tables/a");case 3:return t=e.sent,e.next=6,t.json();case 6:n=e.sent,n=[{currency:"z\u0142oty",code:"PLN",mid:1}].concat(Object(d.a)(n[0].rates)),s(n),e.next=14;break;case 11:e.prev=11,e.t0=e.catch(0),console.warn(e.t0);case 14:case"end":return e.stop()}}),e,null,[[0,11]])})));return function(){return e.apply(this,arguments)}}(),I=function(){var e=Object(j.a)(l.a.mark((function e(){var t,n;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,fetch("http://api.nbp.pl/api/cenyzlota");case 3:return t=e.sent,e.next=6,t.json();case 6:n=e.sent,m(n[0].cena),e.next=13;break;case 10:e.prev=10,e.t0=e.catch(0),console.warn(e.t0);case 13:case"end":return e.stop()}}),e,null,[[0,10]])})));return function(){return e.apply(this,arguments)}}(),P=function(){var e=Object(j.a)(l.a.mark((function e(){var t,n;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,fetch("https://api.zonda.exchange/rest/trading/ticker");case 3:return t=e.sent,e.next=6,t.json();case 6:n=e.sent,N(n.items),e.next=13;break;case 10:e.prev=10,e.t0=e.catch(0),console.warn(e.t0);case 13:case"end":return e.stop()}}),e,null,[[0,10]])})));return function(){return e.apply(this,arguments)}}(),G=function(){T(),I(),P()};Object(c.useEffect)((function(){G()}),[]);return Object(c.useEffect)((function(){var e=r.map((function(e){return e.code}));e.sort(),k(e)}),[r]),Object(c.useEffect)((function(){var e=Object(o.a)({},_);for(var t in e)"PLN"!==t.slice(t.indexOf("-")+1)&&delete e[t];(e=Object.keys(e).map((function(e){return e=e.slice(0,e.indexOf("-"))}))).sort(),E(e)}),[_]),Object(p.jsx)(O.Provider,{value:{currenciesMarket:r,gramOfGoldValue:h,cryptoCurrenciesMarket:_,possibleCurrencies:U,possibleCrypto:C,possibleGoldUnits:M,refreshRates:G},children:t})},m=n(49),x=n(50),v=(n(36),function(e){var t=e.content,n=Object(c.useContext)(O).refreshRates;return Object(p.jsxs)("div",{className:"header",children:[Object(p.jsx)(i.b,{to:"/",className:"header__link",children:Object(p.jsxs)("div",{className:"header__logo",children:[" ",Object(p.jsx)(m.a,{})," "]})}),Object(p.jsx)("h1",{className:"header__text",children:t}),Object(p.jsx)("button",{className:"header__button tooltip","data-tooltip-content":"update data",onClick:n,children:Object(p.jsx)(x.a,{className:"icon"})})]})}),_=n(3),N=(n(42),function(){return Object(p.jsxs)("div",{className:"home",children:[Object(p.jsx)("h2",{className:"home__title",children:"ABOUT"}),Object(p.jsx)("p",{className:"home__paragraph",children:'This is "YOUR_WEALTH" - a simple web app, done for training purposes. The app is fetching data from public API ( api.nbp.pl and api.zonda.exchange) on currencies, cryptocurrencies, and gold rate. You can input assets in various units and the app will calculate for you the sum of these assets in a unit of your choice using the current rate. Used: React.js, Sass.'}),Object(p.jsx)(i.b,{className:"button home__button",to:"/main",children:"START"})]})}),y=n(52),g=n(51),U="currency",k="crypto",w="gold",S=function(e){var t=e.defaultUnits,n=e.exportUnit,a=e.className,r=Object(c.useContext)(O),s=r.possibleCurrencies,i=r.possibleCrypto,o=r.possibleGoldUnits,u=Object(c.useState)(t.code),l=Object(b.a)(u,2),d=l[0],j=l[1];Object(c.useEffect)((function(){var e;s.findIndex((function(e){return e===d}))>=0?e=U:i.findIndex((function(e){return e===d}))>=0?e=k:o.findIndex((function(e){return e===d}))>=0&&(e=w),n({code:d,type:e})}),[d]);var f=s.map((function(e){return Object(p.jsx)("option",{value:e,children:e},e)})),h=i.map((function(e){return Object(p.jsx)("option",{value:e,children:e},e)})),m=o.map((function(e,t){return Object(p.jsx)("option",{value:e,children:e},t)}));return Object(p.jsxs)("select",{name:"unit",value:d,onChange:function(e){j(e.target.value)},className:a,children:[Object(p.jsx)("optgroup",{label:"Fiat",children:f}),Object(p.jsx)("optgroup",{label:"Crypto",children:h}),Object(p.jsx)("optgroup",{label:"Gold",children:m})]})},C=a.a.memo(S),E=(n(43),function(e){var t=e.id,n=e.defaultUnit,a=e.deleteField,r=e.updateInputField,s=Object(c.useState)(""),i=Object(b.a)(s,2),o=i[0],u=i[1],l=Object(c.useState)(n),d=Object(b.a)(l,2),j=d[0],f=d[1];return Object(c.useEffect)((function(){r({id:t,value:o,unit:j})}),[o,j]),Object(c.useEffect)((function(){0===o&&u("")}),[o]),Object(p.jsxs)("form",{onSubmit:function(e){e.preventDefault()},className:"form",children:[Object(p.jsx)("input",{className:"form__number",type:"number",min:"0",name:"value",value:o,onChange:function(e){u(Number(e.target.value))},placeholder:"Input value"}),Object(p.jsx)(C,{defaultUnits:j,exportUnit:function(e){f(e)},className:"form__select"}),Object(p.jsx)("button",{type:"button",onClick:function(){a(t)},className:"form__delete tooltip","data-tooltip-content":"close",children:Object(p.jsx)(g.a,{})})]})}),L=a.a.memo(E),M=(n(44),function(e){var t=e.sum,n=e.mainUnit,c=e.setMainUnit;return Object(p.jsxs)("div",{className:"sum",children:[Object(p.jsx)("h3",{className:"sum__text",children:t}),Object(p.jsx)(C,{defaultUnits:n,exportUnit:c,className:"sum__select"})]})}),T=(n(45),0),I=function(){var e=Object(c.useContext)(O),t=e.currenciesMarket,n=e.gramOfGoldValue,a=e.cryptoCurrenciesMarket,r=Object(c.useState)({code:"PLN",type:U}),s=Object(b.a)(r,2),i=s[0],o=s[1],u=Object(c.useState)([{id:0,value:0,unit:i}]),l=Object(b.a)(u,2),j=l[0],h=l[1],m=Object(c.useState)(0),x=Object(b.a)(m,2),v=x[0],_=x[1],N=function(e){var t=j.filter((function(t){return t.id!==e}));h(t)},g=function(e){var t=j.findIndex((function(t){return t.id===e.id})),n=Object(d.a)(j);n[t]=e,h(n)};Object(c.useEffect)((function(){!function(){var e,c,r=j.reduce((function(e,c){if(0===c.value||"PLN"===c.unit.code)return e+c.value;if(c.unit.type===U){var r=t.find((function(e){return e.code===c.unit.code})).mid;return e+c.value*r}if(c.unit.type===k){var s=a["".concat(c.unit.code,"-PLN")].rate;return e+c.value*s}if(c.unit.type===w){var i=f.find((function(e){return e.label===c.unit.code})).rate,o=n*i;return e+c.value*o}}),0);"PLN"===i.code||0===r?c=1:i.type===U?c=t.find((function(e){return i.code===e.code})).mid:i.type===k?c=a["".concat(i.code,"-PLN")].rate:i.type===w&&(c=f.find((function(e){return i.code===e.label})).rate*n),e=r/c;var s=i.type===k||i.type===w;e=e<1&&s?Math.round(1e5*e)/1e5:e<5&&s?Math.round(1e3*e)/1e3:Math.round(100*e)/100,_(e)}()}),[j,i,t,n,a]);var S=j.map((function(e){return Object(p.jsx)(L,{id:e.id,defaultUnit:e.unit,deleteField:N,updateInputField:g},e.id)}));return Object(p.jsxs)("div",{className:"main",children:[Object(p.jsx)("h2",{className:"main__title",children:"INPUT_YOUR_WEALTH"}),S,Object(p.jsx)("button",{className:"main__add tooltip",onClick:function(){var e={id:T+1,value:0,unit:i};T++,h((function(t){return[].concat(Object(d.a)(t),[e])}))},"data-tooltip-content":"add new field",children:Object(p.jsx)(y.a,{})}),Object(p.jsx)("h2",{className:"main__sumTitle",children:"SUM_OF_YOUR_WEALTH"}),Object(p.jsx)(M,{sum:v,mainUnit:i,setMainUnit:o})]})},P=function(){return Object(p.jsxs)(_.d,{children:[Object(p.jsx)(_.b,{path:"/",exact:!0,component:N}),Object(p.jsx)(_.b,{path:"/main",component:I}),Object(p.jsx)(_.a,{to:"/"})]})},G=function(e){var t=e.content;return Object(p.jsx)("footer",{className:"footer",children:Object(p.jsx)("p",{className:"footer__text",children:t})})};n(46);var R=function(){return Object(p.jsx)(h,{children:Object(p.jsxs)(i.a,{children:[Object(p.jsxs)("div",{className:"app",children:[Object(p.jsx)("header",{className:"app__header",children:Object(p.jsx)(v,{content:"YOUR_WEALTH"})}),Object(p.jsx)("main",{className:"app__main",children:Object(p.jsx)(P,{})})]}),Object(p.jsx)("footer",{className:"app__footer",children:Object(p.jsx)(G,{content:"contact: functionalweasel@gmail.com"})})]})})};s.a.render(Object(p.jsx)(a.a.StrictMode,{children:Object(p.jsx)(R,{})}),document.getElementById("root"))}},[[47,1,2]]]);
-//# sourceMappingURL=main.dbd130ae.chunk.js.map
\ No newline at end of file