{"version":3,"sources":["webpack:///./obj/desktop/src/login/components/login-page/desktop/login-page.less","webpack:///./obj/desktop/src/login/components/reset-confirm/desktop/reset-confirm.less","webpack:///./node_modules/@material-ui/core/esm/internal/svg-icons/CheckBoxOutlineBlank.js","webpack:///./node_modules/@material-ui/core/esm/internal/svg-icons/CheckBox.js","webpack:///./node_modules/@material-ui/core/esm/internal/svg-icons/IndeterminateCheckBox.js","webpack:///./node_modules/@material-ui/core/esm/Checkbox/Checkbox.js","webpack:///./obj/desktop/src/util/validators.ts","webpack:///./obj/desktop/src/login/shared/consts.ts","webpack:///./obj/desktop/src/login/components/login-page/desktop/login-page.tsx","webpack:///./obj/desktop/src/login/components/login-page/login-page.tsx","webpack:///./obj/desktop/src/login/shared/email-form-state.ts","webpack:///./obj/desktop/src/login/components/forgot-password/desktop/forgot-password.tsx","webpack:///./obj/desktop/src/login/components/forgot-password/forgot-password.tsx","webpack:///./obj/desktop/src/login/components/reset-confirm/desktop/reset-confirm.tsx","webpack:///./obj/desktop/src/login/components/reset-confirm/reset-confirm.tsx","webpack:///./obj/desktop/src/login/shared/password-form-state.ts","webpack:///./obj/desktop/src/login/components/reset-password/desktop/reset-password.tsx","webpack:///./obj/desktop/src/login/components/reset-password/reset-password.tsx","webpack:///./obj/desktop/src/login/components/sign-up-email/desktop/sign-up-email.tsx","webpack:///./obj/desktop/src/login/components/sign-up-email/sign-up-email.tsx","webpack:///./obj/desktop/src/login/components/sign-up-password/desktop/sign-up-password.tsx","webpack:///./obj/desktop/src/login/components/sign-up-password/sign-up-password.tsx","webpack:///./obj/desktop/src/login/components/sign-up-welcome/desktop/sign-up-welcome.tsx","webpack:///./obj/desktop/src/login/components/sign-up-welcome/sign-up-welcome.tsx","webpack:///./obj/desktop/src/login/components/welcome/welcome.tsx","webpack:///./obj/desktop/src/login/components/login-routes.tsx"],"names":["module","exports","createSvgIcon","d","defaultCheckedIcon","CheckBox","defaultIcon","CheckBoxOutlineBlank","defaultIndeterminateIcon","IndeterminateCheckBox","props","ref","_props$checkedIcon","checkedIcon","classes","_props$color","color","_props$icon","icon","iconProp","_props$indeterminate","indeterminate","_props$indeterminateI","indeterminateIcon","indeterminateIconProp","inputProps","_props$size","size","other","SwitchBase","type","root","concat","capitalize","checked","disabled","fontSize","undefined","withStyles","theme","palette","text","secondary","colorPrimary","primary","main","backgroundColor","action","hoverOpacity","colorSecondary","name","passwordValidator","value","length","test","EMAIL_REGEXP","emailValidator","Consts","termsUrl","emailErrorMap","required","email","passwordErrorMap","error","LoginPage","container","data","handleSubmit","loginError","clearError","className","message","onClose","onSubmit","formField","label","fieldState","errorMap","autoFocus","password","autoComplete","endAdornment","to","checkbox","FormControlLabel","control","Checkbox","stayLoggedIn","onChange","e","target","href","Button","variant","form","id","validators","isBusy","validate","preventDefault","setBusy","grecaptcha","execute","handleLogin","token","req","$","reCaptchaToken","reset","withBusy","loginStore","authenticate","then","from","location","state","history","replace","pathname","err","componentDidMount","renderReCaptcha","this","render","LoginPageContainer","submitAction","emailSent","toString","ForgotPassword","absolute","messageClass","fullWidth","placeholder","hasError","resetEmail","loginApi","getMessage","success","response","ForgotPasswordContainer","ResetConfirm","img","src","srcSet","onClick","push","pwFormEmail","pwFormPassword","promise","callback","ResetConfirmContainer","step","submitRoute","showPassword","router","errorMessage","toggleShowPassord","path","substr","checkToken","needsLetter","needsNumber","noMatch","ResetPassword","hasFormError","resetPassword","result","resetForm","componentWillReceiveProps","nextProps","match","params","ResetPasswordContainer","SignUpEmail","invite","clientData","portalData","brandData","phone","errorCode","NUMBER_2","SignUpEmailContainer","SignUpPassword","create","getReCaptchaPromise","Promise","reject","reCaptchaCallback","resolvePromise","resolve","SignUpPasswordContainer","SignUpWelcome","firstName","readOnly","pwFormFirstName","SignUpWelcomeContainer","Welcome","LoginRoutes","exact","component"],"mappings":"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","file":"login.bundle.js?a221c7bfcfa527100776","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"form-field\":\"XSsVPMDYpmIkuaCAJVyor\",\"formField\":\"XSsVPMDYpmIkuaCAJVyor\",\"checkbox\":\"_17ORMxPjduN5CYjOyFzyzm\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"img\":\"_1iJql0VKnkhP5_iILOqzf9\"};","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"\n}), 'CheckBoxOutlineBlank');","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"\n}), 'CheckBox');","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z\"\n}), 'IndeterminateCheckBox');","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport SwitchBase from '../internal/SwitchBase';\nimport CheckBoxOutlineBlankIcon from '../internal/svg-icons/CheckBoxOutlineBlank';\nimport CheckBoxIcon from '../internal/svg-icons/CheckBox';\nimport { fade } from '../styles/colorManipulator';\nimport IndeterminateCheckBoxIcon from '../internal/svg-icons/IndeterminateCheckBox';\nimport capitalize from '../utils/capitalize';\nimport withStyles from '../styles/withStyles';\nexport var styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n color: theme.palette.text.secondary\n },\n\n /* Pseudo-class applied to the root element if `checked={true}`. */\n checked: {},\n\n /* Pseudo-class applied to the root element if `disabled={true}`. */\n disabled: {},\n\n /* Pseudo-class applied to the root element if `indeterminate={true}`. */\n indeterminate: {},\n\n /* Styles applied to the root element if `color=\"primary\"`. */\n colorPrimary: {\n '&$checked': {\n color: theme.palette.primary.main,\n '&:hover': {\n backgroundColor: fade(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }\n },\n '&$disabled': {\n color: theme.palette.action.disabled\n }\n },\n\n /* Styles applied to the root element if `color=\"secondary\"`. */\n colorSecondary: {\n '&$checked': {\n color: theme.palette.secondary.main,\n '&:hover': {\n backgroundColor: fade(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }\n },\n '&$disabled': {\n color: theme.palette.action.disabled\n }\n }\n };\n};\nvar defaultCheckedIcon = /*#__PURE__*/React.createElement(CheckBoxIcon, null);\nvar defaultIcon = /*#__PURE__*/React.createElement(CheckBoxOutlineBlankIcon, null);\nvar defaultIndeterminateIcon = /*#__PURE__*/React.createElement(IndeterminateCheckBoxIcon, null);\nvar Checkbox = /*#__PURE__*/React.forwardRef(function Checkbox(props, ref) {\n var _props$checkedIcon = props.checkedIcon,\n checkedIcon = _props$checkedIcon === void 0 ? defaultCheckedIcon : _props$checkedIcon,\n classes = props.classes,\n _props$color = props.color,\n color = _props$color === void 0 ? 'secondary' : _props$color,\n _props$icon = props.icon,\n iconProp = _props$icon === void 0 ? defaultIcon : _props$icon,\n _props$indeterminate = props.indeterminate,\n indeterminate = _props$indeterminate === void 0 ? false : _props$indeterminate,\n _props$indeterminateI = props.indeterminateIcon,\n indeterminateIconProp = _props$indeterminateI === void 0 ? defaultIndeterminateIcon : _props$indeterminateI,\n inputProps = props.inputProps,\n _props$size = props.size,\n size = _props$size === void 0 ? 'medium' : _props$size,\n other = _objectWithoutProperties(props, [\"checkedIcon\", \"classes\", \"color\", \"icon\", \"indeterminate\", \"indeterminateIcon\", \"inputProps\", \"size\"]);\n\n var icon = indeterminate ? indeterminateIconProp : iconProp;\n var indeterminateIcon = indeterminate ? indeterminateIconProp : checkedIcon;\n return /*#__PURE__*/React.createElement(SwitchBase, _extends({\n type: \"checkbox\",\n classes: {\n root: clsx(classes.root, classes[\"color\".concat(capitalize(color))], indeterminate && classes.indeterminate),\n checked: classes.checked,\n disabled: classes.disabled\n },\n color: color,\n inputProps: _extends({\n 'data-indeterminate': indeterminate\n }, inputProps),\n icon: /*#__PURE__*/React.cloneElement(icon, {\n fontSize: icon.props.fontSize === undefined && size === \"small\" ? size : icon.props.fontSize\n }),\n checkedIcon: /*#__PURE__*/React.cloneElement(indeterminateIcon, {\n fontSize: indeterminateIcon.props.fontSize === undefined && size === \"small\" ? size : indeterminateIcon.props.fontSize\n }),\n ref: ref\n }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Checkbox.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\n * If `true`, the component is checked.\n */\n checked: PropTypes.bool,\n\n /**\n * The icon to display when the component is checked.\n */\n checkedIcon: PropTypes.node,\n\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n\n /**\n * The color of the component. It supports those theme colors that make sense for this component.\n */\n color: PropTypes.oneOf(['default', 'primary', 'secondary']),\n\n /**\n * If `true`, the checkbox will be disabled.\n */\n disabled: PropTypes.bool,\n\n /**\n * If `true`, the ripple effect will be disabled.\n */\n disableRipple: PropTypes.bool,\n\n /**\n * The icon to display when the component is unchecked.\n */\n icon: PropTypes.node,\n\n /**\n * The id of the `input` element.\n */\n id: PropTypes.string,\n\n /**\n * If `true`, the component appears indeterminate.\n * This does not set the native input element to indeterminate due\n * to inconsistent behavior across browsers.\n * However, we set a `data-indeterminate` attribute on the input.\n */\n indeterminate: PropTypes.bool,\n\n /**\n * The icon to display when the component is indeterminate.\n */\n indeterminateIcon: PropTypes.node,\n\n /**\n * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n */\n inputProps: PropTypes.object,\n\n /**\n * Pass a ref to the `input` element.\n */\n inputRef: refType,\n\n /**\n * Callback fired when the state is changed.\n *\n * @param {object} event The event source of the callback.\n * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n */\n onChange: PropTypes.func,\n\n /**\n * If `true`, the `input` element will be required.\n */\n required: PropTypes.bool,\n\n /**\n * The size of the checkbox.\n * `small` is equivalent to the dense checkbox styling.\n */\n size: PropTypes.oneOf(['medium', 'small']),\n\n /**\n * The value of the component. The DOM API casts this to a string.\n * The browser uses \"on\" as the default value.\n */\n value: PropTypes.any\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiCheckbox'\n})(Checkbox);","import { Validator } from 'formstate';\n\nexport const passwordValidator: Validator<string> = (value) => {\n if (typeof value !== 'string' || value.length === 0) {\n return 'required';\n }\n\n if (value.length < 8) {\n return 'length';\n }\n\n if (!/[a-z]/i.test(value)) {\n return 'needsLetter';\n }\n\n if (!/\\d/.test(value)) {\n return 'needsNumber';\n }\n};\n\n// Copied from app repo's Util\\EmailUtils.cs\n/* tslint:disable-next-line */\nconst EMAIL_REGEXP =\n /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;\n\nexport const emailValidator: Validator<string> = (value) => {\n if (typeof value !== 'string' || value.length === 0) {\n return 'required';\n }\n\n return EMAIL_REGEXP.test(value) ? false : 'email';\n};\n","const literal = <V extends keyof any>(v: V) => v;\n\nexport const Consts = {\n termsUrl: literal('assets/terms/ServiceTitan_-_Interim_Customer_Portal_Terms_11.1.2020.pdf'),\n};\n","import { Button, Checkbox, FormControlLabel } from '@material-ui/core';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport { NavLink } from 'react-router-dom';\n\nimport { LoginPageContainer } from '../login-page';\nimport { MatField } from 'src/core/components/mat-field';\nimport { PageError } from 'src/core/components/page-error/page-error';\n\nimport styles from './login-page.less';\nimport { Consts } from 'src/login/shared/consts';\n\nconst emailErrorMap = {\n required: null,\n email: null,\n};\n\nconst passwordErrorMap = {\n error: null,\n};\n\ninterface Props {\n container: LoginPageContainer;\n}\n\nexport const LoginPage: React.SFC<Props> = observer(\n ({ container: { data, handleSubmit, loginError, clearError } }) => (\n <div className=\"page page-inverted login-image-background\">\n <div className=\"page-topping\">\n <PageError message={loginError} onClose={clearError} />\n </div>\n\n <div className=\"row\">\n <div className=\"col\">\n <div className=\"page-title\">\n <h1>\n Welcome <br />\n <i>to customer portal</i>\n </h1>\n </div>\n </div>\n <div className=\"col\">\n <div className=\"card\">\n <form className=\"flex-form\" onSubmit={handleSubmit}>\n <h1>Let's log in</h1>\n <div className=\"card-content\">\n <div className={styles.formField}>\n <MatField\n className=\"full-width\"\n type=\"email\"\n name=\"email\"\n label=\"Email\"\n fieldState={data.email}\n errorMap={emailErrorMap}\n autoFocus\n />\n </div>\n <div className={styles.formField}>\n <MatField\n className=\"full-width\"\n type=\"password\"\n name=\"password\"\n label=\"Password\"\n fieldState={data.password}\n errorMap={passwordErrorMap}\n autoComplete=\"new-password\"\n endAdornment={\n <NavLink to=\"/login/forgot\">Forgot Password</NavLink>\n }\n />\n </div>\n <div className={styles.checkbox}>\n <FormControlLabel\n control={\n <Checkbox\n name=\"stayLoggedIn\"\n checked={data.stayLoggedIn.value}\n onChange={(e) =>\n data.stayLoggedIn.onChange(e.target.checked)\n }\n />\n }\n label=\"Stay logged in\"\n />\n </div>\n </div>\n <div className=\"space-filler\" />\n <div>\n <span>\n By clicking Login below you agree to the{' '}\n <a href={Consts.termsUrl} target=\"blank\">\n Terms of Service\n </a>\n </span>\n </div>\n <Button\n className=\"next-step-button\"\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n disabled={!!data.form.error}\n >\n Login\n </Button>\n <div id=\"recaptcha-div\" />\n </form>\n </div>\n <div className=\"centered-content\">\n <p className=\"last-help\">\n <span className=\"gray-text\">Not a member?</span>{' '}\n <NavLink to=\"/login/sign-up\">Request an invitation</NavLink>\n </p>\n </div>\n </div>\n <div className=\"col\" />\n </div>\n </div>\n )\n);\n","import { FormState, FieldState } from 'formstate';\nimport { Location } from 'history';\nimport { observable, action } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport { RouteComponentProps } from 'react-router';\n\nimport { AuthenticateRequest } from 'src/api';\nimport { BusyFormState } from 'src/util/busy-form';\nimport { emailValidator } from 'src/util/validators';\nimport { LoginStore } from 'src/login/stores/login.store';\nimport { lazyInject } from '../../ioc';\n\nimport { LoginPage } from './desktop/login-page';\n\ninterface LocationState {\n from?: Location;\n}\n\nclass LoginFormState extends BusyFormState {\n email = new FieldState('').validators(emailValidator);\n password = new FieldState('').validators((value) =>\n value && value.length >= 8 ? null : 'error'\n );\n stayLoggedIn = new FieldState(true);\n\n form = new FormState({\n email: this.email,\n password: this.password,\n stayLoggedIn: this.stayLoggedIn,\n isBusy: this.isBusy,\n });\n\n constructor() {\n super();\n this.form.validate();\n }\n}\n\n@observer\nexport class LoginPageContainer extends React.Component<RouteComponentProps<void>> {\n @lazyInject(LoginStore) loginStore!: LoginStore;\n\n @observable loginError: string | undefined;\n data = new LoginFormState();\n\n componentDidMount() {\n renderReCaptcha(this.handleLogin, () => {\n this.loginError = 'An error occurred with reCAPTCHA. Please try again later.';\n this.data.setBusy(false);\n });\n }\n\n render() {\n return <LoginPage container={this} />;\n }\n\n handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n if (this.data.form.error) {\n return;\n }\n\n this.loginError = undefined;\n this.data.setBusy(true);\n grecaptcha.execute();\n };\n\n /**\n * @param {string} token the response token get from reCAPTCHA after user submit the form, it's used to check if the user has been verified by Google\n */\n @action private handleLogin = (token: string) => {\n const req: AuthenticateRequest = {\n email: this.data.email.$,\n password: this.data.password.$,\n reCaptchaToken: token,\n stayLoggedIn: this.data.stayLoggedIn.$,\n };\n grecaptcha.reset(); // prepare reCAPTCHA for next use in case there was an authentication error\n this.data.withBusy(this.loginStore.authenticate(req)).then(\n () => {\n const from = this.props.location.state\n ? (this.props.location.state as LocationState).from\n : undefined;\n this.props.history.replace(from ? from.pathname : '/');\n },\n (err) => (this.loginError = err)\n );\n };\n\n @action clearError = () => {\n this.loginError = undefined;\n };\n}\n","import { observable } from 'mobx';\n\nimport { BusyFormState } from 'src/util/busy-form';\nimport { FieldState, FormState } from 'formstate';\nimport { emailValidator } from 'src/util/validators';\n\nexport interface EmailActionResult {\n message: string;\n emailSent: boolean;\n}\n\nexport class EmailFormState extends BusyFormState {\n @observable emailSent = false;\n @observable message: string | undefined;\n\n email = new FieldState('').validators(emailValidator);\n\n form = new FormState({\n email: this.email,\n isBusy: this.isBusy,\n });\n\n constructor(private submitAction: (email: string) => Promise<EmailActionResult>) {\n super();\n this.form.validate();\n }\n\n handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n const email = this.email.$;\n this.emailSent = false;\n this.message = undefined;\n this.withBusy(this.submitAction(email)).then(\n ({ message, emailSent }) => {\n this.message = message;\n this.emailSent = emailSent;\n },\n (error) => {\n this.message = error.toString();\n }\n );\n };\n\n clearError = () => {\n this.message = undefined;\n };\n}\n","import { Button } from '@material-ui/core';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ForgotPasswordContainer } from '../forgot-password';\nimport { MatField } from 'src/core/components/mat-field';\nimport { PageError } from 'src/core/components/page-error/page-error';\n\nconst emailErrorMap = {\n required: null,\n email: null,\n};\n\ninterface Props {\n container: ForgotPasswordContainer;\n}\n\nexport const ForgotPassword = observer<React.SFC<Props>>(({ container: { data } }) => (\n <div className=\"page page-inverted login-image-background\">\n <div className=\"page-topping\">\n <PageError\n absolute\n messageClass={data.emailSent ? 'page-note' : ''}\n message={data.message}\n onClose={data.clearError}\n />\n </div>\n\n <div className=\"card\">\n <form className=\"flex-form\" onSubmit={data.handleSubmit}>\n <h1>Reset Password</h1>\n <div className=\"card-content\">\n <p>\n Enter the email address associated with your account, and we’ll email you a\n link to reset your password.\n </p>\n <div className={classnames('form-field', 'single-input')}>\n <MatField\n fullWidth\n type=\"email\"\n name=\"email\"\n placeholder=\"Email\"\n fieldState={data.email}\n errorMap={emailErrorMap}\n disabled={data.emailSent}\n autoFocus\n />\n </div>\n </div>\n <div className=\"space-filler\" />\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n className=\"next-step-button\"\n disabled={data.form.hasError || data.emailSent}\n >\n Send Reset Link\n </Button>\n </form>\n </div>\n </div>\n));\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { EmailFormState, EmailActionResult } from '../../shared/email-form-state';\nimport { lazyInject } from '../../ioc';\nimport { LoginApiService } from 'src/api';\nimport { ResetEmailResponse } from 'src/api/model/resetEmailResponse';\n\nimport { ForgotPassword } from './desktop/forgot-password';\n\n@observer\nexport class ForgotPasswordContainer extends React.Component {\n @lazyInject(LoginApiService) private loginApi!: LoginApiService;\n\n data = new EmailFormState((email) => this.resetEmail(email));\n\n async resetEmail(email: string): Promise<EmailActionResult> {\n const { data } = await this.loginApi.resetEmail({ email });\n return {\n message: this.getMessage(data, email),\n emailSent: data.success,\n };\n }\n\n private getMessage(response: ResetEmailResponse, email: string) {\n return response.success\n ? `A link to reset your password has been sent to ${email}`\n : 'Failed to send email';\n }\n\n render() {\n return <ForgotPassword container={this} />;\n }\n}\n","import { Button } from '@material-ui/core';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ResetConfirmContainer } from '../reset-confirm';\n\nimport styles from './reset-confirm.less';\n\ninterface Props {\n container: ResetConfirmContainer;\n}\n\nexport const ResetConfirm: React.SFC<Props> = observer(\n ({ container: { email, handleSubmit, isBusy } }) => (\n <div className=\"page page-inverted login-image-background\">\n <div className=\"card\">\n <h1>Password updated</h1>\n <div className=\"card-content centered-content\">\n <p>The password for {email} has been reset.</p>\n <img\n className={styles.img}\n src=\"/assets/images/mountain.png\"\n srcSet=\"/assets/images/mountain.png, /assets/images/mountain@2x.png 2x, /assets/images/mountain@3x.png 3x\"\n />\n </div>\n\n <div className=\"space-filler\" />\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n className=\"next-step-button\"\n onClick={handleSubmit}\n disabled={isBusy}\n >\n Click here to log in\n </Button>\n <div id=\"recaptcha-div\" />\n </div>\n </div>\n )\n);\n","import { observable, action } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport { RouteComponentProps } from 'react-router';\n\nimport { AuthenticateRequest } from 'src/api';\nimport { LoginStore } from 'src/login/stores/login.store';\nimport { lazyInject } from '../../ioc';\nimport { ResetConfirm } from './desktop/reset-confirm';\n\n@observer\nexport class ResetConfirmContainer extends React.Component<RouteComponentProps<void>> {\n @lazyInject(LoginStore) loginStore!: LoginStore;\n\n @observable isBusy = false;\n\n email: string | undefined;\n private password: string | undefined;\n\n constructor(props: RouteComponentProps<void>) {\n super(props);\n\n if (!this.loginStore.pwFormEmail || !this.loginStore.pwFormPassword) {\n this.props.history.push('/login');\n return;\n }\n\n this.email = this.loginStore.pwFormEmail;\n this.password = this.loginStore.pwFormPassword;\n }\n\n componentDidMount() {\n renderReCaptcha(this.handleLogin);\n }\n\n render() {\n return <ResetConfirm container={this} />;\n }\n\n private withBusy<T>(promise: Promise<T>): Promise<T> {\n this.isBusy = true;\n const callback = () => (this.isBusy = false);\n promise.then(callback, callback);\n return promise;\n }\n\n handleSubmit = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n e.preventDefault();\n grecaptcha.execute();\n };\n\n /**\n * @param {string} token the response token get from reCAPTCHA after user submit the form, it's used to check if the user has been verified by Google\n */\n @action private handleLogin = (token: string) => {\n if (!this.email || !this.password) {\n return;\n }\n const req: AuthenticateRequest = {\n email: this.email,\n password: this.password,\n reCaptchaToken: token,\n stayLoggedIn: false,\n };\n this.withBusy(this.loginStore.authenticate(req)).then(\n () => this.props.history.push('/'),\n () => this.props.history.push('/login')\n );\n };\n}\n","import { FieldState, FormState } from 'formstate';\nimport { observable } from 'mobx';\n\nimport { LoginStore } from '../stores/login.store';\nimport { RouterStore } from 'src/core/stores/router.store';\nimport { lazyInject } from '../ioc';\nimport { BusyFormState } from 'src/util/busy-form';\nimport { passwordValidator } from 'src/util/validators';\n\nexport interface RouteParams {\n token: string;\n}\n\nexport class PasswordFormState extends BusyFormState {\n @lazyInject(LoginStore) loginStore!: LoginStore;\n @lazyInject(RouterStore) router!: RouterStore;\n\n @observable showPassword = false;\n @observable errorMessage: string | undefined;\n\n password = new FieldState('').validators(passwordValidator);\n\n private token: string | undefined;\n\n form = new FormState({\n password: this.password,\n isBusy: this.isBusy,\n }).validators(() => (!this.token || !this.loginStore.pwFormPassword) && 'invalid');\n\n constructor(\n public step: 1 | 2,\n token: string,\n private submitAction: (token: string, email: string, password: string) => Promise<boolean>,\n private submitRoute: string\n ) {\n super();\n\n if (this.step === 1) {\n this.loginStore.pwFormPassword = undefined;\n } else {\n if (!this.loginStore.pwFormPassword) {\n // go to step 1 if it was skipped\n const path = this.router.location.pathname;\n this.router.history.replace(path.substr(0, path.length - 2));\n } else {\n this.password.validators(\n (value) => this.loginStore.pwFormPassword !== value && 'noMatch'\n );\n }\n }\n\n this.form.validate();\n\n this.loginStore.checkToken(token).then(\n () => {\n this.token = token;\n this.form.validate();\n },\n (err) => (this.errorMessage = err)\n );\n }\n\n handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n if (this.step === 1) {\n this.loginStore.pwFormPassword = this.password.$;\n this.router.history.push(`${this.router.location.pathname}/2`);\n return;\n }\n\n const token = this.token;\n const email = this.loginStore.pwFormEmail;\n const password = this.password.$;\n\n if (!token || !email || !password) {\n return;\n }\n\n this.errorMessage = undefined;\n this.withBusy(this.submitAction(token, email, password)).then(\n (success) => {\n if (success) {\n this.router.history.push(this.submitRoute);\n } else {\n this.errorMessage = 'Failed to set password';\n }\n },\n (error) => {\n this.errorMessage = error.toString();\n }\n );\n };\n\n clearError = () => {\n this.errorMessage = undefined;\n };\n\n toggleShowPassord = () => {\n this.showPassword = !this.showPassword;\n };\n}\n","import { Button } from '@material-ui/core';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ResetPasswordContainer } from '../reset-password';\nimport { MatField } from 'src/core/components/mat-field';\nimport { PageError } from 'src/core/components/page-error/page-error';\n\nconst passwordErrorMap = {\n required: 'This field is required.',\n length: 'The password needs to be longer.',\n needsLetter: 'You’re missing a letter.',\n needsNumber: 'You’re missing a number.',\n noMatch: 'Oops, that’s not the same password as the first one.',\n};\n\ninterface Props {\n container: ResetPasswordContainer;\n}\n\nexport const ResetPassword = observer<React.SFC<Props>>(({ container: { data } }) => (\n <div className=\"page page-inverted login-image-background\">\n <div className=\"page-topping\">\n <PageError absolute message={data.errorMessage} onClose={data.clearError} />\n </div>\n\n <div className=\"card\">\n <form className=\"flex-form\" onSubmit={data.handleSubmit}>\n <h1>Reset your password</h1>\n {data.step === 1 ? (\n <p>\n Your password must be at least 8 characters long. Make sure to use 1 letter\n and 1 number.\n </p>\n ) : (\n <p>Please confirm your password, we’re just being extra safe.</p>\n )}\n <div className={classnames('form-field', 'single-input')}>\n <MatField\n fullWidth\n type={data.showPassword ? 'text' : 'password'}\n autoFocus\n label={data.step === 1 ? 'New password' : 'Confirm password'}\n fieldState={data.password}\n errorMap={passwordErrorMap}\n disabled={data.form.hasFormError}\n autoComplete=\"new-password\"\n endAdornment={\n <a onClick={data.toggleShowPassord}>\n {data.showPassword ? 'Hide' : 'Show'}\n </a>\n }\n />\n </div>\n <div className=\"space-filler\" />\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n className=\"next-step-button\"\n disabled={data.form.hasError}\n >\n {data.step === 1 ? 'Continue' : 'Submit'}\n </Button>\n </form>\n </div>\n </div>\n));\n","import { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { PasswordFormState, RouteParams } from '../../shared/password-form-state';\nimport { lazyInject } from '../../ioc';\nimport { LoginApiService } from 'src/api';\n\nimport { ResetPassword } from './desktop/reset-password';\nimport { RouteComponentProps } from 'react-router';\n\ninterface Props extends RouteComponentProps<RouteParams> {\n step: 1 | 2;\n}\n\n@observer\nexport class ResetPasswordContainer extends React.Component<Props> {\n @lazyInject(LoginApiService) private loginApi!: LoginApiService;\n\n @observable data!: PasswordFormState;\n\n constructor(props: Props) {\n super(props);\n this.resetForm(props);\n }\n\n componentWillReceiveProps(nextProps: Readonly<Props>) {\n if (this.props.step !== nextProps.step) {\n this.resetForm(nextProps);\n }\n }\n\n private resetForm(props: Readonly<Props>) {\n this.data = new PasswordFormState(\n props.step,\n props.match.params.token,\n this.onSubmit,\n '/login/reset/confirm'\n );\n }\n\n private onSubmit = (token: string, email: string, password: string) =>\n this.loginApi\n .resetPassword({ token, email, password })\n .then((result) => result.data.success);\n\n render() {\n return <ResetPassword container={this} />;\n }\n}\n","import { Button } from '@material-ui/core';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { SignUpEmailContainer } from '../sign-up-email';\nimport { MatField } from 'src/core/components/mat-field';\nimport { PageError } from 'src/core/components/page-error/page-error';\n\nconst emailErrorMap = {\n required: null,\n email: null,\n};\n\ninterface Props {\n container: SignUpEmailContainer;\n}\n\nexport const SignUpEmail = observer<React.SFC<Props>>(({ container: { data } }) => (\n <div className=\"page page-inverted login-image-background\">\n <div className=\"page-topping\">\n <PageError\n absolute\n messageClass={data.emailSent ? 'page-note' : ''}\n message={data.message}\n onClose={data.clearError}\n />\n </div>\n\n <div className=\"card\">\n <form className=\"flex-form\" onSubmit={data.handleSubmit}>\n <h1>Verify your email</h1>\n <div className=\"card-content\">\n <p>Enter the email address associated with your account.</p>\n <div className={classnames('form-field', 'single-input')}>\n <MatField\n fullWidth\n type=\"email\"\n name=\"email\"\n placeholder=\"Email\"\n fieldState={data.email}\n errorMap={emailErrorMap}\n disabled={data.emailSent}\n autoFocus\n />\n </div>\n </div>\n <div className=\"space-filler\" />\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n className=\"next-step-button\"\n disabled={data.form.hasError || data.emailSent}\n >\n Submit\n </Button>\n </form>\n </div>\n </div>\n));\n","import { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { InviteResponse } from 'src/api/model/inviteResponse';\nimport { EmailFormState, EmailActionResult } from '../../shared/email-form-state';\nimport { lazyInject } from '../../ioc';\nimport { InviteErrorCode, LoginApiService } from 'src/api';\n\nimport { ClientDataStore } from 'src/core/stores/client-data.store';\nimport { SignUpEmail } from './desktop/sign-up-email';\n\n@observer\nexport class SignUpEmailContainer extends React.Component {\n @lazyInject(ClientDataStore) private clientData!: ClientDataStore;\n @lazyInject(LoginApiService) private loginApi!: LoginApiService;\n\n @computed private get phone() {\n return this.clientData.portalData && this.clientData.portalData.brandData.phone;\n }\n\n data = new EmailFormState((email) => this.invite(email));\n\n async invite(email: string): Promise<EmailActionResult> {\n const { data } = await this.loginApi.invite({ email });\n return {\n message: this.getMessage(data, email),\n emailSent: data.success,\n };\n }\n\n private getMessage(response: InviteResponse, email: string): string {\n if (response.success) {\n return `A link to join our customer portal has been sent to ${email}`;\n }\n if (response.errorCode === InviteErrorCode.NUMBER_2) {\n return `Please contact the office at ${this.phone} to register.`;\n }\n return 'Failed to send email';\n }\n\n render() {\n return <SignUpEmail container={this} />;\n }\n}\n","import { Button } from '@material-ui/core';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { SignUpPasswordContainer } from '../sign-up-password';\nimport { MatField } from 'src/core/components/mat-field';\nimport { PageError } from 'src/core/components/page-error/page-error';\nimport { Consts } from 'src/login/shared/consts';\n\nconst passwordErrorMap = {\n required: 'This field is required.',\n length: 'The password needs to be longer.',\n needsLetter: 'You’re missing a letter.',\n needsNumber: 'You’re missing a number.',\n noMatch: 'Oops, that’s not the same password as the first one.',\n};\n\ninterface Props {\n container: SignUpPasswordContainer;\n}\n\nexport const SignUpPassword = observer<React.SFC<Props>>(({ container: { data } }) => (\n <div className=\"page page-inverted login-image-background\">\n <div className=\"page-topping\">\n <PageError absolute message={data.errorMessage} onClose={data.clearError} />\n </div>\n\n <div className=\"card\">\n <form className=\"flex-form\" onSubmit={data.handleSubmit}>\n <h1>Create a password</h1>\n <div className=\"card-content\">\n {data.step === 1 ? (\n <p>\n Your password must be at least 8 characters long. Make sure to use 1\n letter and 1 number.\n </p>\n ) : (\n <p>Please confirm your password, we’re just being extra safe.</p>\n )}\n <div className={classnames('form-field', 'single-input')}>\n <MatField\n fullWidth\n type={data.showPassword ? 'text' : 'password'}\n autoFocus\n label={data.step === 1 ? 'Password' : 'Confirm password'}\n fieldState={data.password}\n errorMap={passwordErrorMap}\n disabled={data.form.hasFormError}\n autoComplete=\"new-password\"\n endAdornment={\n <a onClick={data.toggleShowPassord}>\n {data.showPassword ? 'Hide' : 'Show'}\n </a>\n }\n />\n </div>\n </div>\n <div className=\"space-filler\" />\n {data.step === 2 && (\n <span>\n By clicking Agree and Submit below you agree to the{' '}\n <a href={Consts.termsUrl} target=\"blank\">\n Terms of Service\n </a>\n </span>\n )}\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n className=\"next-step-button\"\n disabled={data.form.hasError}\n >\n {data.step === 1 ? 'Continue' : 'Agree and Submit'}\n </Button>\n <div id=\"recaptcha-div\" />\n </form>\n </div>\n </div>\n));\n","import { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { PasswordFormState, RouteParams } from '../../shared/password-form-state';\nimport { LoginStore } from '../../stores/login.store';\nimport { lazyInject } from '../../ioc';\nimport { LoginApiService } from 'src/api';\n\nimport { SignUpPassword } from './desktop/sign-up-password';\nimport { RouteComponentProps } from 'react-router';\n\ninterface Props extends RouteComponentProps<RouteParams> {\n step: 1 | 2;\n}\n\n@observer\nexport class SignUpPasswordContainer extends React.Component<Props> {\n @lazyInject(LoginApiService) private loginApi!: LoginApiService;\n @lazyInject(LoginStore) private loginStore!: LoginStore;\n\n @observable data!: PasswordFormState;\n private resolvePromise: ((token: string) => void) | undefined;\n\n constructor(props: Props) {\n super(props);\n this.resetForm(props);\n }\n\n componentWillReceiveProps(nextProps: Readonly<Props>) {\n if (this.props.step !== nextProps.step) {\n this.resetForm(nextProps);\n }\n }\n\n componentDidMount() {\n renderReCaptcha(this.reCaptchaCallback);\n }\n\n private resetForm(props: Readonly<Props>) {\n this.data = new PasswordFormState(props.step, props.match.params.token, this.onSubmit, '/');\n }\n\n private onSubmit = async (token: string, email: string, password: string) => {\n try {\n const result = await this.loginApi.create({ token, email, password });\n if (!result.data.success) {\n return Promise.reject('Cannot set up password');\n }\n\n const reCaptchaToken = await this.getReCaptchaPromise();\n return this.loginStore\n .authenticate({\n email,\n password,\n reCaptchaToken,\n stayLoggedIn: false,\n })\n .then(() => true);\n } catch (e) {\n return Promise.reject(e);\n }\n };\n\n private getReCaptchaPromise(): Promise<string> {\n const promise = new Promise<string>((resolve) => (this.resolvePromise = resolve));\n grecaptcha.execute();\n return promise;\n }\n\n private reCaptchaCallback = (reCaptchaToken: string) => {\n if (this.resolvePromise) {\n this.resolvePromise(reCaptchaToken);\n this.resolvePromise = undefined;\n }\n };\n\n render() {\n return <SignUpPassword container={this} />;\n }\n}\n","import { Button } from '@material-ui/core';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { SignUpWelcomeContainer } from '../sign-up-welcome';\nimport { MatField } from 'src/core/components/mat-field';\nimport { PageError } from 'src/core/components/page-error/page-error';\n\nconst emailErrorMap = {\n required: 'This field is required.',\n email: 'Invalid email address.',\n};\n\ninterface Props {\n container: SignUpWelcomeContainer;\n}\n\nexport const SignUpWelcome = observer<React.SFC<Props>>(({ container: { data } }) => (\n <div className=\"page page-inverted login-image-background\">\n <div className=\"page-topping\">\n <PageError absolute message={data.errorMessage} onClose={data.clearError} />\n </div>\n\n <div className=\"card\">\n <form className=\"flex-form\" onSubmit={data.handleSubmit}>\n <h1>Welcome {data.firstName}</h1>\n <div className=\"card-content\">\n <p>Confirm your email address.</p>\n <div className={classnames('form-field', 'single-input')}>\n <MatField\n fullWidth\n type=\"email\"\n name=\"email\"\n label=\"Email\"\n fieldState={data.email}\n errorMap={emailErrorMap}\n autoFocus\n readOnly\n />\n </div>\n </div>\n <div className=\"space-filler\" />\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n className=\"next-step-button\"\n disabled={data.form.hasError}\n >\n Continue\n </Button>\n </form>\n </div>\n </div>\n));\n","import { FieldState, FormState } from 'formstate';\nimport { observable, computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport { RouteComponentProps } from 'react-router';\n\nimport { LoginStore } from '../../stores/login.store';\nimport { lazyInject } from '../../ioc';\nimport { RouterStore } from 'src/core/stores/router.store';\nimport { BusyFormState } from 'src/util/busy-form';\nimport { emailValidator } from 'src/util/validators';\n\nimport { SignUpWelcome } from './desktop/sign-up-welcome';\n\ninterface RouteParams {\n token: string;\n}\n\nexport class SignUpWelcomeFormState extends BusyFormState {\n @lazyInject(LoginStore) private loginStore!: LoginStore;\n @lazyInject(RouterStore) private router!: RouterStore;\n\n email = new FieldState('').validators(emailValidator);\n\n @observable errorMessage: string | undefined;\n @computed get firstName() {\n return this.loginStore.pwFormFirstName;\n }\n\n form = new FormState({\n email: this.email,\n isBusy: this.isBusy,\n }).validators(() => !this.token && 'invalid');\n\n private token: string | undefined;\n\n constructor(token: string) {\n super();\n\n this.form.validate();\n\n this.withBusy(this.loginStore.checkToken(token)).then(\n (email) => {\n this.email.onChange(email);\n this.token = token;\n this.form.validate();\n },\n (err) => (this.errorMessage = err)\n );\n }\n\n clearError = () => {\n this.errorMessage = undefined;\n };\n\n handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n this.loginStore.pwFormEmail = this.email.$;\n this.router.history.push(`/login/sign-up/${this.token}`);\n };\n}\n\n@observer\nexport class SignUpWelcomeContainer extends React.Component<RouteComponentProps<RouteParams>> {\n data: SignUpWelcomeFormState;\n\n constructor(props: RouteComponentProps<RouteParams>) {\n super(props);\n this.data = new SignUpWelcomeFormState(props.match.params.token);\n }\n\n render() {\n return <SignUpWelcome container={this} />;\n }\n}\n","import classnames from 'classnames';\nimport { Button } from '@material-ui/core';\nimport * as React from 'react';\nimport { RouteComponentProps, Redirect } from 'react-router';\nimport { NavLink } from 'react-router-dom';\n\nimport styles from './welcome.less';\n\nexport const Welcome: React.SFC<RouteComponentProps<void>> = (props) => (\n <React.Fragment>\n {}\n <Redirect to=\"/login\" />\n {}\n\n {}\n </React.Fragment>\n);\n","import * as React from 'react';\nimport { Route, Switch } from 'react-router';\n\nimport { LoginPageContainer } from './login-page/login-page';\nimport { ForgotPasswordContainer } from './forgot-password/forgot-password';\nimport { ResetConfirmContainer } from './reset-confirm/reset-confirm';\nimport { ResetPasswordContainer } from './reset-password/reset-password';\nimport { SignUpEmailContainer } from './sign-up-email/sign-up-email';\nimport { SignUpPasswordContainer } from './sign-up-password/sign-up-password';\nimport { SignUpWelcomeContainer } from './sign-up-welcome/sign-up-welcome';\nimport { Welcome } from './welcome/welcome';\nimport { ErrorPage } from 'src/core/components/error-page/error-page';\n\nexport const LoginRoutes: React.SFC = () => (\n <Switch>\n <Route exact path=\"/login\" component={LoginPageContainer} />\n <Route exact path=\"/login/welcome\" component={Welcome} />\n <Route exact path=\"/login/forgot\" component={ForgotPasswordContainer} />\n <Route exact path=\"/login/reset/confirm\" component={ResetConfirmContainer} />\n <Route\n exact\n path=\"/login/reset/:token\"\n render={(props) => <ResetPasswordContainer {...props} step={1} />}\n />\n <Route\n exact\n path=\"/login/reset/:token/2\"\n render={(props) => <ResetPasswordContainer {...props} step={2} />}\n />\n <Route exact path=\"/login/sign-up\" component={SignUpEmailContainer} />\n <Route exact path=\"/login/sign-up/:token/welcome\" component={SignUpWelcomeContainer} />\n <Route\n exact\n path=\"/login/sign-up/:token\"\n render={(props) => <SignUpPasswordContainer {...props} step={1} />}\n />\n <Route\n exact\n path=\"/login/sign-up/:token/2\"\n render={(props) => <SignUpPasswordContainer {...props} step={2} />}\n />\n <Route component={() => <ErrorPage type=\"not-found\" />} />\n </Switch>\n);\n"],"sourceRoot":""}