{"version":3,"sources":["webpack:///./assets/comps/SignIn/index.js","webpack:///./assets/comps/Snackbar.js","webpack:///./assets/comps/Toaster.js","webpack:///./assets/comps/GlobalModal.js","webpack:///./assets/lib/isLoggedIn.js","webpack:///./assets/comps/Common.js","webpack:///./assets/comps/PasswordReset/index.js","webpack:///./assets/comps/Gateway/index.js","webpack:///./assets/comps/useQueryTracker.js"],"names":["passwordTemplate","textbox","clone","Input","locals","Object","_emotion_core__WEBPACK_IMPORTED_MODULE_1__","attrs","className","onClick","goToPasswordReset","ErrorsView","_ref","errors","length","data-testid","map","e","i","key","set","schema","t","sign_in","email","EmailT","options","type","password","PasswordT","template","legend","Component","props","_useState","useState","value","_useState2","_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default","setValue","_useState3","_useState4","setErrors","_useState5","Boolean","isLoading","_useState6","setLoading","formRef","createRef","tFormRef","submitBtn","onSubmit","preventDefault","body","form","current","tForm","v","qs","parse","$","serialize","res","validate","user","api","fetchJson","method","then","unset","PATHS","activeModal","Turbolinks","visit","id","ref","lib_proforma__WEBPACK_IMPORTED_MODULE_8__","onChange","disabled","Snackbar","__webpack_exports__","_useStoreState","useStoreState","message","duration","isOpen","includes","dismissBtn","core_browser_esm","style","color","comps_Snackbar","open","autoHideDuration","onRequestClose","modals","gateway","Gateway","GlobalModal","pathname","history","getCurrentLocation","activeModalName","setActiveModalName","useEffect","m","getKey","isLoggedIn","action","delay","deleteKey","react__WEBPACK_IMPORTED_MODULE_2__","styles","css","comps_FreeModal__WEBPACK_IMPORTED_MODULE_6__","title","height","width","isLargeScreen","requestClosePortal","createElement","window","CONFIG","ME","keys","__webpack_require__","d","document","on","ga","page","location","useQueryTracker","_emotion_core__WEBPACK_IMPORTED_MODULE_0__","react__WEBPACK_IMPORTED_MODULE_1__","comps_GlobalModal__WEBPACK_IMPORTED_MODULE_2__","comps_Toaster__WEBPACK_IMPORTED_MODULE_3__","formType","password_reset","CheckYourEmail","slicedToArray_default","mode","setMode","onError","PasswordReset_CheckYourEmail","getValue","PasswordReset_ErrorsView","proforma","el","defaultValue","forms","SignIn","SignInForm","PasswordReset","PasswordResetForm","titles","path1","mapPath","gatewayMode","btnMsgs","Link","testid","concat","fontSize","borderWidth","cx","tabIndex","LinksView","FormView","Gateway_LinksView","react__WEBPACK_IMPORTED_MODULE_0__","lib_useStoreState__WEBPACK_IMPORTED_MODULE_1__","ops__WEBPACK_IMPORTED_MODULE_2__","lib_history__WEBPACK_IMPORTED_MODULE_3__","lib_hash__WEBPACK_IMPORTED_MODULE_4__","immutable__WEBPACK_IMPORTED_MODULE_5__","isPristine","useRef","s","browserQuery","getQuery","I","updateQuery","toJS","hash"],"mappings":"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","file":"comps/Common.chunk-bb813d7ec92ab6f1dee8.js","sourcesContent":["/*@flow*/\nimport React, { useState, createRef } from 'react';\nimport { EmailT, PasswordT } from 'types/tcomb';\nimport * as t from 'lib/t';\nimport { set, unset } from 'ops';\nimport qs from 'qs';\nimport api from 'lib/api';\nimport { Fields } from 'lib/proforma';\nimport textbox from 'lib/proforma/templates/Textbox';\nimport PATHS from 'const/paths';\nimport Turbolinks from 'turbolinks';\n\nconst passwordTemplate = textbox.clone({\n Input: (locals) => {\n return (\n
\n \n

\n Forgot?\n

\n
\n );\n },\n});\n\nconst ErrorsView = ({ errors }) =>\n errors && errors.length > 0 ? (\n \n {errors.map((e, i) => (\n
  • {e}
  • \n ))}\n \n ) : null;\n\nconst goToPasswordReset = () => set('mode.gatewayModal.type', 'PasswordReset');\n\nconst schema = t.struct({\n sign_in: t\n .struct({\n email: EmailT.options({ type: 'email' }),\n password: PasswordT.options({\n type: 'password',\n template: passwordTemplate,\n }),\n })\n .options({\n legend: '',\n }),\n});\n\ntype Record = { [key: string]: string };\n\ntype FormValue = { sign_in: Record };\n\ntype PropsT = {\n errors?: string[],\n value?: FormValue,\n isLoading?: boolean,\n};\n\nconst Component = (props: PropsT) => {\n const [value, setValue] = useState(props.value || { sign_in: {} });\n const [errors, setErrors] = useState(props.errors || []);\n const [isLoading, setLoading] = useState(Boolean(props.isLoading));\n\n const formRef = createRef();\n const tFormRef = createRef();\n const submitBtn = createRef();\n\n const login = (body) => {\n setLoading(true);\n const onSuccess = () => {\n unset(PATHS.activeModal);\n Turbolinks.visit('/map');\n };\n const onError = (v) => {\n setLoading(false);\n setErrors(v.errors || ['Unknown error']);\n\n // if (v.errors) {\n // setErrors(v.errors);\n // } else {\n // onSuccess();\n // }\n };\n\n api\n .fetchJson('/users/sign_in', {\n method: 'POST',\n body,\n })\n .then(onSuccess)\n .catch(onError);\n };\n\n const onSubmit = (e) => {\n e.preventDefault();\n const form = formRef.current;\n const tForm = tFormRef.current;\n if (!form) return;\n if (!tForm) return;\n const v = qs.parse($(form).serialize());\n\n const res = t.validate(v, schema);\n\n // Note: we validate twice because tcomb-form does not\n // see auto-filled values. Hence we first take them from html\n // and validate them, and the second time is to show validation\n // errors on the form.\n if (res && res.errors.length > 0) {\n tForm.validate();\n return;\n }\n if (!v.sign_in) return;\n\n login({ user: v.sign_in });\n };\n\n return (\n onSubmit(e)}\n id=\"signInForm\"\n ref={formRef}\n >\n \n {\n setValue(v);\n }}\n />\n onSubmit(e)}\n disabled={isLoading}\n >\n {isLoading ? 'Please wait...' : 'Sign in'}\n \n \n );\n};\n\nexport default (Component: any);\n","/*@flow*/\nimport Snackbar from 'material-ui/Snackbar';\nexport default Snackbar;\n","/*@flow*/\nimport type { Node } from 'react';\nimport React from 'react';\nimport Snackbar from 'comps/Snackbar';\nimport { unset, set } from 'ops';\nimport useStoreState from 'lib/useStoreState';\n\nexport default (): Node => {\n const { type, message, duration } = useStoreState({\n type: 'ui.toaster.type',\n message: 'ui.toaster.message',\n duration: 'ui.toaster.duration',\n });\n\n const isOpen = ['Open'].includes(type);\n\n function onRequestClose() {\n set('ui.toaster.type', 'Closed');\n unset('ui.toaster.message');\n }\n\n function dismiss() {\n set('ui.toaster.type', 'Closed');\n }\n\n const dismissBtn = (\n \n \n \n );\n\n return (\n \n {message} {dismissBtn}\n \n }\n id=\"toaster\"\n autoHideDuration={duration}\n onRequestClose={onRequestClose}\n />\n );\n};\n","/*@flow*/\n/** @jsx jsx */\nimport type { Node } from 'react';\nimport { css, jsx, Global } from '@emotion/core';\nimport { createElement, useEffect, useState, Fragment } from 'react';\n// Modal components\nimport Gateway from 'comps/Gateway';\nimport history from 'lib/history';\nimport isLoggedIn from 'lib/isLoggedIn';\nimport FreeModal from 'comps/FreeModal';\nimport delay from 'lib/delay';\nimport { isLargeScreen } from 'lib/getScreenWidth';\nimport { unset } from 'ops';\n\nconst modals = {\n gateway: Gateway,\n};\n\nexport const GlobalModal = (): null | Node => {\n const { pathname } = history.getCurrentLocation();\n const [activeModalName, setActiveModalName] = useState('');\n\n useEffect(() => {\n const m = history.getKey('m');\n switch (pathname) {\n case '/sign_in':\n if (isLoggedIn()) {\n Turbolinks.visit('/', { action: 'replace' });\n } else {\n setActiveModalName('gateway');\n }\n break;\n case '/map':\n if (m in modals) {\n setActiveModalName(m);\n }\n break;\n default:\n break;\n }\n }, [pathname]);\n\n useEffect(() => {\n if (pathname === '/map') {\n if (!history.getKey('retain')) {\n delay(100).then(() => {\n history.deleteKey('m');\n unset('$query.m');\n });\n }\n }\n }, [activeModalName]);\n\n if (!(activeModalName in modals)) return null;\n if (!activeModalName) return null;\n\n return (\n \n \n );\n};\n\nexport default GlobalModal;\n","/*@flow*/\nexport default function isLoggedIn(): %checks {\n return Boolean(\n window &&\n window.CONFIG &&\n window.CONFIG.ME &&\n Object.keys(window.CONFIG.ME).length > 0\n );\n}\n","/*@flow*/\nimport type { Node } from 'react';\nimport React, { Fragment } from 'react';\nimport GlobalModal from 'comps/GlobalModal';\nimport Toaster from 'comps/Toaster';\nimport useQueryTracker from 'comps/useQueryTracker';\n\n// Global event listeners\n$(document).on('turbolinks:load', () => {\n if (window.ga) {\n // Send Google Analytics pageview data\n window.ga('send', 'pageview', { page: window.location.pathname });\n }\n});\n\nexport default (): Node => {\n useQueryTracker();\n\n return (\n \n \n \n \n );\n};\n","/*@flow*/\nimport React, { useState, createRef } from 'react';\nimport { EmailT } from 'types/tcomb';\nimport * as t from 'lib/t';\nimport { Fields } from 'lib/proforma';\nimport api from 'lib/api';\n\nconst formType = t.struct({\n password_reset: t\n .struct({\n email: EmailT.options({ type: 'email' }),\n })\n .options({\n legend: '',\n }),\n});\n\nconst ErrorsView = ({ errors }) =>\n errors && errors.length > 0 ? (\n \n {errors.map((e, i) => (\n
  • {e}
  • \n ))}\n \n ) : null;\n\nconst CheckYourEmail = () => (\n \n
    \n

    Check your email.

    \n \n
    \n \n);\n\ntype FormValue = { password_reset: { email: string } };\n\ntype PropsT = {\n errors?: string[],\n value?: FormValue,\n mode: 'SUCCESS' | 'READY',\n};\n\nconst Component = (props: PropsT) => {\n const [errors, setErrors] = useState(props.errors || []);\n const [value, setValue] = useState(props.value || { password_reset: {} });\n const [mode, setMode] = useState(props.mode || 'READY');\n const form = createRef();\n\n const onError = (e: { errors: string[] }) => {\n setErrors(e.errors);\n };\n const resetPassword = (body) => {\n api\n .fetchJson('/password_reset', {\n method: 'POST',\n body,\n })\n .then(() => setMode('SUCCESS'), onError)\n .catch(onError);\n };\n\n const onSubmit = (e) => {\n e.preventDefault();\n if (!form.current) return;\n const v = form.current.getValue();\n if (!v) return;\n resetPassword({ user: v.password_reset });\n };\n\n if (mode === 'SUCCESS') return ;\n\n return (\n
    \n \n {\n if (el) form.current = el;\n }}\n type={formType}\n defaultValue={value}\n onChange={(v) => setValue(v)}\n />\n \n Send me new password\n \n \n );\n};\nexport default (Component: any);\n","/*@flow*/\n/** @jsx jsx */\nimport { css, jsx } from '@emotion/core';\nimport { set } from 'ops';\nimport { Fragment } from 'react';\nimport SignInForm from 'comps/SignIn';\nimport useStoreState from 'lib/useStoreState';\nimport PasswordResetForm from 'comps/PasswordReset';\nimport cx from 'classnames';\n\nconst forms = {\n SignIn: SignInForm,\n PasswordReset: PasswordResetForm,\n};\nconst titles = {\n SignIn: 'Sign in',\n PasswordReset: 'Reset your password',\n};\n\nconst path1 = 'mode.gatewayModal.type';\nconst mapPath = {\n gatewayMode: path1,\n};\n\nconst btnMsgs = {\n SignIn: 'Sign in',\n};\n\nfunction Link({ type }: { type: string }) {\n const { gatewayMode } = useStoreState(mapPath);\n // Hide SignIn link when the value of gatewayMode is blank. This\n // tells us that we are currently looking at the SignIn view already.\n if (type === 'SignIn' && !gatewayMode) return null;\n if (type === gatewayMode) return null;\n const testid = `${type}Link`;\n\n return (\n set(path1, type)}\n className={cx(\n 'btn btn-block btn-sm mb-3 p-2 btn-outline-info text-info bg-white'\n )}\n tabIndex={10}\n >\n {btnMsgs[type]}\n \n );\n}\n\nconst LinksView = () => ;\n\nconst Component = () => {\n const { gatewayMode } = useStoreState(mapPath);\n const FormView = forms[gatewayMode] || forms.SignIn;\n const title = titles[gatewayMode] || 'Sign in';\n\n return (\n \n
    \n \n {title}\n \n
    \n
    \n \n \n
    \n
    \n
    \n \n );\n};\n\nexport default (Component: any);\n","/*@flow*/\nimport { useRef, useEffect } from 'react';\nimport useStoreState from 'lib/useStoreState';\nimport { set } from 'ops';\nimport history from 'lib/history';\nimport hash from 'lib/hash';\nimport * as I from 'immutable';\n\nexport default function useQueryTracker() {\n const isPristine = useRef(true);\n const { s } = useStoreState({ s: '$query' });\n\n useEffect(() => {\n if (!isPristine.current) return;\n const browserQuery = history.getQuery();\n set('$query', I.fromJS(browserQuery));\n set('$queryInitialized', true);\n isPristine.current = false;\n }, []);\n\n useEffect(() => {\n if (isPristine.current) return;\n history.updateQuery(s.toJS());\n }, [hash(s)]);\n}\n"],"sourceRoot":""}