{"version":3,"sources":["webpack:///./src/redux-app/middlewares/permanent.ts","webpack:///./src/constants/storeStructure.ts","webpack:///./src/api/client/request.ts","webpack:///./src/redux-app/middlewares/fetch.ts","webpack:///./src/redux-app/modules/apiData.ts","webpack:///./src/redux-app/modules/entities.ts","webpack:///./src/redux-app/modules/index.ts","webpack:///./src/redux-app/create.ts","webpack:///./src/redux-app/index.ts"],"names":["storage","localStorage","saveStore","_debounce","state","setItem","JSON","stringify","version","__VERSION__","handleError","response","_response$status","status","statusText","body","error","Error","result","request","apiAction","meta","arguments","length","undefined","_ref","method","type","url","query","data","headers","parseResponse","hostname","requestOptions","credentials","request_objectSpread","Accept","methodUpperCase","toUpperCase","sendFormData","requestUrl","getApiUrl","pathname","getBlob","fileName","fetch","then","ok","get","blob","bodyPromise","json","value","fetchBlob","fetchPromise","isMock","Promise","resolve","includes","parsedResponseBody","catch","ACTION_HANDLERS","_ACTION_HANDLERS","defineProperty_default","getCountryByCountryIdState","toString","loadingWrapper","API_TYPES","states","action","payload","getAppConfig","appConfig","getRecaptchaWhiteListConfig","recaptchaWhiteList","USER_LOGOUT_ACTION","NOT_SECURE_API_TYPES","reduce","acc","apiType","apiData_objectSpread","_get","handlePromiseActions","customizer","objValue","srcValue","Array","isArray","_isObject","Object","keys","_mergeWith","entities_objectSpread","entities","apiEntity","makeRootReducer","asyncReducers","combineReducers","modules_objectSpread","apiData","auth","alerts","localization","form","user","modals","subscriptions","formUtil","pageScroller","contacts","create","_ref$state","_ref$version","initialState","parse","getItem","console","warn","_objectSpread","isCookieAccepted","middlewares","middleware","_ref2","getState","next","savedState","items","isPlanAcceptedMessageShown","thunk","dispatch","isRefreshingToken","resolvers","finishRefreshToken","forEach","promise","restAction","objectWithoutProperties_default","_ref2$apiAction","restPayload","accessToken","getAccessToken","tokenService","isTokenExpired","push","_merge","getAuthHeaders","onRefreshToken","requestApiAction","err","handleUnauthorized","onStartLogoutWithRedirect","onShowError","fetch_objectSpread","promiseMiddleware","concat","toConsumableArray_default","composeEnhancers","compose","store","createStore","apply","applyMiddleware","injectReducer","reducersMap","create_objectSpread","replaceReducer"],"mappings":"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","file":"12.f91f28fcbb80c9c7583a.js","sourcesContent":["/*\r\n * Developed for EPSON AMERICA INC. by Softeq Development Corporation\r\n * http://www.softeq.com\r\n */\r\n\r\nimport _debounce from 'lodash/debounce'\r\nimport _get from 'lodash/get'\r\nimport { STORE_SAVE_INTERVAL } from 'constants/storeStructure'\r\nimport { initialState } from 'redux-app/modules/user'\r\n\r\nconst storage = localStorage\r\nconst STORE_KEY = 'EPSON'\r\n\r\nexport const loadState = () => {\r\n const { state = {}, version = 0 } = JSON.parse(storage.getItem(STORE_KEY)) || {}\r\n if (version && version !== __VERSION__) {\r\n console.warn('LocalStorage was cleaned')\r\n return {\r\n user: {\r\n ...initialState,\r\n isCookieAccepted: _get(state, ['user', 'isCookieAccepted'], false),\r\n },\r\n }\r\n }\r\n return state\r\n}\r\n\r\nconst saveStore = _debounce(\r\n state => {\r\n storage.setItem(STORE_KEY, JSON.stringify({ state, version: __VERSION__ }))\r\n },\r\n STORE_SAVE_INTERVAL,\r\n)\r\n\r\nexport const permanentMiddleware = ({ getState }) => next => action => {\r\n const result = next(action)\r\n const state = getState()\r\n const savedState = {\r\n ...state,\r\n alerts: {\r\n items: [],\r\n },\r\n apiData: {},\r\n entities: {},\r\n form: {},\r\n modals: {},\r\n user: {\r\n ...state.user,\r\n isPlanAcceptedMessageShown: false,\r\n },\r\n pageScroller: null,\r\n }\r\n saveStore(savedState)\r\n return result\r\n}\r\n","/*\r\n * Developed for EPSON AMERICA INC. by Softeq Development Corporation\r\n * http://www.softeq.com\r\n */\r\n\r\nexport const STORE_SAVE_INTERVAL = 300\r\n","/*\r\n * Developed for EPSON AMERICA INC. by Softeq Development Corporation\r\n * http://www.softeq.com\r\n */\r\n\r\nimport { getApiUrl } from 'utils/location'\r\nimport { getMockDataKey } from 'utils/mocks'\r\n\r\nconst handleError = (response) => {\r\n const { status = 500, statusText, body } = response\r\n const error: any = new Error(body || statusText)\r\n error.status = status\r\n error.statusText = statusText\r\n error.result = body\r\n throw error\r\n}\r\n\r\nconst fetchBlob = (requestUrl, requestOptions) => {\r\n\r\n var fileName = '';\r\n\r\n return fetch(requestUrl, requestOptions)\r\n .then(response => {\r\n if (response.ok) {\r\n\r\n fileName = response.headers.get('Content-Disposition');\r\n return response.blob();\r\n }\r\n\r\n const { status, statusText, ok } = response\r\n const bodyPromise = response.json()\r\n return bodyPromise.then(body => ({ status, statusText, ok, body }))\r\n })\r\n .then(blob => {\r\n if (blob.ok !== undefined && !blob.ok) {\r\n return handleError(blob)\r\n }\r\n\r\n return {\r\n value : blob,\r\n fileName : fileName\r\n }\r\n })\r\n}\r\n\r\nexport default (apiAction, meta: any = {}, { type }) => {\r\n const {\r\n method,\r\n url, // NOTE: must have a leading slash\r\n query,\r\n data,\r\n headers,\r\n parseResponse,\r\n hostname,\r\n } = apiAction\r\n\r\n const requestOptions: any = {\r\n method,\r\n credentials: 'same-origin',\r\n headers: {\r\n Accept: 'application/json',\r\n ...headers,\r\n },\r\n }\r\n\r\n const methodUpperCase = method.toUpperCase()\r\n if (data && (methodUpperCase === 'POST' || methodUpperCase === 'PUT' || methodUpperCase === 'PATCH')) {\r\n if (meta && meta.sendFormData) {\r\n requestOptions.body = data\r\n } else {\r\n requestOptions.headers['Content-Type'] = 'application/json'\r\n requestOptions.body = typeof data !== 'string' ? JSON.stringify(data) : data\r\n }\r\n }\r\n\r\n const requestUrl = getApiUrl({ pathname: url, query, hostname })\r\n\r\n if (meta && meta.getBlob) {\r\n return fetchBlob(requestUrl, requestOptions)\r\n }\r\n\r\n const fetchPromise = __USE_MOCK__ && meta.mock\r\n ? require('./mocks/').mockedFetch(requestUrl, requestOptions)\r\n : fetch(requestUrl, requestOptions)\r\n\r\n return fetchPromise\r\n .then(response => {\r\n const { status, statusText, ok, isMock } = response\r\n\r\n let bodyPromise\r\n\r\n if (status === 204) {\r\n // note: no content status\r\n bodyPromise = Promise.resolve(null)\r\n } else if (\r\n response.headers.get('Content-Length') !== '0' &&\r\n response.headers.get('Content-Type') &&\r\n response.headers.get('Content-Type').includes('application/json')\r\n ) {\r\n bodyPromise = response.json()\r\n } else {\r\n bodyPromise = Promise.resolve({})\r\n }\r\n\r\n return bodyPromise.then(body => ({ status, statusText, ok, body, isMock }))\r\n })\r\n .then(response => {\r\n if (__USE_MOCK__ && !response.isMock && response.ok && meta.mock) {\r\n const key = getMockDataKey(requestUrl, requestOptions)\r\n\r\n fetch('/mocks', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({ key, data: response.body }),\r\n })\r\n }\r\n if (!response.ok) {\r\n return handleError(response)\r\n }\r\n\r\n return response\r\n })\r\n .then(response => {\r\n const { status, body } = response\r\n const result = body\r\n\r\n let parsedResponseBody = { result }\r\n\r\n if (parseResponse) {\r\n parsedResponseBody = parseResponse(parsedResponseBody, response, meta)\r\n }\r\n\r\n return { ...parsedResponseBody, status }\r\n })\r\n .catch((error: Error) => {\r\n throw error\r\n })\r\n}\r\n","/*\r\n * Developed for EPSON AMERICA INC. by Softeq Development Corporation\r\n * http://www.softeq.com\r\n */\r\n\r\nimport _get from 'lodash/get'\r\nimport _merge from 'lodash/merge'\r\nimport request from 'api/client/request'\r\nimport { tokenService } from 'services/Token'\r\nimport { onStartLogoutWithRedirect, onRefreshToken } from 'redux-app/actionCreators/auth'\r\nimport { onShowError } from 'redux-app/modules/alerts'\r\nimport { getAuthHeaders, getAccessToken } from 'redux-app/selectors/auth'\r\n\r\nexport const fetchMiddleware = ({ dispatch, getState }) => {\r\n let isRefreshingToken = false\r\n let resolvers = []\r\n const finishRefreshToken = () => {\r\n isRefreshingToken = false\r\n resolvers.forEach(resolve => {\r\n resolve()\r\n })\r\n resolvers = []\r\n }\r\n\r\n return next => action => {\r\n const { payload, meta, ...restAction } = action\r\n const { apiAction = false, ...restPayload } = payload || {}\r\n\r\n if (!apiAction) {\r\n return next(action)\r\n }\r\n\r\n let promise\r\n const accessToken = getAccessToken(getState())\r\n if (!_get(meta, 'noAuth') && accessToken && tokenService.isTokenExpired(accessToken)) {\r\n promise = new Promise(resolve => {\r\n resolvers.push(resolve)\r\n })\r\n .then(() => request(_merge({}, { headers: getAuthHeaders(getState()) }, apiAction), meta, restAction))\r\n\r\n if (!isRefreshingToken) {\r\n isRefreshingToken = true\r\n dispatch(onRefreshToken())\r\n .then(finishRefreshToken)\r\n .catch(finishRefreshToken)\r\n }\r\n } else {\r\n const requestApiAction = _merge({}, { headers: getAuthHeaders(getState()) }, apiAction)\r\n promise = request(requestApiAction, meta, restAction)\r\n }\r\n\r\n promise = promise.catch(err => {\r\n if (err.status === 401 && (!meta || meta.handleUnauthorized !== false)) {\r\n getAccessToken(getState()) && dispatch(onStartLogoutWithRedirect())\r\n }\r\n\r\n if (err.status === 404 && _get(meta, 'handleNotFound') === true) {\r\n dispatch(onShowError(err))\r\n } else if (err.status >= 500 && _get(meta, 'handleServerError') === true) {\r\n dispatch(onShowError(err))\r\n }\r\n\r\n throw err\r\n })\r\n\r\n return next({\r\n ...restAction,\r\n meta,\r\n payload: {\r\n ...restPayload,\r\n promise,\r\n },\r\n })\r\n }\r\n}\r\n","/*\r\n * Developed for EPSON AMERICA INC. by Softeq Development Corporation\r\n * http://www.softeq.com\r\n */\r\n\r\nimport _get from 'lodash/get'\r\nimport { USER_LOGOUT_ACTION } from 'constants/user'\r\nimport { API_TYPES, NOT_SECURE_API_TYPES } from 'constants/apiTypes'\r\nimport { getCountryByCountryIdState } from 'api/client/actions/country'\r\nimport { getAppConfig, getRecaptchaWhiteListConfig } from 'api/client/actions/settings'\r\nimport { handlePromiseActions } from 'redux-app/utils/reducer'\r\nimport { loadingWrapper } from 'redux-app/utils/loadingWrapper'\r\n\r\nconst ACTION_HANDLERS = {\r\n [getCountryByCountryIdState.toString()]: loadingWrapper(API_TYPES.states, [\r\n [],\r\n (state, action) => action.payload.result,\r\n () => [],\r\n ]),\r\n [getAppConfig.toString()]: loadingWrapper(API_TYPES.appConfig, [\r\n null,\r\n (state, action) => action.payload.result,\r\n null,\r\n ]),\r\n [getRecaptchaWhiteListConfig.toString()]: loadingWrapper(API_TYPES.recaptchaWhiteList, [\r\n null,\r\n (state, action) => action.payload.result,\r\n null,\r\n ]),\r\n [USER_LOGOUT_ACTION]: (state) => NOT_SECURE_API_TYPES.reduce((acc, apiType) => ({\r\n ...acc,\r\n [apiType]: _get(state, apiType),\r\n }), {}),\r\n}\r\n\r\nconst initialState = {}\r\n\r\nexport default handlePromiseActions(ACTION_HANDLERS, initialState)\r\n","/*\r\n * Developed for EPSON AMERICA INC. by Softeq Development Corporation\r\n * http://www.softeq.com\r\n */\r\n\r\nimport _get from 'lodash/get'\r\nimport _isObject from 'lodash/isObject'\r\nimport _mergeWith from 'lodash/mergeWith'\r\nimport { NOT_SECURE_API_TYPES } from 'constants/apiTypes'\r\nimport { USER_LOGOUT_ACTION } from 'constants/user'\r\n\r\nconst customizer = (objValue, srcValue) => {\r\n // Disable merging arrays deeply because we may want to delete some array elements from its tail\r\n if (Array.isArray(objValue)) {\r\n return srcValue\r\n }\r\n\r\n if (_isObject(objValue)) {\r\n if (Object.keys(srcValue).length) {\r\n return _mergeWith({ ...objValue }, srcValue, customizer)\r\n }\r\n return _mergeWith({}, srcValue, customizer)\r\n }\r\n\r\n return undefined\r\n}\r\n\r\n/**\r\n * Reducer, updates an entity cache in response to any action with payload.entities\r\n */\r\nexport default (state = {}, action) => {\r\n if (action.type === USER_LOGOUT_ACTION) {\r\n return NOT_SECURE_API_TYPES.reduce((acc, apiEntity) => ({\r\n ...acc,\r\n [apiEntity]: _get(state, apiEntity),\r\n }), {})\r\n }\r\n if (action.payload && action.payload.entities) {\r\n return _mergeWith({ ...state }, action.payload.entities, customizer)\r\n }\r\n\r\n return state\r\n}\r\n","/*\r\n * Developed for EPSON AMERICA INC. by Softeq Development Corporation\r\n * http://www.softeq.com\r\n */\r\n\r\nimport { combineReducers } from 'redux'\r\nimport { reducer as form } from 'redux-form'\r\nimport apiData from './apiData'\r\nimport entities from './entities'\r\nimport auth from './auth'\r\nimport alerts from './alerts'\r\nimport localization from './localization'\r\nimport user from './user'\r\nimport modals from './modals'\r\nimport subscriptions from './subscriptions'\r\nimport formUtil from './form'\r\nimport pageScroller from './pageScroller'\r\nimport contacts from './contacts'\r\n\r\nexport const makeRootReducer = asyncReducers => {\r\n return combineReducers({\r\n entities,\r\n apiData,\r\n auth,\r\n alerts,\r\n localization,\r\n form,\r\n user,\r\n modals,\r\n subscriptions,\r\n formUtil,\r\n pageScroller,\r\n contacts,\r\n ...asyncReducers,\r\n })\r\n}\r\n","/*\r\n * Developed for EPSON AMERICA INC. by Softeq Development Corporation\r\n * http://www.softeq.com\r\n */\r\n\r\nimport { applyMiddleware, compose, createStore } from 'redux'\r\nimport promiseMiddleware from 'redux-promise-middleware'\r\nimport thunk from 'redux-thunk'\r\nimport { permanentMiddleware, loadState } from './middlewares/permanent'\r\nimport { fetchMiddleware } from './middlewares/fetch'\r\nimport { makeRootReducer } from './modules/index'\r\n\r\ndeclare const window: any\r\n\r\nconst create = (initialState: any = loadState(), middlewares = []) => {\r\n // ======================================================\r\n // Middleware Configuration\r\n // ======================================================\r\n const middleware = [\r\n permanentMiddleware,\r\n thunk,\r\n fetchMiddleware,\r\n promiseMiddleware(),\r\n ...middlewares,\r\n ]\r\n\r\n // ======================================================\r\n // Store Enhancers\r\n // ======================================================\r\n const enhancers = []\r\n let composeEnhancers = compose\r\n\r\n if (__DEV__) {\r\n if (typeof window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ === 'function') {\r\n composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\r\n }\r\n }\r\n\r\n // ======================================================\r\n // Store Instantiation and HMR Setup\r\n // ======================================================\r\n const store: any = createStore(\r\n makeRootReducer({}),\r\n initialState,\r\n composeEnhancers(\r\n applyMiddleware(...middleware),\r\n ...enhancers,\r\n ),\r\n )\r\n store.asyncReducers = {}\r\n\r\n store.injectReducer = reducersMap => {\r\n store.asyncReducers = {\r\n ...store.asyncReducers,\r\n ...reducersMap,\r\n }\r\n store.replaceReducer(makeRootReducer(store.asyncReducers))\r\n }\r\n\r\n // To unsubscribe, invoke `store.unsubscribeHistory()` anytime\r\n // store.unsubscribeHistory = browserHistory.listen(location(store))\r\n\r\n if (module.hot) {\r\n module.hot.accept('./modules', () => {\r\n const reducers = require('./modules/index')\r\n store.replaceReducer(reducers.makeRootReducer(store.asyncReducers))\r\n })\r\n }\r\n\r\n return store\r\n}\r\n\r\nexport default create\r\n","/*\r\n * Developed for EPSON AMERICA INC. by Softeq Development Corporation\r\n * http://www.softeq.com\r\n */\r\n\r\nimport { Store } from 'redux'\r\nimport { ILocalizationState } from 'redux-app/types/localization'\r\nimport createStore from './create'\r\n\r\nexport interface IState {\r\n localization: ILocalizationState,\r\n}\r\n\r\nconst store: Store = createStore()\r\n\r\nexport default store\r\n"],"sourceRoot":""}