{"version":3,"sources":["services/UserManager.js","components/LoginButton.jsx","components/AuthNav.jsx","components/NavMenu.jsx","components/PatreonButton.jsx","components/PayPalButton.jsx","components/StarCitizenReferralButton.jsx","components/SiteFooter.jsx","components/Layout.jsx","components/apps/rock-calculator/elements.js","components/ui/form/formstyles.js","components/ui/form/InputField.jsx","components/validators/mass.js","components/apps/rock-calculator/RockMassField.jsx","components/apps/rock-calculator/ElementSelect.jsx","components/validators/percentage.js","components/apps/rock-calculator/ElementPercentageField.jsx","components/apps/rock-calculator/ElementValue.jsx","components/apps/rock-calculator/RemoveElementButton.jsx","components/ui/ResponsiveTable.js","components/apps/rock-calculator/Element.jsx","components/apps/rock-calculator/AddElementButton.jsx","components/apps/rock-calculator/RockValue.jsx","components/apps/rock-calculator/ClearRockButton.jsx","components/utilities/uuid.js","components/apps/rock-calculator/RockForm.jsx","components/AppHeader.jsx","components/AppLogo.jsx","components/AppUpdateDate.jsx","components/AppVersion.jsx","components/AppCompatibility.jsx","StarCitizen.js","components/apps/rock-calculator/app.js","components/AdsharesBanner.jsx","components/pages/RockCalculator.jsx","components/pages/NotFoundPage.jsx","App.jsx","registerServiceWorker.ts","services/MapService.js","store/Map.js","index.jsx"],"names":["Oidc","Log","logger","console","userManagerConfig","authority","process","client_id","redirect_uri","response_type","scope","post_logout_redirect_uri","userManager","UserManager","connect","NavItem","onClick","e","preventDefault","signinRedirect","className","AuthNav","this","props","user","Fragment","profile","name","React","Component","state","oidc","push","Logo","styled","img","NavMenu","useState","Navbar","dark","Container","src","NavbarBrand","PatreonLink","a","PatreonLogo","PatreonButton","userId","href","data-patreon-widget-type","alt","title","async","PayPalForm","form","PayPalImage","input","PayPalButton","action","method","target","type","value","border","width","height","StarCitizenLogo","StarCitizenReferralButton","referralCode","Footer","footer","CopyrightText","div","SupportButtons","SiteFooter","Layout","children","defaultElement","id","pricePerUnit","inertMaterials","selectableElements","BaseInputStyles","css","Input","Select","select","InputField","label","rest","isValidMass","mass","Number","parseFloat","isNaN","RockMass","span","withRouter","ownProps","onChange","setClassName","event","massIsValid","handleChange","CenteredSelect","Option","option","element","displayName","selectOptions","map","key","elementId","disabled","selectedId","selectedElement","find","selectableElement","elementCopy","autoFocus","isValidPercentage","percentage","min","max","Value","toFixed","Button","button","RemoveElementButton","onElementRemoved","ResponsiveCell","attrs","break","align","ResponsiveFooter","ResponsiveTable","cols","onElementChange","isInertMaterial","style","paddingRight","onAddElementClick","sum","total","current","BaseTotalStyles","InvalidTotal","Total","elements","reduce","Link","ClearRockButton","uuid","replace","c","crypto","getRandomValues","Uint8Array","toString","Form","RockTable","RockTotals","ResponsiveHeader","elementToRow","sumNonInertPercentages","defaultElements","setMass","setElements","handleElementRemoved","elementsCopy","filter","handleElementChange","calculateValue","inert","copyInert","useEffect","elementRows","marginTop","textAlign","Header","h1","AppHeader","UpdateDate","AppUpdateDate","date","toLocaleDateString","Version","AppVersion","version","Compatibility","AppCompatibility","starCitizenVersion","starCitizen","currentVersion","v","app","updateDate","Date","AdShareAdUnit","LeaderboardAdUnit","LargeMobileBannerAdUnit","HalfBannerAdUnit","AdsharesBanner","data-zone","AppMetaData","RockCalculator","NotFoundPage","Switch","Route","exact","path","component","isLocalhost","Boolean","window","location","hostname","match","registerValidSW","swUrl","navigator","serviceWorker","register","then","registration","onupdatefound","installingWorker","installing","onstatechange","controller","log","catch","error","contentTypes","jsonRequestConfig","headers","mapApiUrl","mapId","retrieveMapUrl","axios","get","response","data","geoJson","JSON","parse","self","getUser","createMapUrl","access_token","stringify","sub","persistMapUrl","post","retrieve","createAsyncThunk","getState","requestId","currentRequestId","isLoading","MapService","createMap","create","mapSlice","createSlice","initialState","position","zoom","undefined","reducers","payload","remove","edit","cut","extraReducers","pending","meta","fulfilled","rejected","actions","baseUrl","document","getElementsByTagName","getAttribute","history","createBrowserHistory","basename","middleware","store","next","getDefaultMiddleware","serializableCheck","routerMiddleware","rootReducer","mapReducers","router","connectRouter","configureStore","reducer","ReactDOM","App","getElementById","URL","origin","addEventListener","fetch","contentType","status","indexOf","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.1b0c3880.chunk.js","sourcesContent":["import Oidc from \"oidc-client\";\n\nOidc.Log.logger = console;\n\nlet redirectUri = process.env.REACT_APP_MAPPER_WEB_URL + \"signinCallback\";\nlet postLogoutUri = process.env.REACT_APP_MAPPER_WEB_URL + \"index.html\";\n\nconst userManagerConfig = {\n //silent_redirect_uri: `${window.location.protocol}//${window.location.hostname}${window.location.port ? `:${window.location.port}` : ''}/silent_renew.html`,\n //automaticSilentRenew: true,\n\n authority: process.env.REACT_APP_AUTH_API_URL,\n client_id: \"imbick.mapper.web\",\n redirect_uri: redirectUri,\n response_type: \"code\",\n scope: \"openid profile imbick.mapper.api\",\n post_logout_redirect_uri: postLogoutUri\n};\n\n//todo consider https://stackoverflow.com/questions/45313129/oidc-client-isloggedin\nconst userManager = new Oidc.UserManager(userManagerConfig);\nexport default userManager;\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { NavItem } from \"reactstrap\";\n\nimport userManager from \"../services/UserManager\";\n\nconst LoginButton = () => {\n var onClick = (e) => {\n e.preventDefault();\n userManager.signinRedirect();\n };\n return (\n \n \n \n );\n}\nexport default connect()(LoginButton);\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { push } from \"connected-react-router\";\nimport { NavItem } from \"reactstrap\";\n\nimport LoginButton from \"./LoginButton\";\n\nclass AuthNav extends React.Component {\n\n render() {\n\n if (this.props.user)\n return (\n \n \n \n \n \n );\n else\n return ;\n }\n}\n\nconst mapStateToProps = (state) => {\n return {\n user: state.oidc.user\n };\n};\n\nexport default connect(\n mapStateToProps,\n { push }\n)(AuthNav);\n","import React, { useState } from 'react';\nimport { Collapse, Navbar, NavbarBrand, NavbarToggler, NavItem, NavLink, Container } from 'reactstrap';\nimport { Link } from 'react-router-dom';\nimport { connect } from \"react-redux\";\nimport { withRouter } from \"react-router\";\nimport styled from \"styled-components\";\n\nimport './NavMenu.css';\nimport AuthNav from \"./AuthNav\"\n\nconst Logo = styled.img`\n width: 100px;\n margin-right: 20px;\n`;\n\n//export default class NavMenu extends React.PureComponent<{}, { isOpen: boolean }> {\nconst NavMenu = () => {\n\n const [isOpen, setIsOpen] = useState(false);\n const toggle = () => setIsOpen(!isOpen);\n\n return (\n
\n \n \n \n AppMesh\n {/*\n \n \n
    \n \n Rock calculator\n \n \n Sign in\n \n \n Register\n \n \n
\n
\n */}\n
\n
\n
\n );\n}\n\nexport default NavMenu;","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst PatreonLink = styled.a`\n margin: 0 10px 10px 0;\n display: inline-block;\n`;\n\nconst PatreonLogo = styled.img`\n border-radius: 3px;\n background-color: #FF424D;\n width: 116px;\n padding: 10px;\n vertical-align: middle;\n`;\n\nconst PatreonButton = ({userId}) => (\n <>\n \n \n \n \n \n);\n\nexport default PatreonButton;","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst PayPalForm = styled.form`\n display: inline-block;\n margin: 0 10px 10px 0;\n`;\n\nconst PayPalImage = styled.input`\n border-radius: 3px;\n background-color: #ccc;\n padding: 7px 10px;\n vertical-align: middle;\n`;\n\nconst PayPalButton = () => (\n \n \n \n \n \"\"\n \n);\n\nexport default PayPalButton;","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst StarCitizenLogo = styled.img`\n width: 128px;\n background: #212b17;\n padding: 13px 8px 13px 14px;\n border-radius: 3px;\n`;\n\nconst StarCitizenReferralButton = ({referralCode}) => (\n \n \n \n);\n\nexport default StarCitizenReferralButton;","import React from \"react\";\nimport styled from \"styled-components\";\nimport { Container } from \"reactstrap\";\nimport PatreonButton from \"./PatreonButton\"\nimport PayPalButton from \"./PayPalButton\"\nimport StarCitizenReferralButton from \"./StarCitizenReferralButton\"\n\nconst Footer = styled.footer`\n padding: 40px 0 70px 0;\n background: #4e5944;\n color: white;\n`;\n\nconst CopyrightText = styled.div`\n margin-bottom: 20px;\n display: inline-block;\n`;\n\nconst SupportButtons = styled.div`\n @media (min-width: 768px) {\n float: right;\n }\n`;\n\nconst SiteFooter = () => (\n \n);\n\nexport default SiteFooter;","import * as React from \"react\";\nimport NavMenu from \"./NavMenu\";\nimport SiteFooter from \"./SiteFooter\";\n\nconst Layout = (props) => (\n \n \n {props.children}\n \n \n);\n\nexport default Layout;","const defaultElement = { id: 0, name: \"\", pricePerUnit: 0.00 };\nconst inertMaterials = { id: 1, name: \"Inert materials\", pricePerUnit: 0.02 };\n\nconst selectableElements = [\n { id: 2, name: \"Agricium\", pricePerUnit: 27.5 },\n { id: 3, name: \"Aluminum\", pricePerUnit: 1.33 },\n { id: 4, name: \"Beryl\", pricePerUnit: 4.41 },\n { id: 5, name: \"Bexalite\", pricePerUnit: 40.65 },\n { id: 6, name: \"Borase\", pricePerUnit: 32.58 },\n { id: 7, name: \"Copper\", pricePerUnit: 5.73 },\n { id: 8, name: \"Corundum\", pricePerUnit: 2.7 },\n { id: 9, name: \"Diamond\", pricePerUnit: 7.36 },\n { id: 10, name: \"Gold\", pricePerUnit: 6.4 },\n { id: 11, name: \"Hephaestanite\", pricePerUnit: 14.76 },\n { id: 12, name: \"Laranite\", pricePerUnit: 31.01 },\n { id: 13, name: \"Quantanium\", pricePerUnit: 88.00 },\n { id: 14, name: \"Quartz\", pricePerUnit: 1.56 },\n { id: 15, name: \"Taranite\", pricePerUnit: 32.58 },\n { id: 16, name: \"Titanium\", pricePerUnit: 8.93 },\n { id: 17, name: \"Tungsten\", pricePerUnit: 4.1 }\n];\n\nconst allElements = [\n inertMaterials,\n ...selectableElements\n];\n\nexport { defaultElement, inertMaterials, selectableElements };\nexport default allElements;","import styled, { css } from 'styled-components';\n\nconst BaseInputStyles = css`\n display: block;\n width: 100%;\n`;\n\nconst Input = styled.input`\n ${BaseInputStyles}\n`;\n\nconst Select = styled.select`\n ${BaseInputStyles}\n`;\n\nconst Label = styled.label`\n\n`;\n\nexport { Input, Select, Label };","import React from \"react\";\nimport { Input } from \"./formstyles\";\n\nconst InputField = ({ ...rest }) => (\n \n);\n\nexport default InputField;","const isValidMass = (mass) => {\n if (!mass || mass === \"\")\n return true;\n\n mass = Number.parseFloat(mass);\n return !Number.isNaN(mass) &&\n mass > 0;\n}\n\nexport default isValidMass;","import React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { withRouter } from \"react-router\";\nimport styled from \"styled-components\";\n\nimport InputField from \"../../ui/form/InputField\";\nimport isValidMass from \"../../validators/mass\";\n\nconst validClass = \"mass valid\";\nconst invalidClass = \"mass invalid\";\n\nconst RockMass = styled.span`\n font-weight: bold;\n`;\n\nconst RockMassField = ({ mass, onChange }) => {\n\n const [className, setClassName] = useState(validClass);\n\n const handleChange = (event, onChange) => {\n const massIsValid = isValidMass(event.target.value);\n\n setClassName(massIsValid ? validClass : invalidClass);\n\n onChange(event.target.value);\n };\n \n return (\n \n Mass handleChange(event, onChange)}\n value={mass}\n className={className}\n />\n \n );\n};\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n };\n};\n\nconst mapDispatchToProps = {\n};\n\nexport default withRouter(connect(\n mapStateToProps,\n mapDispatchToProps\n)(RockMassField));","import * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { withRouter } from \"react-router\";\nimport styled from \"styled-components\";\n\nimport { inertMaterials, selectableElements } from \"./elements.js\";\nimport InputField from \"../../ui/form/InputField\";\nimport { Select } from \"../../ui/form/formstyles\";\n\nconst Label = styled.label`\n\n`;\n\nconst CenteredSelect = styled(Select)`\n text-align-last: center;\n text-align: center;\n`;\n\nconst Option = styled.option`\n\n`;\n\nconst ElementSelect = ({ element, onChange, ...rest }) => {\n\n const displayName = (element) => `${element.name} @ ${element.pricePerUnit} UEC per unit`;\n\n const selectOptions = selectableElements\n .map((e) =>\n \n {displayName(e)}\n \n );\n\n const isInertMaterials = element.elementId === inertMaterials.id;\n\n const handleChange = (e) => {\n const selectedId = e.target.value;\n if (!selectedId)\n return;\n\n const selectedElement = selectableElements.find((selectableElement) => selectableElement.id == selectedId);\n const elementCopy = {\n ...element,\n ...selectedElement,\n id: element.id,\n elementId: selectedElement.id\n };\n onChange(elementCopy);\n };\n\n if (isInertMaterials)\n return (\n \n );\n\n return (\n \n \n {selectOptions}\n \n );\n};\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n };\n};\n\nconst mapDispatchToProps = {\n};\n\nexport default withRouter(connect(\n mapStateToProps,\n mapDispatchToProps\n)(ElementSelect));","const isValidPercentage = (percentage) => {\n percentage = Number.parseFloat(percentage);\n return !Number.isNaN(percentage) &&\n percentage >= 0 &&\n percentage <= 100;\n};\n\nexport default isValidPercentage;","import React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { withRouter } from \"react-router\";\n\nimport InputField from \"../../ui/form/InputField\";\nimport isValidPercentage from \"../../validators/percentage\";\n\nconst ElementPercentageField = ({ element, onChange, ...rest }) => {\n\n const [className, setClassName] = useState(\"percentage\")\n\n const handleChange = (e) => {\n element.percentage = e.target.value;\n setClassName(isValidPercentage(element.percentage) ? \"percentage\" : \"percentage invalid\");\n onChange(element);\n };\n\n return (\n <>\n %\n \n );\n};\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n };\n};\n\nconst mapDispatchToProps = {\n};\n\nexport default withRouter(connect(\n mapStateToProps,\n mapDispatchToProps\n)(ElementPercentageField));","import * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { withRouter } from \"react-router\";\n\nimport styled, { css } from \"styled-components\";\n\nconst Value = styled.span`\n white-space: nowrap;\n color: limegreen;\n padding-left: 10px;\n`;\n\nconst ElementValue = ({ value }) => {\n value = Number.parseFloat(value).toFixed(2);\n return (\n \n {value}\n \n );\n};\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n };\n};\n\nconst mapDispatchToProps = {\n};\n\nexport default withRouter(connect(\n mapStateToProps,\n mapDispatchToProps\n)(ElementValue));","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst Button = styled.button`\n width: 100%;\n`;\n\nconst RemoveElementButton = ({ element, onElementRemoved }) => {\n \n const handleClick = (event, id) => {\n event.preventDefault();\n onElementRemoved(id);\n }\n\n return (\n handleClick(e, element.id)}\n >\n Remove\n \n );\n};\n\nexport default RemoveElementButton;","import styled from \"styled-components\";\n\nconst ResponsiveCell = styled.div.attrs(props => ({\n width: (props.width ? props.width + \" !important\" : \"100%\"),\n break: props.break || \"768px\",\n align: (props.align ? props.align + \" !important\" : \"left\")\n}))`\n box-sizing: border-box;\n -webkit-box-flex: 1;\n flex-grow: 1;\n width: ${props => props.width};\n padding: 0.1em;\n overflow: hidden;\n list-style: none;\n text-align: ${props => props.align};\n\n\n @media all and (max-width: ${props => props.break}) {\n background-color: #ccc;\n padding: 6px;\n }\n`;\n\nconst ResponsiveFooter = styled(ResponsiveCell)`\n\n`;\n\nconst ResponsiveTable = styled.div.attrs(props => ({\n cols: props.cols || 1,\n break: props.break || \"768px\"\n}))`\n display: -webkit-box;\n display: flex;\n flex-wrap: wrap;\n margin: 0 0 3em 0;\n padding: 0;\n\n & > ${ResponsiveCell} {\n width: ${props => (100 / props.cols) + \"%\"};\n }\n\n @media all and (max-width: ${props => props.break}) {\n display: block;\n > ${ResponsiveCell} { width: 100% !important; }\n > ${ResponsiveFooter} { margin-bottom: 1em; }\n }\n`;\n\nconst ResponsiveHead = styled(ResponsiveCell)`\n \n`;\n\nexport { ResponsiveTable, ResponsiveHead, ResponsiveCell, ResponsiveFooter };","import React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { withRouter } from \"react-router\";\n\nimport { inertMaterials } from \"./elements\";\nimport ElementSelect from \"./ElementSelect\";\nimport ElementPercentageField from \"./ElementPercentageField\";\nimport ElementValue from \"./ElementValue\";\nimport RemoveElementButton from \"./RemoveElementButton\";\nimport { ResponsiveCell, ResponsiveFooter } from \"../../ui/ResponsiveTable\";\n\nconst Element = ({ element, onElementChange, onElementRemoved }) => {\n\n const isInertMaterial = element.elementId === inertMaterials.id;\n \n return (\n \n \n \n \n \n \n \n \n Value\n \n \n \n {!isInertMaterial && }\n \n \n );\n};\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n };\n};\n\nconst mapDispatchToProps = {\n};\n\nexport default withRouter(connect(\n mapStateToProps,\n mapDispatchToProps\n)(Element));","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { withRouter } from \"react-router\";\nimport styled from \"styled-components\";\n\nconst Button = styled.button`\n width: 100%;\n background-color: #1e7e34;\n`;\n\n\nconst AddElementButton = ({ onAddElementClick }) => {\n\n return (\n \n Add\n \n );\n};\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n };\n};\n\nconst mapDispatchToProps = {\n};\n\nexport default withRouter(connect(\n mapStateToProps,\n mapDispatchToProps\n)(AddElementButton));","import * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { withRouter } from \"react-router\";\nimport styled, { css } from \"styled-components\";\n\nconst sum = (total, current) => total + current.value;\n\nconst BaseTotalStyles = css`\n font-weight: bold;\n white-space: nowrap;\n padding-left: 10px;\n`;\n\nconst InvalidTotal = styled.span`\n ${BaseTotalStyles}\n color: red;\n`;\n\nconst Total = styled.span`\n ${BaseTotalStyles}\n color: limegreen;\n`;\n\n\nconst RockValue = ({ elements }) => {\n let value = elements.reduce(sum, 0);\n if (Number.isNaN(value))\n return (0.00);\n\n value = Number.parseFloat(value).toFixed(2);\n return ({value});\n};\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n };\n};\n\nconst mapDispatchToProps = {\n};\n\nexport default withRouter(connect(\n mapStateToProps,\n mapDispatchToProps\n)(RockValue));","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst Link = styled.a`\n color: white;\n background-color: #bd2130;\n text-align: center;\n padding: 10px;\n border-radius: 3px;\n width: 100%;\n display: inline-block;\n\n &:hover {\n color: white;\n text-decoration: none;\n }\n`;\n\nconst ClearRockButton = () => {\n\n return (\n Clear\n );\n};\n\nexport default ClearRockButton;","//https://stackoverflow.com/a/2117523/17540\nconst uuid = () =>\n ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>\n (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)\n );\n\nexport default uuid;","import React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { withRouter } from \"react-router\";\nimport styled, { css } from \"styled-components\";\n\nimport { inertMaterials, defaultElement } from \"./elements.js\";\nimport RockMassField from \"./RockMassField\";\nimport Element from \"./Element\";\nimport AddElementButton from \"./AddElementButton\";\nimport RockValue from \"./RockValue\";\nimport ClearRockButton from \"./ClearRockButton\"\nimport isValidMass from \"../../validators/mass\";\nimport isValidPercentage from \"../../validators/percentage\";\nimport uuid from \"../../utilities/uuid\";\nimport {\n ResponsiveTable,\n ResponsiveFooter,\n ResponsiveCell\n} from \"../../ui/ResponsiveTable\";\n\nconst Form = styled.form`\n font-size: 150%;\n`;\n\nconst RockTable = styled(ResponsiveTable)`\n align-items: center;\n`;\n\nconst RockTotals = styled(ResponsiveCell)`\n font-weight: bold;\n text-align: right;\n`;\n\nconst ResponsiveHeader = styled(ResponsiveCell).attrs(props => ({\n break: props.break || \"768px\"\n}))`\n @media all and (max-width: ${props => props.break}) {\n display: none;\n }\n`;\n\n//todo this needs defencing\nconst toFraction = (x) => x / 100;\n\nconst elementToRow = (element, percentage, value, id = uuid()) => ({\n ...element,\n elementId: element.id, \n percentage,\n value,\n id\n });\n\nconst sumNonInertPercentages = (total, current) => {\n const percentage = Number.parseFloat(current.percentage);\n return (current.elementId != inertMaterials.id &&\n isValidPercentage(percentage))\n ? total + percentage\n : total;\n}\n\nconst RockForm = () => {\n const defaultElements = [elementToRow(inertMaterials, 100, 0)];\n\n const [mass, setMass] = useState(0);\n const [elements, setElements] = useState(defaultElements);\n\n const handleAddElementClick = (event) => {\n event.preventDefault();\n const inert = elements.find((e) => e.elementId === inertMaterials.id);\n setElements([\n ...elements.filter((e) => e.elementId !== inertMaterials.id),\n elementToRow(defaultElement, 0, 0),\n inert\n ]);\n };\n\n const handleElementRemoved = (id) => {\n const elementsCopy = elements.filter((element) => element.id != id)\n setElements(elementsCopy);\n };\n\n const handleMassChange = (mass) => {\n setMass(mass);\n }\n\n const updateValues = () => {\n const elementsCopy = elements.map((e) => \n ({...e, value: calculateValue(e)})\n );\n setElements(elementsCopy);\n };\n\n const copyInert = (element) => {\n const inert = {\n ...inertMaterials,\n percentage: 100 - elements.reduce(sumNonInertPercentages, 0),\n id: element.id,\n elementId: inertMaterials.id\n };\n inert.value = calculateValue(inert);\n return inert;\n };\n\n const handleElementChange = (element) => {\n element.value = calculateValue(element);\n const elementsCopy = elements.map((e) => {\n if (e.elementId == inertMaterials.id)\n return copyInert(e);\n else if (e.id == element.id)\n return element;\n else\n return e;\n });\n setElements(elementsCopy);\n }\n\n const calculateValue = (element) => {\n const percentage = Number.parseFloat(element.percentage)\n if (!isValidPercentage(percentage) || !isValidMass(mass))\n return 0.00;\n\n const elementMass = mass * toFraction(percentage);\n return elementMass * element.pricePerUnit;\n }\n\n useEffect(updateValues, [mass]);\n\n const elementRows = elements.map((element) =>\n \n );\n\n return (\n
\n \n \n \n Element\n \n \n Percent\n \n \n UEC\n \n \n \n \n\n {elementRows}\n\n \n \n \n Total\n \n \n \n \n \n \n \n );\n};\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n };\n};\n\nconst mapDispatchToProps = {\n};\n\nexport default withRouter(connect(\n mapStateToProps,\n mapDispatchToProps\n)(RockForm));","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst Header = styled.h1`\n margin-bottom: 24px;\n color: #57614e;\n`;\n\nconst AppHeader = (props) => (\n
\n {props.children}\n
\n);\n\nexport default AppHeader;","import React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { withRouter } from \"react-router\";\nimport styled from \"styled-components\";\n\nconst Logo = styled.img`\n margin-right: 20px;\n height: 3rem;\n`;\n\nconst AppLogo = ({src}) => (\n \n);\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n };\n};\n\nconst mapDispatchToProps = {\n};\n\nexport default withRouter(connect(\n mapStateToProps,\n mapDispatchToProps\n)(AppLogo));","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst UpdateDate = styled.span`\n display: block;\n font-size: 1rem;\n`;\n\nconst AppUpdateDate = ({date}) => (\n \n Last updated: {date.toLocaleDateString()}\n \n);\n\nexport default AppUpdateDate;","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst Version = styled.span`\n font-size: 1rem;\n margin-left: 10px;\n`;\n\nconst AppVersion = ({version}) => (\n \n v{version}\n \n);\n\nexport default AppVersion;","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst Compatibility = styled.span`\n display: block;\n font-size: 1rem;\n`;\n\nconst AppCompatibility = ({starCitizenVersion}) => (\n \n Star Citizen: v{starCitizenVersion.version}\n \n);\n\nexport default AppCompatibility;","//to confirm patch dates see\n//https://status.robertsspaceindustries.com/\n//https://robertsspaceindustries.com/spectrum/community/SC/forum/190048?page=1&sort=hot\n//https://starcitizen.tools/Category:Upcoming_Patches\n\nconst latestVersion = \"3.10.2\";\n\nconst allStarCitizenVersions = [\n { version: \"3.10.2\", date: \"2020-08-24\" }\n];\n\nconst starCitizen = {\n currentVersion: allStarCitizenVersions.find((v) => v.version === latestVersion)\n}\n\nexport { allStarCitizenVersions };\nexport default starCitizen;","\nconst app = {\n name: \"Rock calculator\",\n updateDate: new Date(2020, 10, 5),\n version: \"1.0.1\"\n}\n\nexport default app;","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst AdShareClassName = \"xc449bad4854773ff\";\n\nconst AdShareAdUnit = styled.div`\n background-color: white;\n margin: 30px auto;\n\n width: ${props => props.width};\n height: ${props => props.height};\n`;\n\nconst LeaderboardAdUnit = styled(AdShareAdUnit)`\n @media (max-width: 991px) { display: none; }\n`;\n\nconst LargeMobileBannerAdUnit = styled(AdShareAdUnit)`\n @media (max-width: 410px) { display: none; }\n @media (min-width: 992px) { display: none; }\n`;\n\nconst ButtonTwoAdUnit = styled(AdShareAdUnit)`\n width: 120px;\n height: 60px;\n\n @media (min-width: 411px) { display: none; }\n`;\n\nconst HalfBannerAdUnit = styled(AdShareAdUnit)`\n @media (min-width: 411px) { display: none; }\n`;\n\nconst AdsharesBanner = () => (\n <>\n \n \n \n \n);\n\nexport default AdsharesBanner;","import * as React from \"react\";\nimport {Container} from \"reactstrap\";\nimport styled from \"styled-components\";\n\nimport Layout from \"../Layout\";\nimport RockForm from \"../apps/rock-calculator/RockForm\";\nimport AppHeader from \"../AppHeader\";\nimport AppLogo from \"../AppLogo\";\nimport AppUpdateDate from \"../AppUpdateDate\";\nimport AppVersion from \"../AppVersion\";\nimport AppCompatibility from \"../AppCompatibility\";\nimport starCitizen from \"../../StarCitizen\";\nimport app from \"../apps/rock-calculator/app\"\nimport AdsharesBanner from \"../AdsharesBanner\"\n\nconst AppMetaData = styled.span`\n\n @media (min-width: 768px) {\n float:right;\n }\n`;\n\nconst RockCalculator = () => (\n \n
\n \n \n \n {app.name}\n \n \n \n \n \n \n \n \n \n
\n
\n \n

{app.name} instructions

\n

\n After scanning a rock, enter the mass in the first field and then\n start adding each of the rock's elements by clicking the\n add button.\n

\n

\n Select the element from the drop down and then enter the\n percentage of that element into the percent field for that element.\n As you change any of the values the total value of the rock will update at the bottom\n to reflect how much you can expect to be paid if you extract all of the\n elements in the rock.\n

\n

\n The inert material content of the rock is automatically calculated for you\n based on the composition of the rock specified. You can start again by clicking clear\n and resetting the form.\n

\n

Element base values are currently taken from SC Trade Tools.

\n \n
\n
\n);\n\nexport default RockCalculator;","import * as React from \"react\";\n\nconst NotFoundPage = () =>\n
Page not found
;\n\n\nexport default NotFoundPage;","import * as React from \"react\";\nimport { Route, Switch } from \"react-router\";\n\nimport RockCalculator from \"./components/pages/RockCalculator\";\nimport NotFoundPage from \"./components/pages/NotFoundPage\";\n\nimport \"./custom.css\"\n\nexport default () => (\n \n \n \n \n );","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport default function register() {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const url = process.env.PUBLIC_URL as string;\n const publicUrl = new URL(url, window.location.toString());\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl);\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing as ServiceWorker;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log('New content is available; please refresh.');\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (response.status === 404 || (contentType && contentType.indexOf('javascript') === -1)) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl);\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.');\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import axios from \"axios\";\nimport userManager from \"../services/UserManager\";\n\n//var headersNames = {\n// contentType: \"Content-Type\"\n//}\n\nvar contentTypes = {\n applicationJson: \"application/json\"\n}\n\nvar jsonRequestConfig = {\n headers: {\n \"Content-Type\": contentTypes.applicationJson\n }\n};\n\nclass MapService {\n constructor() {\n this.mapApiUrl = process.env.REACT_APP_MAPPER_API_URL;\n }\n\n async retrieve(mapId) {\n let retrieveMapUrl = this.mapApiUrl + \"api/maps/\" + mapId;\n try {\n var response = await axios.get(retrieveMapUrl, jsonRequestConfig);\n response.data.geoJson = JSON.parse(response.data.geoJson);\n response.data.mapId = response.data.id;\n return response.data;\n } catch (e) {\n console.error(\"Problem retrieving map\", e);\n throw e;\n }\n }\n\n async retrieveWelcomeMap() {\n let retrieveMapUrl = this.mapApiUrl + \"api/maps/welcome\";\n try {\n var response = await axios.get(retrieveMapUrl, jsonRequestConfig);\n response.data.geoJson = JSON.parse(response.data.geoJson);\n response.data.mapId = response.data.id;\n return response.data;\n } catch (e) {\n console.error(\"Problem retrieving map\", e);\n throw e;\n }\n }\n\n async create() {\n\n var self = this;\n let user = await userManager.getUser();\n let createMapUrl = self.mapApiUrl + \"api/maps/create\";\n var response = await axios.get(createMapUrl, {\n headers: {\n \"Content-Type\": contentTypes.applicationJson,\n \"Authorization\": \"Bearer \" + user.access_token\n }\n });\n response.data.mapId = Number(response.data.id);\n return response.data;\n }\n\n async persist(mapId, geoJson) {\n\n let user = await userManager.getUser();\n\n let map = { id: mapId, geoJson: JSON.stringify(geoJson), userId: user.profile.sub };\n let persistMapUrl = this.mapApiUrl + \"api/maps/\" + map.id + \"/update\";\n\n return axios.post(persistMapUrl, map, {\n headers: {\n \"Content-Type\": contentTypes.applicationJson,\n \"Authorization\": \"Bearer \" + user.access_token\n }\n });\n }\n}\n\nexport default new MapService();","import { createAsyncThunk, createSlice } from '@reduxjs/toolkit'\n\nimport MapService from \"../services/MapService\"\n\nexport const retrieve = createAsyncThunk(\n 'map/retrieve',\n async (mapId, { getState, requestId }) => {\n const { currentRequestId, isLoading } = getState().map;\n\n if (isLoading !== true || requestId !== currentRequestId) {\n return;\n }\n var map = await MapService.retrieve(mapId);\n return map;\n }\n);\n\nexport const createMap = createAsyncThunk(\n 'map/createMap',\n async (data, { getState, requestId }) => {\n const { currentRequestId, isLoading } = getState().map;\n\n if (isLoading !== true || requestId !== currentRequestId) {\n return;\n }\n return await MapService.create();\n }\n);\n\nexport const origin = [0, 0];\nexport const initialZoomLevel = 12;\nexport const defaultMapId = 40;\n\nconst mapSlice = createSlice({\n name: 'map',\n initialState: {\n position: [51.505, -0.09],\n zoom: initialZoomLevel,\n geoJson: null,\n id: defaultMapId,\n userId: null,\n isLoading: false,\n currentRequestId: undefined,\n error: null\n },\n reducers: {\n create(state, action) {\n state.geoJson = action.payload;\n },\n remove(state, action) {\n state.geoJson = action.payload;\n },\n edit(state, action) {\n state.geoJson = action.payload;\n },\n cut(state, action) {\n state.geoJson = action.payload;\n }\n },\n extraReducers: {\n [retrieve.pending]: (state, action) => {\n if (state.isLoading === false) {\n state.isLoading = true;\n state.currentRequestId = action.meta.requestId;\n }\n },\n [retrieve.fulfilled]: (state, action) => {\n const { requestId } = action.meta;\n if (state.isLoading === true && state.currentRequestId === requestId) {\n state.isLoading = false;\n state.geoJson = action.payload.geoJson;\n state.userId = action.payload.userId;\n state.currentRequestId = undefined;\n }\n },\n [retrieve.rejected]: (state, action) => {\n const { requestId } = action.meta;\n if (state.isLoading === true && state.currentRequestId === requestId) {\n state.isLoading = false;\n state.error = action.error;\n state.currentRequestId = undefined;\n }\n },\n [createMap.pending]: (state, action) => {\n if (state.isLoading === false) {\n state.isLoading = true;\n state.currentRequestId = action.meta.requestId;\n }\n },\n [createMap.fulfilled]: (state, action) => {\n const { requestId } = action.meta;\n if (state.isLoading === true && state.currentRequestId === requestId) {\n state.isLoading = false;\n state.id = action.payload.id;\n state.geoJson = action.payload.geoJson;\n state.userId = action.payload.userId;\n state.currentRequestId = undefined;\n }\n },\n [createMap.rejected]: (state, action) => {\n const { requestId } = action.meta;\n if (state.isLoading === true && state.currentRequestId === requestId) {\n state.isLoading = false;\n state.error = action.error;\n state.currentRequestId = undefined;\n }\n }\n }\n});\n\nexport const { create, remove, edit, cut } = mapSlice.actions;\n\nexport default mapSlice.reducer;","import \"bootstrap/dist/css/bootstrap.css\";\n\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { Provider } from \"react-redux\";\nimport { ConnectedRouter, connectRouter, routerMiddleware } from \"connected-react-router\";\nimport { configureStore, getDefaultMiddleware } from \"@reduxjs/toolkit\";\nimport { reducer as oidcReducer } from \"redux-oidc\";\nimport { createBrowserHistory } from \"history\";\nimport createOidcMiddleware from 'redux-oidc';\n\nimport App from \"./App\";\nimport registerServiceWorker from \"./registerServiceWorker\";\nimport mapReducers from \"./store/Map\";\nimport userManager from './services/UserManager';\n\n// Create browser history to use in the Redux store\nconst baseUrl = document.getElementsByTagName(\"base\")[0].getAttribute(\"href\");\nconst history = createBrowserHistory({ basename: baseUrl });\n\nconst loggerMiddleware = store => next => action => {\n console.log(\"Action type:\", action.type);\n console.log(\"Action payload:\", action.payload);\n console.log(\"State before:\", store.getState());\n next(action);\n console.log(\"State after:\", store.getState());\n};\n\n//const oidcMiddleware = createOidcMiddleware(userManager);\n\nconst devMiddleware = [\n loggerMiddleware,\n //oidcMiddleware,\n ...getDefaultMiddleware({\n serializableCheck: false //consider ignoredPaths. See https://github.com/reduxjs/redux-toolkit/releases/tag/v1.2.3\n }),\n routerMiddleware(history)\n];\n\nconst prodMiddleware = [\n //oidcMiddleware, \n ...getDefaultMiddleware({\n serializableCheck: false //consider ignoredPaths. See https://github.com/reduxjs/redux-toolkit/releases/tag/v1.2.3\n }),\n routerMiddleware(history)\n];\n\nvar middleware = prodMiddleware;\nif (!process.env.NODE_ENV || process.env.NODE_ENV === 'development') {\n middleware = devMiddleware;\n}\n\n\nconst rootReducer = {\n map: mapReducers,\n //oidc: oidcReducer,\n router: connectRouter(history)\n};\n\n// Get the application-wide store instance, prepopulating with state from the server where available.\nconst store = configureStore({\n reducer: rootReducer,\n middleware\n});\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById(\"root\"));\n\nregisterServiceWorker();\n"],"sourceRoot":""}