{"version":3,"sources":["webpack:///./scripts/Actions/Overlay.action.js","webpack:///./scripts/Components/LoadingDots.js","webpack:///./scripts/Components/StyledSelect.js","webpack:///./scripts/Components/LoginModal/LoginModal.ChangePasswordForm.js","webpack:///./scripts/Services/utils.js","webpack:///./scripts/Components/LoginModal/LoginModal.LoginForm.js","webpack:///./scripts/Components/Notification.js","webpack:///./scripts/Components/LoginModal/LoginModal.ForgotPasswordForm.js","webpack:///./scripts/Components/LoginModal/LoginModal.js","webpack:///./scripts/Components/SideMenu.js"],"names":["addOverlay","componentName","onOverlayClick","type","OVERLAY_ADD_OVERLAY","payload","updateOverlay","OVERLAY_UPDATE_OVERLAY","removeOverlay","OVERLAY_REMOVE_OVERLAY","closeOverlay","OVERLAY_CLOSE_OVERLAY","activeOverlays","size","color","React","className","StyledSelectComponents","DownChevron","Icon","iconCode","IndicatorSeparator","StyledSelectStyles","control","provided","height","props","ReactSelect","_extends","placeholder","translate","styles","components","LoginModalChangePasswordForm","email","oldPassword","onError","onPasswordChanged","password","setPassword","useState","passwordConfirmation","setPasswordConfirmation","isLoading","setIsLoading","FormControl","htmlFor","TextField","variant","id","value","onChange","e","target","disabled","onClick","sendChangePassword","post","newPassword","then","res","json","data","error","success","catch","err","response","LoadingDots","getUrlQueryParameter","key","URLSearchParams","location","search","get","LoginModalLoginForm","onForgotPasswordClick","registerUserLink","loginOverlayText","onEmailChanged","setDisableClosing","selectedOrganizationId","setSelectedOrganizationId","organizations","setOrganizations","showChangePassword","setShowChangePassword","performLogin","redirectUrl","handleLoginResponse","handleSuccessfulLogin","href","reload","requestToken","localStorage","setItem","mustChangePassword","onKeyDown","autoFocus","StyledSelect","options","Object","keys","map","systemId","label","isDisabled","selectOrganization","Notification","text","icon","duration","children","style","fontSize","animationName","animationDuration","animationTimingFunction","animationFillMode","animationPlayState","LoginModalForgotPasswordForm","prefilledEmail","lostPasswordOverlayText","onBackClick","setEmail","showSuccess","setShowSuccess","display","alignItems","cursor","sendForgotPassword","finally","LOGIN_FORM","FORGOT_PASSWORD_FORM","LoginModal","dispatch","useDispatch","open","useSelector","state","login","setError","currentForm","setCurrentForm","disableClosing","useEffect","setTimeout","showLogin","SideMenu","onClosed","forwardRef","from","showCloseButton","title","headerRef","footer","closeButton","languageSwitcher","messageBar","ref","slideIn","setSlideIn","timeoutId","setTimeoutId","Error","close","useCallback","clearTimeout","newTimeoutId","undefined","substr","length","ReactDOM","transitionDuration","cloneElement","iconClass","currentChannel","document","body"],"mappings":"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","file":"3367.952cbe0ca4dcc0d47239.js","sourcesContent":["import {\n  OVERLAY_ADD_OVERLAY,\n  OVERLAY_CLOSE_OVERLAY,\n  OVERLAY_REMOVE_OVERLAY,\n  OVERLAY_UPDATE_OVERLAY,\n} from '../constants';\n\nexport const addOverlay = (componentName, onOverlayClick) => ({\n  type: OVERLAY_ADD_OVERLAY,\n  payload: {\n    componentName,\n    onOverlayClick,\n  },\n});\n\nexport const updateOverlay = (componentName, onOverlayClick) => ({\n  type: OVERLAY_UPDATE_OVERLAY,\n  payload: {\n    componentName,\n    onOverlayClick,\n  },\n});\n\nexport const removeOverlay = (componentName) => ({\n  type: OVERLAY_REMOVE_OVERLAY,\n  payload: {\n    componentName,\n  },\n});\n\nexport const closeOverlay = () => ({\n  type: OVERLAY_CLOSE_OVERLAY,\n  payload: {\n    activeOverlays: [],\n  },\n});\n","import React from 'react';\n\nexport default ({ size, color }) => {\n  return (\n    <div\n      className={`dot-elastic \n      ${size ? 'dot-elastic--' + size : ''} \n      ${color ? 'dot-elastic--' + color : ''}`}\n    >\n      <div className=\"dot-elastic__first\"></div>\n      <div className=\"dot-elastic__second\"></div>\n      <div className=\"dot-elastic__last\"></div>\n    </div>\n  );\n};\n","import React from 'react';\nimport ReactSelect from 'react-select';\nimport { translate } from '../Services/translation';\nimport Icon from './IconBase/Icon';\n\nexport const StyledSelectComponents = {\n  DownChevron: <Icon iconCode=\"expand_more\" />,\n  IndicatorSeparator: null,\n};\n\nexport const StyledSelectStyles = {\n  control: (provided) => ({\n    ...provided,\n    height: 48,\n  }),\n};\n\nconst StyledSelect = (props) => {\n  return (\n    <ReactSelect\n      placeholder={translate('general.select-placeholder')}\n      {...props}\n      styles={{ ...StyledSelectStyles, ...props.styles }}\n      components={{ ...StyledSelectComponents, ...props.components }}\n    />\n  );\n};\n\nexport default StyledSelect;\n","import React, { useState } from 'react';\nimport { translate } from '../../Services/translation';\nimport { FormControl, TextField } from '@material-ui/core';\nimport { post } from '../../Services/http';\nimport LoadingDots from '../LoadingDots';\n\nconst LoginModalChangePasswordForm = ({\n  email,\n  oldPassword,\n  onError,\n  onPasswordChanged,\n}) => {\n  const [password, setPassword] = useState('');\n  const [passwordConfirmation, setPasswordConfirmation] = useState('');\n  const [isLoading, setIsLoading] = useState(false);\n\n  const sendChangePassword = () => {\n    if (password !== passwordConfirmation) {\n      onError(translate('login.password-mismatch'));\n      return;\n    }\n\n    setIsLoading(true);\n    post('/api/login/changepassword', {\n      email,\n      oldPassword,\n      newPassword: password,\n    })\n      .then((res) => res.json())\n      .then((data) => {\n        onError(data.error);\n\n        if (data.success) {\n          onPasswordChanged(data);\n        } else {\n          onError(data.error);\n          setIsLoading(false);\n        }\n      })\n      .catch((err) => {\n        err.response.json().then((data) => onError(data.error));\n        setIsLoading(false);\n      });\n  };\n\n  return (\n    <>\n      <h3>{translate('login.change-password')}</h3>\n      <FormControl>\n        <label htmlFor=\"password\">{translate('general.password')}</label>\n        <TextField\n          variant=\"outlined\"\n          id=\"password\"\n          value={password}\n          onChange={(e) => setPassword(e.target.value)}\n          placeholder={translate('general.password')}\n          type=\"password\"\n          disabled={isLoading}\n        />\n      </FormControl>\n      <FormControl>\n        <label htmlFor=\"password-confirmation\">\n          {translate('login.confirm-password')}\n        </label>\n        <TextField\n          variant=\"outlined\"\n          id=\"password-confirmation\"\n          value={passwordConfirmation}\n          onChange={(e) => setPasswordConfirmation(e.target.value)}\n          placeholder={translate('login.confirm-password')}\n          type=\"password\"\n          disabled={isLoading}\n        />\n      </FormControl>\n      <button\n        className=\"btn btn--primary\"\n        onClick={sendChangePassword}\n        disabled={isLoading}\n      >\n        {!isLoading && translate('general.send')}\n        {isLoading && <LoadingDots size=\"small\" color=\"white\" />}\n      </button>\n    </>\n  );\n};\n\nexport default LoginModalChangePasswordForm;\n","export function copyToClipboard(text) {\n  try {\n    if (!navigator.clipboard && window.clipboardData) {\n      window.clipboardData.setData('Text', text);\n      return true;\n    } else if (navigator.clipboard) {\n      navigator.clipboard.writeText(text);\n      return true;\n    } else {\n      return false;\n    }\n  } catch (err) {\n    console.error(err);\n    return false;\n  }\n}\n\nexport function getUrlQueryParameter(key) {\n  const urlParams = new URLSearchParams(location.search);\n  return urlParams.get(key);\n}\n","import React, { useState } from 'react';\nimport { translate } from '../../Services/translation';\nimport { FormControl, TextField } from '@material-ui/core';\nimport { post } from '../../Services/http';\nimport StyledSelect from '../StyledSelect';\nimport LoadingDots from '../LoadingDots';\nimport LoginModalChangePasswordForm from './LoginModal.ChangePasswordForm';\nimport { getUrlQueryParameter } from '../../Services/utils';\n\nconst LoginModalLoginForm = ({\n  onError,\n  onForgotPasswordClick,\n  email,\n  registerUserLink,\n  loginOverlayText,\n  onEmailChanged,\n  setDisableClosing,\n}) => {\n  const [password, setPassword] = useState('');\n  const [isLoading, setIsLoading] = useState(false);\n  const [selectedOrganizationId, setSelectedOrganizationId] = useState();\n  const [organizations, setOrganizations] = useState();\n  const [showChangePassword, setShowChangePassword] = useState(false);\n\n  const performLogin = () => {\n    setIsLoading(true);\n    post('/api/login', {\n      email,\n      password,\n      redirectUrl: getUrlQueryParameter('loginRedirectUrl'),\n    })\n      .then((res) => res.json())\n      .then(handleLoginResponse)\n      .catch((err) => {\n        err.response.json().then((data) => onError(data.error));\n        setIsLoading(false);\n      });\n  };\n\n  const handleSuccessfulLogin = (data) => {\n    const redirectUrl = getUrlQueryParameter('loginRedirectUrl');\n    if (redirectUrl) {\n      location.href = redirectUrl;\n    } else {\n      location.reload();\n    }\n  };\n\n  const selectOrganization = () => {\n    setIsLoading(true);\n    post(`/api/login/organizations/${selectedOrganizationId}`, {})\n      .then((res) => res.json())\n      .then((data) => {\n        onError(data.error);\n\n        if (data.success) {\n          handleSuccessfulLogin(data);\n        } else {\n          setIsLoading(false);\n        }\n      })\n      .catch((err) => {\n        err.response.json().then((data) => onError(data.error));\n        setIsLoading(false);\n      });\n  };\n\n  const handleLoginResponse = (data) => {\n    onError(data.error);\n\n    if (data.success) {\n      if (data.requestToken) {\n        localStorage.setItem('requestVerificationToken', data.requestToken);\n      }\n\n      setShowChangePassword(data.mustChangePassword);\n\n      if (!data.organizations && !data.mustChangePassword) {\n        handleSuccessfulLogin(data);\n      } else {\n        setOrganizations(data.organizations);\n        setDisableClosing(true);\n        setIsLoading(false);\n      }\n    } else {\n      setIsLoading(false);\n    }\n  };\n\n  return (\n    <>\n      {!showChangePassword && (\n        <>\n          {!organizations && (\n            <>\n              <h3>{translate('general.login')}</h3>\n              {loginOverlayText && (\n                <p className=\"login-modal__login-text\">{loginOverlayText}</p>\n              )}\n              <FormControl>\n                <label htmlFor=\"email\">{translate('general.email')}</label>\n                <TextField\n                  variant=\"outlined\"\n                  id=\"email\"\n                  value={email}\n                  onChange={(e) => onEmailChanged(e.target.value)}\n                  onKeyDown={(e) => e.key == 'Enter' && performLogin()}\n                  placeholder={translate('general.enter-email')}\n                  disabled={isLoading}\n                  autoFocus={true}\n                />\n              </FormControl>\n              <FormControl>\n                <label htmlFor=\"password\">\n                  {translate('general.password')}\n                </label>\n                <TextField\n                  variant=\"outlined\"\n                  id=\"password\"\n                  value={password}\n                  onChange={(e) => setPassword(e.target.value)}\n                  onKeyDown={(e) => e.key == 'Enter' && performLogin()}\n                  placeholder={translate('general.enter-password')}\n                  type=\"password\"\n                  disabled={isLoading}\n                />\n              </FormControl>\n            </>\n          )}\n          {organizations && (\n            <>\n              <h3>{translate('login.choose-organization')}</h3>\n              <StyledSelect\n                onChange={({ value }) => setSelectedOrganizationId(value)}\n                options={Object.keys(organizations).map((systemId) => ({\n                  value: systemId,\n                  label: organizations[systemId],\n                }))}\n                isDisabled={isLoading}\n              />\n              <button\n                className=\"btn btn--black\"\n                onClick={selectOrganization}\n                disabled={isLoading || !selectedOrganizationId}\n              >\n                {!isLoading && translate('general.select')}\n                {isLoading && <LoadingDots size=\"small\" color=\"white\" />}\n              </button>\n            </>\n          )}\n          {!organizations && (\n            <>\n              <button\n                className=\"btn btn--black\"\n                onClick={performLogin}\n                disabled={isLoading}\n              >\n                {!isLoading && translate('general.login')}\n                {isLoading && <LoadingDots size=\"small\" color=\"white\" />}\n              </button>\n              <div className=\"login-modal__divider\"></div>\n              <a\n                onClick={() => !isLoading && onForgotPasswordClick()}\n                className=\"login-modal__forgot-password-link\"\n              >\n                {translate('login.forgot-password')}\n              </a>\n            </>\n          )}\n        </>\n      )}\n      {showChangePassword && (\n        <LoginModalChangePasswordForm\n          email={email}\n          oldPassword={password}\n          onPasswordChanged={handleLoginResponse}\n          onError={onError}\n        />\n      )}\n    </>\n  );\n};\n\nexport default LoginModalLoginForm;\n","import React, { useEffect, useState } from 'react';\nimport Icon from './IconBase/Icon';\n\nconst Notification = ({ type, text, icon, duration, className, children }) => {\n  if (!icon) {\n    switch (type) {\n      case 'warning':\n      case 'error':\n        icon = <Icon iconCode=\"warning\" />;\n        break;\n\n      case 'info':\n        icon = <Icon iconCode=\"info\" />;\n        break;\n\n      case 'success':\n        icon = <span style={{ fontSize: '20px' }}>👍</span>;\n        break;\n\n      default:\n        break;\n    }\n  }\n\n  return (\n    <div\n      className={`notification ${type ? 'notification--' + type : ''} ${\n        className ?? ''\n      }`}\n    >\n      <div className=\"notification__content-wrapper\">\n        {icon && <div className=\"notification__icon-wrapper\">{icon}</div>}\n        {text}\n        {children}\n      </div>\n      {duration > 0 && (\n        <div className=\"notification__timer\">\n          <div\n            className=\"notification__timer-filler\"\n            style={{\n              animationName: 'timer',\n              animationDuration: `${duration}ms`,\n              animationTimingFunction: 'linear',\n              animationFillMode: 'forwards',\n              animationPlayState: 'running',\n            }}\n          ></div>\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport default Notification;\n","import React, { useState } from 'react';\nimport { translate } from '../../Services/translation';\nimport { FormControl, TextField } from '@material-ui/core';\nimport { post } from '../../Services/http';\nimport LoadingDots from '../LoadingDots';\nimport Icon from '../IconBase/Icon';\n\nconst LoginModalForgotPasswordForm = ({\n  prefilledEmail,\n  lostPasswordOverlayText,\n  onError,\n  onBackClick,\n}) => {\n  const [email, setEmail] = useState(prefilledEmail ?? '');\n  const [showSuccess, setShowSuccess] = useState(false);\n  const [isLoading, setIsLoading] = useState(false);\n\n  const sendForgotPassword = () => {\n    setIsLoading(true);\n    post('/api/login/forgotpassword', { email })\n      .then((res) => res.json())\n      .then((data) => {\n        onError(data.error);\n\n        if (data.success) {\n          setShowSuccess(true);\n        }\n      })\n      .catch((err) => err.response.json().then((data) => onError(data.error)))\n      .finally(() => setIsLoading(false));\n  };\n\n  return (\n    <>\n      <h3 style={{ display: 'flex', alignItems: 'center' }} cursor=\"pointer\">\n        <Icon iconCode=\"chevron_left\" /> {translate('login.forgot-password')}\n      </h3>\n      {lostPasswordOverlayText && (\n        <p className=\"login-modal__lost-password-text\">\n          {lostPasswordOverlayText}\n        </p>\n      )}\n      {!showSuccess && (\n        <>\n          <FormControl disabled={isLoading}>\n            <label htmlFor=\"email\">{translate('general.email')}</label>\n            <TextField\n              variant=\"outlined\"\n              id=\"email\"\n              value={email}\n              onChange={(e) => setEmail(e.target.value)}\n              placeholder={translate('general.enter-email')}\n            />\n          </FormControl>\n          <div className=\"login-modal__buttons\">\n            <button\n              className=\"btn btn--black\"\n              onClick={sendForgotPassword}\n              disabled={!email || email == ''}\n            >\n              {!isLoading && translate('general.send')}\n              {isLoading && <LoadingDots size=\"small\" color=\"white\" />}\n            </button>\n          </div>\n          <a\n            onClick={() => !isLoading && onBackClick()}\n            className=\"login-modal__back-to-login-link\"\n          >\n            {translate('general.back-to-login')}\n          </a>\n        </>\n      )}\n      {showSuccess && (\n        <>\n          <p>{translate('login.forgot-password.success')}</p>\n          <button className=\"btn btn--outline\" onClick={onBackClick}>\n            {translate('general.back')}\n          </button>\n        </>\n      )}\n    </>\n  );\n};\n\nexport default LoginModalForgotPasswordForm;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport SideMenu from '../SideMenu';\nimport LoginModalLoginForm from './LoginModal.LoginForm';\nimport { showLogin } from '../../Actions/Login.action';\nimport Notification from '../Notification';\nimport LoginModalForgotPasswordForm from './LoginModal.ForgotPasswordForm';\nimport { getUrlQueryParameter } from '../../Services/utils';\n\nconst LOGIN_FORM = 'LOGIN_FORM';\nconst REGISTER_FORM = 'REGISTER_FORM';\nconst FORGOT_PASSWORD_FORM = 'FORGOT_PASSWORD_FORM';\n\nconst LoginModal = () => {\n  const dispatch = useDispatch();\n  const {\n    open,\n    registerUserLink,\n    loginOverlayText,\n    lostPasswordOverlayText,\n  } = useSelector((state) => state.login);\n  const [email, setEmail] = useState('');\n  const [error, setError] = useState();\n  const [currentForm, setCurrentForm] = useState(LOGIN_FORM);\n  const [disableClosing, setDisableClosing] = useState(false);\n\n  const onClosed = () => {\n    dispatch(showLogin(false));\n    setCurrentForm(LOGIN_FORM);\n  };\n\n  useEffect(() => {\n    var loginRedirectUrl = getUrlQueryParameter('loginRedirectUrl');\n    if (loginRedirectUrl) {\n      setTimeout(() => dispatch(showLogin(true)), 300);\n    }\n  }, []);\n\n  return (\n    <SideMenu\n      id=\"login-menu\"\n      open={open}\n      onClosed={onClosed}\n      disableClosing={disableClosing}\n    >\n      <div className=\"login-modal\">\n        {error && <Notification type=\"error\" text={error} />}\n        {currentForm == LOGIN_FORM && (\n          <LoginModalLoginForm\n            onError={setError}\n            onForgotPasswordClick={() => setCurrentForm(FORGOT_PASSWORD_FORM)}\n            email={email}\n            registerUserLink={registerUserLink}\n            loginOverlayText={loginOverlayText}\n            onEmailChanged={setEmail}\n            setDisableClosing={setDisableClosing}\n          />\n        )}\n        {currentForm == FORGOT_PASSWORD_FORM && (\n          <LoginModalForgotPasswordForm\n            onBackClick={() => setCurrentForm(LOGIN_FORM)}\n            lostPasswordOverlayText={lostPasswordOverlayText}\n            prefilledEmail={email}\n            onError={setError}\n          />\n        )}\n      </div>\n    </SideMenu>\n  );\n};\n\nexport default LoginModal;\n","import React, {\n  cloneElement,\n  createElement,\n  createRef,\n  forwardRef,\n  useCallback,\n  useEffect,\n  useState,\n} from 'react';\nimport ReactDOM, { render } from 'react-dom';\nimport { useDispatch } from 'react-redux';\nimport {\n  addOverlay,\n  removeOverlay,\n  updateOverlay,\n} from '../Actions/Overlay.action';\nimport Icon from './IconBase/Icon';\n// import colors from 'Exports/colors.scss';\n\nexport default forwardRef(\n  (\n    {\n      id,\n      duration = '0.2s',\n      from = 'right',\n      className,\n      open,\n      onClosed,\n      showCloseButton = true,\n      children,\n      title,\n      headerRef,\n      footer,\n      disableClosing = false,\n      closeButton = null,\n      languageSwitcher = null,\n      messageBar = null,\n    },\n    ref\n  ) => {\n    const [slideIn, setSlideIn] = useState();\n    const [timeoutId, setTimeoutId] = useState();\n    const dispatch = useDispatch();\n\n    if (!id || id == '') {\n      throw new Error(\n        'A unique side-menu \"id\" must be passed to side menu component'\n      );\n    }\n\n    const close = useCallback(() => {\n      if (!disableClosing) {\n        // Just sets \"slideIn\" to false, which triggers the animation to close it\n        setSlideIn(false);\n        return true;\n      }\n\n      // False disables overlay click\n      return false;\n    }, [disableClosing]);\n\n    useEffect(() => {\n      dispatch(updateOverlay(id, close));\n    }, [dispatch, close, id]);\n\n    useEffect(() => {\n      if (!slideIn) {\n        // If not slide in, slide out :^)\n        if (timeoutId) {\n          // Clear previous timeout to avoid animation delay bug\n          clearTimeout(timeoutId);\n        }\n\n        var newTimeoutId = setTimeout(() => {\n          setTimeoutId(undefined);\n          onClosed && onClosed();\n        }, duration.substr(0, duration.length - 1) * 1000);\n\n        setTimeoutId(newTimeoutId);\n        dispatch(removeOverlay(id));\n      }\n    }, [slideIn]);\n\n    useEffect(() => {\n      // Triggered every time \"open\" is changed, initially as well\n      // Timeout to not trigger on the same frame as the render, to enable the slide-in\n\n      setTimeout(() => setSlideIn(open), 1);\n\n      if (open) {\n        dispatch(addOverlay(id, close));\n      }\n    }, [open]);\n\n    return open\n      ? ReactDOM.createPortal(\n          <div\n            className={\n              'side-menu' +\n              (slideIn ? ' side-menu--open' : '') +\n              (' from-' + from) +\n              (className ? ' ' + className : '')\n            }\n            ref={ref}\n            style={{ transitionDuration: duration }}\n          >\n            {headerRef && (\n              <div className=\"side-menu__header\">\n                {showCloseButton &&\n                  !disableClosing &&\n                  (!closeButton ? (\n                    <Icon\n                      iconCode=\"close\"\n                      onClick={close}\n                      iconClass=\"side-menu__close-icon\"\n                    />\n                  ) : (\n                    cloneElement(closeButton, {\n                      onClick: close,\n                    })\n                  ))}\n                {languageSwitcher?.props.currentChannel\n                  ? languageSwitcher\n                  : null}\n                {headerRef}\n              </div>\n            )}\n            {!headerRef &&\n              showCloseButton &&\n              !disableClosing &&\n              (!closeButton ? (\n                <Icon\n                  iconCode=\"close\"\n                  onClick={close}\n                  iconClass=\"side-menu__close-icon\"\n                />\n              ) : (\n                cloneElement(closeButton, {\n                  onClick: close,\n                })\n              ))}\n            {title && <h3 className=\"side-menu__title\">{title}</h3>}\n            {messageBar && (\n              <div className=\"side-menu__message-bar\">{messageBar}</div>\n            )}\n            <div className=\"side-menu__content\">{children}</div>\n            {footer && <div className=\"side-menu__footer\">{footer}</div>}\n          </div>,\n          document.body\n        )\n      : null;\n  }\n);\n"],"sourceRoot":""}