{"version":3,"sources":["components/header/header-logo.svg","config/index.js","service/session-service.js","service/http-service.js","core-components/icon/styles.js","core-components/icon/Icon.jsx","components/header/Header.jsx","components/menu/Menu.jsx","core-components/drop-down/DropDownContainer.jsx","core-components/drop-down/arrow_down.svg","core-components/drop-down/arrow_up.svg","core-components/drop-down/DropDownSelect.jsx","core-components/drop-down/DropDown.jsx","core-components/drop-down/DropDownItem.jsx","components/dropdown-menu/DropDownMenu.jsx","pages/login/MockHeader.jsx","pages/login/MockBody.jsx","pages/login/MockFooter.jsx","core-components/modal/Modal.jsx","pages/login/visibility.svg","pages/login/visibility_off.svg","pages/login/info.svg","core-components/recaptcha/Recaptcha.jsx","pages/login/Login.jsx","redux/actions/actions.js","redux/actions/actionTypes.js","containers/login/LoginContainer.jsx","routes/authorize-route.js","components/welcome/Welcome.jsx","components/welcome/welcomeMessage.js","components/pre-loader/PreLoader.jsx","components/error-component/error_outline.svg","components/error-component/ErrorComponent.jsx","core-components/toggle/styles.js","core-components/toggle/Toggle.jsx","components/preference-item/PreferenceItem.jsx","core-components/button/styles.js","core-components/button/Button.jsx","core-components/icon-text/IconText.jsx","components/save-preference-button/SavePreferenceButton.jsx","pages/marketing-preference/MarketingPreferenceHeader.jsx","components/confirmation-dialog/ConfirmationDialog.jsx","pages/marketing-preference/marketingPreferences.js","pages/marketing-preference/MarketingPreference.jsx","components/category-intro/CategoryIntro.jsx","components/club-preference/clubPreferences.js","components/custom-alert/CustomAlert.jsx","components/club-preference/ClubPreference.jsx","pages/more-preference/MorePreference.jsx","pages/delete-account/delete-account.jsx","pages/home/HomeLayout.jsx","pages/home/HomeContentLayout.jsx","pages/home/Home.jsx","containers/home/HomeContainer.jsx","components/custom-prompt/CustomPrompt.jsx","pages/timeout/Timeout.jsx","routes/routes.js","components/app/App.jsx","routes/history.js","components/app/theme.js","redux/reducers/userDetails.js","redux/reducers/Preferences.js","redux/reducers/index.js","redux/store.js","serviceWorker.js","aws-exports.js","index.jsx"],"names":["module","exports","__webpack_require__","p","environmentConfig","BASE_URL","PREFERENCE_BASE_URL","API_KEY","SITE_KEY","sessionStorage","window","session_service","key","value","setItem","getItem","removeItem","axios","defaults","baseURL","cachedRequest","refreshToken","Promise","resolve","reject","method","url","concat","data","qs","stringify","grant_type","refresh_token","SessionService","headers","content-type","then","res","access_token","action","payload","catch","err","http_service","savePreference","preferences","accessToken","put","Authorization","response","_ref","Object","asyncToGenerator","regenerator_default","a","mark","_callee","wrap","_context","prev","next","errorCode","sent","abrupt","t0","stop","this","_x","apply","arguments","fetchProfile","get","_ref2","_callee2","_context2","_x2","styles","theme","root","width","height","Icon","_this$props","props","newProps","fontSize","size","titleAccess","color","name","react_default","createElement","Warning_default","Explore_default","ExitToApp_default","PermIdentity_default","ErrorOutline_default","NotificationImportant_default","Check_default","getMaterialIcon","PureComponent","defaultProps","withStyles","Header","handleLogOutClick","_this","onLogOut","handleHeaderClick","onHeaderClick","className","onClick","src","headerLogo","alt","showLogout","icon_Icon","menuItems","text","path","listItemClassName","Menu","showMoreTab","filter","item","map","index","Link","selectedItem","to","renderLinks","href","target","rel","DropDownContainer","open","children","_extends","assign","bind","i","length","source","prototype","hasOwnProperty","call","arrow_down_ref","d","arrow_down_ref2","fill","arrow_down_SvgComponent","viewBox","arrow_up_extends","arrow_up_ref","arrow_up_ref2","arrow_up_SvgComponent","DropDownSelect","handleClick","label","DropDown","classCallCheck","possibleConstructorReturn","getPrototypeOf","toggleDropDown","state","document","removeEventListener","handleOutsideClick","addEventListener","setState","event","ref","contains","handleItemSelect","onChange","getChildrenWithProps","defaultValue","selectedValue","React","Children","child","cloneElement","onSelect","selected","assertThisInitialized","_this2","_this$props2","el","DropDownSelect_DropDownSelect","DropDownContainer_DropDownContainer","DropDownItem","externalLinks","DropDownMenu","getExternalLinkNodes","DropDownItem_DropDownItem","getSelectedItemValue","find","dropDownItems","toConsumableArray","DropDown_DropDown","MockHeader","Fragment","MockBody","MockFooter","Modal","onClose","preventBodyScroll","body","classList","add","remove","position","getPositionClassName","overflowContent","widthClass","heightClass","visibility_extends","visibility_ref","visibility_ref2","visibility_SvgComponent","visibility_off_extends","visibility_off_ref","visibility_off_ref2","visibility_off_SvgComponent","info_extends","info_ref","info_ref2","info_SvgComponent","Recaptcha","resetRecaptcha","grecaptcha","reset","renderRecaptcha","readyState","onload","render","sitekey","siteKey","callback","successCallback","expired-callback","expiredCallback","classes","id","Login","recaptchaResponse","handleUsernameChange","userName","userNameInFocus","loginError","resetLoginError","handlePasswordChange","password","passwordInFocus","handleSubmit","preventDefault","loginUser","recaptcha","handleInputFocus","inputType","defineProperty","handleInputBlur","handlePasswordVisibility","showPassword","grecaptchaSuccessCallback","grecaptchaResponse","recaptchaSuccess","grecaptchaExpiredCallback","checkAutoFillComplete","resetAppState","emailRef","passwordRef","prevProps","onSubmit","htmlFor","type","autoComplete","required","onFocus","onBlur","Recaptcha_Recaptcha","errorMessage","disabled","isLoggingIn","CircularProgress_default","Header_Header","Modal_Modal","renderForm","Menu_Menu","DropDownMenu_DropDownMenu","MockHeader_MockHeader","MockBody_MockBody","MockFooter_MockFooter","currentUser","location","referrer","redirectTo","Redirect","renderLoginForm","checkLoggedInStatusAndRender","dispatch","HTTPService","loginUserSuccess","objectSpread","loginUserFailure","error","userDetails","fetchPreferenceRequest","fetchPreferenceFailure","fetchPreferenceSuccess","preference","savePreferenceRequest","savePreferenceFailure","savePreferenceSuccess","setChangesCount","count","LoginContainer","Login_Login","Component","connect","customerNumber","username","mapStateToProps","authorizeRoute","pathName","pathname","Welcome","message","PreLoader","show","index_es","error_outline_extends","error_outline_ref","error_outline_ref2","error_outline_SvgComponent","ErrorComponent","iOSSwitchBase","&$iOSChecked","palette","common","white","& + $iOSBar","backgroundColor","transition","transitions","create","duration","shortest","easing","sharp","iOSChecked","transform","opacity","border","iOSBar","borderRadius","marginTop","marginLeft","borderColor","grey","iOSIcon","iOSIconChecked","boxShadow","shadows","Toggle","Switch_default","switchBase","bar","icon","iconChecked","checked","disableRipple","PreferenceItem","classNames","bg-body-lightest","heading","subHeading","note","toggle_Toggle","primary","solid","secondary","tertiary","small","medium","large","full","getComputedStyles","variantType","display","widthType","isBold","isDisabled","cursor","variant","bold","Button","IconText","iconBefore","iconAfter","pr-8","pl-8","SavePreferenceButton","saveSuccess","onSave","Button_Button","disable","IconText_IconText","MarketingPreferenceHeader","ConfirmationDialog","confirmation","onConfirmation","yesLabel","noLabel","marketingPreferences","MarketingPreference","handlePreferenceChange","prevPreferences","changesCount","newPreferences","keys","forEach","resetSavedStatus","checkIfAllUnsubscribed","unsubscribedCount","handleConfirmationDialogClick","closeModal","handleSavePreference","modalChild","ConfirmationDialog_ConfirmationDialog","showCustomModal","setMenuIndex","checkIfChanged","isEqual","saveError","resetSaveErrorStatus","indexOf","checkIfRequired","PreferenceItem_PreferenceItem","MarketingPreferenceHeader_MarketingPreferenceHeader","renderMarketingPreferences","SavePreferenceButton_SavePreferenceButton","renderSuccessNote","CategoryIntro","clubPreferences","alertMessage","CustomAlert","ClubPreference","getAlertForClub","clubId","changedClub","header","isMember","CustomAlert_CustomAlert","getPreferenceCheckedStatus","checkIfRegisteredWithClub","preferencesBeforeUpdate","hasAnyJoinedClub","some","renderClubPreferences","club","class","CategoryIntro_CategoryIntro","MorePreference","prevClub","handleSave","preferencesToSave","clubPreference","showClubPreferences","setTimeout","history","push","ClubPreference_ClubPreference","DeleteAccount","openConfirmationDialog","deleteAccount","menuIndex","prevProp","onDeleteAccount","label1","label2","listData","disableDelete","listItems","HomeLayout","HomeContentLayout","Home","isModalOpen","isAcocuntDeleting","disableDeleteAccount","handleLogOut","logOutUser","mergedPreferences","morrisonsClubs","closeSaveErrorModal","fetchPreference","API","del","console","log","morePreferences","_this3","match","delAccountProps","_preferences$marketin","rest","groceryOnlineCoupons","pushNotifications","digitalAndCouponsOptIn","objectWithoutProperties","Welcome_Welcome","firstName","HomeLayout_HomeLayout","checkIfMorePreferencesDefined","PreLoader_PreLoader","isFetching","isSaving","fetchError","ErrorComponent_ErrorComponent","HomeContentLayout_HomeContentLayout","Route","exact","MarketingPreference_MarketingPreference","MorePreference_MorePreference","delete_account_DeleteAccount","Prompt","when","Boolean","HomeContainer","Home_Home","status","replace","CustomPrompt","isOpen","Timeout","Routes","HashRouter","hashType","getUserConfirmation","ReactDOM","CustomPrompt_CustomPrompt","getElementById","Switch","component","App","createBrowserHistory","routes","typography","useNextVariants","light","main","dark","contrastText","initialState","undefined","appReducer","combineReducers","rootReducer","middleware","thunk","createStore","applyMiddleware","hostname","awsmobile","aws_project_region","aws_cloud_logic_custom","endpoint","region","Amplify","configure","awsExports","createMuiTheme","morrisonsTheme","es","store","app_App","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.7c604449.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/header-logo.b38ee722.svg\";","export const COOKIE_POLICY_URL = 'https://my.morrisons.com/cookie-policy'\nexport const PRIVACY_POLICY_URL = 'https://my.morrisons.com/privacy-policy'\nexport const FORGOT_PASSWORD_LINK =\n  'https://groceries.morrisons.com/webshop/requestForgottenPassword.do'\n\nexport const fetchErrorMessage =\n  'Error Fetching Preferences. Please try again later.'\n\nexport const marketingSaveSuccessNote = `You can change the way you receive communications at any time or you can opt to stop receiving them altogether by amending your preferences above or calling us on 0345 611 6111. We will not contact you with any marketing without your consent. We will process the changes to your contact preferences as quickly as possible. In some limited cases, this may take up to 28 days.`\n\nexport const promptMessage =\n  'You have not saved your preferences. Do you want to leave without saving?'\n\nexport const saveErrorMessage =\n  'Error saving preferences. Please try again later.'\n\nexport const welcomeMessageMarketing = `On this page you can opt in to receive information and offers \n  from our services. We’d love to send you updates from Flowerworld, Nutmeg, Morrisons \n  More, Food to Order and Baby&More – so please tell us the types of communication you’re happy to receive.`\n\nexport const welcomeMessageMore = `On this page you can opt out, or back in to our clubs - each one bringing \n  updates, great offers and useful information straight to your inbox.  You can also choose to receive and \n  redeem personalised offers in our More App.`\n\nexport const welcomeMessage = `We'll always protect your personal information and use it only to provide you with the best service and great benefits. That's why we give you the choice of how your personal information is used and how we'll contact you. Please take a look at our Privacy Policy to learn more about your choices and how we keep your data safe.\n.`\n\nconst environmentConfig = {\n  local: {\n    BASE_URL: 'http://localhost:3001',\n    PREFERENCE_BASE_URL: 'http://localhost:3001',\n    API_KEY: '3NYC3dVoJTweaMdXhvvwt6FcNYFR5K4U',\n    SITE_KEY: '6LdFpG8UAAAAANcJTZiQ3Pu8-tGw7kYFQmrgr6_W',\n  },\n  uat: {\n    BASE_URL: 'https://uat-api.morrisons.com',\n    PREFERENCE_BASE_URL: 'https://uat-api.morrisons.com',\n    API_KEY: 'PjPdcc3n4ckt7O8mi1F1UxEl0Of2j6sN',\n    SITE_KEY: '6Lf-gI4UAAAAANCyUDviYYlP_swQLbsqT5r84Sv6',\n  },\n  qa: {\n    BASE_URL: '',\n    PREFERENCE_BASE_URL: '',\n    API_KEY: '',\n    SITE_KEY: '',\n  },\n  staging: {\n    BASE_URL: '',\n    PREFERENCE_BASE_URL: '',\n    API_KEY: '',\n    SITE_KEY: '',\n  },\n  preProd: {\n    BASE_URL: 'https://uat-api.morrisons.com',\n    PREFERENCE_BASE_URL: 'https://uat-api.morrisons.com',\n    API_KEY: 'PjPdcc3n4ckt7O8mi1F1UxEl0Of2j6sN',\n    SITE_KEY: '6Lf-gI4UAAAAANCyUDviYYlP_swQLbsqT5r84Sv6',\n  },\n  prod: {\n    BASE_URL: 'https://api.morrisons.com',\n    PREFERENCE_BASE_URL: 'https://api.morrisons.com',\n    API_KEY: 'PF3lJr0YdyvjAcEj3dMl6D9HuKPVOZ1K',\n    SITE_KEY: '6LfPL6EUAAAAAHZcsUm3ZuU-Fb7T4ef1S9lV6w1g',\n  },\n}\n\nexport const BASE_URL = environmentConfig[process.env.REACT_APP_ENV].BASE_URL\nexport const PREFERENCE_BASE_URL =\n  environmentConfig[process.env.REACT_APP_ENV].PREFERENCE_BASE_URL\nexport const API_KEY = environmentConfig[process.env.REACT_APP_ENV].API_KEY\nexport const SITE_KEY = environmentConfig[process.env.REACT_APP_ENV].SITE_KEY\n","const sessionStorage = window.sessionStorage\n\nconst saveItem = (key, value) => {\n  sessionStorage.setItem(key, value)\n}\n\nconst fetchItem = key => {\n  return sessionStorage.getItem(key)\n}\n\nconst removeItem = key => {\n  sessionStorage.removeItem(key)\n}\n\nexport default {\n  saveItem,\n  fetchItem,\n  removeItem,\n}\n","import axios from 'axios'\nimport { API_KEY, BASE_URL, PREFERENCE_BASE_URL } from '../config'\nimport { SessionService } from '.'\nimport qs from 'qs'\n\naxios.defaults.baseURL = BASE_URL\n\nlet cachedRequest = {}\n\nconst refreshToken = () => {\n  return new Promise((resolve, reject) => {\n    axios({\n      method: 'post',\n      url: `identity/v1/token?apikey=${API_KEY}`,\n      data: qs.stringify({\n        grant_type: 'refresh_token',\n        refresh_token: SessionService.fetchItem('refresh_token'),\n      }),\n      headers: {\n        'content-type': 'application/x-www-form-urlencoded',\n      },\n    })\n      .then(res => {\n        SessionService.saveItem('access_token', res.data.access_token)\n        SessionService.saveItem('refresh_token', res.data.refresh_token)\n        cachedRequest\n          .action(cachedRequest.payload)\n          .then(res => {\n            cachedRequest = {}\n            return resolve(res)\n          })\n          .catch(err => {\n            cachedRequest = {}\n            return reject(err)\n          })\n      })\n      .catch(err => {\n        SessionService.removeItem('access_token')\n        SessionService.removeItem('refresh_token')\n        return reject(err)\n      })\n  })\n}\n\nconst savePreference = preferences => {\n  const accessToken = SessionService.fetchItem('access_token')\n  return new Promise((resolve, reject) => {\n    axios\n      .put(\n        `${PREFERENCE_BASE_URL}/customer/v2/customers/@me/preferences?apikey=${API_KEY}`,\n        preferences,\n        {\n          headers: {\n            Authorization: `Bearer ${accessToken}`,\n          },\n        }\n      )\n      .then(response => {\n        if (response && response.data) {\n          return resolve(response.data)\n        } else {\n          return resolve({})\n        }\n      })\n      .catch(async err => {\n        if (\n          err &&\n          err.response &&\n          err.response.data &&\n          (err.response.data.errorCode === '401.01.004' ||\n            err.response.data.errorCode === '400.01.002')\n        ) {\n          cachedRequest.action = savePreference\n          cachedRequest.payload = preferences\n          try {\n            const res = await refreshToken()\n            return resolve(res)\n          } catch (error) {\n            return reject(error)\n          }\n        } else {\n          return reject(err)\n        }\n      })\n  })\n}\n\nconst fetchProfile = () => {\n  const accessToken = SessionService.fetchItem('access_token')\n  return new Promise((resolve, reject) => {\n    axios\n      .get(`customer/v2/customers/@me?apikey=${API_KEY}`, {\n        headers: {\n          Authorization: `Bearer ${accessToken}`,\n        },\n      })\n      .then(res => {\n        resolve(res)\n      })\n      .catch(async err => {\n        if (\n          err &&\n          err.response &&\n          err.response.data &&\n          (err.response.data.errorCode === '401.01.004' ||\n            err.response.data.errorCode === '400.01.002')\n        ) {\n          cachedRequest.action = fetchProfile\n          try {\n            const res = await refreshToken()\n            return resolve(res)\n          } catch (error) {\n            return reject(error)\n          }\n        } else {\n          return reject(err)\n        }\n      })\n  })\n}\n\nexport default {\n  savePreference,\n  fetchProfile,\n}\n","const styles = theme => ({\n  root: {\n    width: 24,\n    height: 24,\n  },\n})\n\nexport default styles\n","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\nimport { withStyles } from '@material-ui/core/styles'\nimport styles from './styles'\nimport Warning from '@material-ui/icons/Warning'\nimport Explore from '@material-ui/icons/Explore'\nimport ExitToApp from '@material-ui/icons/ExitToApp'\nimport PermIdentity from '@material-ui/icons/PermIdentity'\nimport ErrorOutline from '@material-ui/icons/ErrorOutline'\nimport NotificationImportant from '@material-ui/icons/NotificationImportant'\nimport Check from '@material-ui/icons/Check'\n\nclass Icon extends PureComponent {\n  getMaterialIcon() {\n    const { size, titleAccess, color } = this.props\n    const newProps = {\n      fontSize: size,\n      titleAccess,\n      color,\n    }\n    switch (this.props.name) {\n      case 'Warning':\n        return <Warning {...newProps} />\n      case 'Explore':\n        return <Explore {...newProps} />\n      case 'ExitToApp':\n        return <ExitToApp {...newProps} />\n      case 'PermIdentity':\n        return <PermIdentity {...newProps} />\n      case 'Error':\n        return <ErrorOutline {...newProps} />\n      case 'NotificationImportant':\n        return <NotificationImportant {...newProps} />\n      case 'Check':\n        return <Check {...newProps} />\n      default:\n        return <Explore {...newProps} />\n    }\n  }\n\n  render() {\n    return this.getMaterialIcon()\n  }\n}\n\nIcon.propTypes = {\n  name: PropTypes.oneOf([\n    'ExitToApp',\n    'Error',\n    'Warning',\n    'NotificationImportant',\n    'PermIdentity',\n    'Check',\n  ]).isRequired,\n  size: PropTypes.oneOf(['small', 'medium', 'large']),\n  titleAccess: PropTypes.string,\n  color: PropTypes.string,\n}\n\nIcon.defaultProps = {\n  size: 'small',\n  color: 'inherit',\n}\n\nexport default withStyles(styles)(Icon)\n","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\nimport headerLogo from './header-logo.svg'\nimport { Icon } from '../../core-components/icon'\n\nexport default class Header extends PureComponent {\n  handleLogOutClick = () => {\n    if (this.props.onLogOut) this.props.onLogOut()\n  }\n\n  handleHeaderClick = () => {\n    if (this.props.onHeaderClick) this.props.onHeaderClick()\n  }\n\n  render() {\n    return (\n      <div className=\"prefcentre-header relative shadow px-3 py-4 sm:px-20\">\n        <header className=\"flex justify-between items-center\">\n          <div\n            className=\"flex flex-col items-start leading-normal cursor-pointer\"\n            onClick={this.handleHeaderClick}\n          >\n            <img\n              className=\"prefcentre-header-logo\"\n              src={headerLogo}\n              alt=\"morrisons logo\"\n            />\n          </div>\n          {this.props.showLogout && (\n            <button\n              className={`flex justify-center items-end h-10 w-24 border border-secondary \n        rounded-t rounded-b sm:w-32 sm:py-2 sm:px-4`}\n              onClick={this.handleLogOutClick}\n            >\n              <Icon size=\"small\" name=\"PermIdentity\" color=\"secondary\" />\n              <span className=\"pl-1\">Log out</span>\n            </button>\n          )}\n        </header>\n      </div>\n    )\n  }\n}\n\nHeader.propTypes = {\n  showLogout: PropTypes.bool,\n  onLogOut: PropTypes.func,\n  onHeaderClick: PropTypes.func,\n}\n\nHeader.defaultProps = {\n  showLogout: true,\n}\n","import React, { PureComponent } from 'react'\nimport { Link } from 'react-router-dom'\nimport PropTypes from 'prop-types'\nimport { Icon } from '../../core-components/icon'\nimport { COOKIE_POLICY_URL, PRIVACY_POLICY_URL } from '../../config'\n\nconst menuItems = [\n  { text: 'Morrisons', path: '/marketing' },\n  { text: 'Morrisons More', path: '/more' },\n  { text: 'Delete Account', path: '/delete-account' },\n]\nconst listItemClassName =\n  'flex justify-between items-center h-16 pl-20 py-5 font-semibold text-lg no-underline'\n\nexport default class Menu extends PureComponent {\n  renderLinks(showMoreTab) {\n    let filteredMenuItems = menuItems.filter(item =>\n      item.text === 'Morrisons More' && !showMoreTab ? false : true\n    )\n    return filteredMenuItems.map((item, index) => (\n      <Link\n        className={`${listItemClassName} pr-20 ${\n          index === this.props.selectedItem\n            ? 'bg-white text-secondary'\n            : 'text-gray-light'\n        } no-underline`}\n        to={item.path}\n        key={item.text}\n      >\n        {item.text}\n      </Link>\n    ))\n  }\n\n  render() {\n    return (\n      <nav className=\"prefcentre-menu flex-col bg-body-lighter hidden pb-20 sm:flex\">\n        {this.renderLinks(this.props.showMoreTab)}\n        <div className=\"border-b border-body-lighter\" />\n        <a\n          className={`${listItemClassName} pr-8 text-gray-light opacity-70`}\n          href={COOKIE_POLICY_URL}\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          Cookie Policy\n          <Icon titleAccess=\"Open in New Tab\" size=\"small\" name=\"ExitToApp\" />\n        </a>\n        <a\n          className={`${listItemClassName} pr-8 text-gray-light opacity-70`}\n          href={PRIVACY_POLICY_URL}\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          Privacy Policy\n          <Icon titleAccess=\"Open in New Tab\" size=\"small\" name=\"ExitToApp\" />\n        </a>\n      </nav>\n    )\n  }\n}\n\nMenu.propTypes = {\n  selectedItem: PropTypes.number,\n  showMoreTab: PropTypes.bool,\n}\n\nMenu.defaultProps = {\n  selectedItem: 0,\n  showMoreTab: true,\n}\n","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\n\nexport default class DropDownContainer extends PureComponent {\n  render() {\n    return (\n      <div\n        className={`morrisons-dropdown__container shadow bg-white z-30\n         border-body-lighter w-full absolute flex flex-col ${\n           this.props.open ? 'open' : ''\n         }`}\n      >\n        {this.props.children}\n      </div>\n    )\n  }\n}\n\nDropDownContainer.propTypes = {\n  open: PropTypes.bool,\n}\n\nDropDownContainer.defaultProps = {\n  open: false,\n}\n","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M0 0h24v24H0V0z\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n  return React.createElement(\"svg\", _extends({\n    width: 24,\n    height: 24,\n    viewBox: \"0 0 24 24\"\n  }, props), _ref, _ref2);\n};\n\nexport default __webpack_public_path__ + \"static/media/arrow_down.c3d75740.svg\";\nexport { SvgComponent as ReactComponent };","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M0 0h24v24H0z\",\n  fill: \"none\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n  return React.createElement(\"svg\", _extends({\n    width: 24,\n    height: 24,\n    viewBox: \"0 0 24 24\"\n  }, props), _ref, _ref2);\n};\n\nexport default __webpack_public_path__ + \"static/media/arrow_up.24a93bb6.svg\";\nexport { SvgComponent as ReactComponent };","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\nimport { ReactComponent as DownArrow } from './arrow_down.svg'\nimport { ReactComponent as UpArrow } from './arrow_up.svg'\n\nexport default class DropDownSelect extends PureComponent {\n  render() {\n    return (\n      <div\n        className={`morrisons-dropdown__select text-lg text-secondary font-semibold shadow cursor-pointer \n          flex items-center justify-between pl-4 pr-8 py-4 border border-body-lighter`}\n        onClick={this.props.handleClick}\n      >\n        <div>{this.props.label}</div>\n        {this.props.open ? <UpArrow /> : <DownArrow />}\n      </div>\n    )\n  }\n}\n\nDropDownSelect.propTypes = {\n  label: PropTypes.string,\n  onClick: PropTypes.func,\n  open: PropTypes.bool,\n}\n","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\nimport './DropDown.css'\nimport DropDownContainer from './DropDownContainer'\nimport DropDownSelect from './DropDownSelect'\n\nexport default class DropDown extends PureComponent {\n  constructor(props) {\n    super(props)\n    this.state = { open: false }\n    this.handleOutsideClick = this.handleOutsideClick.bind(this)\n  }\n\n  toggleDropDown = () => {\n    !this.state.open\n      ? document.addEventListener('click', this.handleOutsideClick, false)\n      : document.removeEventListener('click', this.handleOutsideClick, false)\n    this.setState(state => ({\n      open: !state.open,\n    }))\n  }\n\n  handleOutsideClick = event => {\n    if (this.ref.contains(event.target)) return\n    this.toggleDropDown()\n  }\n\n  handleItemSelect = value => {\n    const { onChange } = this.props\n    if (onChange) onChange(value)\n    this.toggleDropDown()\n  }\n\n  getChildrenWithProps = () => {\n    const { children, defaultValue, selectedValue } = this.props\n    return React.Children.map(children, child =>\n      React.cloneElement(child, {\n        onSelect: this.handleItemSelect,\n        selected:\n          child.props.value === selectedValue ||\n          child.props.value === defaultValue,\n      })\n    )\n  }\n\n  render() {\n    const { open } = this.state\n    const { selectedValue, defaultValue } = this.props\n    return (\n      <div className=\"morrisons-dropdown relative\" ref={el => (this.ref = el)}>\n        <DropDownSelect\n          open={open}\n          handleClick={this.toggleDropDown}\n          label={selectedValue || defaultValue}\n        />\n        <DropDownContainer open={open}>\n          {this.getChildrenWithProps()}\n        </DropDownContainer>\n      </div>\n    )\n  }\n}\n\nDropDown.propTypes = {\n  defaultValue: PropTypes.string,\n  selectedValue: PropTypes.string,\n  onChange: PropTypes.func,\n}\n\nDropDown.defaultProps = {\n  defaultValue: 'Select',\n}\n","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\n\nexport default class DropDownItem extends PureComponent {\n  render() {\n    return (\n      <div\n        className={`morrisons-dropdown__item cursor-pointer flex flex-col justify-center pt-2 \n          h-12 px-4 ${\n            this.props.selected ? 'text-secondary' : 'text-gray-light'\n          }`}\n        onClick={() => this.props.onSelect(this.props.value)}\n      >\n        {this.props.children || 'Drop Down Item'}\n      </div>\n    )\n  }\n}\n\nDropDownItem.propTypes = {\n  onSelect: PropTypes.func,\n  value: PropTypes.string,\n  selected: PropTypes.bool,\n}\n\nDropDownItem.defaultProps = {\n  value: 'Item',\n  selected: false,\n}\n","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\nimport { Link } from 'react-router-dom'\nimport { DropDown, DropDownItem } from '../../core-components/drop-down'\nimport { Icon } from '../../core-components/icon'\nimport { COOKIE_POLICY_URL, PRIVACY_POLICY_URL } from '../../config'\n\nconst menuItems = [\n  { text: 'Morrisons', path: '/marketing' },\n  { text: 'Morrisons More', path: '/more' },\n  { text: 'Delete Account', path: '/delete-account' },\n]\nconst externalLinks = [\n  { text: 'Cookie Policy', path: COOKIE_POLICY_URL },\n  { text: 'Privacy Policy', path: PRIVACY_POLICY_URL },\n]\nconst listItemClassName =\n  'font-medium text-lg no-underline hover:text-secondary'\n\nexport default class DropDownMenu extends PureComponent {\n  getExternalLinkNodes = () => {\n    return externalLinks.map(item => (\n      <DropDownItem key={item.text}>\n        <a\n          className={`${listItemClassName} flex items-center`}\n          href={item.path}\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          <span className=\"pr-6\"> {item.text}</span>\n          <Icon titleAccess=\"Open in New Tab\" size=\"small\" name=\"ExitToApp\" />\n        </a>\n      </DropDownItem>\n    ))\n  }\n\n  renderLinks() {\n    let filteredMenuItems = menuItems.filter(item =>\n      item.text === 'Morrisons More' && !this.props.showMoreTab ? false : true\n    )\n\n    let dropDownItems = filteredMenuItems.map(item => (\n      <DropDownItem value={item.text} key={item.path}>\n        <Link className={listItemClassName} to={item.path} key={item.text}>\n          {item.text}\n        </Link>\n      </DropDownItem>\n    ))\n    const externalLinks = this.getExternalLinkNodes()\n    return [...dropDownItems, ...externalLinks]\n  }\n\n  getSelectedItemValue = () => {\n    const selectedItem = menuItems.find(\n      (item, index) => index === this.props.selectedItem\n    )\n    return selectedItem ? selectedItem.text : ''\n  }\n\n  render() {\n    return (\n      <div className=\"px-3 py-4 sm:hidden\">\n        <DropDown selectedValue={this.getSelectedItemValue()}>\n          {this.renderLinks()}\n        </DropDown>\n      </div>\n    )\n  }\n}\n\nDropDownMenu.propTypes = {\n  selectedItem: PropTypes.number,\n  showMoreTab: PropTypes.bool,\n}\n\nDropDownMenu.defaultProps = {\n  selectedItem: 0,\n  showMoreTab: true,\n}\n","import React, { PureComponent } from 'react'\n\nexport default class MockHeader extends PureComponent {\n  render() {\n    return (\n      <React.Fragment>\n        <div className=\"h-28 px-3 pt-4 pb-4 sm:h-32 sm:px-4 sm:pt-4 md:px-8 md:pt-12\">\n          <div className=\"prefcentre-mock-content--size-small w-1/4\" />\n          <div className=\"prefcentre-mock-content--size-small w-3/4\" />\n          <div className=\"prefcentre-mock-content--size-small w-2/3\" />\n        </div>\n        <div className=\"mb-4 sm:mb-8 sm:border-b sm:border-body-lighter\" />\n      </React.Fragment>\n    )\n  }\n}\n","import React, { PureComponent } from 'react'\n\nexport default class MockBody extends PureComponent {\n  render() {\n    return (\n      <div className=\"pl-3 sm:pl-4 md:pl-8\">\n        <div className=\"prefcentre-mock-content--size-big w-full\" />\n        <div className=\"prefcentre-mock-content--size-big w-full\" />\n        <div className=\"prefcentre-mock-content--size-big w-full\" />\n      </div>\n    )\n  }\n}\n","import React, { PureComponent } from 'react'\n\nexport default class MockFooter extends PureComponent {\n  render() {\n    return (\n      <div className=\"fixed pin-b pin-l bg-white w-screen text-center py-2 px-8 shadow-1 sm:text-left sm:px-32 sm:py-4\">\n        <div className=\"lg:pl-16 lg:ml-12 sm:pl-10 sm:ml-6\">\n          <div className=\"sm:w-48 sm:ml-32\">\n            <div className=\"prefcentre-mock-content--size-medium\" />\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\nimport './Modal.css'\n\nexport default class Modal extends PureComponent {\n  componentDidMount() {\n    this.preventBodyScroll()\n  }\n\n  componentDidUpdate() {\n    this.preventBodyScroll()\n  }\n\n  preventBodyScroll() {\n    this.props.open\n      ? document.body.classList.add('overflow-hidden')\n      : document.body.classList.remove('overflow-hidden')\n  }\n\n  handleClick = () => {\n    if (this.props.onClose) this.props.onClose()\n  }\n\n  getPositionClassName() {\n    const { position } = this.props\n    return position === 'topmost'\n      ? 'topmost'\n      : position === 'top'\n      ? 'top'\n      : position === 'center'\n      ? 'center'\n      : position === 'bottom'\n      ? 'bottom'\n      : 'custom'\n  }\n\n  render() {\n    return (\n      <div\n        className={`pin fixed z-10 ${\n          this.props.open ? 'morrisons-modal--open' : 'invisible'\n        }`}\n      >\n        <div\n          className={`morrisons-modal__content ${this.getPositionClassName()} ${\n            this.props.overflowContent ? 'overflow-y-auto' : ' '\n          }\n           z-20 absolute p-2 sm:p-0 \n          ${this.props.widthClass} ${this.props.heightClass}`}\n        >\n          {this.props.children}\n        </div>\n        <div\n          className=\"morrisons-modal__overlay pin fixed h-screen w-screen bg-body-light\"\n          onClick={this.handleClick}\n        />\n      </div>\n    )\n  }\n}\n\nModal.propTypes = {\n  open: PropTypes.bool,\n  position: PropTypes.oneOf(['topmost', 'top', 'center', 'bottom', 'custom']),\n  onClose: PropTypes.func,\n  widthClass: PropTypes.string,\n  heightClass: PropTypes.string,\n  overflowContent: PropTypes.bool,\n}\n\nModal.defaultProps = {\n  open: false,\n  position: 'top',\n  widthClass: 'w-screen sm:w-auto',\n  heightClass: '',\n  overflowContent: false,\n}\n","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M0 0h24v24H0z\",\n  fill: \"none\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n  return React.createElement(\"svg\", _extends({\n    width: 24,\n    height: 24,\n    viewBox: \"0 0 24 24\"\n  }, props), _ref, _ref2);\n};\n\nexport default __webpack_public_path__ + \"static/media/visibility.269c63a5.svg\";\nexport { SvgComponent as ReactComponent };","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0z\",\n  fill: \"none\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n  return React.createElement(\"svg\", _extends({\n    width: 24,\n    height: 24,\n    viewBox: \"0 0 24 24\"\n  }, props), _ref, _ref2);\n};\n\nexport default __webpack_public_path__ + \"static/media/visibility_off.c1c4f176.svg\";\nexport { SvgComponent as ReactComponent };","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M0 0h24v24H0V0z\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M11 7h2v2h-2zm0 4h2v6h-2zm1-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n  return React.createElement(\"svg\", _extends({\n    width: 24,\n    height: 24,\n    viewBox: \"0 0 24 24\"\n  }, props), _ref, _ref2);\n};\n\nexport default __webpack_public_path__ + \"static/media/info.59d1a698.svg\";\nexport { SvgComponent as ReactComponent };","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\n\nexport default class Recaptcha extends PureComponent {\n  constructor(props) {\n    super(props)\n    this.renderRecaptcha = this.renderRecaptcha.bind(this)\n  }\n\n  componentDidMount() {\n    if (document.readyState === 'complete') {\n      this.renderRecaptcha()\n    } else {\n      window.onload = this.renderRecaptcha\n    }\n  }\n\n  componentDidUpdate() {\n    if (this.props.resetRecaptcha) {\n      this.resetRecaptcha()\n    }\n  }\n\n  renderRecaptcha() {\n    window.grecaptcha.render('g-recaptcha', {\n      sitekey: this.props.siteKey,\n      callback: this.props.successCallback,\n      'expired-callback': this.props.expiredCallback,\n    })\n  }\n\n  resetRecaptcha = () => {\n    window.grecaptcha.reset()\n  }\n\n  render() {\n    return (\n      <div className={this.props.classes ? this.props.classes : ''}>\n        <div id=\"g-recaptcha\" />\n      </div>\n    )\n  }\n}\n\nRecaptcha.propTypes = {\n  siteKey: PropTypes.string.isRequired,\n  theme: PropTypes.string,\n  classes: PropTypes.string,\n  callback: PropTypes.func,\n  expiredCallback: PropTypes.func,\n  resetRecaptcha: PropTypes.bool,\n}\n","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\nimport { SITE_KEY, FORGOT_PASSWORD_LINK } from '../../config'\nimport CircularProgress from '@material-ui/core/CircularProgress'\nimport { SessionService } from '../../service'\nimport { Redirect } from 'react-router-dom'\nimport { Header } from '../../components/header'\nimport { Menu } from '../../components/menu'\nimport { DropDownMenu } from '../../components/dropdown-menu'\nimport MockHeader from './MockHeader'\nimport MockBody from './MockBody'\nimport MockFooter from './MockFooter'\nimport { Modal } from '../../core-components/modal'\nimport { ReactComponent as Visibility } from './visibility.svg'\nimport { ReactComponent as VisibilityOff } from './visibility_off.svg'\nimport { ReactComponent as Info } from './info.svg'\nimport { Recaptcha } from '../../core-components/recaptcha'\n\nexport default class Login extends PureComponent {\n  constructor(props) {\n    super(props)\n    this.state = {\n      userName: '',\n      password: '',\n      recaptchaSuccess: false,\n      userNameInFocus: false,\n      passwordInFocus: false,\n      showPassword: false,\n    }\n    this.checkAutoFillComplete = this.checkAutoFillComplete.bind(this)\n  }\n\n  recaptchaResponse = ''\n\n  componentDidMount() {\n    this.props.resetAppState()\n    if (this.emailRef)\n      this.emailRef.addEventListener(\n        'transitionend',\n        this.checkAutoFillComplete,\n        false\n      )\n    if (this.passwordRef)\n      this.passwordRef.addEventListener(\n        'transitionend',\n        this.checkAutoFillComplete,\n        false\n      )\n  }\n\n  componentWillUnmount() {\n    if (this.emailRef)\n      this.emailRef.removeEventListener(\n        'transitionend',\n        this.checkAutoFillComplete,\n        false\n      )\n    if (this.passwordRef)\n      this.passwordRef.removeEventListener(\n        'transitionend',\n        this.checkAutoFillComplete,\n        false\n      )\n  }\n\n  componentDidUpdate(prevProps) {\n    if (\n      this.props.loginError &&\n      this.props.loginError !== prevProps.loginError\n    ) {\n      this.setState({\n        recaptchaSuccess: false,\n      })\n    }\n  }\n\n  checkAutoFillComplete() {\n    this.setState({\n      userNameInFocus: true,\n      passwordInFocus: true,\n    })\n  }\n\n  handleUsernameChange = event => {\n    this.setState({\n      userName: event.target.value,\n      userNameInFocus: true,\n    })\n    if (this.props.loginError) this.props.resetLoginError()\n  }\n\n  handlePasswordChange = event => {\n    this.setState({\n      password: event.target.value,\n      passwordInFocus: true,\n    })\n    if (this.props.loginError) this.props.resetLoginError()\n  }\n\n  handleSubmit = event => {\n    event.preventDefault()\n    this.props.loginUser({\n      userName: this.state.userName,\n      password: this.state.password,\n      recaptcha: this.recaptchaResponse,\n    })\n  }\n\n  handleInputFocus = event => {\n    const inputType =\n      event.target.id === 'prefcentre-login__input--user'\n        ? 'userNameInFocus'\n        : 'passwordInFocus'\n    this.setState({ [inputType]: true })\n  }\n\n  handleInputBlur = event => {\n    const inputType =\n      event.target.id === 'prefcentre-login__input--user'\n        ? 'userNameInFocus'\n        : 'passwordInFocus'\n    if (!event.target.value) {\n      this.setState({ [inputType]: false })\n    }\n  }\n\n  handlePasswordVisibility = () => {\n    this.setState(state => ({\n      showPassword: !state.showPassword,\n    }))\n  }\n\n  grecaptchaSuccessCallback = grecaptchaResponse => {\n    this.recaptchaResponse = grecaptchaResponse\n    this.setState({ recaptchaSuccess: true })\n  }\n\n  grecaptchaExpiredCallback = () => {\n    this.setState({ recaptchaSuccess: false })\n  }\n\n  renderForm() {\n    return (\n      <form\n        className=\"px-6 py-6 bg-white rounded-lg flex flex-col justify-around sm:px-10 sm:py-8\"\n        onSubmit={this.handleSubmit}\n      >\n        <span className=\"text-secondary font-semibold text-xl pb-4\">\n          Log in to Your Marketing Preferences\n        </span>\n        <div className=\"prefcentre-login__input-wrapper pt-2 relative\">\n          <label\n            className={`prefcentre-login__label prefcentre-login__label--user font-normal text-gray-light \n            opacity-60 ${this.state.userNameInFocus ? 'is-focus' : ''}`}\n            htmlFor=\"prefcentre-login__input--user\"\n          >\n            Email\n          </label>\n          <input\n            ref={el => (this.emailRef = el)}\n            name=\"email\"\n            id=\"prefcentre-login__input--user\"\n            className=\"w-full h-full pl-4 pt-4 border border-gray-lighter rounded-md\"\n            type=\"email\"\n            autoComplete=\"username\"\n            required\n            onChange={this.handleUsernameChange}\n            onFocus={this.handleInputFocus}\n            onBlur={this.handleInputBlur}\n            value={this.state.userName}\n          />\n        </div>\n        <div className=\"prefcentre-login__input-wrapper pt-2 relative\">\n          <label\n            className={`prefcentre-login__label prefcentre-login__label--password font-normal text-gray-light \n            opacity-60 ${this.state.passwordInFocus ? 'is-focus' : ''}`}\n            htmlFor=\"prefcentre-login__input--password\"\n          >\n            Password\n          </label>\n          <input\n            ref={el => (this.passwordRef = el)}\n            name=\"password\"\n            id=\"prefcentre-login__input--password\"\n            className=\"w-full h-full pl-4 pt-4 border border-gray-lighter rounded-md\"\n            type={this.state.showPassword ? 'text' : 'password'}\n            autoComplete=\"current-password\"\n            required\n            onChange={this.handlePasswordChange}\n            onFocus={this.handleInputFocus}\n            onBlur={this.handleInputBlur}\n            value={this.state.password}\n          />\n          <div\n            className=\"prefcentre-login__icon-wrapper\"\n            onClick={this.handlePasswordVisibility}\n          >\n            {this.state.showPassword ? <Visibility /> : <VisibilityOff />}\n          </div>\n        </div>\n        <a\n          className=\"text-secondary text-sm pt-2\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          href={FORGOT_PASSWORD_LINK}\n        >\n          Forgotten your password?\n        </a>\n        <Recaptcha\n          siteKey={SITE_KEY}\n          classes=\"pt-4 pb-2\"\n          successCallback={this.grecaptchaSuccessCallback}\n          expiredCallback={this.grecaptchaExpiredCallback}\n          resetRecaptcha={this.props.loginError ? true : false}\n        />\n        {this.props.loginError && (\n          <span className=\"text-error py-2\">\n            {this.props.loginError.errorMessage}\n          </span>\n        )}\n        <div className=\"px-4 py-2 mt-2 rounded-md leading-normal bg-body-lighter text-gray-light flex items-center\">\n          <Info className=\"fill-current flex-no-shrink\" />\n          <span className=\"ml-2\">\n            If you usually log in via Facebook please contact us on 0345 611\n            6111 to change your marketing preferences.\n          </span>\n        </div>\n        <button\n          className={`h-12 mt-4 rounded-md flex flex-col justify-center items-center \n                outline-none border-none \n                ${\n                  !this.state.recaptchaSuccess\n                    ? ' bg-body-lightest text-body-light cursor-not-allowed'\n                    : ' text-white bg-secondary font-semibold'\n                }`}\n          type=\"submit\"\n          disabled={!this.state.recaptchaSuccess}\n        >\n          {this.props.isLoggingIn ? (\n            <CircularProgress color=\"inherit\" size={20} />\n          ) : (\n            'Log in'\n          )}\n        </button>\n      </form>\n    )\n  }\n\n  renderLoginForm() {\n    return (\n      <div>\n        <Header showLogout />\n        <div className=\"prefcentre-layout flex flex-col sm:flex-row\">\n          <Modal\n            position=\"custom\"\n            open\n            widthClass=\"w-screen sm:w-125\"\n            overflowContent\n          >\n            {this.renderForm()}\n          </Modal>\n          <Menu selectedItem={0} />\n          <DropDownMenu selectedItem={0} />\n          <div className=\"w-full mb-20 sm:flex-1 sm:w-auto sm:pl-6 sm:pr-8 lg:pl-16 lg:pr-20 sm:mb-28\">\n            <MockHeader />\n            <MockBody />\n          </div>\n          <MockFooter />\n        </div>\n      </div>\n    )\n  }\n\n  checkLoggedInStatusAndRender() {\n    const { currentUser, location } = this.props\n    const referrer = location.state ? location.state.referrer : ''\n    const redirectTo = referrer ? referrer : ''\n    if (currentUser && SessionService.fetchItem('access_token')) {\n      return <Redirect to={redirectTo} />\n    } else {\n      if (SessionService.fetchItem('access_token')) {\n        this.props.fetchProfile()\n        return null\n      } else return this.renderLoginForm()\n    }\n  }\n\n  render() {\n    return this.checkLoggedInStatusAndRender()\n  }\n}\n\nLogin.propTypes = {\n  loginUser: PropTypes.func.isRequired,\n  isLoggingIn: PropTypes.bool,\n}\n","import {\r\n  LOGIN_USER_REQUEST,\r\n  LOGIN_USER_FAILURE,\r\n  LOGIN_USER_SUCCESS,\r\n  LOGIN_USER_ERROR_RESET,\r\n  FETCH_PREFERENCE_REQUEST,\r\n  FETCH_PREFERENCE_FAILURE,\r\n  FETCH_PREFERENCE_SUCCESS,\r\n  SAVE_PREFERENCE_REQUEST,\r\n  SAVE_PREFERENCE_FAILURE,\r\n  SAVE_PREFERENCE_SUCCESS,\r\n  SAVE_PREFERENCE_SUCCESS_STATUS_RESET,\r\n  SET_CHANGES_COUNT,\r\n  SAVE_PREFERENCE_ERROR_STATUS_RESET,\r\n  RESET_APP_STATE,\r\n} from './actionTypes'\r\nimport axios from 'axios'\r\nimport { API_KEY, BASE_URL, PREFERENCE_BASE_URL } from '../../config'\r\nimport { SessionService, HTTPService } from '../../service'\r\nimport qs from 'qs'\r\n\r\naxios.defaults.baseURL = BASE_URL\r\n\r\nexport const loginUserRequest = () => ({\r\n  type: LOGIN_USER_REQUEST,\r\n})\r\n\r\nexport const savePreference = preference => {\r\n  const {\r\n    isFetching,\r\n    fetchError,\r\n    isSaving,\r\n    saveError,\r\n    changesCount,\r\n    saveSuccess,\r\n    ...rest\r\n  } = preference\r\n  return async dispatch => {\r\n    dispatch(savePreferenceRequest())\r\n    return HTTPService.savePreference(rest)\r\n      .then(res => {\r\n        dispatch(savePreferenceSuccess(res))\r\n        return Promise.resolve(res)\r\n      })\r\n      .catch(err => {\r\n        if (\r\n          err &&\r\n          err.response &&\r\n          err.response.data &&\r\n          (err.response.data.errorCode === '401.01.005' ||\r\n            err.response.data.errorCode === '400.04.003')\r\n        ) {\r\n          dispatch(savePreferenceFailure(err))\r\n          dispatch(setChangesCount(0))\r\n          window.location.href = '#time-out'\r\n          return Promise.reject(err)\r\n        } else {\r\n          dispatch(savePreferenceFailure(err))\r\n          return Promise.reject(err)\r\n        }\r\n      })\r\n  }\r\n}\r\n\r\nexport const fetchPreference = () => {\r\n  const accessToken = SessionService.fetchItem('access_token')\r\n  return dispatch => {\r\n    dispatch(fetchPreferenceRequest())\r\n    axios\r\n      .get(\r\n        `${PREFERENCE_BASE_URL}/customer/v2/customers/@me/preferences?apikey=${API_KEY}`,\r\n        {\r\n          headers: {\r\n            Authorization: `Bearer ${accessToken}`,\r\n          },\r\n        }\r\n      )\r\n      .then(res => {\r\n        dispatch(fetchPreferenceSuccess(res.data))\r\n      })\r\n      .catch(err => {\r\n        dispatch(fetchPreferenceFailure(err))\r\n      })\r\n  }\r\n}\r\n\r\nexport const fetchProfile = path => {\r\n  const accessToken = SessionService.fetchItem('access_token')\r\n  return dispatch => {\r\n    HTTPService.fetchProfile()\r\n      .then(res => {\r\n        dispatch(\r\n          loginUserSuccess({\r\n            ...res.data,\r\n            ...{ access_token: accessToken },\r\n          })\r\n        )\r\n      })\r\n      .catch(err => {\r\n        if (\r\n          err &&\r\n          err.response &&\r\n          err.response.data &&\r\n          (err.response.data.errorCode === '401.01.005' ||\r\n            err.response.data.errorCode === '400.04.003')\r\n        ) {\r\n          window.location.href = '#time-out'\r\n        } else {\r\n          SessionService.removeItem('access_token')\r\n          dispatch(loginUserFailure(err))\r\n        }\r\n      })\r\n  }\r\n}\r\n\r\nexport const loginUser = userDetails => {\r\n  return dispatch => {\r\n    const { userName: username, password, recaptcha } = userDetails\r\n    dispatch(loginUserRequest())\r\n    axios({\r\n      method: 'post',\r\n      url: `identity/v1/token?apikey=${API_KEY}`,\r\n      data: qs.stringify({\r\n        grant_type: 'password',\r\n        username,\r\n        password,\r\n        recaptcha,\r\n      }),\r\n      headers: {\r\n        'content-type': 'application/x-www-form-urlencoded',\r\n      },\r\n    })\r\n      .then(res => {\r\n        SessionService.saveItem('access_token', res.data.access_token)\r\n        SessionService.saveItem('refresh_token', res.data.refresh_token)\r\n        dispatch(fetchProfile())\r\n      })\r\n      .catch(err => {\r\n        SessionService.removeItem('access_token')\r\n        SessionService.removeItem('refresh_token')\r\n        const error = err.response\r\n          ? err.response.data\r\n          : { errorMessage: 'Unable to Login now' }\r\n        dispatch(loginUserFailure(error))\r\n      })\r\n  }\r\n}\r\n\r\nexport const logOutUser = () => {\r\n  SessionService.removeItem('access_token')\r\n  SessionService.removeItem('refresh_token')\r\n  return dispatch => {\r\n    dispatch(setChangesCount(0))\r\n    window.location.replace('#login')\r\n  }\r\n}\r\n\r\nexport const resetAppState = () => ({\r\n  type: RESET_APP_STATE,\r\n})\r\n\r\nexport const loginUserFailure = error => ({\r\n  type: LOGIN_USER_FAILURE,\r\n  payload: {\r\n    error,\r\n  },\r\n})\r\n\r\nexport const loginUserSuccess = userDetails => ({\r\n  type: LOGIN_USER_SUCCESS,\r\n  payload: {\r\n    userDetails,\r\n  },\r\n})\r\n\r\nexport const fetchPreferenceRequest = () => ({\r\n  type: FETCH_PREFERENCE_REQUEST,\r\n})\r\n\r\nexport const fetchPreferenceFailure = error => ({\r\n  type: FETCH_PREFERENCE_FAILURE,\r\n  payload: {\r\n    error,\r\n  },\r\n})\r\n\r\nexport const fetchPreferenceSuccess = preference => ({\r\n  type: FETCH_PREFERENCE_SUCCESS,\r\n  payload: {\r\n    preference,\r\n  },\r\n})\r\n\r\nexport const savePreferenceRequest = () => ({\r\n  type: SAVE_PREFERENCE_REQUEST,\r\n})\r\n\r\nexport const savePreferenceFailure = error => ({\r\n  type: SAVE_PREFERENCE_FAILURE,\r\n  payload: {\r\n    error,\r\n  },\r\n})\r\n\r\nexport const savePreferenceSuccess = preference => ({\r\n  type: SAVE_PREFERENCE_SUCCESS,\r\n  payload: {\r\n    preference,\r\n  },\r\n})\r\n\r\nexport const resetSavedStatus = () => ({\r\n  type: SAVE_PREFERENCE_SUCCESS_STATUS_RESET,\r\n})\r\n\r\nexport const resetSaveErrorStatus = () => ({\r\n  type: SAVE_PREFERENCE_ERROR_STATUS_RESET,\r\n})\r\n\r\nexport const setChangesCount = count => ({\r\n  type: SET_CHANGES_COUNT,\r\n  payload: { count },\r\n})\r\n\r\nexport const resetLoginError = () => ({\r\n  type: LOGIN_USER_ERROR_RESET,\r\n})\r\n","export const LOGOUT_USER = 'LOGOUT_USER'\nexport const LOGIN_USER_REQUEST = 'LOGIN_USER_REQUEST'\nexport const LOGIN_USER_FAILURE = 'LOGIN_USER_FAILURE'\nexport const LOGIN_USER_SUCCESS = 'LOGIN_USER_SUCCESS'\nexport const LOGIN_USER_ERROR_RESET = 'LOGIN_USER_ERROR_RESET'\nexport const FETCH_PROFILE_REQUEST = 'FETCH_PROFILE_REQUEST'\nexport const FETCH_PROFILE_FAILURE = 'FETCH_PROFILE_FAILURE'\nexport const FETCH_PROFILE_SUCCESS = 'FETCH_PROFILE_SUCCESS'\nexport const FETCH_PREFERENCE_REQUEST = 'FETCH_PREFERENCE_REQUEST'\nexport const FETCH_PREFERENCE_FAILURE = 'FETCH_PREFERENCE_FAILURE'\nexport const FETCH_PREFERENCE_SUCCESS = 'FETCH_PREFERENCE_SUCCESS'\nexport const SAVE_PREFERENCE_REQUEST = 'SAVE_PREFERENCE_REQUEST'\nexport const SAVE_PREFERENCE_FAILURE = 'SAVE_PREFERENCE_FAILURE'\nexport const SAVE_PREFERENCE_SUCCESS = 'SAVE_PREFERENCE_SUCCESS'\nexport const SAVE_PREFERENCE_SUCCESS_STATUS_RESET =\n  'SAVE_PREFERENCE_SUCCESS_STATUS_RESET'\nexport const SET_CHANGES_COUNT = 'SET_CHANGES_COUNT'\nexport const SAVE_PREFERENCE_ERROR_STATUS_RESET =\n  'SAVE_PREFERENCE_ERROR_STATUS_RESET'\nexport const RESET_APP_STATE = 'RESET_APP_STATE'\n","import React, { Component } from 'react'\nimport { connect } from 'react-redux'\nimport { Login } from '../../pages/login'\nimport {\n  loginUser,\n  fetchProfile,\n  resetLoginError,\n  resetAppState,\n} from '../../redux/actions'\n\nclass LoginContainer extends Component {\n  render() {\n    return (\n      <div>\n        <Login {...this.props} />\n      </div>\n    )\n  }\n}\n\nconst mapStateToProps = ({ userDetails }) => ({\n  isLoggingIn: userDetails.isLoggingIn,\n  loginError: userDetails.loginError,\n  currentUser: userDetails.customerNumber,\n})\n\nconst mapDispatchToProps = dispatch => ({\n  loginUser: userDetails => dispatch(loginUser(userDetails)),\n  fetchProfile: path => dispatch(fetchProfile(path)),\n  resetLoginError: () => dispatch(resetLoginError()),\n  resetAppState: () => dispatch(resetAppState()),\n})\n\nexport default connect(\n  mapStateToProps,\n  mapDispatchToProps\n)(LoginContainer)\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport { Redirect } from 'react-router-dom'\nimport { SessionService } from '../service'\n\nfunction mapStateToProps(state) {\n  return { currentUser: state.userDetails && state.userDetails.customerNumber }\n}\n\nconst authorizeRoute = Component =>\n  connect(mapStateToProps)(props => {\n    const pathName = props.location.pathname\n    if (props.currentUser && SessionService.fetchItem('access_token'))\n      return <Component {...props} />\n    return (\n      <Redirect to={{ pathname: '/login', state: { referrer: pathName } }} />\n    )\n  })\n\nexport default authorizeRoute\n","import React, { PureComponent } from 'react'\nimport welcomeMessage from './welcomeMessage'\nimport PropTypes from 'prop-types'\n\nexport default class Welcome extends PureComponent {\n  render() {\n    return (\n      <div className=\"prefcentre-welcome-gradient text-white px-3 py-4 sm:px-20 sm:py-8\">\n        <section className=\"sm:w-3/4\">\n          <span className=\"text-xl sm:text-3xl font-semibold\">{`Hello ${\n            this.props.name\n          }`}</span>\n          <article className=\"font-medium py-4 leading-normal sm:text-lg\">\n            {this.props.message || welcomeMessage}\n          </article>\n        </section>\n      </div>\n    )\n  }\n}\n\nWelcome.propTypes = {\n  name: PropTypes.string,\n  message: PropTypes.string,\n}\n\nWelcome.defaultProps = {\n  name: '<user>',\n}\n","const welcomeMessage = `Opt in to receive information and offers from some or all \nof our services. So please tell us which of these you'd like to hear from and the types \nof communication you're happy for us to send.`\n\nexport default welcomeMessage\n","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\nimport { Modal } from '../../core-components/modal'\nimport { CircularProgress } from '@material-ui/core'\n\nexport default class PreLoader extends PureComponent {\n  render() {\n    return (\n      <Modal open={this.props.show} position=\"center\">\n        {this.props.show ? (\n          <div className=\"text-secondary flex justify-center\">\n            <CircularProgress size={80} color=\"inherit\" />\n          </div>\n        ) : (\n          false\n        )}\n      </Modal>\n    )\n  }\n}\n\nPreLoader.propTypes = {\n  show: PropTypes.bool,\n}\n\nPreLoader.defaultProps = {\n  show: true,\n}\n","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"none\",\n  d: \"M0 0h24v24H0V0z\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"\n});\n\nvar SvgComponent = function SvgComponent(props) {\n  return React.createElement(\"svg\", _extends({\n    width: 24,\n    height: 24,\n    viewBox: \"0 0 24 24\"\n  }, props), _ref, _ref2);\n};\n\nexport default __webpack_public_path__ + \"static/media/error_outline.48611b9c.svg\";\nexport { SvgComponent as ReactComponent };","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\nimport { ReactComponent as ErrorIcon } from './error_outline.svg'\n\nexport default class ErrorComponent extends PureComponent {\n  render() {\n    return (\n      <div className=\"flex justify-center items-center px-2 py-24 text-error text-base sm:text-lg sm:px-4\">\n        <ErrorIcon className=\"mr-4 fill-current\" />\n        <span>{this.props.errorMessage}</span>\n      </div>\n    )\n  }\n}\n\nErrorComponent.propTypes = {\n  errorMessage: PropTypes.string,\n}\n\nErrorComponent.defaultProps = {\n  errorMessage: 'Error!',\n}\n","const styles = theme => ({\n  iOSSwitchBase: {\n    '&$iOSChecked': {\n      color: theme.palette.common.white,\n      '& + $iOSBar': {\n        backgroundColor: '#00893f',\n      },\n    },\n    transition: theme.transitions.create('transform', {\n      duration: theme.transitions.duration.shortest,\n      easing: theme.transitions.easing.sharp,\n    }),\n  },\n  iOSChecked: {\n    transform: 'translateX(15px)',\n    '& + $iOSBar': {\n      opacity: 1,\n      border: 'none',\n    },\n  },\n  iOSBar: {\n    borderRadius: 13,\n    width: 42,\n    height: 26,\n    marginTop: -13,\n    marginLeft: -21,\n    border: 'solid 1px',\n    borderColor: theme.palette.grey[400],\n    backgroundColor: theme.palette.grey[50],\n    opacity: 1,\n    transition: theme.transitions.create(['background-color', 'border']),\n  },\n  iOSIcon: {\n    width: 24,\n    height: 24,\n  },\n  iOSIconChecked: {\n    boxShadow: theme.shadows[1],\n  },\n})\n\nexport default styles\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { withStyles } from '@material-ui/core/styles'\nimport Switch from '@material-ui/core/Switch'\nimport styles from './styles'\n\nclass Toggle extends Component {\n  render() {\n    const { classes } = this.props\n    return (\n      <Switch\n        classes={{\n          root: classes.root,\n          switchBase: classes.iOSSwitchBase,\n          bar: classes.iOSBar,\n          icon: classes.iOSIcon,\n          iconChecked: classes.iOSIconChecked,\n          checked: classes.iOSChecked,\n        }}\n        value={this.props.value}\n        checked={this.props.checked}\n        onChange={this.props.onChange}\n        disableRipple\n      />\n    )\n  }\n}\n\nToggle.propTypes = {\n  classes: PropTypes.object.isRequired,\n  onChange: PropTypes.func.isRequired,\n  checked: PropTypes.bool,\n  value: PropTypes.string,\n}\n\nToggle.defaultProps = {\n  value: '',\n  checked: false,\n}\n\nexport default withStyles(styles)(Toggle)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport { Toggle } from '../../core-components/toggle'\n\nexport default class PreferenceItem extends Component {\n  render() {\n    const className = classNames(\n      'flex justify-between items-center px-3 py-4 text-gray-light leading-normal sm:px-8',\n      {\n        'bg-body-lightest': this.props.theme === 'dark',\n      }\n    )\n    const { heading, subHeading, note } = this.props\n    return (\n      <div className={className}>\n        <div>\n          <div className=\"font-semibold text-cxl sm:text-lg \">\n            {heading}\n            <span className=\"hidden text-gray-light opacity-80 font-medium sm:inline \">\n              {subHeading}\n            </span>\n          </div>\n          <div className=\"font-medium opacity-80 text-base sm:text-lg \">\n            {this.props.label}\n          </div>\n          <div className=\"text-sm text-gray-light\">{note}</div>\n        </div>\n        <Toggle\n          value={this.props.value}\n          checked={this.props.checked}\n          onChange={this.props.onChange}\n        />\n      </div>\n    )\n  }\n}\n\nPreferenceItem.propTypes = {\n  heading: PropTypes.string,\n  subHeading: PropTypes.string,\n  label: PropTypes.string,\n  note: PropTypes.string,\n  theme: PropTypes.oneOf(['light', 'dark']),\n  value: PropTypes.string,\n  checked: PropTypes.bool,\n  onChange: PropTypes.func.isRequired,\n}\n\nPreferenceItem.defaultProps = {\n  heading: 'Lorem',\n  subHeading: '',\n  label: `Lorem ipsum dolor sit amet, consectetur adipiscing elit`,\n  note: '',\n  theme: 'light',\n  value: '',\n  checked: false,\n}\n","const styles = {\n  defaultStyle: 'p-3 font-sans rounded tracking-wide inline-block',\n  variant: {\n    primary: {\n      solid: 'bg-secondary text-white hover:bg-secondary-dark',\n    },\n    secondary: {\n      solid: 'bg-primary-lighter text-primary-dark hover:bg-primary-lighter',\n    },\n    tertiary: {\n      solid: 'bg-primary-dark text-white hover:bg-primary-dark',\n    },\n  },\n  width: {\n    small: 'px-6 sm:w-auto',\n    medium: 'px-12 sm:w-auto',\n    large: 'px-16 sm:w-auto whitespace-no-wrap',\n    full: 'flex w-full justify-center',\n  },\n  bold: 'font-semibold',\n  disabled: 'bg-body-lightest text-body-light cursor-not-allowed',\n}\n\nconst getComputedStyles = ({\n  variantType,\n  display,\n  widthType,\n  isBold,\n  isDisabled,\n  cursor,\n}) => {\n  const { defaultStyle, variant, width, bold, disabled } = styles\n  return `${defaultStyle} ${\n    isDisabled ? disabled : variant[variantType][display]\n  }  ${width.full} sm:${width[widthType]} ${isBold ? bold : ''} ${cursor}`\n}\n\nexport default getComputedStyles\n","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\nimport getComputedStyles from './styles'\n\nexport default class Button extends PureComponent {\n  render() {\n    const { variant, display, width, bold, disabled, cursor } = this.props\n    const classNames = getComputedStyles({\n      variantType: variant,\n      display,\n      widthType: width,\n      isBold: bold,\n      isDisabled: disabled,\n      cursor,\n    })\n    return (\n      <button\n        className={classNames}\n        type={this.props.type}\n        disabled={this.props.disabled}\n        onClick={this.props.onClick}\n      >\n        {this.props.children}\n      </button>\n    )\n  }\n}\n\nButton.propTypes = {\n  onClick: PropTypes.func.isRequired,\n  type: PropTypes.string,\n  disabled: PropTypes.bool,\n  variant: PropTypes.oneOf(['primary', 'secondary', 'tertiary']),\n  display: PropTypes.oneOf(['solid', 'dashed']),\n  bold: PropTypes.bool,\n  width: PropTypes.oneOf(['small', 'medium', 'large', 'full']),\n  cursor: PropTypes.string,\n}\n\nButton.defaultProps = {\n  type: 'button',\n  disabled: false,\n  variant: 'primary',\n  display: 'solid',\n  bold: true,\n  width: 'large',\n  cursor: 'cursor-pointer',\n}\n","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport { Icon } from '../../core-components/icon'\n\nexport default class IconText extends PureComponent {\n  render() {\n    const { iconBefore, iconAfter, children } = this.props\n    const className = classNames('flex items-center relative', {\n      'pr-8': iconAfter,\n      'pl-8': iconBefore,\n    })\n    return (\n      <span className={className}>\n        {iconBefore ? (\n          <div className=\"absolute pin-l\">\n            <Icon name={iconBefore} />\n          </div>\n        ) : (\n          false\n        )}\n        <span>{children}</span>\n        {iconAfter ? (\n          <div className=\"absolute pin-r\">\n            <Icon name={iconAfter} />\n          </div>\n        ) : (\n          false\n        )}\n      </span>\n    )\n  }\n}\n\nIconText.propTypes = {\n  iconBefore: PropTypes.string,\n  iconAfter: PropTypes.string,\n}\n","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\nimport { Button } from '../../core-components/button'\nimport { IconText } from '../../core-components/icon-text'\n\nexport default class SavePreferenceButton extends PureComponent {\n  handleClick = () => {\n    const { saveSuccess, onSave } = this.props\n    if (saveSuccess) return\n    else {\n      onSave()\n    }\n  }\n  render() {\n    const { saveSuccess, label } = this.props\n    return (\n      <div className=\"fixed pin-b pin-l bg-white w-screen text-center py-2 px-8 shadow-1 sm:text-left sm:px-32 sm:py-4\">\n        <div className=\"lg:pl-16 lg:ml-12 sm:pl-10 sm:ml-6\">\n          <div className=\"sm:ml-32\">\n            <Button\n              onClick={this.handleClick}\n              disabled={this.props.disable}\n              cursor={saveSuccess ? 'cursor-not-allowed' : ''}\n            >\n              <IconText iconAfter={saveSuccess ? 'Check' : ''}>\n                {saveSuccess ? 'Saved' : label}\n              </IconText>\n            </Button>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n\nSavePreferenceButton.propTypes = {\n  onSave: PropTypes.func.isRequired,\n  label: PropTypes.string,\n  saveSuccess: PropTypes.bool,\n  disable: PropTypes.bool,\n}\n\nSavePreferenceButton.defaultProps = {\n  label: 'Save preferences',\n  saveSuccess: false,\n}\n","import React, { PureComponent } from 'react'\n\nexport default class MarketingPreferenceHeader extends PureComponent {\n  render() {\n    return (\n      <React.Fragment>\n        <div className=\"px-3 pt-4 pb-4 sm:px-4 sm:pt-4 md:px-8 md:pt-12\">\n          <div className=\"mb-2 font-semibold text-cxl text-secondary sm:text-xl sm:mb-4\">\n            Your Marketing Preferences\n          </div>\n          <p className=\"text-base leading-normal text-gray-light opacity-80 sm:leading-tight sm:text-lg\">\n            We'd love for you to be the first to hear about More Card Prices and\n            offers, personalised money-saving vouchers, and helpful updates\n            about our products and services. Please let us know how you'd like\n            to be contacted.\n          </p>\n        </div>\n        <div className=\"mb-4 sm:mb-8 sm:border-b sm:border-body-lighter\" />\n      </React.Fragment>\n    )\n  }\n}\n","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\n\nexport default class ConfirmationDialog extends PureComponent {\n  handleClick(confirmation) {\n    const { onConfirmation } = this.props\n    if (onConfirmation) onConfirmation(confirmation)\n  }\n\n  render() {\n    const { label, heading, yesLabel, noLabel } = this.props\n    return (\n      <div className=\"max-w-sm px-8 pt-10 bg-white text-gray-light rounded-md\">\n        <div className=\"font-semibold text-clg\">{heading}</div>\n        <div className=\"pt-2 pb-12 opacity-60 font-medium text-lg\">{label}</div>\n        <div className=\"flex justify-between pb-8\">\n          <button\n            className={`w-auto h-10 px-2 py-3 mr-4 flex-1 text-base rounded-md bg-white \n          text-black font-semibold border border-secondary sm:w-48 sm:px-8 sm:mr-2 sm:flex-initial`}\n            type=\"button\"\n            onClick={this.handleClick.bind(this, 'yes')}\n          >\n            {yesLabel}\n          </button>\n          <button\n            className={`w-auto h-10 px-2 py-3 flex-1 text-base rounded-md bg-secondary \n            text-white hover:bg-secondary-dark font-semibold sm:w-48 sm:px-8 sm:flex-initial`}\n            type=\"button\"\n            onClick={this.handleClick.bind(this, 'no')}\n          >\n            {noLabel}\n          </button>\n        </div>\n      </div>\n    )\n  }\n}\n\nConfirmationDialog.propTypes = {\n  onConfirmation: PropTypes.func.isRequired,\n  heading: PropTypes.string,\n  label: PropTypes.string,\n  yesLabel: PropTypes.string,\n  noLabel: PropTypes.string,\n}\n\nConfirmationDialog.defaultProps = {\n  heading: `You just turned off all communications`,\n  label: `You’ll no longer receive personalised offers, exclusive content, money off coupons and club content from us.`,\n  yesLabel: `Yes please`,\n  noLabel: `No, go back`,\n}\n","const marketingPreferences = [\n  {\n    heading: 'Email',\n    label:\n      'Get the latest promotions, More Card Prices, personalised offers, and exclusive content straight to your inbox.',\n    value: 'emailOptIn',\n  },\n  {\n    heading: 'Research',\n    label:\n      'Help shape our future by taking part in occasional marketing surveys and be the first to hear about our new products and services.',\n    value: 'researchOptIn',\n  } /* \n  {\n    heading: 'Groceries Online Coupons',\n    label: 'Receive digital coupons online',\n    value: 'groceryOnlineCoupons',\n  }, */,\n  {\n    heading: 'Post',\n    label:\n      \"We'll send your personalised offers, exclusive content, and money-off vouchers to you by post.\",\n    value: 'directMail',\n  },\n  /* {\n      heading: 'Coupon at till',\n      label: 'Receive personalised offers and money-off coupons in store.',\n      value: 'couponsAtTill',\n   },*/\n]\n\nexport default marketingPreferences\n","import React, { Component } from 'react'\r\nimport { PreferenceItem } from '../../components/preference-item'\r\nimport { SavePreferenceButton } from '../../components/save-preference-button'\r\nimport MarketingPreferenceHeader from './MarketingPreferenceHeader'\r\nimport { ConfirmationDialog } from '../../components/confirmation-dialog'\r\nimport marketingPreferences from './marketingPreferences'\r\nimport { marketingSaveSuccessNote } from '../../config'\r\nimport isEqual from 'lodash.isequal'\r\n\r\nexport default class MarketingPreference extends Component {\r\n  state = { preferences: null }\r\n\r\n  componentDidMount() {\r\n    this.props.setMenuIndex(0)\r\n    this.setState({\r\n      preferences: this.props.preferences,\r\n    })\r\n  }\r\n\r\n  componentDidUpdate() {\r\n    if (\r\n      this.props.preferences &&\r\n      (!this.state.preferences ||\r\n        (this.props.saveSuccess && this.checkIfChanged()))\r\n    ) {\r\n      this.setState({\r\n        preferences: {\r\n          ...this.props.preferences,\r\n        },\r\n      })\r\n    }\r\n  }\r\n\r\n  checkIfChanged() {\r\n    return !isEqual(this.state.preferences, this.props.preferences)\r\n  }\r\n\r\n  componentWillUnmount() {\r\n    if (this.props.saveSuccess) this.props.resetSavedStatus()\r\n    this.props.setChangesCount(0)\r\n    if (this.props.saveError) this.props.resetSaveErrorStatus()\r\n  }\r\n\r\n  handlePreferenceChange = (event, checked) => {\r\n    if (this.props.saveSuccess) return\r\n    const prevPreferences = this.props.preferences\r\n    let value = event.target.value\r\n    let changesCount = 0\r\n    this.setState(state => {\r\n      const newPreferences = { ...state.preferences, [value]: checked }\r\n      Object.keys(prevPreferences).forEach(key => {\r\n        if (prevPreferences[key] !== newPreferences[key]) changesCount++\r\n      })\r\n      this.props.setChangesCount(changesCount)\r\n      return { preferences: newPreferences }\r\n    })\r\n    if (this.props.saveSuccess) this.props.resetSavedStatus()\r\n  }\r\n\r\n  checkIfAllUnsubscribed = () => {\r\n    if (!this.state.preferences) return\r\n    const keys = Object.keys(this.state.preferences)\r\n    let unsubscribedCount = 0\r\n    keys.forEach(value => {\r\n      if (this.state.preferences[value] === false) unsubscribedCount++\r\n      if (this.state.preferences[value] === null) unsubscribedCount++\r\n    })\r\n    return unsubscribedCount === keys.length ? true : false\r\n  }\r\n\r\n  handleConfirmationDialogClick = confirmation => {\r\n    if (confirmation === 'yes') {\r\n      this.props.onSave('marketingPreferences', this.state.preferences)\r\n    } else {\r\n      this.props.setChangesCount(0)\r\n      this.setState({\r\n        preferences: { ...this.props.preferences },\r\n      })\r\n    }\r\n    this.props.closeModal()\r\n  }\r\n\r\n  handleSavePreference = () => {\r\n    const modalChild = (\r\n      <ConfirmationDialog onConfirmation={this.handleConfirmationDialogClick} />\r\n    )\r\n    this.checkIfAllUnsubscribed()\r\n      ? this.props.showCustomModal(modalChild)\r\n      : this.props\r\n          .onSave('marketingPreferences', this.state.preferences)\r\n          .then(() => {\r\n            this.setState({\r\n              changesCount: 0,\r\n            })\r\n          })\r\n  }\r\n\r\n  checkIfRequired(value) {\r\n    const keys = Object.keys(this.state.preferences)\r\n    return keys.indexOf(value) !== -1 && this.state.preferences[value] !== null\r\n      ? true\r\n      : false\r\n  }\r\n\r\n  renderMarketingPreferences() {\r\n    const { preferences } = this.state\r\n    let count = 0\r\n    return marketingPreferences.map(item => {\r\n      if (this.checkIfRequired(item.value)) {\r\n        count++\r\n        return (\r\n          <PreferenceItem\r\n            key={item.value}\r\n            heading={item.heading}\r\n            label={item.label}\r\n            theme={`${count % 2 === 0 ? 'light' : 'dark'}`}\r\n            value={item.value}\r\n            checked={preferences[item.value]}\r\n            onChange={this.handlePreferenceChange}\r\n          />\r\n        )\r\n      } else {\r\n        return false\r\n      }\r\n    })\r\n  }\r\n\r\n  renderSuccessNote() {\r\n    return (\r\n      <div className=\"px-2 py-4 text-sm text-gray-light\">\r\n        {marketingSaveSuccessNote}\r\n      </div>\r\n    )\r\n  }\r\n\r\n  render() {\r\n    const { changesCount, saveSuccess } = this.props\r\n    return (\r\n      <React.Fragment>\r\n        <MarketingPreferenceHeader />\r\n        {this.state.preferences && this.renderMarketingPreferences()}\r\n        <SavePreferenceButton\r\n          onSave={this.handleSavePreference}\r\n          saveSuccess={saveSuccess}\r\n          disable={!changesCount}\r\n          label={\r\n            changesCount === 0\r\n              ? 'Save Preferences'\r\n              : `Click to save your preferences`\r\n          }\r\n        />\r\n        {this.renderSuccessNote()}\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\n\nexport default class CategoryIntro extends PureComponent {\n  render() {\n    return (\n      <React.Fragment>\n        <div className=\"px-3 pb-3 sm:px-8\">\n          <div className=\"text-cxl text-secondary font-semibold mb-2 sm:text-xl sm:mb-4\">\n            {this.props.heading}\n          </div>\n          {this.props.message && (\n            <p className=\"leading-normal text-base text-gray-light opacity-80 sm:leading-tight sm:text-lg\">\n              {this.props.message}\n            </p>\n          )}\n        </div>\n      </React.Fragment>\n    )\n  }\n}\n\nCategoryIntro.propTypes = {\n  heading: PropTypes.string.isRequired,\n  message: PropTypes.string,\n}\n","const clubPreferences = [\n  {\n    name: 'Baby Club',\n    heading: 'Baby Club',\n    subHeading: '',\n    label: `I am a member of Baby Club and receive personalised offers, exclusive content and money-off coupons.`,\n    note: '',\n    value: '1',\n    alertMessage: `By opting out of Baby Club, you’ll no longer receive personalised offers, exclusive\n      content or money-off coupons. Your Baby details will be removed. To opt back in, \n      please re-register via your Morrisons More account.`,\n  },\n  {\n    name: 'Christmas Savers',\n    heading: 'Christmas Savers',\n    subHeading: '',\n    label: `I am a member of the Christmas Savers Club and eligible to receive a Christmas Bonus.`,\n    note: `You can cancel your membership any time before 31st October.`,\n    value: '2',\n    alertMessage: `By opting out of Christmas Savers you will no longer be eligible for the Christmas Bonus. \n      To opt back in, please re-register via your Morrisons More account.`,\n  },\n  {\n    name: 'Students Club',\n    heading: 'Students Club',\n    subHeading: '(Requires an ac.uk email account to register)',\n    label: `I am a member of Students Club and receive \n      personalised offers, exclusive content and money-off coupons.`,\n    note: '',\n    value: '4',\n    alertMessage: `By opting out of Students Club, you’ll no longer receive personalised offers, \n      exclusive content or money-off coupons and your student details will be removed. \n      To opt back in, please re-register via your Morrisons More account.`,\n  },\n  {\n    name: 'NHS Club',\n    heading: 'NHS Club',\n    subHeading: '(Requires an nhs.uk or gov.nhs.uk email account to register)',\n    label: `I am a member of NHS Club and receive \n      personalised offers, exclusive content and money-off coupons.`,\n    note: '',\n    value: '5',\n    alertMessage: `By opting out of NHS Club, you’ll no longer receive personalised offers, \n      exclusive content or money-off coupons and your NHS details will be removed. \n      To opt back in, please re-register via your Morrisons More account.`,\n  },\n  {\n    name: 'Teachers Club',\n    heading: 'Teachers Club',\n    subHeading:\n      '(Requires an nursery, school or colleague email account to register)',\n    label: `I am a member of Teachers Club and receive \n      personalised offers, exclusive content and money-off coupons.`,\n    note: '',\n    value: '8',\n    alertMessage: `By opting out of Teachers Club, you’ll no longer receive personalised offers, \n      exclusive content or money-off coupons and your teacher details will be removed. \n      To opt back in, please re-register via your Morrisons More account.`,\n  },\n]\n\nexport default clubPreferences\n","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\n\nexport default class CustomAlert extends PureComponent {\n  render() {\n    return (\n      <div className=\"max-w-sm px-8 pt-10 bg-white text-gray-light rounded-md\">\n        {this.props.children}\n        <div className=\"py-6 flex justify-center\">\n          <button\n            className={`px-4 py-3 font-semibold font-sans text-base rounded-md inline-block bg-secondary \n              text-white hover:bg-secondary-dark `}\n            onClick={this.props.onClick}\n          >\n            Ok\n          </button>\n        </div>\n      </div>\n    )\n  }\n}\n\nCustomAlert.propTypes = {\n  alertMessage: PropTypes.string,\n  onClick: PropTypes.func.isRequired,\n}\n","import React, { Component } from 'react'\nimport { CategoryIntro } from '../../components/category-intro'\nimport { PreferenceItem } from '../../components/preference-item'\nimport clubPreferences from './clubPreferences'\nimport { CustomAlert } from '../../components/custom-alert'\n\nexport default class ClubPreference extends Component {\n  getAlertForClub = clubId => {\n    const changedClub = clubPreferences.find(item => item.value === clubId)\n    const header = [\n      <div key=\"alert-header\" className=\"font-semibold text-clg pb-4\">\n        {changedClub.name}\n      </div>,\n    ]\n    const alertMessage = [\n      <div\n        key=\"alert-message\"\n        className=\"prefcentre-clubs--alert-message pb-2 opacity-60 font-medium text-lg\"\n      >\n        {changedClub.alertMessage}\n      </div>,\n    ]\n    return header.concat(alertMessage)\n  }\n\n  handlePreferenceChange = (event, checked) => {\n    const value = event.target.value\n    let preferences\n    preferences = this.props.preferences.map(item =>\n      item.clubId === value ? { ...item, isMember: checked } : item\n    )\n    this.props.onChange('club', preferences)\n    if (checked === false) {\n      const modalChild = (\n        <CustomAlert onClick={this.props.closeModal}>\n          {this.getAlertForClub(value)}\n        </CustomAlert>\n      )\n      this.props.showCustomModal(modalChild)\n    }\n  }\n\n  getPreferenceCheckedStatus = value => {\n    const { preferences } = this.props\n    let preference = preferences.find(item => item.clubId === value)\n    return preference ? preference.isMember : false\n  }\n\n  checkIfRegisteredWithClub = clubId =>\n    this.props.preferencesBeforeUpdate.find(item => {\n      return item.clubId === clubId && item.isMember === true\n    })\n\n  hasAnyJoinedClub = () =>\n    this.props.preferencesBeforeUpdate.some(item => {\n      return item.isMember === true && item.clubId !== '0'\n    })\n\n  renderClubPreferences = () => {\n    const { preferences } = this.props\n    let count = 0\n    if (!preferences) return false\n    if (!this.hasAnyJoinedClub())\n      return (\n        <div class=\"flex justify-between items-center px-3 py-4 text-gray-light leading-normal sm:px-8 bg-body-lightest\">\n          <div class=\"font-semibold text-cxl sm:text-lg \">\n            You are currently not a member of any Morrisons More Clubs.\n          </div>\n        </div>\n      )\n    return clubPreferences.map(club => {\n      if (!this.checkIfRegisteredWithClub(club.value)) return null\n      else {\n        count++\n        return (\n          <React.Fragment key={club.value}>\n            <PreferenceItem\n              heading={club.name}\n              subHeading={''}\n              label={club.label}\n              note={club.note}\n              theme={count % 2 === 0 ? 'light' : 'dark'}\n              value={club.value}\n              checked={this.getPreferenceCheckedStatus(club.value)}\n              onChange={this.handlePreferenceChange}\n            />\n          </React.Fragment>\n        )\n      }\n    })\n  }\n\n  render() {\n    return (\n      <div className=\"prefcentre-more-club pt-10 sm:pt-12 sm:pb-4\">\n        <CategoryIntro heading=\"Your Club Preferences\" message=\"\" />\n        {this.renderClubPreferences()}\n      </div>\n    )\n  }\n}\n","import React, { Component } from 'react'\nimport { ClubPreference } from '../../components/club-preference'\nimport { SavePreferenceButton } from '../../components/save-preference-button'\nimport isEqual from 'lodash.isequal'\n\nexport default class MorePreference extends Component {\n  state = { preferences: null }\n\n  componentDidMount() {\n    this.props.setMenuIndex(1)\n    this.setState({\n      preferences: this.props.preferences,\n    })\n  }\n\n  componentDidUpdate() {\n    if (this.props.preferences) {\n      if (!this.showClubPreferences(this.props.preferences.clubPreferences)) {\n        setTimeout(() => this.props.history.push('/marketing'), 1000)\n      } else if (\n        !this.state.preferences ||\n        (this.props.saveSuccess && this.checkIfChanged())\n      ) {\n        this.setState({ preferences: { ...this.props.preferences } })\n      }\n    }\n  }\n\n  componentWillUnmount() {\n    if (this.props.saveSuccess) this.props.resetSavedStatus()\n    this.props.setChangesCount(0)\n    if (this.props.saveError) this.props.resetSaveErrorStatus()\n  }\n\n  checkIfChanged() {\n    return !isEqual(this.state.preferences, this.props.preferences)\n  }\n\n  handlePreferenceChange = (type, preference) => {\n    if (this.props.saveSuccess) return\n    let newPreferences\n    const prevPreferences = this.props.preferences\n    const prevClub = prevPreferences.clubPreferences\n    let changesCount = 0\n    this.setState(state => {\n      newPreferences = { ...state.preferences, clubPreferences: preference }\n\n      if (prevClub) {\n        prevClub.forEach(club => {\n          let currentClub = newPreferences.clubPreferences.find(\n            item => item.clubId === club.clubId\n          )\n          if (currentClub.isMember !== club.isMember) changesCount++\n        })\n      }\n      this.props.setChangesCount(changesCount)\n      return { preferences: newPreferences }\n    })\n    if (this.props.saveSuccess) this.props.resetSavedStatus()\n  }\n\n  handleSave = () => {\n    const { clubPreferences } = this.state.preferences\n    const preferencesToSave = clubPreferences\n      ? { clubPreference: clubPreferences }\n      : {}\n    this.props.onSave('more', preferencesToSave)\n  }\n\n  showClubPreferences = clubPreferences =>\n    clubPreferences && clubPreferences.length !== 0 ? true : false\n\n  render() {\n    const { preferences } = this.state\n    const { changesCount, saveSuccess } = this.props\n    return (\n      <React.Fragment>\n        {preferences &&\n          this.props.preferences &&\n          this.showClubPreferences(this.props.preferences.clubPreferences) && (\n            <ClubPreference\n              preferences={preferences.clubPreferences}\n              preferencesBeforeUpdate={this.props.preferences.clubPreferences}\n              onChange={this.handlePreferenceChange}\n              closeModal={this.props.closeModal}\n              showCustomModal={this.props.showCustomModal}\n            />\n          )}\n        <SavePreferenceButton\n          onSave={this.handleSave}\n          saveSuccess={saveSuccess}\n          disable={!changesCount}\n          label={\n            changesCount === 0\n              ? 'Save Preferences'\n              : `Click to save your preferences`\n          }\n        />\n      </React.Fragment>\n    )\n  }\n}\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { SavePreferenceButton } from '../../components/save-preference-button'\nimport { ConfirmationDialog } from '../../components/confirmation-dialog'\nimport { Modal } from '../../core-components/modal'\nexport default class DeleteAccount extends Component {\n  constructor(props) {\n    super(props)\n    this.state = { openConfirmationDialog: false }\n    this.handleClick = this.handleClick.bind(this)\n    this.deleteAccount = this.deleteAccount.bind(this)\n  }\n\n  componentDidMount() {\n    this.props.setMenuIndex(this.props.menuIndex)\n  }\n\n  componentDidUpdate(prevProp) {\n    if (prevProp.menuIndex !== this.props.menuIndex) {\n      this.props.setMenuIndex(this.props.menuIndex)\n    }\n  }\n\n  deleteAccount(confirmation) {\n    this.setState(state => {\n      return { ...state, openConfirmationDialog: false }\n    })\n    if (confirmation === 'yes') {\n      this.props.onDeleteAccount()\n    }\n  }\n\n  handleClick() {\n    this.setState({ openConfirmationDialog: true })\n  }\n\n  render() {\n    const {\n      label1,\n      label2,\n      heading,\n      yesLabel,\n      listData,\n      disableDelete,\n    } = this.props\n    const listItems = listData.map(value => {\n      return <li className=\"mb-2\">{value}</li>\n    })\n    return (\n      <React.Fragment>\n        <div className=\"w-full p-4 md:p-0\">\n          <div className=\"w-full p-6 bg-white rounded-md text-gray-light\">\n            <div className=\"mb-2\">\n              <h2 className=\"text-xl font-semibold text-secondary\">\n                {heading}\n              </h2>\n            </div>\n            <div>\n              <div className=\"mb-4 text-lg font-medium leading-tight opacity-60\">\n                {label1}\n              </div>\n              <ul className=\"pl-2 m-2 mb-6 text-base font-semibold text-gray-500 list-disc list-outside opacity-70\">\n                {listItems}\n              </ul>\n              <div className=\"mb-6 text-lg font-medium leading-tight opacity-60\">\n                {label2}\n              </div>\n            </div>\n          </div>\n        </div>\n        <SavePreferenceButton\n          disable={disableDelete}\n          onSave={this.handleClick}\n          label={yesLabel}\n        />\n        <Modal open={this.state.openConfirmationDialog}>\n          <ConfirmationDialog\n            label={'Once you click yes, this cannot be reversed'}\n            heading={'Are you sure you want to delete your Morrisons Account?'}\n            yesLabel=\"Yes\"\n            noLabel=\"No\"\n            onConfirmation={this.deleteAccount}\n          />\n        </Modal>\n      </React.Fragment>\n    )\n  }\n}\n\nDeleteAccount.propTypes = {\n  heading: PropTypes.string,\n  label1: PropTypes.string,\n  label2: PropTypes.string,\n  listData: PropTypes.array,\n  yesLabel: PropTypes.string,\n}\n\nDeleteAccount.defaultProps = {\n  heading: 'Delete Account',\n  label1:\n    'We’re sorry to see you go! Just to note, once we close your account and erase your data you’ll no longer be able to:',\n  label2:\n    'Still want to erase your account? No problem, click below to erase your account. We’ll automatically log you out and your request will be processed within the next 28 days.',\n  listData: [\n    'Shop online via Morrisons.com.',\n    'Use your Morrisons More card in-store or online.',\n    'Receive vouchers, offers or coupons as your Morrisons More card account will be removed.',\n    'Find any information about you in the system as your account will be removed.',\n  ],\n  yesLabel: 'Yes, delete my account',\n}\n","import React, { PureComponent } from 'react'\n\nexport default class HomeLayout extends PureComponent {\n  render() {\n    return (\n      <div className=\"prefcentre-layout prefcentre-layout--flex-1 flex flex-col sm:flex-row\">\n        {this.props.children}\n      </div>\n    )\n  }\n}\n","import React, { PureComponent } from 'react'\n\nexport default class HomeContentLayout extends PureComponent {\n  render() {\n    return (\n      <div className=\"prefcentre-content-layout w-full mb-20 sm:flex-1 sm:w-auto sm:pl-6 sm:pr-8 lg:pl-16 lg:pr-20 sm:mb-28\">\n        {this.props.children}\n      </div>\n    )\n  }\n}\n","import React, { PureComponent } from 'react'\r\nimport { Route, Redirect } from 'react-router-dom'\r\nimport { Header } from '../../components/header'\r\nimport { Welcome } from '../../components/welcome'\r\nimport { Menu } from '../../components/menu'\r\nimport { DropDownMenu } from '../../components/dropdown-menu'\r\nimport { PreLoader } from '../../components/pre-loader'\r\nimport { ErrorComponent } from '../../components/error-component'\r\nimport { MarketingPreference } from '../marketing-preference'\r\nimport { MorePreference } from '../more-preference'\r\nimport { DeleteAccount } from '../delete-account'\r\nimport HomeLayout from './HomeLayout'\r\nimport HomeContentLayout from './HomeContentLayout'\r\nimport { fetchErrorMessage, promptMessage, welcomeMessage } from '../../config'\r\nimport { Prompt } from 'react-router-dom'\r\nimport { Modal } from '../../core-components/modal'\r\nimport { CustomAlert } from '../../components/custom-alert'\r\nimport { API } from 'aws-amplify'\r\nexport default class Home extends PureComponent {\r\n  state = {\r\n    menuIndex: 0,\r\n    isModalOpen: false,\r\n    modalChild: null,\r\n    isAcocuntDeleting: false,\r\n    disableDeleteAccount: false,\r\n  }\r\n\r\n  componentDidMount() {\r\n    this.props.fetchPreference()\r\n  }\r\n\r\n  setMenuIndex = menuIndex =>\r\n    this.setState(state => {\r\n      return {\r\n        ...state,\r\n        menuIndex,\r\n      }\r\n    })\r\n\r\n  handleLogOut = () => {\r\n    this.props.logOutUser()\r\n  }\r\n\r\n  handleHeaderClick = () => {\r\n    this.props.history.push('/marketing')\r\n  }\r\n\r\n  savePreference = (type, preference) => {\r\n    const { preferences } = this.props\r\n    let mergedPreferences\r\n    if (type === 'marketingPreferences') {\r\n      mergedPreferences = {\r\n        ...preferences,\r\n        marketingPreferences: {\r\n          ...preferences.marketingPreferences,\r\n          ...preference,\r\n        },\r\n      }\r\n    } else {\r\n      mergedPreferences = {\r\n        ...preferences,\r\n        morrisonsClubs: [...preference.clubPreference],\r\n      }\r\n    }\r\n\r\n    return this.props\r\n      .savePreference({\r\n        ...this.props.preferences,\r\n        ...mergedPreferences,\r\n      })\r\n      .then(() => {\r\n        setTimeout(() => {\r\n          this.props.resetSavedStatus()\r\n          this.props.setChangesCount(0)\r\n        }, 1000)\r\n        return Promise.resolve()\r\n      })\r\n      .catch(error => {\r\n        if (\r\n          error &&\r\n          error.response &&\r\n          error.response.data &&\r\n          (error.response.data.errorCode === '401.01.005' ||\r\n            error.response.data.errorCode === '400.04.003')\r\n        ) {\r\n          return\r\n        }\r\n        const modalChild = (\r\n          <CustomAlert onClick={this.closeSaveErrorModal}>\r\n            <div className=\"pb-4 text-error\">\r\n              Your preferences have not been saved. Please try again later.\r\n            </div>\r\n          </CustomAlert>\r\n        )\r\n        this.setState(state => {\r\n          return {\r\n            ...state,\r\n            isModalOpen: true,\r\n            modalChild,\r\n          }\r\n        })\r\n        return Promise.reject()\r\n      })\r\n  }\r\n\r\n  deleteAccount() {\r\n    const body = {\r\n      customerNumber: this.props.currentUser,\r\n    }\r\n    this.setState(state => {\r\n      return { ...state, isAcocuntDeleting: true }\r\n    })\r\n    API.del('DeleteAccountAPI', '/deleteaccount', { body })\r\n      .then(response => {\r\n        const modalChild = (\r\n          <CustomAlert onClick={this.closeSaveErrorModal}>\r\n            <div className=\"font-semibold text-clg\">\r\n              We’re taking care of it...\r\n            </div>\r\n            <div className=\"pt-2 pb-2 opacity-60 font-medium text-lg\">\r\n              Your request will be processed within the next 28 days\r\n            </div>\r\n          </CustomAlert>\r\n        )\r\n        this.setState(state => {\r\n          return {\r\n            ...state,\r\n            isModalOpen: true,\r\n            modalChild,\r\n            isAcocuntDeleting: false,\r\n            disableDeleteAccount: true,\r\n          }\r\n        })\r\n      })\r\n      .catch(error => {\r\n        console.log(error)\r\n        const errorMSG = 'Something went wrong! Please try again'\r\n        const modalChild = (\r\n          <CustomAlert onClick={this.closeSaveErrorModal}>\r\n            <div className=\"pb-4 text-error\">{errorMSG}</div>\r\n          </CustomAlert>\r\n        )\r\n        this.setState(state => {\r\n          return {\r\n            ...state,\r\n            isModalOpen: true,\r\n            modalChild,\r\n            isAcocuntDeleting: false,\r\n          }\r\n        })\r\n      })\r\n  }\r\n\r\n  checkIfMorePreferencesDefined(morePreferences) {\r\n    if (!morePreferences) return false\r\n    const { clubPreferences } = morePreferences\r\n    return clubPreferences && clubPreferences.length ? true : false\r\n  }\r\n\r\n  closeModal = () => {\r\n    this.setState(state => {\r\n      return { ...state, isModalOpen: false }\r\n    })\r\n  }\r\n\r\n  closeSaveErrorModal = () => {\r\n    this.props.resetSaveErrorStatus()\r\n    this.closeModal()\r\n  }\r\n\r\n  showCustomModal = modalChild => {\r\n    this.setState(state => {\r\n      return { ...state, isModalOpen: true, modalChild }\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      match: { path },\r\n      preferences,\r\n    } = this.props\r\n    const newProps = {\r\n      setMenuIndex: this.setMenuIndex,\r\n      onSave: this.savePreference,\r\n      saveSuccess: preferences.saveSuccess,\r\n      saveError: preferences.saveError,\r\n      changesCount: preferences.changesCount,\r\n      resetSavedStatus: this.props.resetSavedStatus,\r\n      resetSaveErrorStatus: this.props.resetSaveErrorStatus,\r\n      setChangesCount: this.props.setChangesCount,\r\n      closeModal: this.closeModal,\r\n      showCustomModal: this.showCustomModal,\r\n    }\r\n    const delAccountProps = {\r\n      setMenuIndex: this.setMenuIndex,\r\n      closeModal: this.closeModal,\r\n      showCustomModal: this.showCustomModal,\r\n      onDeleteAccount: this.deleteAccount.bind(this),\r\n    }\r\n    let morePreferences, clubPreferences, marketingPreferences\r\n    if (preferences.marketingPreferences || preferences.morrisonsClubs) {\r\n      const {\r\n        groceryOnlineCoupons,\r\n        pushNotifications,\r\n        digitalAndCouponsOptIn,\r\n        ...rest\r\n      } = preferences.marketingPreferences\r\n      clubPreferences = preferences.morrisonsClubs\r\n      morePreferences = { clubPreferences }\r\n      marketingPreferences = rest\r\n    }\r\n    return (\r\n      <div className=\"prefcentre-home min-h-full flex flex-col\">\r\n        <Modal open={this.state.isModalOpen}>{this.state.modalChild}</Modal>\r\n        <Header\r\n          showLogout\r\n          onLogOut={this.handleLogOut}\r\n          onHeaderClick={this.handleHeaderClick}\r\n        />\r\n        <Welcome\r\n          name={this.props.userDetails.firstName}\r\n          message={welcomeMessage}\r\n        />\r\n        <HomeLayout>\r\n          <Menu\r\n            selectedItem={this.state.menuIndex}\r\n            showMoreTab={this.checkIfMorePreferencesDefined(morePreferences)}\r\n          />\r\n          <DropDownMenu\r\n            selectedItem={this.state.menuIndex}\r\n            showMoreTab={this.checkIfMorePreferencesDefined(morePreferences)}\r\n          />\r\n          <PreLoader\r\n            show={\r\n              preferences.isFetching ||\r\n              preferences.isSaving ||\r\n              this.state.isAcocuntDeleting\r\n            }\r\n          />\r\n          {preferences.fetchError ? (\r\n            <ErrorComponent errorMessage={fetchErrorMessage} />\r\n          ) : (\r\n            <HomeContentLayout>\r\n              <Route\r\n                exact\r\n                path={path}\r\n                render={() => <Redirect to={`/marketing`} />}\r\n              />\r\n              <Route\r\n                path={`/marketing`}\r\n                render={props => (\r\n                  <MarketingPreference\r\n                    {...props}\r\n                    preferences={marketingPreferences}\r\n                    {...newProps}\r\n                  />\r\n                )}\r\n              />\r\n              <Route\r\n                path={`/more`}\r\n                render={props => (\r\n                  <MorePreference\r\n                    {...props}\r\n                    preferences={morePreferences}\r\n                    {...newProps}\r\n                  />\r\n                )}\r\n              />\r\n              <Route\r\n                path={`/delete-account`}\r\n                render={props => (\r\n                  <DeleteAccount\r\n                    {...props}\r\n                    {...delAccountProps}\r\n                    menuIndex={\r\n                      this.checkIfMorePreferencesDefined(morePreferences)\r\n                        ? 2\r\n                        : 1\r\n                    }\r\n                    disableDelete={this.state.disableDeleteAccount}\r\n                  />\r\n                )}\r\n              />\r\n            </HomeContentLayout>\r\n          )}\r\n        </HomeLayout>\r\n        <Prompt\r\n          when={Boolean(preferences.changesCount) && !preferences.saveSuccess}\r\n          message={promptMessage}\r\n        />\r\n      </div>\r\n    )\r\n  }\r\n}\r\n","import React, { Component } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { Home } from '../../pages/home'\r\nimport {\r\n  fetchPreference,\r\n  savePreference,\r\n  resetSavedStatus,\r\n  setChangesCount,\r\n  resetSaveErrorStatus,\r\n  logOutUser,\r\n} from '../../redux/actions'\r\n\r\nclass HomeContainer extends Component {\r\n  render() {\r\n    return (\r\n      <React.Fragment>\r\n        <Home {...this.props} />\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = ({ preferences, userDetails }) => ({\r\n  preferences,\r\n  userDetails,\r\n})\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n  fetchPreference: () => dispatch(fetchPreference()),\r\n  savePreference: preference => {\r\n    return dispatch(savePreference(preference))\r\n  },\r\n  resetSavedStatus: () => dispatch(resetSavedStatus()),\r\n  resetSaveErrorStatus: () => dispatch(resetSaveErrorStatus()),\r\n  setChangesCount: status => dispatch(setChangesCount(status)),\r\n  logOutUser: () => dispatch(logOutUser()),\r\n})\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  mapDispatchToProps\r\n)(HomeContainer)\r\n","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\nimport { Modal } from '../../core-components/modal'\nimport { ConfirmationDialog } from '../../components/confirmation-dialog'\n\nexport default class CustomPrompt extends PureComponent {\n  state = { isOpen: true }\n\n  componentDidUpdate(props, state) {\n    if (!state.isOpen) this.setState({ isOpen: true })\n  }\n\n  handleConfirmationDialogClick = confirmation => {\n    if (confirmation === 'yes') {\n      this.props.callback(true)\n      this.setState({\n        isOpen: false,\n      })\n    } else {\n      this.props.callback(false)\n      this.setState({\n        isOpen: false,\n      })\n    }\n  }\n\n  render() {\n    return (\n      <Modal open={this.state.isOpen}>\n        <ConfirmationDialog\n          label={this.props.message}\n          heading={this.props.heading}\n          yesLabel=\"Yes\"\n          noLabel=\"No\"\n          onConfirmation={this.handleConfirmationDialogClick}\n        />\n      </Modal>\n    )\n  }\n}\n\nCustomPrompt.propTypes = {\n  message: PropTypes.string,\n  callback: PropTypes.func.isRequired,\n}\n\nCustomPrompt.defaultProps = {\n  heading: 'You have unsaved changes.',\n  message:\n    'Your changes will not be saved if you leave the page. Do you want to continue?',\n}\n","import React, { PureComponent } from 'react'\nimport { Modal } from '../../core-components/modal'\n\nexport default class Timeout extends PureComponent {\n  componentDidMount() {\n    setTimeout(() => window.location.replace('#login'), 1000)\n  }\n\n  render() {\n    return (\n      <Modal open>\n        <div className=\"px-4 py-16 bg-white text-gray-light rounded-t rounded-b\">\n          Your session has expired, please login to continue.\n        </div>\n      </Modal>\n    )\n  }\n}\n","import React from 'react'\r\nimport ReactDOM from 'react-dom'\r\nimport { Route, Switch, HashRouter as Router } from 'react-router-dom'\r\nimport { LoginContainer } from '../containers/login'\r\nimport authorizeRoute from './authorize-route'\r\nimport { HomeContainer } from '../containers/home'\r\nimport { CustomPrompt } from '../components/custom-prompt'\r\nimport { Timeout } from '../pages/timeout'\r\n\r\nconst Routes = () => (\r\n  <Router\r\n    hashType=\"noslash\"\r\n    getUserConfirmation={(message, callback) => {\r\n      ReactDOM.render(\r\n        <CustomPrompt message={message} callback={callback} />,\r\n        document.getElementById('prefcentre-prompt-modal')\r\n      )\r\n    }}\r\n  >\r\n    <Switch>\r\n      <Route path=\"/login\" component={LoginContainer} />\r\n      <Route path=\"/time-out\" component={Timeout} />\r\n      <Route path=\"/\" component={authorizeRoute(HomeContainer)} />\r\n    </Switch>\r\n  </Router>\r\n)\r\n\r\nexport default Routes\r\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { Routes } from '../../routes'\nimport 'array.find.polyfill'\nimport 'object.assign.polyfill'\n\nclass App extends Component {\n  render() {\n    return (\n      <div className=\"preference-app h-full\">\n        <Routes />\n      </div>\n    )\n  }\n}\n\nApp.propTypes = {\n  loginUser: PropTypes.func,\n}\n\nexport default App\n","import { createBrowserHistory } from 'history'\n\nexport default createBrowserHistory()\n","/**\n *  Light Theme is the default theme used in material-ui. It is guaranteed to\n *  have all theme variables needed for every component. Variables not defined\n *  in a custom theme will default to these values.\n */\nconst theme = {\n  typography: {\n    useNextVariants: true,\n  },\n  palette: {\n    primary: {\n      light: 'rgb(0, 78, 55, .5)',\n      main: '#004e37',\n      dark: '#004330',\n      contrastText: '#fff',\n    },\n    secondary: {\n      main: '#fcbc00',\n    },\n    error: {\n      main: '#d0021b',\n    },\n  },\n}\nexport default theme\n","import {\n  LOGIN_USER_REQUEST,\n  LOGIN_USER_SUCCESS,\n  LOGIN_USER_FAILURE,\n  LOGIN_USER_ERROR_RESET,\n} from '../actions'\nimport { SessionService } from '../../service'\n\nconst initialState = {\n  customerNumber: '',\n  access_token: SessionService.fetchItem('access_token'),\n  isLoggingIn: false,\n  loginError: null,\n}\n\nconst userDetails = (state = initialState, action) => {\n  switch (action.type) {\n    case LOGIN_USER_REQUEST: {\n      return { ...state, loginError: null, isLoggingIn: true }\n    }\n    case LOGIN_USER_SUCCESS: {\n      return {\n        ...state,\n        loginError: null,\n        isLoggingIn: false,\n        ...action.payload.userDetails,\n      }\n    }\n    case LOGIN_USER_FAILURE: {\n      return {\n        ...state,\n        loginError: action.payload.error,\n        isLoggingIn: false,\n        customerNumber: '',\n      }\n    }\n    case LOGIN_USER_ERROR_RESET: {\n      return { ...state, loginError: null }\n    }\n    default: {\n      return state\n    }\n  }\n}\n\nexport default userDetails\n","import {\r\n  FETCH_PREFERENCE_REQUEST,\r\n  FETCH_PREFERENCE_SUCCESS,\r\n  FETCH_PREFERENCE_FAILURE,\r\n  SAVE_PREFERENCE_REQUEST,\r\n  SAVE_PREFERENCE_SUCCESS,\r\n  SAVE_PREFERENCE_FAILURE,\r\n  SAVE_PREFERENCE_SUCCESS_STATUS_RESET,\r\n  SET_CHANGES_COUNT,\r\n  SAVE_PREFERENCE_ERROR_STATUS_RESET,\r\n} from '../actions'\r\n\r\nconst initialState = {\r\n  isFetching: false,\r\n  fetchError: false,\r\n  isSaving: false,\r\n  saveError: false,\r\n  saveSuccess: false,\r\n  changesCount: 0,\r\n}\r\n\r\nconst preferences = (state = initialState, action) => {\r\n  switch (action.type) {\r\n    case FETCH_PREFERENCE_REQUEST:\r\n      return { ...state, isFetching: true, fetchError: false }\r\n    case FETCH_PREFERENCE_SUCCESS:\r\n      return {\r\n        ...state,\r\n        ...action.payload.preference,\r\n        isFetching: false,\r\n        fetchError: false,\r\n      }\r\n    case FETCH_PREFERENCE_FAILURE:\r\n      return {\r\n        ...state,\r\n        marketingPreferences: null,\r\n        morrisonsClubs: null,\r\n        isFetching: false,\r\n        fetchError: true,\r\n      }\r\n    case SAVE_PREFERENCE_REQUEST:\r\n      return {\r\n        ...state,\r\n        isSaving: true,\r\n        saveError: false,\r\n        saveSuccess: false,\r\n      }\r\n    case SAVE_PREFERENCE_SUCCESS:\r\n      return {\r\n        ...state,\r\n        ...action.payload.preference,\r\n        isSaving: false,\r\n        saveError: false,\r\n        saveSuccess: true,\r\n      }\r\n    case SAVE_PREFERENCE_FAILURE:\r\n      return {\r\n        ...state,\r\n        isSaving: false,\r\n        saveError: true,\r\n        saveSuccess: false,\r\n      }\r\n    case SAVE_PREFERENCE_SUCCESS_STATUS_RESET:\r\n      return { ...state, saveSuccess: false }\r\n    case SAVE_PREFERENCE_ERROR_STATUS_RESET:\r\n      return { ...state, saveError: false }\r\n    case SET_CHANGES_COUNT:\r\n      return { ...state, changesCount: action.payload.count }\r\n    default:\r\n      return state\r\n  }\r\n}\r\n\r\nexport default preferences\r\n","import { combineReducers } from 'redux'\nimport userDetails from './userDetails'\nimport preferences from './Preferences'\n\nconst appReducer = combineReducers({\n  userDetails,\n  preferences,\n})\n\nconst rootReducer = (state, action) => {\n  if (action.type === 'RESET_APP_STATE') {\n    state = undefined\n  }\n\n  return appReducer(state, action)\n}\n\nexport default rootReducer\n","import { createStore, applyMiddleware } from 'redux'\nimport thunk from 'redux-thunk'\nimport { createLogger } from 'redux-logger'\nimport rootReducer from './reducers'\n\nconst middleware = [thunk]\nif (process.env.NODE_ENV === 'development') {\n  middleware.push(createLogger())\n}\n\nexport default createStore(rootReducer, applyMiddleware(...middleware))\n","// This optional code is used to register a service worker.\n// register() is not called by default.\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 subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA\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 function register(config) {\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href)\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/facebook/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. Let's check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl, config)\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            'This web app is being served cache-first by a service ' +\n              'worker. To learn more, visit http://bit.ly/CRA-PWA'\n          )\n        })\n      } else {\n        // Is not localhost. Just register service worker\n        registerValidSW(swUrl, config)\n      }\n    })\n  }\n}\n\nfunction registerValidSW(swUrl, config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing\n        if (installingWorker == null) {\n          return\n        }\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === 'installed') {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                'New content is available and will be used when all ' +\n                  'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n              )\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration)\n              }\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              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration)\n              }\n            }\n          }\n        }\n      }\n    })\n    .catch(error => {\n      console.error('Error during service worker registration:', error)\n    })\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\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 (\n        response.status === 404 ||\n        (contentType != null && contentType.indexOf('javascript') === -1)\n      ) {\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, config)\n      }\n    })\n    .catch(() => {\n      console.log(\n        'No internet connection found. App is running in offline mode.'\n      )\n    })\n}\n\nexport function unregister() {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready.then(registration => {\n      registration.unregister()\n    })\n  }\n}\n","/* eslint-disable */\n// WARNING: DO NOT EDIT. This file is automatically generated by AWS Amplify. It will be overwritten.\n\nconst awsmobile = {\n    \"aws_project_region\": \"eu-west-1\",\n    \"aws_cloud_logic_custom\": [\n        {\n            \"name\": \"DeleteAccountAPI\",\n            \"endpoint\": \"https://naewb2g92j.execute-api.eu-west-1.amazonaws.com/prod\",\n            \"region\": \"eu-west-1\"\n        }\n    ]\n};\n\n\nexport default awsmobile;\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport { Provider } from 'react-redux'\nimport { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles'\nimport { morrisonsTheme } from './components/app'\nimport store from './redux/store'\nimport './morrisons.css'\nimport { App } from './components/app'\nimport * as serviceWorker from './serviceWorker'\nimport { Amplify } from 'aws-amplify'\nimport awsExports from './aws-exports'\n\nAmplify.configure(awsExports)\n\nconst theme = createMuiTheme(morrisonsTheme)\n\nReactDOM.render(\n  <MuiThemeProvider theme={theme}>\n    <Provider store={store}>\n      <App />\n    </Provider>\n  </MuiThemeProvider>,\n  document.getElementById('root')\n)\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: http://bit.ly/CRA-PWA\nserviceWorker.unregister()\n"],"sourceRoot":""}