Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
'use strict';

var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property');
var _Object$defineProperties = require('@babel/runtime-corejs3/core-js-stable/object/define-properties');
var _Object$getOwnPropertyDescriptors = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors');
var _forEachInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/for-each');
var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor');
var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/filter');
var _Object$getOwnPropertySymbols = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
var _Object$keys = require('@babel/runtime-corejs3/core-js-stable/object/keys');
var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
var _Object$assign = require('@babel/runtime-corejs3/core-js-stable/object/assign');
var _indexOfInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/index-of');
var _reduceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/reduce');
var _concatInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/concat');
var _spliceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/splice');
var _JSON$stringify = require('@babel/runtime-corejs3/core-js-stable/json/stringify');
var _toConsumableArray = require('@babel/runtime-corejs3/helpers/toConsumableArray');
var _regeneratorRuntime = require('@babel/runtime-corejs3/regenerator');
var effects = require('redux-saga/effects');
var geolocation = require('@doodle/geolocation');
require('fetch-everywhere');
var _includesInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/includes');
var _findInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/find');
var _someInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/some');
var _setInterval = require('@babel/runtime-corejs3/core-js-stable/set-interval');
var _setTimeout = require('@babel/runtime-corejs3/core-js-stable/set-timeout');
var _Promise = require('@babel/runtime-corejs3/core-js-stable/promise');
var tagmanager = require('@doodle/tagmanager');
var reactRedux = require('react-redux');
var components = require('@doodle/components');
var _Reflect$construct = require('@babel/runtime-corejs3/core-js-stable/reflect/construct');
var _extends = require('@babel/runtime-corejs3/helpers/extends');
var _classCallCheck = require('@babel/runtime-corejs3/helpers/classCallCheck');
var _createClass = require('@babel/runtime-corejs3/helpers/createClass');
var _inherits = require('@babel/runtime-corejs3/helpers/inherits');
var _possibleConstructorReturn = require('@babel/runtime-corejs3/helpers/possibleConstructorReturn');
var _getPrototypeOf = require('@babel/runtime-corejs3/helpers/getPrototypeOf');
var React = require('react');
var PropTypes = require('prop-types');
var reactIntl = require('react-intl');

function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }

var _Object$defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_Object$defineProperty);
var _Object$defineProperties__default = /*#__PURE__*/_interopDefaultLegacy(_Object$defineProperties);
var _Object$getOwnPropertyDescriptors__default = /*#__PURE__*/_interopDefaultLegacy(_Object$getOwnPropertyDescriptors);
var _forEachInstanceProperty__default = /*#__PURE__*/_interopDefaultLegacy(_forEachInstanceProperty);
var _Object$getOwnPropertyDescriptor__default = /*#__PURE__*/_interopDefaultLegacy(_Object$getOwnPropertyDescriptor);
var _filterInstanceProperty__default = /*#__PURE__*/_interopDefaultLegacy(_filterInstanceProperty);
var _Object$getOwnPropertySymbols__default = /*#__PURE__*/_interopDefaultLegacy(_Object$getOwnPropertySymbols);
var _Object$keys__default = /*#__PURE__*/_interopDefaultLegacy(_Object$keys);
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
var _Object$assign__default = /*#__PURE__*/_interopDefaultLegacy(_Object$assign);
var _indexOfInstanceProperty__default = /*#__PURE__*/_interopDefaultLegacy(_indexOfInstanceProperty);
var _reduceInstanceProperty__default = /*#__PURE__*/_interopDefaultLegacy(_reduceInstanceProperty);
var _concatInstanceProperty__default = /*#__PURE__*/_interopDefaultLegacy(_concatInstanceProperty);
var _spliceInstanceProperty__default = /*#__PURE__*/_interopDefaultLegacy(_spliceInstanceProperty);
var _JSON$stringify__default = /*#__PURE__*/_interopDefaultLegacy(_JSON$stringify);
var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultLegacy(_regeneratorRuntime);
var _includesInstanceProperty__default = /*#__PURE__*/_interopDefaultLegacy(_includesInstanceProperty);
var _findInstanceProperty__default = /*#__PURE__*/_interopDefaultLegacy(_findInstanceProperty);
var _someInstanceProperty__default = /*#__PURE__*/_interopDefaultLegacy(_someInstanceProperty);
var _setInterval__default = /*#__PURE__*/_interopDefaultLegacy(_setInterval);
var _setTimeout__default = /*#__PURE__*/_interopDefaultLegacy(_setTimeout);
var _Promise__default = /*#__PURE__*/_interopDefaultLegacy(_Promise);
var _Reflect$construct__default = /*#__PURE__*/_interopDefaultLegacy(_Reflect$construct);
var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends);
var _classCallCheck__default = /*#__PURE__*/_interopDefaultLegacy(_classCallCheck);
var _createClass__default = /*#__PURE__*/_interopDefaultLegacy(_createClass);
var _inherits__default = /*#__PURE__*/_interopDefaultLegacy(_inherits);
var _possibleConstructorReturn__default = /*#__PURE__*/_interopDefaultLegacy(_possibleConstructorReturn);
var _getPrototypeOf__default = /*#__PURE__*/_interopDefaultLegacy(_getPrototypeOf);
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);

var ActionTypes = {
  LOAD_USER: '@doodle/user/LOAD_USER',
  USER_LOADED: '@doodle/user/USER_LOADED',
  USER_LOAD_FAILED: '@doodle/user/USER_LOAD_FAILED',
  LOAD_THEME: '@doodle/user/LOAD_THEME',
  LOAD_THEME_SUCCESS: '@doodle/user/LOAD_THEME_SUCCESS',
  LOAD_THEME_ERROR: '@doodle/user/LOAD_THEME_ERROR',
  LOAD_BRANDING: '@doodle/user/LOAD_BRANDING',
  LOAD_BRANDING_SUCCESS: '@doodle/user/LOAD_BRANDING_SUCCESS',
  LOAD_BRANDING_ERROR: '@doodle/user/LOAD_BRANDING_ERROR',
  REDIRECT_TO_LOGIN: '@doodle/user/REDIRECT_TO_LOGIN',
  REDIRECT_TO_LOGOUT: '@doodle/user/REDIRECT_TO_LOGOUT',
  REDIRECT_TO_SIGNUP: '@doodle/user/REDIRECT_TO_SIGNUP',
  LOGOUT: '@doodle/user/LOGOUT',
  LOGOUT_FINISHED: '@doodle/LOGOUT_FINISHED',
  RESEND_ACTIVATIONMAIL: '@doodle/user/RESEND_ACTIVATIONMAIL',
  RESEND_ACTIVATIONMAIL_SUCCEEDED: '@doodle/user/RESEND_ACTIVATIONMAIL_SUCCEEDED',
  RESEND_ACTIVATIONMAIL_ENABLED: '@doodle/user/RESEND_ACTIVATIONMAIL_ENABLED',
  RESEND_ACTIVATIONMAIL_FAILED: '@doodle/user/RESEND_ACTIVATIONMAIL_FAILED'
};
var loadUser = function loadUser(authToken) {
  return {
    type: ActionTypes.LOAD_USER,
    authToken: authToken
  };
};
var userLoaded = function userLoaded(user) {
  return {
    type: ActionTypes.USER_LOADED,
    user: user
  };
};
var userLoadFailed = function userLoadFailed(error) {
  return {
    type: ActionTypes.USER_LOAD_FAILED,
    error: error
  };
};
var loadTheme = function loadTheme(authToken) {
  return {
    type: ActionTypes.LOAD_THEME,
    authToken: authToken
  };
};
var loadThemeSuccess = function loadThemeSuccess(theme) {
  return {
    type: ActionTypes.LOAD_THEME_SUCCESS,
    theme: theme
  };
};
var loadThemeError = function loadThemeError(error) {
  return {
    type: ActionTypes.LOAD_THEME_ERROR,
    error: error
  };
};
var loadBranding = function loadBranding(authToken) {
  return {
    type: ActionTypes.LOAD_BRANDING,
    authToken: authToken
  };
};
var loadBrandingSuccess = function loadBrandingSuccess(branding) {
  return {
    type: ActionTypes.LOAD_BRANDING_SUCCESS,
    branding: branding
  };
};
var loadBrandingError = function loadBrandingError(error) {
  return {
    type: ActionTypes.LOAD_BRANDING_ERROR,
    error: error
  };
};
var redirectToLogin = function redirectToLogin(redirectUrl) {
  return {
    type: ActionTypes.REDIRECT_TO_LOGIN,
    redirectUrl: redirectUrl
  };
};
var redirectToLogout = function redirectToLogout() {
  return {
    type: ActionTypes.REDIRECT_TO_LOGOUT
  };
};
var redirectToSignup = function redirectToSignup(redirectUrl) {
  return {
    type: ActionTypes.REDIRECT_TO_SIGNUP,
    redirectUrl: redirectUrl
  };
};
var logout = function logout() {
  return {
    type: ActionTypes.LOGOUT
  };
};
var logoutFinished = function logoutFinished() {
  return {
    type: ActionTypes.LOGOUT_FINISHED
  };
};
var resendActivationMail = function resendActivationMail() {
  return {
    type: ActionTypes.RESEND_ACTIVATIONMAIL
  };
};
var resendActivationMailSucceeded = function resendActivationMailSucceeded() {
  return {
    type: ActionTypes.RESEND_ACTIVATIONMAIL_SUCCEEDED
  };
};
var resendActivationEnabled = function resendActivationEnabled() {
  return {
    type: ActionTypes.RESEND_ACTIVATIONMAIL_ENABLED
  };
};
var resendActivationMailFailed = function resendActivationMailFailed() {
  return {
    type: ActionTypes.RESEND_ACTIVATIONMAIL_FAILED
  };
};

var actions = /*#__PURE__*/Object.freeze({
  __proto__: null,
  ActionTypes: ActionTypes,
  loadUser: loadUser,
  userLoaded: userLoaded,
  userLoadFailed: userLoadFailed,
  loadTheme: loadTheme,
  loadThemeSuccess: loadThemeSuccess,
  loadThemeError: loadThemeError,
  loadBranding: loadBranding,
  loadBrandingSuccess: loadBrandingSuccess,
  loadBrandingError: loadBrandingError,
  redirectToLogin: redirectToLogin,
  redirectToLogout: redirectToLogout,
  redirectToSignup: redirectToSignup,
  logout: logout,
  logoutFinished: logoutFinished,
  resendActivationMail: resendActivationMail,
  resendActivationMailSucceeded: resendActivationMailSucceeded,
  resendActivationEnabled: resendActivationEnabled,
  resendActivationMailFailed: resendActivationMailFailed
});

function ownKeys(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context; _forEachInstanceProperty__default['default'](_context = ownKeys(Object(source), true)).call(_context, function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context2; _forEachInstanceProperty__default['default'](_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }

var SettingsActionTypes = {
  DELETE_THIRD_PARTY: '@doodle/user/settings/DELETE_THIRD_PARTY',
  DELETE_THIRD_PARTY_SUCCESS: '@doodle/user/settings/DELETE_THIRD_PARTY_SUCCESS',
  DELETE_THIRD_PARTY_ERROR: '@doodle/user/settings/DELETE_THIRD_PARTY_ERROR',
  DELETE_ACCOUNT: '@doodle/user/settings/DELETE_ACCOUNT',
  DELETE_ACCOUNT_SUCCESS: '@doodle/user/settings/DELETE_ACCOUNT_SUCCESS',
  DELETE_ACCOUNT_ERROR: '@doodle/user/settings/DELETE_ACCOUNT_ERROR',
  FETCH_PREMIUMS: '@doodle/user/settings/FETCH_PREMIUMS',
  FETCH_PREMIUMS_SUCCESS: '@doodle/user/settings/FETCH_PREMIUMS_SUCCESS',
  FETCH_PREMIUMS_ERROR: '@doodle/user/settings/FETCH_PREMIUMS_ERROR',
  SAVE_NEW_EMAIL: '@doodle/user/settings/SAVE_NEW_EMAIL',
  SAVE_NEW_EMAIL_SUCCESS: '@doodle/user/settings/SAVE_NEW_EMAIL_SUCCESS',
  SAVE_NEW_EMAIL_ERROR: '@doodle/user/settings/SAVE_NEW_EMAIL_ERROR',
  SAVE_USER: '@doodle/user/settings/SAVE_USER',
  SAVE_USER_SUCCESS: '@doodle/user/settings/SAVE_USER_SUCCESS',
  SAVE_USER_ERROR: '@doodle/user/settings/SAVE_USER_ERROR',
  SAVE_NEW_PASSWORD: '@doodle/user/settings/SAVE_NEW_PASSWORD',
  SAVE_NEW_PASSWORD_SUCCESS: '@doodle/user/settings/SAVE_NEW_PASSWORD_SUCCESS',
  SAVE_NEW_PASSWORD_ERROR: '@doodle/user/settings/SAVE_NEW_PASSWORD_ERROR',
  RESET_NAGS: '@doodle/user/settings/RESET_NAGS',
  SAVE_BRANDING: '@doodle/user/settings/SAVE_BRANDING',
  SAVE_BRANDING_SUCCESS: '@doodle/user/settings/SAVE_BRANDING_SUCCESS',
  SAVE_BRANDING_ERROR: '@doodle/user/settings/SAVE_BRANDING_ERROR',
  SAVE_TILE_BACKGROUND: '@doodle/user/settings/SAVE_TILE_BACKGROUND',
  SAVE_TILE_BACKGROUND_ERROR: '@doodle/user/settings/SAVE_TILE_BACKGROUND_ERROR',
  SAVE_TILE_BACKGROUND_SUCCESS: '@doodle/user/settings/SAVE_TILE_BACKGROUND_SUCCESS',
  SAVE_BACKGROUND_COLOR: '@doodle/user/settings/SAVE_BACKGROUND_COLOR',
  SAVE_BACKGROUND_COLOR_ERROR: '@doodle/user/settings/SAVE_BACKGROUND_COLOR_ERROR',
  SAVE_BACKGROUND_COLOR_SUCCESS: '@doodle/user/settings/SAVE_BACKGROUND_COLOR_SUCCESS',
  DISMISS_BRANDING_NAGS: '@doodle/user/settings/DISMISS_BRANDING_NAGS',
  UPLOAD_LOGO: '@doodle/user/settings/UPLOAD_LOGO',
  UPLOAD_LOGO_SUCCESS: '@doodle/user/settings/UPLOAD_LOGO_SUCCESS',
  UPLOAD_LOGO_ERROR: '@doodle/user/settings/UPLOAD_LOGO_ERROR',
  REMOVE_LOGO: '@doodle/user/settings/REMOVE_LOGO',
  REMOVE_LOGO_SUCCESS: '@doodle/user/settings/REMOVE_LOGO_SUCCESS',
  REMOVE_LOGO_ERROR: '@doodle/user/settings/REMOVE_LOGO_ERROR',
  UPLOAD_BACKGROUND: '@doodle/branding/UPLOAD_BACKGROUND',
  UPLOAD_BACKGROUND_SUCCESS: '@doodle/branding/UPLOAD_BACKGROUND_SUCCESS',
  UPLOAD_BACKGROUND_ERROR: '@doodle/branding/UPLOAD_BACKGROUND_ERROR',
  REMOVE_BACKGROUND: '@doodle/user/settings/REMOVE_BACKGROUND',
  REMOVE_BACKGROUND_SUCCESS: '@doodle/user/settings/REMOVE_BACKGROUND_SUCCESS',
  REMOVE_BACKGROUND_ERROR: '@doodle/user/settings/REMOVE_BACKGROUND_ERROR',
  DELETE_CALENDAR: '@doodle/user/settings/DELETE_CALENDAR',
  DELETE_CALENDAR_SUCCESS: '@doodle/user/settings/DELETE_CALENDAR_SUCCESS',
  DELETE_CALENDAR_ERROR: '@doodle/user/settings/DELETE_CALENDAR_ERROR',
  GET_DOODLE_FEED: '@doodle/user/settings/GET_DOODLE_FEED',
  GET_DOODLE_FEED_SUCCESS: '@doodle/user/settings/GET_DOODLE_FEED_SUCCESS',
  GET_DOODLE_FEED_ERROR: '@doodle/user/settings/GET_DOODLE_FEED_ERROR',
  CONNECT_DOODLE_FEED: '@doodle/user/settings/CONNECT_DOODLE_FEED',
  CONNECT_DOODLE_FEED_SUCCESS: '@doodle/user/settings/CONNECT_DOODLE_FEED_SUCCESS',
  CONNECT_DOODLE_FEED_ERROR: '@doodle/user/settings/CONNECT_DOODLE_FEED_ERROR',
  RESET_DOODLE_FEED: '@doodle/user/settings/RESET_DOODLE_FEED',
  RESET_DOODLE_FEED_SUCCESS: '@doodle/user/settings/RESET_DOODLE_FEED_SUCCESS',
  RESET_DOODLE_FEED_ERROR: '@doodle/user/settings/RESET_DOODLE_FEED_ERROR',
  DELETE_ADDRESS_BOOK: '@doodle/user/settings/DELETE_ADDRESS_BOOK',
  DELETE_ADDRESS_BOOK_SUCCESS: '@doodle/user/settings/DELETE_ADDRESS_BOOK_SUCCESS',
  DELETE_ADDRESS_BOOK_ERROR: '@doodle/user/settings/DELETE_ADDRESS_BOOK_ERROR',
  LOGOUT_APPS: '@doodle/user/settings/LOGOUT_APPS',
  LOGOUT_APPS_SUCCESS: '@doodle/user/settings/LOGOUT_APPS_SUCCESS',
  LOGOUT_APPS_ERROR: '@doodle/user/settings/LOGOUT_APPS_ERROR',
  GET_APPS: '@doodle/user/settings/GET_APPS',
  GET_APPS_SUCCESS: '@doodle/user/settings/GET_APPS_SUCCESS',
  GET_APPS_ERROR: '@doodle/user/settings/GET_APPS_ERROR',
  SAVE_AVATAR: '@doodle/user/settings/SAVE_AVATAR',
  SAVE_AVATAR_SUCCESS: '@doodle/user/settings/SAVE_AVATAR_SUCCESS',
  SAVE_AVATAR_ERROR: '@doodle/user/settings/SAVE_AVATAR_ERROR',
  DELETE_AVATAR: '@doodle/user/settings/DELETE_AVATAR',
  DELETE_AVATAR_SUCCESS: '@doodle/user/settings/DELETE_AVATAR_SUCCESS',
  DELETE_AVATAR_ERROR: '@doodle/user/settings/DELETE_AVATAR_ERROR',
  UPDATE_AVATAR_LOCALLY: '@doodle/user/settings/UPDATE_AVATAR_LOCALLY',
  DISMISS_PREMIUM_NAGS: '@doodle/user/settings/DISMISS_PREMIUM_NAGS',
  DISMISS_NOTIFICATIONS_NAGS: '@doodle/user/settings/DISMISS_NOTIFICATIONS_NAGS',
  DISMISS_CALENDARS_NAGS: '@doodle/user/settings/DISMISS_CALENDARS_NAGS'
};
var saveNewEmail = function saveNewEmail(authToken, newEmail) {
  return {
    type: SettingsActionTypes.SAVE_NEW_EMAIL,
    authToken: authToken,
    newEmail: newEmail
  };
};
var saveNewEmailSuccess = function saveNewEmailSuccess() {
  return {
    type: SettingsActionTypes.SAVE_NEW_EMAIL_SUCCESS
  };
};
var saveNewEmailError = function saveNewEmailError(error) {
  return {
    type: SettingsActionTypes.SAVE_NEW_EMAIL_ERROR,
    error: error
  };
};
var saveNewPassword = function saveNewPassword(authToken, newPassword, currentPassword) {
  return {
    type: SettingsActionTypes.SAVE_NEW_PASSWORD,
    authToken: authToken,
    payload: {
      newPassword: newPassword,
      currentPassword: currentPassword
    }
  };
};
var saveNewPasswordSuccess = function saveNewPasswordSuccess() {
  return {
    type: SettingsActionTypes.SAVE_NEW_PASSWORD_SUCCESS
  };
};
var saveNewPasswordError = function saveNewPasswordError(error) {
  return {
    type: SettingsActionTypes.SAVE_NEW_PASSWORD_ERROR,
    error: error
  };
};
var fetchPremiums = function fetchPremiums(authToken) {
  return {
    type: SettingsActionTypes.FETCH_PREMIUMS,
    authToken: authToken
  };
};
var fetchPremiumsSuccess = function fetchPremiumsSuccess(premiums) {
  return {
    type: SettingsActionTypes.FETCH_PREMIUMS_SUCCESS,
    premiums: premiums
  };
};
var fetchPremiumsError = function fetchPremiumsError(error) {
  return {
    type: SettingsActionTypes.FETCH_PREMIUMS_ERROR,
    error: error
  };
};
var saveBranding = function saveBranding(authToken, data) {
  return {
    type: SettingsActionTypes.SAVE_BRANDING,
    authToken: authToken,
    data: data
  };
};
var saveBrandingSuccess = function saveBrandingSuccess(branding) {
  return {
    type: SettingsActionTypes.SAVE_BRANDING_SUCCESS,
    branding: branding
  };
};
var saveBrandingError = function saveBrandingError(error) {
  return {
    type: SettingsActionTypes.SAVE_BRANDING_ERROR,
    error: error
  };
};
var saveTileBackground = function saveTileBackground(authToken, data) {
  return {
    type: SettingsActionTypes.SAVE_TILE_BACKGROUND,
    authToken: authToken,
    data: data
  };
};
var saveTileBackgroundSuccess = function saveTileBackgroundSuccess(branding) {
  return {
    type: SettingsActionTypes.SAVE_TILE_BACKGROUND_SUCCESS,
    branding: branding
  };
};
var saveTileBackgroundError = function saveTileBackgroundError(error) {
  return {
    type: SettingsActionTypes.SAVE_TILE_BACKGROUND_ERROR,
    error: error
  };
};
var saveBackgroundColor = function saveBackgroundColor(authToken, data) {
  return {
    type: SettingsActionTypes.SAVE_BACKGROUND_COLOR,
    authToken: authToken,
    data: data
  };
};
var saveBackgroundColorSuccess = function saveBackgroundColorSuccess(branding) {
  return {
    type: SettingsActionTypes.SAVE_BACKGROUND_COLOR_SUCCESS,
    branding: branding
  };
};
var saveBackgroundColorError = function saveBackgroundColorError(error) {
  return {
    type: SettingsActionTypes.SAVE_BACKGROUND_COLOR_ERROR,
    error: error
  };
};
var uploadLogo = function uploadLogo(authToken, file, fileType) {
  return {
    type: SettingsActionTypes.UPLOAD_LOGO,
    authToken: authToken,
    payload: {
      file: file,
      fileType: fileType
    }
  };
};
var uploadLogoSuccess = function uploadLogoSuccess(response) {
  return {
    type: SettingsActionTypes.UPLOAD_LOGO_SUCCESS,
    payload: _objectSpread({}, response)
  };
};
var uploadLogoError = function uploadLogoError(error) {
  return {
    type: SettingsActionTypes.UPLOAD_LOGO_ERROR,
    error: error
  };
};
var removeLogo = function removeLogo(authToken) {
  return {
    type: SettingsActionTypes.REMOVE_LOGO,
    authToken: authToken
  };
};
var removeLogoSuccess = function removeLogoSuccess() {
  return {
    type: SettingsActionTypes.REMOVE_LOGO_SUCCESS
  };
};
var removeLogoError = function removeLogoError(error) {
  return {
    type: SettingsActionTypes.REMOVE_LOGO_ERROR,
    error: error
  };
};
var uploadBackground = function uploadBackground(authToken, file, fileType) {
  return {
    type: SettingsActionTypes.UPLOAD_BACKGROUND,
    authToken: authToken,
    payload: {
      file: file,
      fileType: fileType
    }
  };
};
var uploadBackgroundSuccess = function uploadBackgroundSuccess(response) {
  return {
    type: SettingsActionTypes.UPLOAD_BACKGROUND_SUCCESS,
    payload: _objectSpread({}, response)
  };
};
var uploadBackgroundError = function uploadBackgroundError(error) {
  return {
    type: SettingsActionTypes.UPLOAD_BACKGROUND_ERROR,
    error: error
  };
};
var removeBackground = function removeBackground(authToken) {
  return {
    type: SettingsActionTypes.REMOVE_BACKGROUND,
    authToken: authToken
  };
};
var removeBackgroundSuccess = function removeBackgroundSuccess() {
  return {
    type: SettingsActionTypes.REMOVE_BACKGROUND_SUCCESS
  };
};
var removeBackgroundError = function removeBackgroundError(error) {
  return {
    type: SettingsActionTypes.REMOVE_BACKGROUND_ERROR,
    error: error
  };
};
var deleteThirdParty = function deleteThirdParty(authToken, id) {
  return {
    type: SettingsActionTypes.DELETE_THIRD_PARTY,
    authToken: authToken,
    id: id
  };
};
var deleteThirdPartySuccess = function deleteThirdPartySuccess(account) {
  return {
    type: SettingsActionTypes.DELETE_THIRD_PARTY_SUCCESS,
    account: account
  };
};
var deleteThirdPartyError = function deleteThirdPartyError(error) {
  return {
    type: SettingsActionTypes.DELETE_THIRD_PARTY_ERROR,
    error: error
  };
};
var saveUser = function saveUser(authToken, data) {
  return {
    type: SettingsActionTypes.SAVE_USER,
    authToken: authToken,
    data: data
  };
};
var saveUserSuccess = function saveUserSuccess() {
  return {
    type: SettingsActionTypes.SAVE_USER_SUCCESS
  };
};
var saveUserError = function saveUserError(error) {
  return {
    type: SettingsActionTypes.SAVE_USER_ERROR,
    error: error
  };
};
var deleteAccount = function deleteAccount(authToken, password) {
  return {
    type: SettingsActionTypes.DELETE_ACCOUNT,
    authToken: authToken,
    password: password
  };
};
var deleteAccountSuccess = function deleteAccountSuccess() {
  return {
    type: SettingsActionTypes.DELETE_ACCOUNT_SUCCESS
  };
};
var deleteAccountError = function deleteAccountError(error) {
  return {
    type: SettingsActionTypes.DELETE_ACCOUNT_ERROR,
    error: error
  };
};
var resetNags = function resetNags(field) {
  return {
    type: SettingsActionTypes.RESET_NAGS,
    field: field
  };
};
var deleteCalendar = function deleteCalendar(authToken, id) {
  return {
    type: SettingsActionTypes.DELETE_CALENDAR,
    authToken: authToken,
    id: id
  };
};
var deleteCalendarSuccess = function deleteCalendarSuccess(calendar) {
  return {
    type: SettingsActionTypes.DELETE_CALENDAR_SUCCESS,
    calendar: calendar
  };
};
var deleteCalendarError = function deleteCalendarError(error) {
  return {
    type: SettingsActionTypes.DELETE_CALENDAR_ERROR,
    error: error
  };
};
var getDoodleFeed = function getDoodleFeed(authToken) {
  return {
    type: SettingsActionTypes.GET_DOODLE_FEED,
    authToken: authToken
  };
};
var getDoodleFeedSuccess = function getDoodleFeedSuccess(feed) {
  return {
    type: SettingsActionTypes.GET_DOODLE_FEED_SUCCESS,
    feed: feed
  };
};
var getDoodleFeedError = function getDoodleFeedError(error) {
  return {
    type: SettingsActionTypes.GET_DOODLE_FEED_ERROR,
    error: error
  };
};
var resetDoodleFeed = function resetDoodleFeed(authToken) {
  return {
    type: SettingsActionTypes.RESET_DOODLE_FEED,
    authToken: authToken
  };
};
var resetDoodleFeedSuccess = function resetDoodleFeedSuccess(feed) {
  return {
    type: SettingsActionTypes.RESET_DOODLE_FEED_SUCCESS,
    feed: feed
  };
};
var resetDoodleFeedError = function resetDoodleFeedError(error) {
  return {
    type: SettingsActionTypes.RESET_DOODLE_FEED_ERROR,
    error: error
  };
};
var connectDoodleFeed = function connectDoodleFeed(authToken, url) {
  return {
    type: SettingsActionTypes.CONNECT_DOODLE_FEED,
    authToken: authToken,
    url: url
  };
};
var connectDoodleFeedSuccess = function connectDoodleFeedSuccess() {
  return {
    type: SettingsActionTypes.CONNECT_DOODLE_FEED_SUCCESS
  };
};
var connectDoodleFeedError = function connectDoodleFeedError(error) {
  return {
    type: SettingsActionTypes.CONNECT_DOODLE_FEED_ERROR,
    error: error
  };
};
var deleteAddressBook = function deleteAddressBook(authToken, id) {
  return {
    type: SettingsActionTypes.DELETE_ADDRESS_BOOK,
    authToken: authToken,
    id: id
  };
};
var deleteAddressBookSuccess = function deleteAddressBookSuccess(addressBook) {
  return {
    type: SettingsActionTypes.DELETE_ADDRESS_BOOK_SUCCESS,
    addressBook: addressBook
  };
};
var deleteAddressBookError = function deleteAddressBookError(error) {
  return {
    type: SettingsActionTypes.DELETE_ADDRESS_BOOK_ERROR,
    error: error
  };
};
var saveAvatar = function saveAvatar(authToken, file, fileType) {
  return {
    type: SettingsActionTypes.SAVE_AVATAR,
    authToken: authToken,
    payload: {
      file: file,
      fileType: fileType
    }
  };
};
var saveAvatarSuccess = function saveAvatarSuccess(authToken) {
  return {
    type: SettingsActionTypes.SAVE_AVATAR_SUCCESS,
    authToken: authToken
  };
};
var saveAvatarError = function saveAvatarError(error) {
  return {
    type: SettingsActionTypes.SAVE_AVATAR_ERROR,
    error: error
  };
};
var deleteAvatar = function deleteAvatar(authToken) {
  return {
    type: SettingsActionTypes.DELETE_AVATAR,
    authToken: authToken
  };
};
var deleteAvatarSuccess = function deleteAvatarSuccess() {
  return {
    type: SettingsActionTypes.DELETE_AVATAR_SUCCESS
  };
};
var deleteAvatarError = function deleteAvatarError(error) {
  return {
    type: SettingsActionTypes.DELETE_AVATAR_ERROR,
    error: error
  };
};
/**
 * Updates the avatar locally to avoid requesting the whole user object.
 * @param {string} avatar The data URL of the avatar.
 */

var updateAvatarLocally = function updateAvatarLocally(avatar) {
  return {
    type: SettingsActionTypes.UPDATE_AVATAR_LOCALLY,
    avatar: avatar
  };
};
var logoutApps = function logoutApps(authToken) {
  return {
    type: SettingsActionTypes.LOGOUT_APPS,
    authToken: authToken
  };
};
var logoutAppsSuccess = function logoutAppsSuccess() {
  return {
    type: SettingsActionTypes.LOGOUT_APPS_SUCCESS
  };
};
var logoutAppsError = function logoutAppsError(error) {
  return {
    type: SettingsActionTypes.LOGOUT_APPS_ERROR,
    error: error
  };
};
var getApps = function getApps(authToken) {
  return {
    type: SettingsActionTypes.GET_APPS,
    authToken: authToken
  };
};
var getAppsSuccess = function getAppsSuccess(apps) {
  return {
    type: SettingsActionTypes.GET_APPS_SUCCESS,
    apps: apps
  };
};
var getAppsError = function getAppsError(error) {
  return {
    type: SettingsActionTypes.GET_APPS_ERROR,
    error: error
  };
};
var dismissBrandingNags = function dismissBrandingNags() {
  return {
    type: SettingsActionTypes.DISMISS_BRANDING_NAGS
  };
};
var dismissPremiumNags = function dismissPremiumNags() {
  return {
    type: SettingsActionTypes.DISMISS_PREMIUM_NAGS
  };
};
var dismissNotificationsNags = function dismissNotificationsNags() {
  return {
    type: SettingsActionTypes.DISMISS_NOTIFICATIONS_NAGS
  };
};
var dismissCalendarsNags = function dismissCalendarsNags() {
  return {
    type: SettingsActionTypes.DISMISS_CALENDARS_NAGS
  };
};

var settingsActions = /*#__PURE__*/Object.freeze({
  __proto__: null,
  SettingsActionTypes: SettingsActionTypes,
  saveNewEmail: saveNewEmail,
  saveNewEmailSuccess: saveNewEmailSuccess,
  saveNewEmailError: saveNewEmailError,
  saveNewPassword: saveNewPassword,
  saveNewPasswordSuccess: saveNewPasswordSuccess,
  saveNewPasswordError: saveNewPasswordError,
  fetchPremiums: fetchPremiums,
  fetchPremiumsSuccess: fetchPremiumsSuccess,
  fetchPremiumsError: fetchPremiumsError,
  saveBranding: saveBranding,
  saveBrandingSuccess: saveBrandingSuccess,
  saveBrandingError: saveBrandingError,
  saveTileBackground: saveTileBackground,
  saveTileBackgroundSuccess: saveTileBackgroundSuccess,
  saveTileBackgroundError: saveTileBackgroundError,
  saveBackgroundColor: saveBackgroundColor,
  saveBackgroundColorSuccess: saveBackgroundColorSuccess,
  saveBackgroundColorError: saveBackgroundColorError,
  uploadLogo: uploadLogo,
  uploadLogoSuccess: uploadLogoSuccess,
  uploadLogoError: uploadLogoError,
  removeLogo: removeLogo,
  removeLogoSuccess: removeLogoSuccess,
  removeLogoError: removeLogoError,
  uploadBackground: uploadBackground,
  uploadBackgroundSuccess: uploadBackgroundSuccess,
  uploadBackgroundError: uploadBackgroundError,
  removeBackground: removeBackground,
  removeBackgroundSuccess: removeBackgroundSuccess,
  removeBackgroundError: removeBackgroundError,
  deleteThirdParty: deleteThirdParty,
  deleteThirdPartySuccess: deleteThirdPartySuccess,
  deleteThirdPartyError: deleteThirdPartyError,
  saveUser: saveUser,
  saveUserSuccess: saveUserSuccess,
  saveUserError: saveUserError,
  deleteAccount: deleteAccount,
  deleteAccountSuccess: deleteAccountSuccess,
  deleteAccountError: deleteAccountError,
  resetNags: resetNags,
  deleteCalendar: deleteCalendar,
  deleteCalendarSuccess: deleteCalendarSuccess,
  deleteCalendarError: deleteCalendarError,
  getDoodleFeed: getDoodleFeed,
  getDoodleFeedSuccess: getDoodleFeedSuccess,
  getDoodleFeedError: getDoodleFeedError,
  resetDoodleFeed: resetDoodleFeed,
  resetDoodleFeedSuccess: resetDoodleFeedSuccess,
  resetDoodleFeedError: resetDoodleFeedError,
  connectDoodleFeed: connectDoodleFeed,
  connectDoodleFeedSuccess: connectDoodleFeedSuccess,
  connectDoodleFeedError: connectDoodleFeedError,
  deleteAddressBook: deleteAddressBook,
  deleteAddressBookSuccess: deleteAddressBookSuccess,
  deleteAddressBookError: deleteAddressBookError,
  saveAvatar: saveAvatar,
  saveAvatarSuccess: saveAvatarSuccess,
  saveAvatarError: saveAvatarError,
  deleteAvatar: deleteAvatar,
  deleteAvatarSuccess: deleteAvatarSuccess,
  deleteAvatarError: deleteAvatarError,
  updateAvatarLocally: updateAvatarLocally,
  logoutApps: logoutApps,
  logoutAppsSuccess: logoutAppsSuccess,
  logoutAppsError: logoutAppsError,
  getApps: getApps,
  getAppsSuccess: getAppsSuccess,
  getAppsError: getAppsError,
  dismissBrandingNags: dismissBrandingNags,
  dismissPremiumNags: dismissPremiumNags,
  dismissNotificationsNags: dismissNotificationsNags,
  dismissCalendarsNags: dismissCalendarsNags
});

var ConnectCalendarActionTypes = {
  CONNECT_CALENDAR: '@doodle/user/connectCalendars/CONNECT_CALENDAR',
  CONNECT_CALENDAR_SUCCESS: '@doodle/user/connectCalendars/CONNECT_CALENDAR_SUCCESS',
  CONNECT_CALENDAR_ERROR: '@doodle/user/connectCalendars/CONNECT_CALENDAR_ERROR',
  CONNECT_ADDRESS_BOOK: '@doodle/user/connectCalendars/CONNECT_ADDRESS_BOOK',
  CONNECT_ADDRESS_BOOK_SUCCESS: '@doodle/user/connectCalendars/CONNECT_ADDRESS_BOOK_SUCCESS',
  CONNECT_ADDRESS_BOOK_ERROR: '@doodle/user/connectCalendars/CONNECT_ADDRESS_BOOK_ERROR',
  RESET_CONNECT_CALENDAR_NAGS: '@doodle/user/connectCalendars/RESET_CONNECT_CALENDAR_NAGS'
};
var connectCalendar = function connectCalendar(authToken, provider) {
  return {
    type: ConnectCalendarActionTypes.CONNECT_CALENDAR,
    authToken: authToken,
    provider: provider
  };
};
var connectCalendarSuccess = function connectCalendarSuccess(provider) {
  return {
    type: ConnectCalendarActionTypes.CONNECT_CALENDAR_SUCCESS,
    provider: provider
  };
};
var connectCalendarError = function connectCalendarError(error) {
  return {
    type: ConnectCalendarActionTypes.CONNECT_CALENDAR_ERROR,
    error: error
  };
};
var connectAddressBook = function connectAddressBook(authToken, provider) {
  return {
    type: ConnectCalendarActionTypes.CONNECT_ADDRESS_BOOK,
    authToken: authToken,
    provider: provider
  };
};
var connectAddressBookSuccess = function connectAddressBookSuccess(provider) {
  return {
    type: ConnectCalendarActionTypes.CONNECT_ADDRESS_BOOK_SUCCESS,
    provider: provider
  };
};
var connectAddressBookError = function connectAddressBookError(error) {
  return {
    type: ConnectCalendarActionTypes.CONNECT_ADDRESS_BOOK_ERROR,
    error: error
  };
};
var resetConnectCalendarNags = function resetConnectCalendarNags() {
  return {
    type: ConnectCalendarActionTypes.RESET_CONNECT_CALENDAR_NAGS
  };
};

var connectCalendarActions = /*#__PURE__*/Object.freeze({
  __proto__: null,
  ConnectCalendarActionTypes: ConnectCalendarActionTypes,
  connectCalendar: connectCalendar,
  connectCalendarSuccess: connectCalendarSuccess,
  connectCalendarError: connectCalendarError,
  connectAddressBook: connectAddressBook,
  connectAddressBookSuccess: connectAddressBookSuccess,
  connectAddressBookError: connectAddressBookError,
  resetConnectCalendarNags: resetConnectCalendarNags
});

var SelectPrimaryCalendarActionTypes = {
  SELECT_PRIMARY_CALENDAR: '@doodle/user/selectPrimaryCalendars/SELECT_PRIMARY_CALENDAR',
  SELECT_PRIMARY_CALENDAR_SUCCESS: '@doodle/user/selectPrimaryCalendars/SELECT_PRIMARY_CALENDAR_SUCCESS',
  SELECT_PRIMARY_CALENDAR_ERROR: '@doodle/user/selectPrimaryCalendars/SELECT_PRIMARY_CALENDAR_ERROR'
};
var selectPrimaryCalendar = function selectPrimaryCalendar(authToken, calendarId) {
  return {
    type: SelectPrimaryCalendarActionTypes.SELECT_PRIMARY_CALENDAR,
    calendarId: calendarId,
    authToken: authToken
  };
};
var selectPrimaryCalendarSuccess = function selectPrimaryCalendarSuccess(calendarId) {
  return {
    type: SelectPrimaryCalendarActionTypes.SELECT_PRIMARY_CALENDAR_SUCCESS,
    calendarId: calendarId
  };
};
var selectPrimaryCalendarError = function selectPrimaryCalendarError(error) {
  return {
    type: SelectPrimaryCalendarActionTypes.SELECT_PRIMARY_CALENDAR_ERROR,
    error: error
  };
};

var SelectPrimaryCalendarActions = /*#__PURE__*/Object.freeze({
  __proto__: null,
  SelectPrimaryCalendarActionTypes: SelectPrimaryCalendarActionTypes,
  selectPrimaryCalendar: selectPrimaryCalendar,
  selectPrimaryCalendarSuccess: selectPrimaryCalendarSuccess,
  selectPrimaryCalendarError: selectPrimaryCalendarError
});

var generateOAuthAntiCSRFCookieDuration = function generateOAuthAntiCSRFCookieDuration() {
  var yearInSec = 365 * 24 * 60 * 60;
  var antiCSRFCookieDuration = yearInSec / (24 * 60 * 60);
  var expires = new Date(new Date().getTime() + yearInSec * antiCSRFCookieDuration);
  return expires.toUTCString();
};

var generateRandomOAuthAntiCSRFToken = function generateRandomOAuthAntiCSRFToken() {
  var _context;

  return _concatInstanceProperty__default['default'](_context = Math.random().toString(36).substring(7)).call(_context, Math.random().toString(36).substring(7));
};

var STORAGE_KEY = 'usersConnectorStorage:v2';
/**
 * Storage value related to web-billing.
 */

var SELECTED_FREQUENCY = 'SELECTED_FREQUENCY';
var storage = {
  /**
   * Reads and parses the user state from the local storage.
   * Returns null if the local storage does not contain any state.
   * @returns {object}
   */
  loadState: function loadState() {
    try {
      var rawStorage = localStorage.getItem(STORAGE_KEY);
      return JSON.parse(rawStorage);
    } catch (e) {
      return null;
    }
  },

  /**
   * Stores the partial user state in the local storage.
   * @param {object} state The user state partial.
   */
  storeState: function storeState(state) {
    localStorage.setItem(STORAGE_KEY, _JSON$stringify__default['default'](state));
  },

  /**
   * Cleans up the user state from the local storage.
   */
  deleteState: function deleteState() {
    localStorage.removeItem(STORAGE_KEY);
    localStorage.removeItem(SELECTED_FREQUENCY);
  },

  /**
   * Forces a cookie to expire by settings its expiration to now.
   * @param {string} key The name of the cookie to remove
   * @param {string?} options.domain The optional cookie domain
   */
  deleteCookie: function deleteCookie(key) {
    var _context, _context2, _context3, _context4;

    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    var path = options.path || '/';
    var domain = options.domain || ".".concat(_spliceInstanceProperty__default['default'](_context = document.location.hostname // always start with '.'
    .split('.')).call(_context, -2) // remove everything except the TLD ('com') and the second level domain ('doodle')
    .join('.'));
    var expires = new Date(0).toGMTString(); // delete the cookie

    document.cookie = _concatInstanceProperty__default['default'](_context2 = _concatInstanceProperty__default['default'](_context3 = _concatInstanceProperty__default['default'](_context4 = "".concat(key, "=;path=")).call(_context4, path, ";domain=")).call(_context3, domain, ";expires=")).call(_context2, expires);
  },

  /**
   * Reads a cookie and returns its value. Defaults to undefined.
   * @param {string} key The key of the cookie to retrieve
   * @param {() -> string} [options.getCookie] An optional function used to read the cookie. `document.cookie` will be used otherwise.
   * @returns {string|undefined}
   */
  getCookie: function getCookie(key) {
    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    var cookies = (options.getCookie && options.getCookie() || document.cookie).split('; ');
    return _reduceInstanceProperty__default['default'](cookies).call(cookies, function (result, cookie) {
      var searchKey = "".concat(key, "=");

      if (_indexOfInstanceProperty__default['default'](cookie).call(cookie, searchKey) === 0) {
        return cookie.substring(searchKey.length);
      }

      return result;
    }, undefined);
  },

  /**
   * Sets a cookie with key `oauth_anti_csrf_token_cookie` and the given token as value.
   * @param {string} token The token value
   * @param {string} domain The domain in which to set the cookie
   */
  setOAuthAntiCSRFTokenCookie: function setOAuthAntiCSRFTokenCookie(token, domain) {
    var _context5;

    var expires = generateOAuthAntiCSRFCookieDuration();

    var cookie = _concatInstanceProperty__default['default'](_context5 = "oauth_anti_csrf_token_cookie=".concat(token, ";expires=")).call(_context5, expires, ";path=/");

    if (domain) {
      cookie += ";domain=".concat(encodeURIComponent(domain));
    }

    document.cookie = cookie;
  },

  /**
   * Sets a cookie with key `token` and the given token as value.
   * @param {string} token The token value
   * @param {string} domain The domain in which to set the cookie
   */
  setAntiCSRFTokenCookie: function setAntiCSRFTokenCookie(token, domain) {
    // we delete the domain-less cookie, just in case
    document.cookie = 'token=DumpMe;max-age=-1';
    var cookie = "token=".concat(token, ";path=/;Secure;SameSite=Lax");

    if (domain) {
      cookie += ";domain=".concat(encodeURIComponent(domain));
    }

    document.cookie = cookie;
  }
};

var empty = {
  loading: false,
  error: null,
  data: {},
  theme: {
    backgroundImage: {
      url: null
    },
    logoImage: {
      url: null
    },
    backgroundColor: null,
    website: null,
    backgroundTiling: false
  },
  branding: {
    companyName: '',
    mandatorPrefix: '',
    logoUrl: '',
    companyWebsite: '',
    backgroundUrl: '',
    tileBackground: false,
    backgroundColor: ''
  },
  resendActivation: {
    email: '',
    password: '',
    loading: false,
    error: false,
    info: false
  }
};
/**
 * Creates an initial state object containing the user state
 *
 * @param {Object} options
 * @param {string} options.domain For mounting this state under a different key in redux. Default: `user`.
 * @param {Object} options.initialState override the initial state
 *
 * @example
 * import { createState as createUserState } from '@doodle/users-api-connector';
 *
 * const initialState = {
 *   ...createUserState(), // providing the state under the `domain` key
 * };
 * const store = createStore(rootReducer, initialState, enhancers);
 */

var createState = function createState() {
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  return _defineProperty__default['default']({}, options.domain || 'user', options.initialState || _Object$assign__default['default']({}, empty, storage.loadState()));
};

function ownKeys$1(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context; _forEachInstanceProperty__default['default'](_context = ownKeys$1(Object(source), true)).call(_context, function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context2; _forEachInstanceProperty__default['default'](_context2 = ownKeys$1(Object(source))).call(_context2, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }
var reducer = function reducer() {
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : empty;
  var action = arguments.length > 1 ? arguments[1] : undefined;

  switch (action.type) {
    case ActionTypes.LOAD_USER:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        error: null,
        loading: true
      });

    case ActionTypes.USER_LOADED:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        data: action.user,
        loading: false,
        error: null
      });

    case ActionTypes.USER_LOAD_FAILED:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        data: {},
        // clear data
        error: action.error,
        loading: false
      });

    case SettingsActionTypes.UPDATE_AVATAR_LOCALLY:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        data: _objectSpread$1(_objectSpread$1({}, state.data), {}, {
          avatarSmallUrl: action.avatar,
          avatarLargeUrl: action.avatar
        })
      });

    case ActionTypes.LOAD_THEME_SUCCESS:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        theme: _objectSpread$1(_objectSpread$1({}, empty.theme), action.theme)
      });

    case ActionTypes.LOAD_BRANDING_SUCCESS:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        branding: _objectSpread$1(_objectSpread$1({}, state.branding), action.branding)
      });

    case SettingsActionTypes.SAVE_BRANDING_SUCCESS:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        branding: _objectSpread$1(_objectSpread$1(_objectSpread$1({}, state.branding), action.branding), {}, {
          tileBackground: action.branding.tileBackground || false
        }),
        theme: _objectSpread$1(_objectSpread$1({}, state.theme), {}, {
          backgroundTiling: action.branding.tileBackground || false
        })
      });

    case SettingsActionTypes.SAVE_TILE_BACKGROUND:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        branding: _objectSpread$1(_objectSpread$1({}, state.branding), {}, {
          tileBackground: action.data.tileBackground || false
        }),
        theme: _objectSpread$1(_objectSpread$1({}, state.theme), {}, {
          backgroundTiling: action.data.tileBackground || false
        })
      });

    case SettingsActionTypes.SAVE_TILE_BACKGROUND_SUCCESS:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        branding: _objectSpread$1(_objectSpread$1(_objectSpread$1({}, state.branding), action.branding), {}, {
          tileBackground: action.branding.tileBackground || false
        }),
        theme: _objectSpread$1(_objectSpread$1({}, state.theme), {}, {
          backgroundTiling: action.branding.tileBackground || false
        })
      });

    case SettingsActionTypes.SAVE_BACKGROUND_COLOR:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        branding: _objectSpread$1(_objectSpread$1({}, state.branding), {}, {
          backgroundColor: action.data.backgroundColor
        }),
        theme: _objectSpread$1(_objectSpread$1({}, state.theme), {}, {
          backgroundColor: action.data.backgroundColor
        })
      });

    case SettingsActionTypes.SAVE_BACKGROUND_COLOR_SUCCESS:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        branding: _objectSpread$1(_objectSpread$1(_objectSpread$1({}, state.branding), action.branding), {}, {
          tileBackground: action.branding.tileBackground || false
        }),
        theme: _objectSpread$1(_objectSpread$1({}, state.theme), {}, {
          backgroundColor: action.branding.backgroundColor
        })
      });

    case SettingsActionTypes.UPLOAD_LOGO_SUCCESS:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        branding: _objectSpread$1(_objectSpread$1({}, state.branding), {}, {
          logoUrl: action.payload.url
        }),
        theme: _objectSpread$1(_objectSpread$1({}, state.theme), {}, {
          logoImage: {
            url: action.payload.url
          }
        })
      });

    case SettingsActionTypes.UPLOAD_BACKGROUND_SUCCESS:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        branding: _objectSpread$1(_objectSpread$1({}, state.branding), {}, {
          backgroundUrl: action.payload.url
        }),
        theme: _objectSpread$1(_objectSpread$1({}, state.theme), {}, {
          backgroundImage: {
            url: action.payload.url
          }
        })
      });

    case SettingsActionTypes.REMOVE_LOGO_SUCCESS:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        branding: _objectSpread$1(_objectSpread$1({}, state.branding), {}, {
          logoUrl: ''
        }),
        theme: _objectSpread$1(_objectSpread$1({}, state.theme), {}, {
          logoImage: {
            url: null
          }
        })
      });

    case SettingsActionTypes.REMOVE_BACKGROUND_SUCCESS:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        branding: _objectSpread$1(_objectSpread$1({}, state.branding), {}, {
          backgroundUrl: ''
        }),
        theme: _objectSpread$1(_objectSpread$1({}, state.theme), {}, {
          backgroundImage: {
            url: null
          }
        })
      });

    case ActionTypes.RESEND_ACTIVATIONMAIL:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        resendActivation: _objectSpread$1(_objectSpread$1({}, state.resendActivation), {}, {
          enabled: false,
          loading: true,
          error: false
        })
      });

    case ActionTypes.RESEND_ACTIVATIONMAIL_SUCCEEDED:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        resendActivation: _objectSpread$1(_objectSpread$1({}, state.resendActivation), {}, {
          loading: false,
          error: false
        })
      });

    case ActionTypes.RESEND_ACTIVATIONMAIL_ENABLED:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        resendActivation: _objectSpread$1(_objectSpread$1({}, state.resendActivation), {}, {
          enabled: true
        })
      });

    case ActionTypes.RESEND_ACTIVATIONMAIL_FAILED:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        resendActivation: _objectSpread$1(_objectSpread$1({}, state.resendActivation), {}, {
          loading: false,
          enabled: true,
          error: true
        })
      });

    case ActionTypes.LOGOUT:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        data: {},
        branding: _objectSpread$1({}, empty.branding),
        login: _objectSpread$1(_objectSpread$1({}, state.login), {}, {
          password: {
            value: ''
          }
        })
      });

    case SelectPrimaryCalendarActionTypes.SELECT_PRIMARY_CALENDAR_SUCCESS:
      return _objectSpread$1(_objectSpread$1({}, state), {}, {
        data: _objectSpread$1(_objectSpread$1({}, state.data), {}, {
          primaryCalendarAccountId: action.calendarId
        })
      });

    default:
      return state;
  }
};
/**
 * Creates a reducer that can be used with [`combineReducer`](http://redux.js.org/docs/api/combineReducers.html)
 * @param {Object} options Reducer options
 * @param {string} options.domain For mounting this reducer under a different key in redux. Default: `user`.
 *
 * @example
 * // reducer.js
 * import { createReducer as createUserReducer } from '@doodle/users-api-connector';
 * import { combineReducers } from 'redux';
 *
 * export default combineReducers({
 *   ...createUserReducer(), // providing the reducer under the `domain` key
 * })
 */

var createReducer = function createReducer() {
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  return _defineProperty__default['default']({}, options.domain || 'user', reducer);
};

var initialSettingsState = {
  saveUser: {
    loading: false,
    error: null,
    success: false
  },
  saveNewPassword: {
    loading: false,
    error: null
  },
  saveNewEmail: {
    loading: false,
    error: null,
    success: false
  },
  deleteAccount: {
    loading: false,
    error: null
  },
  deleteThirdParty: {
    loading: false,
    error: null,
    success: false
  },
  fetchPremiums: {
    premiums: null,
    loading: false,
    error: null
  },
  loadBranding: {
    premiums: null,
    loading: false,
    error: null
  },
  saveBranding: {
    loading: false,
    error: null,
    success: false
  },
  saveTileBackground: {
    loading: false,
    error: null,
    success: false
  },
  saveBackgroundColor: {
    loading: false,
    error: null,
    success: false
  },
  uploadLogo: {
    loading: false,
    error: null,
    success: false
  },
  removeLogo: {
    loading: false,
    error: null,
    success: false
  },
  uploadBackground: {
    loading: false,
    error: null,
    success: false
  },
  removeBackground: {
    loading: false,
    error: null,
    success: false
  },
  deleteCalendar: {
    loading: false,
    error: null,
    success: false
  },
  getDoodleFeed: {
    value: '',
    loading: false,
    error: null,
    success: false
  },
  connectDoodleFeed: {
    loading: false,
    error: null,
    success: false
  },
  resetDoodleFeed: {
    loading: false,
    error: null,
    success: false
  },
  deleteAddressBook: {
    loading: false,
    error: null,
    success: false
  },
  saveAvatar: {
    loading: false,
    error: null,
    success: false
  },
  deleteAvatar: {
    loading: false,
    error: null,
    success: false
  },
  logoutApps: {
    loading: false,
    error: null,
    success: false
  },
  getApps: {
    loading: false,
    error: null,
    success: false
  },
  apps: [],
  doodleFeed: ''
};

var createSettingsState = function createSettingsState() {
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  return _defineProperty__default['default']({}, options.domain || 'userSettings', options.initialState || _Object$assign__default['default']({}, initialSettingsState));
};

function ownKeys$2(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context2; _forEachInstanceProperty__default['default'](_context2 = ownKeys$2(Object(source), true)).call(_context2, function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context3; _forEachInstanceProperty__default['default'](_context3 = ownKeys$2(Object(source))).call(_context3, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }
var settingsReducer = function settingsReducer() {
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialSettingsState;
  var action = arguments.length > 1 ? arguments[1] : undefined;

  switch (action.type) {
    case SettingsActionTypes.DELETE_THIRD_PARTY_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          deleteThirdParty: {
            loading: false,
            error: null,
            success: true
          }
        });
      }

    case SettingsActionTypes.DELETE_THIRD_PARTY:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          deleteThirdParty: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.DELETE_THIRD_PARTY_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          deleteThirdParty: {
            error: action.error,
            loading: false,
            success: false
          }
        });
      }

    case SettingsActionTypes.SAVE_USER:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveUser: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.SAVE_USER_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveUser: {
            error: action.error,
            loading: false,
            success: false
          }
        });
      }

    case SettingsActionTypes.SAVE_USER_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveUser: {
            loading: false,
            error: null,
            success: true
          }
        });
      }

    case SettingsActionTypes.SAVE_NEW_PASSWORD:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveNewPassword: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.SAVE_NEW_PASSWORD_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveNewPassword: {
            error: action.error,
            loading: false,
            success: false
          }
        });
      }

    case SettingsActionTypes.SAVE_NEW_PASSWORD_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveNewPassword: {
            loading: false,
            error: null,
            success: true
          }
        });
      }

    case SettingsActionTypes.SAVE_NEW_EMAIL:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveNewEmail: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.SAVE_NEW_EMAIL_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveNewEmail: {
            error: action.error,
            loading: false,
            success: false
          }
        });
      }

    case SettingsActionTypes.SAVE_NEW_EMAIL_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveNewEmail: {
            loading: false,
            error: null,
            success: true
          }
        });
      }

    case SettingsActionTypes.FETCH_PREMIUMS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          fetchPremiums: {
            loading: true,
            error: null
          }
        });
      }

    case SettingsActionTypes.FETCH_PREMIUMS_SUCCESS:
      {
        var _context;

        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          fetchPremiums: {
            premiums: _concatInstanceProperty__default['default'](_context = [{
              id: 0,
              name: 'doNotUsePremium'
            }]).call(_context, _toConsumableArray__default['default'](action.premiums)),
            loading: false,
            error: null
          }
        });
      }

    case SettingsActionTypes.FETCH_PREMIUMS_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          fetchPremiums: {
            error: action.error,
            loading: false
          }
        });
      }

    case ActionTypes.LOAD_BRANDING:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          loadBranding: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case ActionTypes.LOAD_BRANDING_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          loadBranding: {
            loading: false,
            error: null,
            success: true
          }
        });
      }

    case ActionTypes.LOAD_BRANDING_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          loadBranding: {
            error: action.error,
            loading: false,
            success: false
          }
        });
      }

    case SettingsActionTypes.SAVE_BRANDING:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveBranding: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.SAVE_BRANDING_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveBranding: {
            loading: false,
            error: null,
            success: true
          }
        });
      }

    case SettingsActionTypes.SAVE_BRANDING_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveBranding: {
            error: action.error,
            loading: false,
            success: false
          }
        });
      }

    case SettingsActionTypes.SAVE_TILE_BACKGROUND:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveTileBackground: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.SAVE_TILE_BACKGROUND_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveTileBackground: {
            loading: false,
            error: null,
            success: true
          }
        });
      }

    case SettingsActionTypes.SAVE_TILE_BACKGROUND_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveTileBackground: {
            error: action.error,
            loading: false,
            success: false
          }
        });
      }

    case SettingsActionTypes.SAVE_BACKGROUND_COLOR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveBackgroundColor: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.SAVE_BACKGROUND_COLOR_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveBackgroundColor: {
            loading: false,
            error: null,
            success: true
          }
        });
      }

    case SettingsActionTypes.SAVE_BACKGROUND_COLOR_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveBackgroundColor: {
            error: action.error,
            loading: false,
            success: false
          }
        });
      }

    case SettingsActionTypes.UPLOAD_LOGO:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          uploadLogo: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.UPLOAD_LOGO_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          uploadLogo: {
            loading: false,
            error: null,
            success: true
          }
        });
      }

    case SettingsActionTypes.UPLOAD_LOGO_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          uploadLogo: {
            error: action.error,
            loading: false,
            success: false
          }
        });
      }

    case SettingsActionTypes.REMOVE_LOGO:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          removeLogo: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.REMOVE_LOGO_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          removeLogo: {
            loading: false,
            error: null,
            success: true
          }
        });
      }

    case SettingsActionTypes.REMOVE_LOGO_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          removeLogo: {
            error: action.error,
            loading: false,
            success: false
          }
        });
      }

    case SettingsActionTypes.UPLOAD_BACKGROUND:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          uploadBackground: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.UPLOAD_BACKGROUND_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          uploadBackground: {
            loading: false,
            error: null,
            success: true
          }
        });
      }

    case SettingsActionTypes.UPLOAD_BACKGROUND_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          uploadBackground: {
            error: action.error,
            loading: false,
            success: false
          }
        });
      }

    case SettingsActionTypes.REMOVE_BACKGROUND:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          removeBackground: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.REMOVE_BACKGROUND_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          removeBackground: {
            loading: false,
            error: null,
            success: true
          }
        });
      }

    case SettingsActionTypes.REMOVE_BACKGROUND_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          removeBackground: {
            error: action.error,
            loading: false,
            success: false
          }
        });
      }

    case SettingsActionTypes.DISMISS_BRANDING_NAGS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          uploadLogo: _objectSpread$2({}, initialSettingsState.uploadLogo),
          removeLogo: _objectSpread$2({}, initialSettingsState.removeLogo),
          uploadBackground: _objectSpread$2({}, initialSettingsState.uploadBackground),
          removeBackground: _objectSpread$2({}, initialSettingsState.removeBackground),
          saveBranding: _objectSpread$2({}, initialSettingsState.saveBranding),
          loadBranding: _objectSpread$2({}, initialSettingsState.loadBranding)
        });
      }

    case SettingsActionTypes.DELETE_ACCOUNT:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          deleteAccount: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.DELETE_ACCOUNT_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          deleteAccount: {
            error: action.error,
            loading: false,
            success: false
          }
        });
      }

    case SettingsActionTypes.DELETE_ACCOUNT_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          deleteAccount: {
            loading: false,
            error: null,
            success: true
          }
        });
      }
    // for resetting error when opening/closing modal dialogs:

    case SettingsActionTypes.RESET_NAGS:
      {
        return _objectSpread$2(_objectSpread$2({}, initialSettingsState), {}, {
          fetchPremiums: _objectSpread$2(_objectSpread$2({}, initialSettingsState.premiums), {}, {
            premiums: state.fetchPremiums.premiums
          }),
          doodleFeed: state.doodleFeed
        });
      }

    case SettingsActionTypes.DELETE_CALENDAR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          deleteCalendar: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.DELETE_CALENDAR_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          deleteCalendar: {
            loading: false,
            error: null,
            success: true
          }
        });
      }

    case SettingsActionTypes.DELETE_CALENDAR_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          deleteCalendar: {
            loading: false,
            error: action.error,
            success: false
          }
        });
      }

    case SettingsActionTypes.GET_DOODLE_FEED:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          getDoodleFeed: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.GET_DOODLE_FEED_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          getDoodleFeed: {
            loading: false,
            error: null,
            success: true
          },
          doodleFeed: action.feed
        });
      }

    case SettingsActionTypes.GET_DOODLE_FEED_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          getDoodleFeed: {
            loading: false,
            error: action.error,
            success: false
          }
        });
      }

    case SettingsActionTypes.CONNECT_DOODLE_FEED:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          connectDoodleFeed: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.CONNECT_DOODLE_FEED_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          connectDoodleFeed: {
            loading: false,
            error: null,
            success: true
          }
        });
      }

    case SettingsActionTypes.CONNECT_DOODLE_FEED_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          connectDoodleFeed: {
            loading: false,
            error: action.error,
            success: false
          }
        });
      }

    case SettingsActionTypes.RESET_DOODLE_FEED:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          resetDoodleFeed: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.RESET_DOODLE_FEED_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          resetDoodleFeed: {
            loading: false,
            error: null,
            success: true
          },
          doodleFeed: action.feed
        });
      }

    case SettingsActionTypes.RESET_DOODLE_FEED_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          resetDoodleFeed: {
            loading: false,
            error: action.error,
            success: false
          }
        });
      }

    case SettingsActionTypes.DELETE_ADDRESS_BOOK:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          deleteAddressBook: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.DELETE_ADDRESS_BOOK_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          deleteAddressBook: {
            loading: false,
            error: null,
            success: true
          }
        });
      }

    case SettingsActionTypes.DELETE_ADDRESS_BOOK_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          deleteAddressBook: {
            loading: false,
            error: action.error,
            success: false
          }
        });
      }

    case SettingsActionTypes.LOGOUT_APPS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          logoutApps: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.LOGOUT_APPS_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          logoutApps: {
            loading: false,
            error: null,
            success: true
          }
        });
      }

    case SettingsActionTypes.LOGOUT_APPS_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          logoutApps: {
            loading: false,
            error: action.error,
            success: false
          }
        });
      }

    case SettingsActionTypes.GET_APPS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          getApps: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.GET_APPS_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          getApps: {
            loading: false,
            error: null,
            success: true
          },
          apps: action.apps
        });
      }

    case SettingsActionTypes.GET_APPS_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          getApps: {
            loading: false,
            error: action.error,
            success: false
          }
        });
      }

    case SettingsActionTypes.SAVE_AVATAR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveAvatar: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.SAVE_AVATAR_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveAvatar: {
            loading: false,
            error: null,
            success: true
          }
        });
      }

    case SettingsActionTypes.SAVE_AVATAR_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveAvatar: {
            loading: false,
            error: action.error,
            success: false
          }
        });
      }

    case SettingsActionTypes.DELETE_AVATAR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          deleteAvatar: {
            loading: true,
            error: null,
            success: false
          }
        });
      }

    case SettingsActionTypes.DELETE_AVATAR_SUCCESS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          deleteAvatar: {
            loading: false,
            error: null,
            success: true
          }
        });
      }

    case SettingsActionTypes.DELETE_AVATAR_ERROR:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          deleteAvatar: {
            loading: false,
            error: action.error,
            success: false
          }
        });
      }

    case SettingsActionTypes.DISMISS_NOTIFICATIONS_NAGS:
    case SettingsActionTypes.DISMISS_PREMIUM_NAGS:
    case SettingsActionTypes.DISMISS_CALENDARS_NAGS:
      {
        return _objectSpread$2(_objectSpread$2({}, state), {}, {
          saveUser: _objectSpread$2({}, initialSettingsState.saveUser)
        });
      }

    default:
      return state;
  }
};
var createSettingsReducer = function createSettingsReducer() {
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  return _defineProperty__default['default']({}, options.domain || 'userSettings', settingsReducer);
};

var initialConnectCalendarState = {
  connectCalendar: {
    loading: false,
    error: null,
    success: false,
    provider: ''
  },
  connectAddressBook: {
    loading: false,
    error: null,
    success: false,
    provider: ''
  }
};

var createConnectCalendarState = function createConnectCalendarState() {
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  return _defineProperty__default['default']({}, options.domain || 'userConnectCalendar', options.initialState);
};

function ownKeys$3(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context; _forEachInstanceProperty__default['default'](_context = ownKeys$3(Object(source), true)).call(_context, function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context2; _forEachInstanceProperty__default['default'](_context2 = ownKeys$3(Object(source))).call(_context2, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }
var connectCalendarReducer = function connectCalendarReducer() {
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialConnectCalendarState;
  var action = arguments.length > 1 ? arguments[1] : undefined;

  switch (action.type) {
    case ConnectCalendarActionTypes.CONNECT_CALENDAR:
      {
        return _objectSpread$3(_objectSpread$3({}, state), {}, {
          connectCalendar: {
            loading: true,
            error: null,
            success: false,
            provider: action.provider
          }
        });
      }

    case ConnectCalendarActionTypes.CONNECT_CALENDAR_SUCCESS:
      {
        return _objectSpread$3(_objectSpread$3({}, state), {}, {
          connectCalendar: _objectSpread$3(_objectSpread$3({}, state.connectCalendar), {}, {
            loading: false,
            error: null,
            success: true
          })
        });
      }

    case ConnectCalendarActionTypes.CONNECT_CALENDAR_ERROR:
      {
        return _objectSpread$3(_objectSpread$3({}, state), {}, {
          connectCalendar: _objectSpread$3(_objectSpread$3({}, state.connectCalendar), {}, {
            loading: false,
            error: action.error,
            success: false
          })
        });
      }

    case ConnectCalendarActionTypes.CONNECT_ADDRESS_BOOK:
      {
        return _objectSpread$3(_objectSpread$3({}, state), {}, {
          connectAddressBook: {
            loading: true,
            error: null,
            success: false,
            provider: action.provider
          }
        });
      }

    case ConnectCalendarActionTypes.CONNECT_ADDRESS_BOOK_SUCCESS:
      {
        return _objectSpread$3(_objectSpread$3({}, state), {}, {
          connectAddressBook: _objectSpread$3(_objectSpread$3({}, state.connectAddressBook), {}, {
            loading: false,
            error: null,
            success: true
          })
        });
      }

    case ConnectCalendarActionTypes.CONNECT_ADDRESS_BOOK_ERROR:
      {
        return _objectSpread$3(_objectSpread$3({}, state), {}, {
          connectAddressBook: _objectSpread$3(_objectSpread$3({}, state.connectAddressBook), {}, {
            loading: false,
            error: action.error,
            success: false
          })
        });
      }
    // for resetting error when opening/closing modal dialogs:

    case ConnectCalendarActionTypes.RESET_CONNECT_CALENDAR_NAGS:
      {
        return _objectSpread$3({}, initialConnectCalendarState);
      }

    default:
      return state;
  }
};
var createConnectCalendarReducer = function createConnectCalendarReducer() {
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  return _defineProperty__default['default']({}, options.domain || 'userConnectCalendar', connectCalendarReducer);
};

var initialSelectPrimaryCalendarState = {
  selectPrimaryCalendar: {
    loading: false,
    error: null,
    success: false,
    calendarId: ''
  }
};

function ownKeys$4(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context; _forEachInstanceProperty__default['default'](_context = ownKeys$4(Object(source), true)).call(_context, function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context2; _forEachInstanceProperty__default['default'](_context2 = ownKeys$4(Object(source))).call(_context2, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }
var selectPrimaryCalendarReducer = function selectPrimaryCalendarReducer() {
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialSelectPrimaryCalendarState;
  var action = arguments.length > 1 ? arguments[1] : undefined;

  switch (action.type) {
    case SelectPrimaryCalendarActionTypes.SELECT_PRIMARY_CALENDAR:
      {
        return _objectSpread$4(_objectSpread$4({}, state), {}, {
          selectPrimaryCalendar: {
            loading: true,
            error: null,
            success: false,
            calendarId: action.calendarId
          }
        });
      }

    case SelectPrimaryCalendarActionTypes.SELECT_PRIMARY_CALENDAR_SUCCESS:
      {
        return _objectSpread$4(_objectSpread$4({}, state), {}, {
          selectPrimaryCalendar: _objectSpread$4(_objectSpread$4({}, state.selectPrimaryCalendar), {}, {
            loading: false,
            error: null,
            success: true
          })
        });
      }

    case SelectPrimaryCalendarActionTypes.SELECT_PRIMARY_CALENDAR_ERROR:
      {
        return _objectSpread$4(_objectSpread$4({}, state), {}, {
          selectPrimaryCalendar: _objectSpread$4(_objectSpread$4({}, state.selectPrimaryCalendar), {}, {
            loading: false,
            error: action.error,
            success: false
          })
        });
      }

    default:
      return state;
  }
};
var createSelectPrimaryCalendarReducer = function createSelectPrimaryCalendarReducer() {
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  return _defineProperty__default['default']({}, options.domain || 'userSelectPrimaryCalendar', selectPrimaryCalendarReducer);
};

var CONSTANTS = {
  errorTypes: {
    invalid: 'invalid',
    unknown: 'unknown',
    unreachable: 'unreachable',
    missing: 'missing',
    tooLong: 'too-long',
    tooShort: 'too-short',
    alreadyUsed: 'already-used',
    invalidWithThirdParty: 'invalid-with-thirdparty',
    notActivated: 'not-activated'
  },
  userType: {
    premium: 'premium user',
    free: 'free user'
  },
  userPlan: {
    business: 'business',
    indvidual: 'individual',
    free: 'free',
    trial: 'TRIAL'
  },
  timeZone: {
    undefined: 'floating'
  }
};

function ownKeys$5(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context2; _forEachInstanceProperty__default['default'](_context2 = ownKeys$5(Object(source), true)).call(_context2, function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context3; _forEachInstanceProperty__default['default'](_context3 = ownKeys$5(Object(source))).call(_context3, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }
var errorHandler = function errorHandler(error) {
  if (error.details && error.details.errors) {
    var _context;

    // transform errors to lower-case
    var errors = _reduceInstanceProperty__default['default'](_context = _Object$keys__default['default'](error.details.errors)).call(_context, function (memo, key) {
      return _Object$assign__default['default'](memo, _defineProperty__default['default']({}, key.toLowerCase(), error.details.errors[key].toLowerCase().replace(/_/g, '-')));
    }, {});

    throw errors;
  }

  var unknown = _objectSpread$5(_objectSpread$5({}, error), {}, {
    api: CONSTANTS.errorTypes.unknown
  });

  if (error.errorType === 'UNKNOWN') {
    throw unknown;
  }

  if (!error.response) {
    var unreachable = {
      api: CONSTANTS.errorTypes.unreachable
    };
    throw unreachable;
  }

  throw unknown;
};
/**
 * Fetch response handler
 */

var responseHandler = function responseHandler(response) {
  var headers = response.headers;
  var contentType = headers.get('content-type');

  if (contentType && _includesInstanceProperty__default['default'](contentType).call(contentType, 'application/json')) {
    if (response.status >= 200 && response.status < 300) {
      return response.json();
    }

    return response.json().then(errorHandler);
  }

  if (response.status >= 200 && response.status < 300) {
    return response.text();
  }

  return response.text().then(errorHandler);
};

function ownKeys$6(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread$6(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context3; _forEachInstanceProperty__default['default'](_context3 = ownKeys$6(Object(source), true)).call(_context3, function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context4; _forEachInstanceProperty__default['default'](_context4 = ownKeys$6(Object(source))).call(_context4, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }
var API = {
  me: function me(authToken, options) {
    var fetchOptions = {
      headers: _objectSpread$6({
        Accept: 'application/json',
        Authorization: "Bearer ".concat(authToken)
      }, options.headers)
    };

    if (options.method) {
      fetchOptions.method = options.method;
    }

    if (options.body) {
      fetchOptions.body = options.body;
    }

    return fetch("".concat(options.url, "/me"), fetchOptions)["catch"](errorHandler).then(responseHandler);
  },
  loadTheme: function loadTheme(authToken, mandatorId, options) {
    var _context;

    return fetch(_concatInstanceProperty__default['default'](_context = "".concat(options.premiumUrl, "/themes/")).call(_context, mandatorId), {
      method: 'GET',
      headers: {
        Accept: 'application/json',
        Authorization: "Bearer ".concat(authToken)
      }
    })["catch"](errorHandler).then(responseHandler);
  },
  loadBranding: function loadBranding(authToken, mandatorId, options) {
    var _context2;

    return fetch(_concatInstanceProperty__default['default'](_context2 = "".concat(options.url, "/me/branding/")).call(_context2, mandatorId), {
      method: 'GET',
      headers: {
        Accept: 'application/json',
        Authorization: "Bearer ".concat(authToken)
      }
    })["catch"](errorHandler).then(responseHandler);
  },
  resendActivation: function resendActivation(id, email, options) {
    return fetch("".concat(options.url, "/resend-activation"), {
      method: 'POST',
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json'
      },
      body: _JSON$stringify__default['default']({
        id: id,
        email: email
      })
    })["catch"](errorHandler).then(responseHandler);
  },
  logout: function logout(options) {
    return fetch("".concat(options.url, "/logout"), {
      method: 'POST',
      credentials: 'include'
    });
  }
};

var _marked = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(storeStateData),
    _marked2 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(clearLocalUserData),
    _marked3 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchStoreChanges);
var WIZARD_STATE = 'wizardState';
/**
 * Persists part of the user state in the local storage, so that it gets used as initial
 * state on next load.
 * Note: DON'T STORE ANY SENSITIVE USER INFORMATION SUCH AS:
 * - name
 * - email
 * - password
 * - access token[^1]
 *
 * [^1]: We need to store the access token because the current authentication mechanism requires
 * it to be there :(
 *
 * @param {string} options.domain The optional domain of the user store.
 */

function storeStateData(options) {
  var state, theme;
  return _regeneratorRuntime__default['default'].wrap(function storeStateData$(_context) {
    while (1) {
      switch (_context.prev = _context.next) {
        case 0:
          _context.prev = 0;
          _context.next = 3;
          return effects.select(function (globalState) {
            return globalState[options.domain || 'user'];
          });

        case 3:
          state = _context.sent;
          theme = state.theme;
          _context.next = 7;
          return effects.call(storage.storeState, {
            theme: theme
          });

        case 7:
          _context.next = 11;
          break;

        case 9:
          _context.prev = 9;
          _context.t0 = _context["catch"](0);

        case 11:
        case "end":
          return _context.stop();
      }
    }
  }, _marked, null, [[0, 9]]);
}
/**
 * Removes user-specific data from cookies, local and session storage.
 */


function clearLocalUserData(options) {
  return _regeneratorRuntime__default['default'].wrap(function clearLocalUserData$(_context2) {
    while (1) {
      switch (_context2.prev = _context2.next) {
        case 0:
          _context2.next = 2;
          return effects.call(API.logout, options);

        case 2:
          try {
            storage.deleteCookie(WIZARD_STATE, {
              domain: options.cookieDomain
            });
            sessionStorage.removeItem(WIZARD_STATE);
            storage.deleteState();
          } catch (e) {// fail silently for storage
          }

          _context2.next = 5;
          return effects.put(logoutFinished());

        case 5:
        case "end":
          return _context2.stop();
      }
    }
  }, _marked2);
}

var DEFAULT_WATCH_STORE_OPTIONS = {
  clearStorageOnBoot: false
};
/**
 * @param {boolean} options.clearStorageOnBoot whether to clear the user data from local storage on boot
 */

function watchStoreChanges() {
  var options,
      _args3 = arguments;
  return _regeneratorRuntime__default['default'].wrap(function watchStoreChanges$(_context3) {
    while (1) {
      switch (_context3.prev = _context3.next) {
        case 0:
          options = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : DEFAULT_WATCH_STORE_OPTIONS;

          if (options.clearStorageOnBoot === true) {
            // Clears the local storage so that a possibly invalid access token is removed. This should only
            // be done on a login/signup frontend, which would call the endpoint /access-token-from-cookie.
            // The reason to do this is that we don't do any check on the validity of the access token. If
            // the user is redirected to another frontend (i.e. dashboard) and the access token is not valid,
            // she would be redirected again to the login frontend, causing an endless loop. So always make
            // sure that, on a login screen, the access token is reset and refreshed using the authentication
            // cookies. If the access token cannot be refreshed with the cookies, it means that the cookies
            // are invalid or expired, and the user needs to login again.
            storage.deleteState();
          }

          _context3.next = 4;
          return effects.all([effects.takeLatest([ActionTypes.LOAD_THEME_SUCCESS, ActionTypes.LOAD_THEME_ERROR, ActionTypes.LOAD_BRANDING_SUCCESS, ActionTypes.LOAD_BRANDING_ERROR, SettingsActionTypes.UPLOAD_BACKGROUND_SUCCESS, SettingsActionTypes.UPLOAD_LOGO_SUCCESS, SettingsActionTypes.REMOVE_BACKGROUND_SUCCESS, SettingsActionTypes.REMOVE_LOGO_SUCCESS, SettingsActionTypes.SAVE_BACKGROUND_COLOR_SUCCESS, SettingsActionTypes.SAVE_TILE_BACKGROUND_SUCCESS, SettingsActionTypes.SAVE_BRANDING_SUCCESS, ActionTypes.LOGOUT], storeStateData, options), effects.takeLatest(ActionTypes.LOGOUT, clearLocalUserData, options)]);

        case 4:
        case "end":
          return _context3.stop();
      }
    }
  }, _marked3);
}

var _marked$1 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onLoadUser),
    _marked2$1 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onLoadTheme),
    _marked3$1 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onLoadBranding),
    _marked4 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchLoadUser),
    _marked5 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchLoadTheme),
    _marked6 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchLoadBranding);

function onLoadUser(options, _ref) {
  var authToken, user;
  return _regeneratorRuntime__default['default'].wrap(function onLoadUser$(_context) {
    while (1) {
      switch (_context.prev = _context.next) {
        case 0:
          authToken = _ref.authToken;
          _context.prev = 1;
          _context.next = 4;
          return effects.call(API.me, authToken, options);

        case 4:
          user = _context.sent;
          _context.next = 12;
          break;

        case 7:
          _context.prev = 7;
          _context.t0 = _context["catch"](1);
          _context.next = 11;
          return effects.put(userLoadFailed(_context.t0));

        case 11:
          return _context.abrupt("return");

        case 12:
          _context.next = 14;
          return effects.put(userLoaded(user));

        case 14:
          if (!(user.premium && user.premium.active && user.premium.active.id)) {
            _context.next = 17;
            break;
          }

          _context.next = 17;
          return effects.put(loadTheme(authToken));

        case 17:
          if (!(user.mandator && user.mandator.id)) {
            _context.next = 20;
            break;
          }

          _context.next = 20;
          return effects.put(loadBranding(authToken));

        case 20:
        case "end":
          return _context.stop();
      }
    }
  }, _marked$1, null, [[1, 7]]);
}

function onLoadTheme(options, _ref2) {
  var authToken, userData, mandatorId, theme;
  return _regeneratorRuntime__default['default'].wrap(function onLoadTheme$(_context2) {
    while (1) {
      switch (_context2.prev = _context2.next) {
        case 0:
          authToken = _ref2.authToken;
          _context2.prev = 1;
          _context2.next = 4;
          return effects.select(function (state) {
            return state.user.data;
          });

        case 4:
          userData = _context2.sent;
          mandatorId = userData.premium && userData.premium.active && userData.premium.active.id;
          _context2.next = 8;
          return effects.call(API.loadTheme, authToken, mandatorId, options);

        case 8:
          theme = _context2.sent;
          _context2.next = 11;
          return effects.put(loadThemeSuccess(theme));

        case 11:
          _context2.next = 17;
          break;

        case 13:
          _context2.prev = 13;
          _context2.t0 = _context2["catch"](1);
          _context2.next = 17;
          return effects.put(loadThemeError(_context2.t0));

        case 17:
        case "end":
          return _context2.stop();
      }
    }
  }, _marked2$1, null, [[1, 13]]);
}

function onLoadBranding(options, _ref3) {
  var authToken, userData, mandatorId, branding;
  return _regeneratorRuntime__default['default'].wrap(function onLoadBranding$(_context3) {
    while (1) {
      switch (_context3.prev = _context3.next) {
        case 0:
          authToken = _ref3.authToken;
          _context3.prev = 1;
          _context3.next = 4;
          return effects.select(function (state) {
            return state.user.data;
          });

        case 4:
          userData = _context3.sent;
          mandatorId = userData.mandator.id;
          _context3.next = 8;
          return effects.call(API.loadBranding, authToken, mandatorId, options);

        case 8:
          branding = _context3.sent;
          _context3.next = 11;
          return effects.put(loadBrandingSuccess(branding));

        case 11:
          _context3.next = 17;
          break;

        case 13:
          _context3.prev = 13;
          _context3.t0 = _context3["catch"](1);
          _context3.next = 17;
          return effects.put(loadBrandingError(_context3.t0));

        case 17:
        case "end":
          return _context3.stop();
      }
    }
  }, _marked3$1, null, [[1, 13]]);
}

function watchLoadUser(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchLoadUser$(_context4) {
    while (1) {
      switch (_context4.prev = _context4.next) {
        case 0:
          _context4.next = 2;
          return effects.takeLatest(ActionTypes.LOAD_USER, onLoadUser, options);

        case 2:
        case "end":
          return _context4.stop();
      }
    }
  }, _marked4);
}
function watchLoadTheme(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchLoadTheme$(_context5) {
    while (1) {
      switch (_context5.prev = _context5.next) {
        case 0:
          _context5.next = 2;
          return effects.takeLatest(ActionTypes.LOAD_THEME, onLoadTheme, options);

        case 2:
        case "end":
          return _context5.stop();
      }
    }
  }, _marked5);
}
function watchLoadBranding(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchLoadBranding$(_context6) {
    while (1) {
      switch (_context6.prev = _context6.next) {
        case 0:
          _context6.next = 2;
          return effects.takeLatest(ActionTypes.LOAD_BRANDING, onLoadBranding, options);

        case 2:
        case "end":
          return _context6.stop();
      }
    }
  }, _marked6);
}

var path = '/api/users';
var API$1 = {
  saveUser: function saveUser(authToken, data, options) {
    return fetch("".concat(options.url || path, "/me"), {
      method: 'PUT',
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json',
        Authorization: "Bearer ".concat(authToken)
      },
      body: _JSON$stringify__default['default'](data)
    })["catch"](errorHandler).then(responseHandler);
  },
  saveAvatar: function saveAvatar(authToken, data, type, options) {
    return fetch("".concat(options.url || path, "/me/avatar"), {
      method: 'POST',
      headers: {
        'Content-Type': type,
        Authorization: "Bearer ".concat(authToken)
      },
      body: data
    })["catch"](errorHandler).then(responseHandler);
  },
  deleteAvatar: function deleteAvatar(authToken, options) {
    return fetch("".concat(options.url || path, "/me/avatar"), {
      method: 'DELETE',
      headers: {
        Accept: 'application/json',
        Authorization: "Bearer ".concat(authToken)
      }
    })["catch"](errorHandler).then(responseHandler);
  },
  fetchPremiums: function fetchPremiums(authToken, options) {
    return fetch("".concat(options.url || path, "/me/mandators"), {
      headers: {
        Accept: 'application/json',
        Authorization: "Bearer ".concat(authToken)
      }
    })["catch"](errorHandler).then(responseHandler);
  },
  deleteThirdParty: function deleteThirdParty(authToken, id, options) {
    var _context;

    return fetch(_concatInstanceProperty__default['default'](_context = "".concat(options.url || path, "/me/thirdpartyaccounts/")).call(_context, id), {
      method: 'DELETE',
      headers: {
        Accept: 'application/json',
        Authorization: "Bearer ".concat(authToken)
      }
    })["catch"](errorHandler).then(responseHandler);
  },
  deleteAccount: function deleteAccount(authToken, password, options) {
    return fetch("".concat(options.url || path, "/me"), {
      method: 'DELETE',
      headers: {
        Accept: 'application/json',
        Authorization: "Bearer ".concat(authToken),
        'Content-Type': 'application/json'
      },
      body: _JSON$stringify__default['default'](password)
    })["catch"](errorHandler).then(responseHandler);
  },
  deleteCalendar: function deleteCalendar(authToken, id, options) {
    var _context2;

    return fetch(_concatInstanceProperty__default['default'](_context2 = "".concat(options.url || path, "/me/calendars/")).call(_context2, id), {
      method: 'DELETE',
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json',
        Authorization: "Bearer ".concat(authToken)
      }
    })["catch"](errorHandler).then(responseHandler);
  },
  getDoodleFeed: function getDoodleFeed(authToken, options) {
    return fetch("".concat(options.url || path, "/me/calendars/icsfeed"), {
      method: 'GET',
      headers: {
        Accept: 'application/json',
        Authorization: "Bearer ".concat(authToken)
      }
    })["catch"](errorHandler).then(responseHandler);
  },
  connectDoodleFeed: function connectDoodleFeed(authToken, url, options) {
    return fetch("".concat(options.url || path, "/me/calendars/icsfeed"), {
      method: 'POST',
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json',
        Authorization: "Bearer ".concat(authToken)
      },
      body: _JSON$stringify__default['default'](url)
    })["catch"](errorHandler).then(responseHandler);
  },
  resetDoodleFeed: function resetDoodleFeed(authToken, options) {
    return fetch("".concat(options.url || path, "/me/calendars/icsfeed"), {
      method: 'PUT',
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json',
        Authorization: "Bearer ".concat(authToken)
      }
    })["catch"](errorHandler).then(responseHandler);
  },
  deleteAddressBook: function deleteAddressBook(authToken, id, options) {
    var _context3;

    return fetch(_concatInstanceProperty__default['default'](_context3 = "".concat(options.url || path, "/me/addressbooks/")).call(_context3, id), {
      method: 'DELETE',
      headers: {
        Accept: 'application/json',
        Authorization: "Bearer ".concat(authToken)
      }
    })["catch"](errorHandler).then(responseHandler);
  },
  logoutApps: function logoutApps(authToken, options) {
    return fetch("".concat(options.url || path, "/me/tokens"), {
      method: 'DELETE',
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json',
        Authorization: "Bearer ".concat(authToken)
      }
    })["catch"](errorHandler).then(responseHandler);
  },
  getApps: function getApps(authToken, options) {
    return fetch("".concat(options.url || path, "/me/tokens"), {
      method: 'GET',
      headers: {
        Accept: 'application/json',
        Authorization: "Bearer ".concat(authToken)
      }
    })["catch"](errorHandler).then(responseHandler);
  },
  saveBranding: function saveBranding(authToken, data, options) {
    return fetch("".concat(options.url || path, "/me/branding"), {
      method: 'POST',
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json',
        Authorization: "Bearer ".concat(authToken)
      },
      body: _JSON$stringify__default['default'](data)
    })["catch"](errorHandler).then(responseHandler);
  },
  uploadLogo: function uploadLogo(authToken, data, type, options) {
    return fetch("".concat(options.url || path, "/me/branding/logo"), {
      method: 'POST',
      headers: {
        'Content-Type': type,
        Authorization: "Bearer ".concat(authToken)
      },
      body: data
    })["catch"](errorHandler).then(responseHandler);
  },
  removeLogo: function removeLogo(authToken, options) {
    return fetch("".concat(options.url || path, "/me/branding/logo"), {
      method: 'DELETE',
      headers: {
        Authorization: "Bearer ".concat(authToken)
      }
    })["catch"](errorHandler).then(responseHandler);
  },
  uploadBackground: function uploadBackground(authToken, data, type, options) {
    return fetch("".concat(options.url || path, "/me/branding/background"), {
      method: 'POST',
      headers: {
        'Content-Type': type,
        Authorization: "Bearer ".concat(authToken)
      },
      body: data
    })["catch"](errorHandler).then(responseHandler);
  },
  removeBackground: function removeBackground(authToken, options) {
    return fetch("".concat(options.url || path, "/me/branding/background"), {
      method: 'DELETE',
      headers: {
        Authorization: "Bearer ".concat(authToken)
      }
    })["catch"](errorHandler).then(responseHandler);
  }
};

function ownKeys$7(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread$7(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context48; _forEachInstanceProperty__default['default'](_context48 = ownKeys$7(Object(source), true)).call(_context48, function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context49; _forEachInstanceProperty__default['default'](_context49 = ownKeys$7(Object(source))).call(_context49, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }

var _marked$2 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onNewPasswordSave),
    _marked2$2 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onNewEmailSave),
    _marked3$2 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onUserSave),
    _marked4$1 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onAccountDelete),
    _marked5$1 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onThirdPartyDelete),
    _marked6$1 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onFetchPremiums),
    _marked7 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onSaveBranding),
    _marked8 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onLogoUpload),
    _marked9 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onLogoRemove),
    _marked10 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onBackgroundUpload),
    _marked11 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onBackgroundRemove),
    _marked12 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onSaveTileBackground),
    _marked13 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onSaveBackgroundColor),
    _marked14 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onLogout),
    _marked15 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onDeleteCalendar),
    _marked16 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onGetDoodleFeed),
    _marked17 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onConnectDoodleFeed),
    _marked18 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onResetDoodleFeed),
    _marked19 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onDeleteAddressBook),
    _marked20 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onLogoutApps),
    _marked21 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onGetApps),
    _marked22 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onSaveAvatar),
    _marked23 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onDeleteAvatar),
    _marked24 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchSaveNewPassword),
    _marked25 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchSaveEmail),
    _marked26 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchSaveUser),
    _marked27 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchDeleteAccount),
    _marked28 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchDeleteThirdParty),
    _marked29 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchFetchPremiums),
    _marked30 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchSaveBranding),
    _marked31 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchLogoUpload),
    _marked32 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchLogoRemove),
    _marked33 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchBackgroundUpload),
    _marked34 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchBackgroundRemove),
    _marked35 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchLogout),
    _marked36 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchDeleteCalendar),
    _marked37 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchGetDoodleFeed),
    _marked38 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchConnectDoodleFeed),
    _marked39 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchResetDoodleFeed),
    _marked40 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchDeleteAddressBook),
    _marked41 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchLogoutApps),
    _marked42 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchGetApps),
    _marked43 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchSaveAvatar),
    _marked44 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchDeleteAvatar),
    _marked45 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchSaveTileBackground),
    _marked46 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchSaveBackgroundColor),
    _marked47 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(settingsSaga);
function onNewPasswordSave(options, action) {
  var authToken, _action$payload, newPassword, currentPassword;

  return _regeneratorRuntime__default['default'].wrap(function onNewPasswordSave$(_context) {
    while (1) {
      switch (_context.prev = _context.next) {
        case 0:
          _context.prev = 0;
          authToken = action.authToken;
          _action$payload = action.payload, newPassword = _action$payload.newPassword, currentPassword = _action$payload.currentPassword;
          _context.next = 5;
          return effects.call(API$1.saveUser, authToken, {
            newPassword: newPassword,
            password: currentPassword
          }, options);

        case 5:
          _context.next = 7;
          return effects.put(saveNewPasswordSuccess());

        case 7:
          _context.next = 13;
          break;

        case 9:
          _context.prev = 9;
          _context.t0 = _context["catch"](0);
          _context.next = 13;
          return effects.put(saveNewPasswordError(_context.t0));

        case 13:
        case "end":
          return _context.stop();
      }
    }
  }, _marked$2, null, [[0, 9]]);
}
function onNewEmailSave(options, action) {
  var authToken, newEmail;
  return _regeneratorRuntime__default['default'].wrap(function onNewEmailSave$(_context2) {
    while (1) {
      switch (_context2.prev = _context2.next) {
        case 0:
          _context2.prev = 0;
          authToken = action.authToken;
          newEmail = action.newEmail;
          _context2.next = 5;
          return effects.call(API$1.saveUser, authToken, {
            newEmail: newEmail
          }, options);

        case 5:
          _context2.next = 7;
          return effects.put(saveNewEmailSuccess());

        case 7:
          _context2.next = 13;
          break;

        case 9:
          _context2.prev = 9;
          _context2.t0 = _context2["catch"](0);
          _context2.next = 13;
          return effects.put(saveNewEmailError(_context2.t0));

        case 13:
        case "end":
          return _context2.stop();
      }
    }
  }, _marked2$2, null, [[0, 9]]);
}
function onUserSave(options, action) {
  var authToken;
  return _regeneratorRuntime__default['default'].wrap(function onUserSave$(_context3) {
    while (1) {
      switch (_context3.prev = _context3.next) {
        case 0:
          _context3.prev = 0;
          authToken = action.authToken;
          _context3.next = 4;
          return effects.call(API$1.saveUser, authToken, action.data, options);

        case 4:
          _context3.next = 6;
          return effects.put(saveUserSuccess());

        case 6:
          _context3.next = 12;
          break;

        case 8:
          _context3.prev = 8;
          _context3.t0 = _context3["catch"](0);
          _context3.next = 12;
          return effects.put(saveUserError(_context3.t0));

        case 12:
        case "end":
          return _context3.stop();
      }
    }
  }, _marked3$2, null, [[0, 8]]);
}
function onAccountDelete(options, action) {
  var password, authToken;
  return _regeneratorRuntime__default['default'].wrap(function onAccountDelete$(_context4) {
    while (1) {
      switch (_context4.prev = _context4.next) {
        case 0:
          _context4.prev = 0;
          password = action.password, authToken = action.authToken;
          _context4.next = 4;
          return effects.call(API$1.deleteAccount, authToken, {
            password: password
          }, options);

        case 4:
          _context4.next = 6;
          return effects.put(deleteAccountSuccess());

        case 6:
          _context4.next = 12;
          break;

        case 8:
          _context4.prev = 8;
          _context4.t0 = _context4["catch"](0);
          _context4.next = 12;
          return effects.put(deleteAccountError(_context4.t0));

        case 12:
        case "end":
          return _context4.stop();
      }
    }
  }, _marked4$1, null, [[0, 8]]);
}
function onThirdPartyDelete(options, action) {
  var id, authToken, thirdPartyAccounts, account;
  return _regeneratorRuntime__default['default'].wrap(function onThirdPartyDelete$(_context5) {
    while (1) {
      switch (_context5.prev = _context5.next) {
        case 0:
          _context5.prev = 0;
          id = action.id, authToken = action.authToken;
          _context5.next = 4;
          return effects.select(function (state) {
            return state.user.data.thirdPartyAccounts;
          });

        case 4:
          thirdPartyAccounts = _context5.sent;
          account = _findInstanceProperty__default['default'](thirdPartyAccounts).call(thirdPartyAccounts, function (anAccount) {
            return anAccount.id === id;
          });
          _context5.next = 8;
          return effects.call(API$1.deleteThirdParty, authToken, id, options);

        case 8:
          _context5.next = 10;
          return effects.put(deleteThirdPartySuccess(account));

        case 10:
          _context5.next = 12;
          return effects.put(loadUser(authToken));

        case 12:
          _context5.next = 18;
          break;

        case 14:
          _context5.prev = 14;
          _context5.t0 = _context5["catch"](0);
          _context5.next = 18;
          return effects.put(deleteThirdPartyError(_context5.t0));

        case 18:
        case "end":
          return _context5.stop();
      }
    }
  }, _marked5$1, null, [[0, 14]]);
}
function onFetchPremiums(options, _ref) {
  var authToken, premiums;
  return _regeneratorRuntime__default['default'].wrap(function onFetchPremiums$(_context6) {
    while (1) {
      switch (_context6.prev = _context6.next) {
        case 0:
          authToken = _ref.authToken;
          _context6.prev = 1;
          _context6.next = 4;
          return effects.call(API$1.fetchPremiums, authToken, options);

        case 4:
          premiums = _context6.sent;
          _context6.next = 7;
          return effects.put(fetchPremiumsSuccess(premiums));

        case 7:
          _context6.next = 13;
          break;

        case 9:
          _context6.prev = 9;
          _context6.t0 = _context6["catch"](1);
          _context6.next = 13;
          return effects.put(fetchPremiumsError(_context6.t0));

        case 13:
        case "end":
          return _context6.stop();
      }
    }
  }, _marked6$1, null, [[1, 9]]);
}
function onSaveBranding(options, action) {
  var authToken, data, branding;
  return _regeneratorRuntime__default['default'].wrap(function onSaveBranding$(_context7) {
    while (1) {
      switch (_context7.prev = _context7.next) {
        case 0:
          _context7.prev = 0;
          authToken = action.authToken, data = action.data;
          _context7.next = 4;
          return effects.call(API$1.saveBranding, authToken, data, options);

        case 4:
          branding = _context7.sent;
          _context7.next = 7;
          return effects.put(saveBrandingSuccess(branding));

        case 7:
          _context7.next = 13;
          break;

        case 9:
          _context7.prev = 9;
          _context7.t0 = _context7["catch"](0);
          _context7.next = 13;
          return effects.put(saveBrandingError(_context7.t0));

        case 13:
        case "end":
          return _context7.stop();
      }
    }
  }, _marked7, null, [[0, 9]]);
}
function onLogoUpload(options, action) {
  var authToken, _action$payload2, file, fileType, response;

  return _regeneratorRuntime__default['default'].wrap(function onLogoUpload$(_context8) {
    while (1) {
      switch (_context8.prev = _context8.next) {
        case 0:
          _context8.prev = 0;
          authToken = action.authToken;
          _action$payload2 = action.payload, file = _action$payload2.file, fileType = _action$payload2.fileType;
          _context8.next = 5;
          return effects.call(API$1.uploadLogo, authToken, file, fileType, options);

        case 5:
          response = _context8.sent;
          _context8.next = 8;
          return effects.put(uploadLogoSuccess(response));

        case 8:
          _context8.next = 14;
          break;

        case 10:
          _context8.prev = 10;
          _context8.t0 = _context8["catch"](0);
          _context8.next = 14;
          return effects.put(uploadLogoError(_context8.t0));

        case 14:
        case "end":
          return _context8.stop();
      }
    }
  }, _marked8, null, [[0, 10]]);
}
function onLogoRemove(options, _ref2) {
  var authToken;
  return _regeneratorRuntime__default['default'].wrap(function onLogoRemove$(_context9) {
    while (1) {
      switch (_context9.prev = _context9.next) {
        case 0:
          authToken = _ref2.authToken;
          _context9.prev = 1;
          _context9.next = 4;
          return effects.call(API$1.removeLogo, authToken, options);

        case 4:
          _context9.next = 6;
          return effects.put(removeLogoSuccess());

        case 6:
          _context9.next = 12;
          break;

        case 8:
          _context9.prev = 8;
          _context9.t0 = _context9["catch"](1);
          _context9.next = 12;
          return effects.put(removeLogoError(_context9.t0));

        case 12:
        case "end":
          return _context9.stop();
      }
    }
  }, _marked9, null, [[1, 8]]);
}
function onBackgroundUpload(options, action) {
  var authToken, _action$payload3, file, fileType, response;

  return _regeneratorRuntime__default['default'].wrap(function onBackgroundUpload$(_context10) {
    while (1) {
      switch (_context10.prev = _context10.next) {
        case 0:
          _context10.prev = 0;
          authToken = action.authToken;
          _action$payload3 = action.payload, file = _action$payload3.file, fileType = _action$payload3.fileType;
          _context10.next = 5;
          return effects.call(API$1.uploadBackground, authToken, file, fileType, options);

        case 5:
          response = _context10.sent;
          _context10.next = 8;
          return effects.put(uploadBackgroundSuccess(response));

        case 8:
          _context10.next = 14;
          break;

        case 10:
          _context10.prev = 10;
          _context10.t0 = _context10["catch"](0);
          _context10.next = 14;
          return effects.put(uploadBackgroundError(_context10.t0));

        case 14:
        case "end":
          return _context10.stop();
      }
    }
  }, _marked10, null, [[0, 10]]);
}
function onBackgroundRemove(options, _ref3) {
  var authToken;
  return _regeneratorRuntime__default['default'].wrap(function onBackgroundRemove$(_context11) {
    while (1) {
      switch (_context11.prev = _context11.next) {
        case 0:
          authToken = _ref3.authToken;
          _context11.prev = 1;
          _context11.next = 4;
          return effects.call(API$1.removeBackground, authToken, options);

        case 4:
          _context11.next = 6;
          return effects.put(removeBackgroundSuccess());

        case 6:
          _context11.next = 12;
          break;

        case 8:
          _context11.prev = 8;
          _context11.t0 = _context11["catch"](1);
          _context11.next = 12;
          return effects.put(removeBackgroundError(_context11.t0));

        case 12:
        case "end":
          return _context11.stop();
      }
    }
  }, _marked11, null, [[1, 8]]);
}
function onSaveTileBackground(options, action) {
  var data, authToken, branding;
  return _regeneratorRuntime__default['default'].wrap(function onSaveTileBackground$(_context12) {
    while (1) {
      switch (_context12.prev = _context12.next) {
        case 0:
          _context12.prev = 0;
          data = action.data, authToken = action.authToken;
          _context12.next = 4;
          return effects.call(API$1.saveBranding, authToken, data, options);

        case 4:
          branding = _context12.sent;
          _context12.next = 7;
          return effects.put(saveTileBackgroundSuccess(branding));

        case 7:
          _context12.next = 13;
          break;

        case 9:
          _context12.prev = 9;
          _context12.t0 = _context12["catch"](0);
          _context12.next = 13;
          return effects.put(saveTileBackgroundError(_context12.t0));

        case 13:
        case "end":
          return _context12.stop();
      }
    }
  }, _marked12, null, [[0, 9]]);
}
function onSaveBackgroundColor(options, action) {
  var data, authToken, branding;
  return _regeneratorRuntime__default['default'].wrap(function onSaveBackgroundColor$(_context13) {
    while (1) {
      switch (_context13.prev = _context13.next) {
        case 0:
          _context13.prev = 0;
          data = action.data, authToken = action.authToken;
          _context13.next = 4;
          return effects.call(API$1.saveBranding, authToken, data, options);

        case 4:
          branding = _context13.sent;
          _context13.next = 7;
          return effects.put(saveBackgroundColorSuccess(branding));

        case 7:
          _context13.next = 13;
          break;

        case 9:
          _context13.prev = 9;
          _context13.t0 = _context13["catch"](0);
          _context13.next = 13;
          return effects.put(saveBackgroundColorError(_context13.t0));

        case 13:
        case "end":
          return _context13.stop();
      }
    }
  }, _marked13, null, [[0, 9]]);
}
function onLogout(options) {
  return _regeneratorRuntime__default['default'].wrap(function onLogout$(_context14) {
    while (1) {
      switch (_context14.prev = _context14.next) {
        case 0:
          _context14.next = 2;
          return effects.put(resetNags());

        case 2:
        case "end":
          return _context14.stop();
      }
    }
  }, _marked14);
}
function onDeleteCalendar(options, action) {
  var id, authToken, connectedCalendars, calendar;
  return _regeneratorRuntime__default['default'].wrap(function onDeleteCalendar$(_context15) {
    while (1) {
      switch (_context15.prev = _context15.next) {
        case 0:
          _context15.prev = 0;
          id = action.id, authToken = action.authToken;
          _context15.next = 4;
          return effects.select(function (state) {
            return state.user.data.calendarAccounts;
          });

        case 4:
          connectedCalendars = _context15.sent;
          calendar = _findInstanceProperty__default['default'](connectedCalendars).call(connectedCalendars, function (aCalendar) {
            return aCalendar.id === id;
          });
          _context15.next = 8;
          return effects.call(API$1.deleteCalendar, authToken, id, options);

        case 8:
          _context15.next = 10;
          return effects.put(deleteCalendarSuccess(calendar));

        case 10:
          _context15.next = 12;
          return effects.put(loadUser(authToken));

        case 12:
          _context15.next = 18;
          break;

        case 14:
          _context15.prev = 14;
          _context15.t0 = _context15["catch"](0);
          _context15.next = 18;
          return effects.put(deleteCalendarError(_context15.t0));

        case 18:
        case "end":
          return _context15.stop();
      }
    }
  }, _marked15, null, [[0, 14]]);
}
function onGetDoodleFeed(options, _ref4) {
  var authToken, feed;
  return _regeneratorRuntime__default['default'].wrap(function onGetDoodleFeed$(_context16) {
    while (1) {
      switch (_context16.prev = _context16.next) {
        case 0:
          authToken = _ref4.authToken;
          _context16.prev = 1;
          _context16.next = 4;
          return effects.call(API$1.getDoodleFeed, authToken, options);

        case 4:
          feed = _context16.sent;
          _context16.next = 7;
          return effects.put(getDoodleFeedSuccess(feed.url));

        case 7:
          _context16.next = 13;
          break;

        case 9:
          _context16.prev = 9;
          _context16.t0 = _context16["catch"](1);
          _context16.next = 13;
          return effects.put(getDoodleFeedError(_context16.t0));

        case 13:
        case "end":
          return _context16.stop();
      }
    }
  }, _marked16, null, [[1, 9]]);
}
function onConnectDoodleFeed(options, action) {
  var url, authToken;
  return _regeneratorRuntime__default['default'].wrap(function onConnectDoodleFeed$(_context17) {
    while (1) {
      switch (_context17.prev = _context17.next) {
        case 0:
          _context17.prev = 0;
          url = action.url, authToken = action.authToken;
          _context17.next = 4;
          return effects.call(API$1.connectDoodleFeed, authToken, {
            url: url
          }, options);

        case 4:
          _context17.next = 6;
          return effects.put(connectDoodleFeedSuccess());

        case 6:
          _context17.next = 8;
          return effects.put(loadUser(authToken));

        case 8:
          _context17.next = 14;
          break;

        case 10:
          _context17.prev = 10;
          _context17.t0 = _context17["catch"](0);
          _context17.next = 14;
          return effects.put(connectDoodleFeedError(_context17.t0));

        case 14:
        case "end":
          return _context17.stop();
      }
    }
  }, _marked17, null, [[0, 10]]);
}
function onResetDoodleFeed(options, _ref5) {
  var authToken, feed;
  return _regeneratorRuntime__default['default'].wrap(function onResetDoodleFeed$(_context18) {
    while (1) {
      switch (_context18.prev = _context18.next) {
        case 0:
          authToken = _ref5.authToken;
          _context18.prev = 1;
          _context18.next = 4;
          return effects.call(API$1.resetDoodleFeed, authToken, options);

        case 4:
          feed = _context18.sent;
          _context18.next = 7;
          return effects.put(resetDoodleFeedSuccess(feed.url));

        case 7:
          _context18.next = 13;
          break;

        case 9:
          _context18.prev = 9;
          _context18.t0 = _context18["catch"](1);
          _context18.next = 13;
          return effects.put(resetDoodleFeedError(_context18.t0));

        case 13:
        case "end":
          return _context18.stop();
      }
    }
  }, _marked18, null, [[1, 9]]);
}

function findAddressBookById(addressBooks, id) {
  var provider;
  var addressBook;

  for (var i = 0; i < addressBooks.length; i += 1) {
    provider = addressBooks[i];

    for (var j = 0; j < addressBooks.length; j += 1) {
      addressBook = provider.addressBooks[j];

      if (addressBook.id === id) {
        return _objectSpread$7({
          accountType: provider.accountType
        }, addressBook);
      }
    }
  }
}

function onDeleteAddressBook(options, action) {
  var id, authToken, connectedBooks, addressBook;
  return _regeneratorRuntime__default['default'].wrap(function onDeleteAddressBook$(_context19) {
    while (1) {
      switch (_context19.prev = _context19.next) {
        case 0:
          _context19.prev = 0;
          id = action.id, authToken = action.authToken;
          _context19.next = 4;
          return effects.select(function (state) {
            return state.user.data.addressBooks;
          });

        case 4:
          connectedBooks = _context19.sent;
          addressBook = findAddressBookById(connectedBooks, id);
          _context19.next = 8;
          return effects.call(API$1.deleteAddressBook, authToken, id, options);

        case 8:
          _context19.next = 10;
          return effects.put(deleteAddressBookSuccess(addressBook));

        case 10:
          _context19.next = 12;
          return effects.put(loadUser(authToken));

        case 12:
          _context19.next = 18;
          break;

        case 14:
          _context19.prev = 14;
          _context19.t0 = _context19["catch"](0);
          _context19.next = 18;
          return effects.put(deleteAddressBookError(_context19.t0));

        case 18:
        case "end":
          return _context19.stop();
      }
    }
  }, _marked19, null, [[0, 14]]);
}
function onLogoutApps(options, _ref6) {
  var authToken;
  return _regeneratorRuntime__default['default'].wrap(function onLogoutApps$(_context20) {
    while (1) {
      switch (_context20.prev = _context20.next) {
        case 0:
          authToken = _ref6.authToken;
          _context20.prev = 1;
          _context20.next = 4;
          return effects.call(API$1.logoutApps, authToken, options);

        case 4:
          _context20.next = 6;
          return effects.put(logoutAppsSuccess());

        case 6:
          _context20.next = 8;
          return effects.put(logout());

        case 8:
          _context20.next = 14;
          break;

        case 10:
          _context20.prev = 10;
          _context20.t0 = _context20["catch"](1);
          _context20.next = 14;
          return effects.put(logoutAppsError(_context20.t0));

        case 14:
        case "end":
          return _context20.stop();
      }
    }
  }, _marked20, null, [[1, 10]]);
}
function onGetApps(options, _ref7) {
  var authToken, apps;
  return _regeneratorRuntime__default['default'].wrap(function onGetApps$(_context21) {
    while (1) {
      switch (_context21.prev = _context21.next) {
        case 0:
          authToken = _ref7.authToken;
          _context21.prev = 1;
          _context21.next = 4;
          return effects.call(API$1.getApps, authToken, options);

        case 4:
          apps = _context21.sent;
          _context21.next = 7;
          return effects.put(getAppsSuccess(apps));

        case 7:
          _context21.next = 13;
          break;

        case 9:
          _context21.prev = 9;
          _context21.t0 = _context21["catch"](1);
          _context21.next = 13;
          return effects.put(getAppsError(_context21.t0));

        case 13:
        case "end":
          return _context21.stop();
      }
    }
  }, _marked21, null, [[1, 9]]);
}
function onSaveAvatar(options, action) {
  var authToken, _action$payload4, file, fileType;

  return _regeneratorRuntime__default['default'].wrap(function onSaveAvatar$(_context22) {
    while (1) {
      switch (_context22.prev = _context22.next) {
        case 0:
          _context22.prev = 0;
          authToken = action.authToken;
          _action$payload4 = action.payload, file = _action$payload4.file, fileType = _action$payload4.fileType;
          _context22.next = 5;
          return effects.call(API$1.saveAvatar, authToken, file, fileType, options);

        case 5:
          _context22.next = 7;
          return effects.put(saveAvatarSuccess());

        case 7:
          _context22.next = 13;
          break;

        case 9:
          _context22.prev = 9;
          _context22.t0 = _context22["catch"](0);
          _context22.next = 13;
          return effects.put(saveAvatarError(_context22.t0));

        case 13:
        case "end":
          return _context22.stop();
      }
    }
  }, _marked22, null, [[0, 9]]);
}
function onDeleteAvatar(options, _ref8) {
  var authToken;
  return _regeneratorRuntime__default['default'].wrap(function onDeleteAvatar$(_context23) {
    while (1) {
      switch (_context23.prev = _context23.next) {
        case 0:
          authToken = _ref8.authToken;
          _context23.prev = 1;
          _context23.next = 4;
          return effects.call(API$1.deleteAvatar, authToken, options);

        case 4:
          _context23.next = 6;
          return effects.put(deleteAvatarSuccess());

        case 6:
          _context23.next = 12;
          break;

        case 8:
          _context23.prev = 8;
          _context23.t0 = _context23["catch"](1);
          _context23.next = 12;
          return effects.put(deleteAvatarError(_context23.t0));

        case 12:
        case "end":
          return _context23.stop();
      }
    }
  }, _marked23, null, [[1, 8]]);
}
function watchSaveNewPassword(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchSaveNewPassword$(_context24) {
    while (1) {
      switch (_context24.prev = _context24.next) {
        case 0:
          _context24.next = 2;
          return effects.takeLatest(SettingsActionTypes.SAVE_NEW_PASSWORD, onNewPasswordSave, options);

        case 2:
        case "end":
          return _context24.stop();
      }
    }
  }, _marked24);
}
function watchSaveEmail(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchSaveEmail$(_context25) {
    while (1) {
      switch (_context25.prev = _context25.next) {
        case 0:
          _context25.next = 2;
          return effects.takeLatest(SettingsActionTypes.SAVE_NEW_EMAIL, onNewEmailSave, options);

        case 2:
        case "end":
          return _context25.stop();
      }
    }
  }, _marked25);
}
function watchSaveUser(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchSaveUser$(_context26) {
    while (1) {
      switch (_context26.prev = _context26.next) {
        case 0:
          _context26.next = 2;
          return effects.takeLatest(SettingsActionTypes.SAVE_USER, onUserSave, options);

        case 2:
        case "end":
          return _context26.stop();
      }
    }
  }, _marked26);
}
function watchDeleteAccount(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchDeleteAccount$(_context27) {
    while (1) {
      switch (_context27.prev = _context27.next) {
        case 0:
          _context27.next = 2;
          return effects.takeLatest(SettingsActionTypes.DELETE_ACCOUNT, onAccountDelete, options);

        case 2:
        case "end":
          return _context27.stop();
      }
    }
  }, _marked27);
}
function watchDeleteThirdParty(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchDeleteThirdParty$(_context28) {
    while (1) {
      switch (_context28.prev = _context28.next) {
        case 0:
          _context28.next = 2;
          return effects.takeLatest(SettingsActionTypes.DELETE_THIRD_PARTY, onThirdPartyDelete, options);

        case 2:
        case "end":
          return _context28.stop();
      }
    }
  }, _marked28);
}
function watchFetchPremiums(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchFetchPremiums$(_context29) {
    while (1) {
      switch (_context29.prev = _context29.next) {
        case 0:
          _context29.next = 2;
          return effects.takeLatest(SettingsActionTypes.FETCH_PREMIUMS, onFetchPremiums, options);

        case 2:
        case "end":
          return _context29.stop();
      }
    }
  }, _marked29);
}
function watchSaveBranding(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchSaveBranding$(_context30) {
    while (1) {
      switch (_context30.prev = _context30.next) {
        case 0:
          _context30.next = 2;
          return effects.takeLatest(SettingsActionTypes.SAVE_BRANDING, onSaveBranding, options);

        case 2:
        case "end":
          return _context30.stop();
      }
    }
  }, _marked30);
}
function watchLogoUpload(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchLogoUpload$(_context31) {
    while (1) {
      switch (_context31.prev = _context31.next) {
        case 0:
          _context31.next = 2;
          return effects.takeLatest(SettingsActionTypes.UPLOAD_LOGO, onLogoUpload, options);

        case 2:
        case "end":
          return _context31.stop();
      }
    }
  }, _marked31);
}
function watchLogoRemove(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchLogoRemove$(_context32) {
    while (1) {
      switch (_context32.prev = _context32.next) {
        case 0:
          _context32.next = 2;
          return effects.takeLatest(SettingsActionTypes.REMOVE_LOGO, onLogoRemove, options);

        case 2:
        case "end":
          return _context32.stop();
      }
    }
  }, _marked32);
}
function watchBackgroundUpload(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchBackgroundUpload$(_context33) {
    while (1) {
      switch (_context33.prev = _context33.next) {
        case 0:
          _context33.next = 2;
          return effects.takeLatest(SettingsActionTypes.UPLOAD_BACKGROUND, onBackgroundUpload, options);

        case 2:
        case "end":
          return _context33.stop();
      }
    }
  }, _marked33);
}
function watchBackgroundRemove(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchBackgroundRemove$(_context34) {
    while (1) {
      switch (_context34.prev = _context34.next) {
        case 0:
          _context34.next = 2;
          return effects.takeLatest(SettingsActionTypes.REMOVE_BACKGROUND, onBackgroundRemove, options);

        case 2:
        case "end":
          return _context34.stop();
      }
    }
  }, _marked34);
}
function watchLogout(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchLogout$(_context35) {
    while (1) {
      switch (_context35.prev = _context35.next) {
        case 0:
          _context35.next = 2;
          return effects.takeLatest(ActionTypes.LOGOUT, onLogout, options);

        case 2:
        case "end":
          return _context35.stop();
      }
    }
  }, _marked35);
}
function watchDeleteCalendar(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchDeleteCalendar$(_context36) {
    while (1) {
      switch (_context36.prev = _context36.next) {
        case 0:
          _context36.next = 2;
          return effects.takeLatest(SettingsActionTypes.DELETE_CALENDAR, onDeleteCalendar, options);

        case 2:
        case "end":
          return _context36.stop();
      }
    }
  }, _marked36);
}
function watchGetDoodleFeed(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchGetDoodleFeed$(_context37) {
    while (1) {
      switch (_context37.prev = _context37.next) {
        case 0:
          _context37.next = 2;
          return effects.takeLatest(SettingsActionTypes.GET_DOODLE_FEED, onGetDoodleFeed, options);

        case 2:
        case "end":
          return _context37.stop();
      }
    }
  }, _marked37);
}
function watchConnectDoodleFeed(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchConnectDoodleFeed$(_context38) {
    while (1) {
      switch (_context38.prev = _context38.next) {
        case 0:
          _context38.next = 2;
          return effects.takeLatest(SettingsActionTypes.CONNECT_DOODLE_FEED, onConnectDoodleFeed, options);

        case 2:
        case "end":
          return _context38.stop();
      }
    }
  }, _marked38);
}
function watchResetDoodleFeed(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchResetDoodleFeed$(_context39) {
    while (1) {
      switch (_context39.prev = _context39.next) {
        case 0:
          _context39.next = 2;
          return effects.takeLatest(SettingsActionTypes.RESET_DOODLE_FEED, onResetDoodleFeed, options);

        case 2:
        case "end":
          return _context39.stop();
      }
    }
  }, _marked39);
}
function watchDeleteAddressBook(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchDeleteAddressBook$(_context40) {
    while (1) {
      switch (_context40.prev = _context40.next) {
        case 0:
          _context40.next = 2;
          return effects.takeLatest(SettingsActionTypes.DELETE_ADDRESS_BOOK, onDeleteAddressBook, options);

        case 2:
        case "end":
          return _context40.stop();
      }
    }
  }, _marked40);
}
function watchLogoutApps(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchLogoutApps$(_context41) {
    while (1) {
      switch (_context41.prev = _context41.next) {
        case 0:
          _context41.next = 2;
          return effects.takeLatest(SettingsActionTypes.LOGOUT_APPS, onLogoutApps, options);

        case 2:
        case "end":
          return _context41.stop();
      }
    }
  }, _marked41);
}
function watchGetApps(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchGetApps$(_context42) {
    while (1) {
      switch (_context42.prev = _context42.next) {
        case 0:
          _context42.next = 2;
          return effects.takeLatest(SettingsActionTypes.GET_APPS, onGetApps, options);

        case 2:
        case "end":
          return _context42.stop();
      }
    }
  }, _marked42);
}
function watchSaveAvatar(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchSaveAvatar$(_context43) {
    while (1) {
      switch (_context43.prev = _context43.next) {
        case 0:
          _context43.next = 2;
          return effects.takeLatest(SettingsActionTypes.SAVE_AVATAR, onSaveAvatar, options);

        case 2:
        case "end":
          return _context43.stop();
      }
    }
  }, _marked43);
}
function watchDeleteAvatar(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchDeleteAvatar$(_context44) {
    while (1) {
      switch (_context44.prev = _context44.next) {
        case 0:
          _context44.next = 2;
          return effects.takeLatest(SettingsActionTypes.DELETE_AVATAR, onDeleteAvatar, options);

        case 2:
        case "end":
          return _context44.stop();
      }
    }
  }, _marked44);
}
function watchSaveTileBackground(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchSaveTileBackground$(_context45) {
    while (1) {
      switch (_context45.prev = _context45.next) {
        case 0:
          _context45.next = 2;
          return effects.takeLatest(SettingsActionTypes.SAVE_TILE_BACKGROUND, onSaveTileBackground, options);

        case 2:
        case "end":
          return _context45.stop();
      }
    }
  }, _marked45);
}
function watchSaveBackgroundColor(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchSaveBackgroundColor$(_context46) {
    while (1) {
      switch (_context46.prev = _context46.next) {
        case 0:
          _context46.next = 2;
          return effects.takeLatest(SettingsActionTypes.SAVE_BACKGROUND_COLOR, onSaveBackgroundColor, options);

        case 2:
        case "end":
          return _context46.stop();
      }
    }
  }, _marked46);
}
function settingsSaga() {
  var options,
      _args47 = arguments;
  return _regeneratorRuntime__default['default'].wrap(function settingsSaga$(_context47) {
    while (1) {
      switch (_context47.prev = _context47.next) {
        case 0:
          options = _args47.length > 0 && _args47[0] !== undefined ? _args47[0] : {};
          _context47.next = 3;
          return effects.all([effects.call(watchSaveNewPassword, options), effects.call(watchSaveUser, options), effects.call(watchSaveEmail, options), effects.call(watchDeleteAccount, options), effects.call(watchDeleteThirdParty, options), effects.call(watchFetchPremiums, options), effects.call(watchSaveBranding, options), effects.call(watchLogoUpload, options), effects.call(watchLogoRemove, options), effects.call(watchBackgroundUpload, options), effects.call(watchBackgroundRemove, options), effects.call(watchLogout, options), effects.call(watchDeleteCalendar, options), effects.call(watchGetDoodleFeed, options), effects.call(watchConnectDoodleFeed, options), effects.call(watchResetDoodleFeed, options), effects.call(watchDeleteAddressBook, options), effects.call(watchSaveAvatar, options), effects.call(watchDeleteAvatar, options), effects.call(watchLogoutApps, options), effects.call(watchGetApps, options), effects.call(watchSaveTileBackground, options), effects.call(watchSaveBackgroundColor, options)]);

        case 3:
        case "end":
          return _context47.stop();
      }
    }
  }, _marked47);
}

var Type = {
  CALENDAR: 'calendar',
  ADDRESS_BOOK: 'contacts'
};

var generateRandomStr = function generateRandomStr() {
  var length = 32;
  var text = '';
  var possibilities = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';

  for (var i = 0; i < length; i++) {
    text += possibilities.charAt(Math.floor(Math.random() * possibilities.length));
  }

  return text;
};

var generateUrl = function generateUrl(type, provider, token, redirectUri, clientId, branch) {
  var clientBaseUrl = provider === 'google' ? 'https://accounts.google.com/o/oauth2/auth' : 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize';
  var scope = type === 'calendar' ? 'CALENDARS' : 'CONTACTS';

  if (provider === 'google') {
    var _context, _context2, _context3, _context4;

    var scopeUrl = type === 'calendar' ? 'https://www.googleapis.com/auth/calendar.events https://www.googleapis.com/auth/calendar.readonly' : 'https://www.googleapis.com/auth/contacts.readonly';
    var state = encodeURIComponent(_JSON$stringify__default['default']({
      doodleScope: [scope],
      callbackUrl: redirectUri,
      branch: branch,
      oauth_anti_csrf_token_cookie: token
    }));
    return _concatInstanceProperty__default['default'](_context = _concatInstanceProperty__default['default'](_context2 = _concatInstanceProperty__default['default'](_context3 = _concatInstanceProperty__default['default'](_context4 = "".concat(clientBaseUrl, "?access_type=offline&approval_prompt=force&client_id=")).call(_context4, clientId, ".apps.googleusercontent.com&redirect_uri=")).call(_context3, redirectUri, "&response_type=code&scope=")).call(_context2, scopeUrl, "&state=")).call(_context, state);
  }

  if (provider === 'outlookcom') {
    var _context5, _context6, _context7, _context8;

    var nonce = generateRandomStr();

    var _state = encodeURIComponent(_JSON$stringify__default['default']({
      type: scope,
      branch: branch,
      oauth_anti_csrf_token_cookie: token
    }));

    return _concatInstanceProperty__default['default'](_context5 = _concatInstanceProperty__default['default'](_context6 = _concatInstanceProperty__default['default'](_context7 = _concatInstanceProperty__default['default'](_context8 = "".concat(clientBaseUrl, "?client_id=")).call(_context8, clientId, "&response_type=id_token+code&response_mode=form_post&scope=openid+offline_access+User.Read+Calendars.ReadWrite+Contacts.Read&nonce=")).call(_context7, nonce, "&redirect_uri=")).call(_context6, encodeURIComponent(redirectUri), "&state=")).call(_context5, _state);
  }
};

var open = function open(provider, type, url) {
  var _context9, _context10, _context11, _context12;

  var width = 600;
  var height = 600;
  var left = screen.width / 2 - width / 2;
  var top = screen.height / 2 - height / 2;

  var windowName = _concatInstanceProperty__default['default'](_context9 = "connect-".concat(provider, "-")).call(_context9, type);

  return window.open(url, windowName, _concatInstanceProperty__default['default'](_context10 = _concatInstanceProperty__default['default'](_context11 = _concatInstanceProperty__default['default'](_context12 = "toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, copyhistory=no, width=".concat(width, ", height=")).call(_context12, height, ", top=")).call(_context11, top, ", left=")).call(_context10, left));
};

var checkIfWindowClosed = function checkIfWindowClosed(win) {
  return new _Promise__default['default'](function (resolve, reject) {
    var closingTimerId = _setTimeout__default['default'](reject, 180000);

    var timer = _setInterval__default['default'](function () {
      if (win && win.closed) {
        window.clearInterval(timer);
        window.clearInterval(closingTimerId);
        resolve();
      }
    }, 100);
  });
};

var checkIfConnectedSuccessfully = function checkIfConnectedSuccessfully(provider, oldCalendarsList, newCalendarsList) {
  var addedCalendar = _filterInstanceProperty__default['default'](newCalendarsList).call(newCalendarsList, function (calendar) {
    return !_someInstanceProperty__default['default'](oldCalendarsList).call(oldCalendarsList, function (cal) {
      return calendar.id === cal.id;
    });
  });

  return addedCalendar.length > 0;
};

var generateUrlData = function generateUrlData(provider, options) {
  var CSRFTokenFromCookie = storage.getCookie('oauth_anti_csrf_token_cookie');
  var data = {
    randomCSRFToken: CSRFTokenFromCookie || generateRandomOAuthAntiCSRFToken(),
    clientId: provider === 'google' ? options.googleClientId : options.outlookClientId,
    redirectUri: provider === 'google' ? options.googleCalendarRedirectUri : options.outlookRedirectUri,
    branch: options.oAuthProxyTarget
  };

  if (!CSRFTokenFromCookie) {
    storage.setOAuthAntiCSRFTokenCookie(data.randomCSRFToken, options.cookieDomain);
  }

  return data;
};

var _marked$3 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onConnectCalendar),
    _marked2$3 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onConnectAddressBook),
    _marked3$3 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchConnectCalendar),
    _marked4$2 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchConnectAddressBook),
    _marked5$2 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(connectCalendarSaga);

function onConnectCalendar(options, action) {
  var provider, authToken, connectedCalendars, data, url, win, newConnectedCalendars;
  return _regeneratorRuntime__default['default'].wrap(function onConnectCalendar$(_context) {
    while (1) {
      switch (_context.prev = _context.next) {
        case 0:
          provider = action.provider, authToken = action.authToken;
          _context.next = 3;
          return effects.select(function (state) {
            return state.user.data.calendarAccounts;
          });

        case 3:
          connectedCalendars = _context.sent;
          data = generateUrlData(provider, options);
          url = generateUrl(Type.CALENDAR, provider, data.randomCSRFToken, data.redirectUri, data.clientId, data.branch);
          win = open(provider, Type.CALENDAR, url);
          _context.next = 9;
          return effects.call(checkIfWindowClosed, win);

        case 9:
          _context.next = 11;
          return effects.put(loadUser(authToken));

        case 11:
          _context.next = 13;
          return effects.take(ActionTypes.USER_LOADED);

        case 13:
          _context.next = 15;
          return effects.select(function (state) {
            return state.user.data.calendarAccounts;
          });

        case 15:
          newConnectedCalendars = _context.sent;

          if (!checkIfConnectedSuccessfully(provider, connectedCalendars, newConnectedCalendars)) {
            _context.next = 21;
            break;
          }

          _context.next = 19;
          return effects.put(connectCalendarSuccess(provider));

        case 19:
          _context.next = 23;
          break;

        case 21:
          _context.next = 23;
          return effects.put(connectCalendarError());

        case 23:
        case "end":
          return _context.stop();
      }
    }
  }, _marked$3);
}

function onConnectAddressBook(options, action) {
  var provider, authToken, connectedBooks, data, url, win, newConnectedBooks;
  return _regeneratorRuntime__default['default'].wrap(function onConnectAddressBook$(_context2) {
    while (1) {
      switch (_context2.prev = _context2.next) {
        case 0:
          provider = action.provider, authToken = action.authToken;
          _context2.next = 3;
          return effects.select(function (state) {
            return state.user.data.addressBooks;
          });

        case 3:
          connectedBooks = _context2.sent;
          data = generateUrlData(provider, options);
          url = generateUrl(Type.ADDRESS_BOOK, provider, data.randomCSRFToken, data.redirectUri, data.clientId, data.branch);
          win = open(provider, Type.ADDRESS_BOOK, url);
          _context2.next = 9;
          return effects.call(checkIfWindowClosed, win);

        case 9:
          _context2.next = 11;
          return effects.put(loadUser(authToken));

        case 11:
          _context2.next = 13;
          return effects.take(ActionTypes.USER_LOADED);

        case 13:
          _context2.next = 15;
          return effects.select(function (state) {
            return state.user.data.addressBooks;
          });

        case 15:
          newConnectedBooks = _context2.sent;

          if (!checkIfConnectedSuccessfully(provider, connectedBooks, newConnectedBooks)) {
            _context2.next = 21;
            break;
          }

          _context2.next = 19;
          return effects.put(connectAddressBookSuccess(provider));

        case 19:
          _context2.next = 23;
          break;

        case 21:
          _context2.next = 23;
          return effects.put(connectAddressBookError());

        case 23:
        case "end":
          return _context2.stop();
      }
    }
  }, _marked2$3);
}

function watchConnectCalendar(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchConnectCalendar$(_context3) {
    while (1) {
      switch (_context3.prev = _context3.next) {
        case 0:
          _context3.next = 2;
          return effects.takeLatest(ConnectCalendarActionTypes.CONNECT_CALENDAR, onConnectCalendar, options);

        case 2:
        case "end":
          return _context3.stop();
      }
    }
  }, _marked3$3);
}

function watchConnectAddressBook(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchConnectAddressBook$(_context4) {
    while (1) {
      switch (_context4.prev = _context4.next) {
        case 0:
          _context4.next = 2;
          return effects.takeLatest(ConnectCalendarActionTypes.CONNECT_ADDRESS_BOOK, onConnectAddressBook, options);

        case 2:
        case "end":
          return _context4.stop();
      }
    }
  }, _marked4$2);
}

function connectCalendarSaga() {
  var options,
      _args5 = arguments;
  return _regeneratorRuntime__default['default'].wrap(function connectCalendarSaga$(_context5) {
    while (1) {
      switch (_context5.prev = _context5.next) {
        case 0:
          options = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : {};
          _context5.next = 3;
          return effects.all([effects.call(watchConnectCalendar, options), effects.call(watchConnectAddressBook, options)]);

        case 3:
        case "end":
          return _context5.stop();
      }
    }
  }, _marked5$2);
}

var _marked$4 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onSelectPrimaryCalendar),
    _marked2$4 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchSelectPrimaryCalendar),
    _marked3$4 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(selectPrimaryCalendarSaga);

function ownKeys$8(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread$8(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context4; _forEachInstanceProperty__default['default'](_context4 = ownKeys$8(Object(source), true)).call(_context4, function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context5; _forEachInstanceProperty__default['default'](_context5 = ownKeys$8(Object(source))).call(_context5, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }
function onSelectPrimaryCalendar(options, action) {
  var authToken, calendarId, fetchOptions, user;
  return _regeneratorRuntime__default['default'].wrap(function onSelectPrimaryCalendar$(_context) {
    while (1) {
      switch (_context.prev = _context.next) {
        case 0:
          authToken = action.authToken, calendarId = action.calendarId;
          fetchOptions = _objectSpread$8(_objectSpread$8({}, options), {}, {
            method: 'PUT',
            headers: {
              'Content-Type': 'application/json'
            },
            body: _JSON$stringify__default['default']({
              primaryCalendarAccountId: calendarId
            })
          });
          _context.prev = 2;
          _context.next = 5;
          return effects.select(function (globalState) {
            return globalState[options.domain || 'user'];
          });

        case 5:
          _context.sent;
          _context.next = 8;
          return effects.call(API.me, authToken, fetchOptions);

        case 8:
          user = _context.sent;
          _context.next = 11;
          return effects.put(selectPrimaryCalendarSuccess(user.primaryCalendarAccountId));

        case 11:
          _context.next = 17;
          break;

        case 13:
          _context.prev = 13;
          _context.t0 = _context["catch"](2);
          _context.next = 17;
          return effects.put(selectPrimaryCalendarError(_context.t0));

        case 17:
        case "end":
          return _context.stop();
      }
    }
  }, _marked$4, null, [[2, 13]]);
}
function watchSelectPrimaryCalendar(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchSelectPrimaryCalendar$(_context2) {
    while (1) {
      switch (_context2.prev = _context2.next) {
        case 0:
          _context2.next = 2;
          return effects.takeLatest(SelectPrimaryCalendarActionTypes.SELECT_PRIMARY_CALENDAR, onSelectPrimaryCalendar, options);

        case 2:
        case "end":
          return _context2.stop();
      }
    }
  }, _marked2$4);
}
function selectPrimaryCalendarSaga() {
  var options,
      _args3 = arguments;
  return _regeneratorRuntime__default['default'].wrap(function selectPrimaryCalendarSaga$(_context3) {
    while (1) {
      switch (_context3.prev = _context3.next) {
        case 0:
          options = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : {};
          _context3.next = 3;
          return effects.all([effects.call(watchSelectPrimaryCalendar, options)]);

        case 3:
        case "end":
          return _context3.stop();
      }
    }
  }, _marked3$4);
}

function getLocationSearch() {
  return window.location.search;
}
function getLocationPathname() {
  return window.location.pathname;
}
var navigateTo = function navigateTo(url) {
  window.location = url;
};

var _marked$5 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchRedirect);
var CONTINUE_TO_URL_QUERY_PARAMETER_KEY = 'redirectUrl';
var PATH = {
  LOGIN: '/login',
  LOGOUT: '/logout',
  SIGNUP: '/signup'
};
var WELCOME_PATHS = ['/premium/business/welcome', '/premium/private/welcome'];
/**
 * Redirects the user to a different page, including the current path as redirect URL.
 * @param {string} path The path to navigate to.
 */

function onRedirectTo(path) {
  var _context, _context2, _context3;

  var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  var locationPathname = getLocationPathname();
  var pathname;

  if (action.redirectUrl && // allow URLs on same domain, e.g. starting with `/`
  /^\//.test(action.redirectUrl)) {
    pathname = action.redirectUrl;
  } else if (_includesInstanceProperty__default['default'](WELCOME_PATHS).call(WELCOME_PATHS, locationPathname)) {
    pathname = '/dashboard';
  } else {
    pathname = locationPathname;
  }

  var searchParams = getLocationSearch();
  var continueURL = encodeURIComponent(searchParams.length > 0 ? _concatInstanceProperty__default['default'](_context = "".concat(pathname)).call(_context, searchParams) : pathname);
  navigateTo(_concatInstanceProperty__default['default'](_context2 = "".concat(path)).call(_context2, continueURL ? _concatInstanceProperty__default['default'](_context3 = "?".concat(CONTINUE_TO_URL_QUERY_PARAMETER_KEY, "=")).call(_context3, continueURL) : ''));
}
function watchRedirect() {
  return _regeneratorRuntime__default['default'].wrap(function watchRedirect$(_context4) {
    while (1) {
      switch (_context4.prev = _context4.next) {
        case 0:
          _context4.next = 2;
          return effects.all([effects.takeLatest(ActionTypes.REDIRECT_TO_LOGIN, onRedirectTo, PATH.LOGIN), effects.takeLatest(ActionTypes.REDIRECT_TO_LOGOUT, onRedirectTo, PATH.LOGOUT), effects.takeLatest(ActionTypes.REDIRECT_TO_SIGNUP, onRedirectTo, PATH.SIGNUP)]);

        case 2:
          return _context4.abrupt("return", _context4.sent);

        case 3:
        case "end":
          return _context4.stop();
      }
    }
  }, _marked$5);
}

var _marked$6 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onResendActivationMail),
    _marked2$5 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchResendActivationMail);
var INTERVAL_BETWEEN_RESEND_ACTIVATIONS = 10000;

function getLoginEmail(state) {
  return state.auth && state.auth.login && state.auth.login.email.value;
}

function getUserId(state) {
  return state.user && state.user.data && state.user.data.id;
}

function onResendActivationMail(options) {
  var email, id;
  return _regeneratorRuntime__default['default'].wrap(function onResendActivationMail$(_context) {
    while (1) {
      switch (_context.prev = _context.next) {
        case 0:
          _context.prev = 0;
          _context.next = 3;
          return effects.select(getLoginEmail);

        case 3:
          email = _context.sent;
          _context.next = 6;
          return effects.select(getUserId);

        case 6:
          id = _context.sent;
          _context.next = 9;
          return effects.call(API.resendActivation, id, email, options);

        case 9:
          _context.next = 11;
          return effects.put(resendActivationMailSucceeded());

        case 11:
          _context.next = 13;
          return effects.delay(INTERVAL_BETWEEN_RESEND_ACTIVATIONS);

        case 13:
          _context.next = 15;
          return effects.put(resendActivationEnabled());

        case 15:
          _context.next = 21;
          break;

        case 17:
          _context.prev = 17;
          _context.t0 = _context["catch"](0);
          _context.next = 21;
          return effects.put(resendActivationMailFailed());

        case 21:
        case "end":
          return _context.stop();
      }
    }
  }, _marked$6, null, [[0, 17]]);
}

function watchResendActivationMail(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchResendActivationMail$(_context2) {
    while (1) {
      switch (_context2.prev = _context2.next) {
        case 0:
          _context2.next = 2;
          return effects.all([effects.takeLatest(ActionTypes.RESEND_ACTIVATIONMAIL, onResendActivationMail, options)]);

        case 2:
          return _context2.abrupt("return", _context2.sent);

        case 3:
        case "end":
          return _context2.stop();
      }
    }
  }, _marked2$5);
}

function ownKeys$9(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread$9(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context; _forEachInstanceProperty__default['default'](_context = ownKeys$9(Object(source), true)).call(_context, function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context2; _forEachInstanceProperty__default['default'](_context2 = ownKeys$9(Object(source))).call(_context2, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }

var isPremiumBusiness = function isPremiumBusiness(user) {
  return user && user.activePremium ? user.activePremium.business : false;
};

var isOnTrial = function isOnTrial(user) {
  return user && user.activePremium ? user.activePremium && user.activePremium.type === CONSTANTS.userPlan.trial : false;
};

var isPremium = function isPremium(user) {
  return user ? !!user.activePremium : false;
};

var getUserPlanType = function getUserPlanType(user) {
  if (isPremium(user)) {
    return isPremiumBusiness(user) ? CONSTANTS.userPlan.business : CONSTANTS.userPlan.indvidual;
  }

  return CONSTANTS.userPlan.free;
};

var getGeolocationData = function getGeolocationData(geolocation) {
  return {
    country: geolocation,
    user: {
      userCountry: geolocation
    }
  };
};

var getUserAnalyticsData = function getUserAnalyticsData(user, lang) {
  var isActive = user && user.id;
  var data = {
    page: {
      userID: undefined,
      userLoginState: isActive
    },
    language: lang
  };

  if (isActive) {
    data.page = _objectSpread$9(_objectSpread$9({}, data.page), {}, {
      userType: isPremium(user) ? CONSTANTS.userType.premium : CONSTANTS.userType.free,
      userID: user.id
    });
    data.user = {
      userPlanType: getUserPlanType(user),
      userIsTrial: isOnTrial(user),
      userTimeZone: user.timeZone || CONSTANTS.timeZone.undefined,
      userEligibleForTrial: !user.hadTrial,
      billingFrequency: user.activePremium && user.activePremium.billingFrequency,
      userHasCalendarSynced: String(typeof user.pollToCalendarSyncEnabled === 'boolean' ? user.pollToCalendarSyncEnabled : false)
    };

    if (user.hadTrial && user.mandator && user.mandator.version) {
      data.user.mandatorVersion = user.mandator.version.toFixed(1).toString();
    }
  }

  return data;
};

var _marked$7 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onUserLoaded),
    _marked2$6 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onFetchGeolocationSuccess),
    _marked3$5 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onLocaleChange),
    _marked4$3 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onShowActivationNotifications),
    _marked5$3 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(onClickResendActiviation),
    _marked6$2 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchUserLoaded),
    _marked7$1 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchFetchGeolocationSuccess),
    _marked8$1 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchLocaleChange),
    _marked9$1 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchShowActivationNotifications),
    _marked10$1 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(watchClickResendActiviation),
    _marked11$1 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(startTracking);

function ownKeys$a(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread$a(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context12; _forEachInstanceProperty__default['default'](_context12 = ownKeys$a(Object(source), true)).call(_context12, function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context13; _forEachInstanceProperty__default['default'](_context13 = ownKeys$a(Object(source))).call(_context13, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }
var defaultTrackingFields = {
  event: 'gtmEvent',
  eventNonInteraction: 'False',
  eventLabel: undefined,
  // flush datalayer value in order to not mix them up between events
  eventValue: undefined // flush datalayer value in order to not mix them up between events

};
function onUserLoaded(options, action) {
  var user, lang;
  return _regeneratorRuntime__default['default'].wrap(function onUserLoaded$(_context) {
    while (1) {
      switch (_context.prev = _context.next) {
        case 0:
          user = action.user;
          _context.next = 3;
          return effects.select(function (state) {
            return state.i18n.locale;
          });

        case 3:
          lang = _context.sent;
          _context.next = 6;
          return effects.put(tagmanager.pushDataLayer(_objectSpread$a({}, getUserAnalyticsData(user, lang))));

        case 6:
        case "end":
          return _context.stop();
      }
    }
  }, _marked$7);
}

function onFetchGeolocationSuccess() {
  var geolocation;
  return _regeneratorRuntime__default['default'].wrap(function onFetchGeolocationSuccess$(_context2) {
    while (1) {
      switch (_context2.prev = _context2.next) {
        case 0:
          _context2.next = 2;
          return effects.select(function (state) {
            return state.geolocation.geolocation.country_code;
          });

        case 2:
          geolocation = _context2.sent;
          _context2.next = 5;
          return effects.put(tagmanager.pushDataLayer(_objectSpread$a({}, getGeolocationData(geolocation))));

        case 5:
        case "end":
          return _context2.stop();
      }
    }
  }, _marked2$6);
}
/**
 * @todo move to web-i18n
 */


function onLocaleChange(options, action) {
  return _regeneratorRuntime__default['default'].wrap(function onLocaleChange$(_context3) {
    while (1) {
      switch (_context3.prev = _context3.next) {
        case 0:
          _context3.next = 2;
          return effects.put(tagmanager.pushDataLayer({
            language: action.payload.locale
          }));

        case 2:
        case "end":
          return _context3.stop();
      }
    }
  }, _marked3$5);
}

function onShowActivationNotifications() {
  return _regeneratorRuntime__default['default'].wrap(function onShowActivationNotifications$(_context4) {
    while (1) {
      switch (_context4.prev = _context4.next) {
        case 0:
          _context4.next = 2;
          return effects.put(tagmanager.pushDataLayer(_objectSpread$a(_objectSpread$a({}, defaultTrackingFields), {}, {
            eventLabel: 'showActivationNotification'
          })));

        case 2:
        case "end":
          return _context4.stop();
      }
    }
  }, _marked4$3);
}

function onClickResendActiviation() {
  return _regeneratorRuntime__default['default'].wrap(function onClickResendActiviation$(_context5) {
    while (1) {
      switch (_context5.prev = _context5.next) {
        case 0:
          _context5.next = 2;
          return effects.put(tagmanager.pushDataLayer(_objectSpread$a(_objectSpread$a({}, defaultTrackingFields), {}, {
            eventLabel: 'clickResendActivation'
          })));

        case 2:
        case "end":
          return _context5.stop();
      }
    }
  }, _marked5$3);
}

function watchUserLoaded(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchUserLoaded$(_context6) {
    while (1) {
      switch (_context6.prev = _context6.next) {
        case 0:
          _context6.next = 2;
          return effects.takeEvery(ActionTypes.USER_LOADED, onUserLoaded, options);

        case 2:
        case "end":
          return _context6.stop();
      }
    }
  }, _marked6$2);
}

function watchFetchGeolocationSuccess(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchFetchGeolocationSuccess$(_context7) {
    while (1) {
      switch (_context7.prev = _context7.next) {
        case 0:
          _context7.next = 2;
          return effects.takeEvery('@doodle/geolocation/FETCH_GEOLOCATION_SUCCESS', onFetchGeolocationSuccess, options);

        case 2:
        case "end":
          return _context7.stop();
      }
    }
  }, _marked7$1);
}

function watchLocaleChange(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchLocaleChange$(_context8) {
    while (1) {
      switch (_context8.prev = _context8.next) {
        case 0:
          _context8.next = 2;
          return effects.takeEvery('@doodle/i18n/CHANGE_LOCALE', onLocaleChange, options);

        case 2:
        case "end":
          return _context8.stop();
      }
    }
  }, _marked8$1);
}

function watchShowActivationNotifications(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchShowActivationNotifications$(_context9) {
    while (1) {
      switch (_context9.prev = _context9.next) {
        case 0:
          _context9.next = 2;
          return effects.takeEvery(ActionTypes.RESEND_ACTIVATIONMAIL_ENABLED, onShowActivationNotifications, options);

        case 2:
        case "end":
          return _context9.stop();
      }
    }
  }, _marked9$1);
}

function watchClickResendActiviation(options) {
  return _regeneratorRuntime__default['default'].wrap(function watchClickResendActiviation$(_context10) {
    while (1) {
      switch (_context10.prev = _context10.next) {
        case 0:
          _context10.next = 2;
          return effects.takeEvery(ActionTypes.RESEND_ACTIVATIONMAIL, onClickResendActiviation, options);

        case 2:
        case "end":
          return _context10.stop();
      }
    }
  }, _marked10$1);
}

function startTracking(options) {
  return _regeneratorRuntime__default['default'].wrap(function startTracking$(_context11) {
    while (1) {
      switch (_context11.prev = _context11.next) {
        case 0:
          _context11.next = 2;
          return effects.all([effects.call(watchUserLoaded, options), effects.call(watchFetchGeolocationSuccess, options), effects.call(watchLocaleChange, options), effects.call(watchShowActivationNotifications, options), effects.call(watchClickResendActiviation, options)]);

        case 2:
        case "end":
          return _context11.stop();
      }
    }
  }, _marked11$1);
}

var _marked$8 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(loadUserSaga),
    _marked2$7 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(loadUserSettingsSaga),
    _marked3$6 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(loadUserConnectCalendarSaga),
    _marked4$4 = /*#__PURE__*/_regeneratorRuntime__default['default'].mark(loadUserSelectPrimaryCalendarSaga);
/**
 * Saga that watches for the `loadUser` and `fetchUser` actions.
 * Bootstrapped by dispatching the `loadUser` action.
 * @param {Object} options Saga options
 * @param {function} options.getCookie supply a cookie string (like the one from `document.cookie`)
 * @param {string} options.domain supply a cookie string (like the one from `document.cookie`)
 */

function loadUserSaga() {
  var _context;

  var options,
      _args = arguments;
  return _regeneratorRuntime__default['default'].wrap(function loadUserSaga$(_context2) {
    while (1) {
      switch (_context2.prev = _context2.next) {
        case 0:
          options = _args.length > 0 && _args[0] !== undefined ? _args[0] : {};
          _context2.next = 3;
          return effects.all(_filterInstanceProperty__default['default'](_context = [effects.call(watchLoadBranding, options), effects.call(watchLoadTheme, options), effects.call(watchLoadUser, options), effects.call(watchStoreChanges, options), effects.call(watchRedirect, options), effects.call(watchResendActivationMail, options), effects.call(startTracking, options)]).call(_context, function (effect) {
            return effect;
          }));

        case 3:
        case "end":
          return _context2.stop();
      }
    }
  }, _marked$8);
}
function loadUserSettingsSaga() {
  var options,
      _args2 = arguments;
  return _regeneratorRuntime__default['default'].wrap(function loadUserSettingsSaga$(_context3) {
    while (1) {
      switch (_context3.prev = _context3.next) {
        case 0:
          options = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};
          _context3.next = 3;
          return effects.all([effects.call(settingsSaga, options), effects.put(geolocation.fetchGeolocation())]);

        case 3:
        case "end":
          return _context3.stop();
      }
    }
  }, _marked2$7);
}
function loadUserConnectCalendarSaga() {
  var options,
      _args3 = arguments;
  return _regeneratorRuntime__default['default'].wrap(function loadUserConnectCalendarSaga$(_context4) {
    while (1) {
      switch (_context4.prev = _context4.next) {
        case 0:
          options = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : {};
          _context4.next = 3;
          return effects.all([effects.call(connectCalendarSaga, options)]);

        case 3:
        case "end":
          return _context4.stop();
      }
    }
  }, _marked3$6);
}
function loadUserSelectPrimaryCalendarSaga() {
  var options,
      _args4 = arguments;
  return _regeneratorRuntime__default['default'].wrap(function loadUserSelectPrimaryCalendarSaga$(_context5) {
    while (1) {
      switch (_context5.prev = _context5.next) {
        case 0:
          options = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : {};
          _context5.next = 3;
          return effects.all([effects.call(selectPrimaryCalendarSaga, options)]);

        case 3:
        case "end":
          return _context5.stop();
      }
    }
  }, _marked4$4);
}

var mapStateToProps = function mapStateToProps(state) {
  return {
    isLoggedIn: !!state.user.data.id,
    username: state.user.data.name,
    userAvatar: state.user.data.avatarLargeUrl
  };
};

var mapDispatchToProps = function mapDispatchToProps(dispatch) {
  return {
    onClickLogin: function onClickLogin() {
      return dispatch(redirectToLogin());
    },
    onClickLogout: function onClickLogout() {
      return dispatch(logout());
    },
    onClickSignup: function onClickSignup() {
      return dispatch(redirectToSignup());
    }
  };
};

var HeaderWidget = reactRedux.connect(mapStateToProps, mapDispatchToProps)(components.HeaderWidget);

var messages = reactIntl.defineMessages({
  resendActivationMail: {
    id: 'user.containers.ResendActivationNag.resendActivationMail',
    defaultMessage: 'Resend activation email'
  },
  close: {
    id: 'user.containers.ResendActivationNag.close',
    defaultMessage: 'Close'
  }
});

function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf__default['default'](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default['default'](this).constructor; result = _Reflect$construct__default['default'](Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default['default'](this, result); }; }

function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct__default['default']) return false; if (_Reflect$construct__default['default'].sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(_Reflect$construct__default['default'](Date, [], function () {})); return true; } catch (e) { return false; } }

var ActivationNag = /*#__PURE__*/function (_Component) {
  _inherits__default['default'](ActivationNag, _Component);

  var _super = _createSuper(ActivationNag);

  function ActivationNag() {
    _classCallCheck__default['default'](this, ActivationNag);

    return _super.apply(this, arguments);
  }

  _createClass__default['default'](ActivationNag, [{
    key: "render",
    value: function render() {
      var _this$props = this.props,
          activationMessage = _this$props.activationMessage,
          resendActivationEnabled = _this$props.resendActivationEnabled,
          resendActivationLoading = _this$props.resendActivationLoading,
          onClickResendActivationMail = _this$props.onClickResendActivationMail,
          onClose = _this$props.onClose,
          intl = _this$props.intl;
      return /*#__PURE__*/React__default['default'].createElement("div", {
        className: "ActivationNag LoginTab-info"
      }, /*#__PURE__*/React__default['default'].createElement(components.Nag, {
        type: "success",
        onClose: onClose,
        closeLabel: intl.formatMessage(messages.close),
        actions: function actions() {
          return /*#__PURE__*/React__default['default'].createElement(components.Button, _extends__default['default']({
            variant: "linkDark",
            onClick: onClickResendActivationMail
          }, !resendActivationEnabled ? {
            disabled: true
          } : {}), /*#__PURE__*/React__default['default'].createElement(reactIntl.FormattedMessage, messages.resendActivationMail), resendActivationLoading && /*#__PURE__*/React__default['default'].createElement(components.LoadingIcon, null));
        }
      }, activationMessage));
    }
  }]);

  return ActivationNag;
}(React.Component);

_defineProperty__default['default'](ActivationNag, "propTypes", {
  resendActivationLoading: PropTypes__default['default'].bool,
  activationMessage: PropTypes__default['default'].string.isRequired,
  resendActivationEnabled: PropTypes__default['default'].bool,
  onClickResendActivationMail: PropTypes__default['default'].func.isRequired,
  onClose: PropTypes__default['default'].func,
  intl: reactIntl.intlShape.isRequired
});

_defineProperty__default['default'](ActivationNag, "defaultProps", {
  resendActivationLoading: true,
  resendActivationEnabled: true,
  onClose: function onClose() {}
});

var mapStateToProps$1 = function mapStateToProps(state) {
  return {
    resendActivationLoading: state.user.resendActivation.loading,
    resendActivationEnabled: state.user.resendActivation.enabled
  };
};

var mapDispatchToProps$1 = function mapDispatchToProps(dispatch) {
  return {
    onClickResendActivationMail: function onClickResendActivationMail() {
      return dispatch(resendActivationMail());
    }
  };
};

var ActivationNag$1 = reactRedux.connect(mapStateToProps$1, mapDispatchToProps$1)(reactIntl.injectIntl(ActivationNag));

function ownKeys$b(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread$b(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context; _forEachInstanceProperty__default['default'](_context = ownKeys$b(Object(source), true)).call(_context, function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context2; _forEachInstanceProperty__default['default'](_context2 = ownKeys$b(Object(source))).call(_context2, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }
module.exports = _objectSpread$b(_objectSpread$b(_objectSpread$b(_objectSpread$b(_objectSpread$b({}, actions), settingsActions), connectCalendarActions), SelectPrimaryCalendarActions), {}, {
  createReducer: createReducer,
  reducer: reducer,
  createSettingsReducer: createSettingsReducer,
  settingsReducer: settingsReducer,
  createConnectCalendarReducer: createConnectCalendarReducer,
  connectCalendarReducer: connectCalendarReducer,
  createSelectPrimaryCalendarReducer: createSelectPrimaryCalendarReducer,
  selectPrimaryCalendarReducer: selectPrimaryCalendarReducer,
  loadUserSaga: loadUserSaga,
  loadUserSettingsSaga: loadUserSettingsSaga,
  loadUserConnectCalendarSaga: loadUserConnectCalendarSaga,
  loadUserSelectPrimaryCalendarSaga: loadUserSelectPrimaryCalendarSaga,
  createState: createState,
  createSettingsState: createSettingsState,
  createConnectCalendarState: createConnectCalendarState,
  API: API,
  HeaderWidget: HeaderWidget,
  ActivationNag: ActivationNag$1
});