{ "version": 3, "sources": ["../../../../../node_modules/env.js", "../../../../../node_modules/@qwerty.software/utils/unzip/index.js", "../../../../../node_modules/@qwerty.software/store-manager/middlewares/unzip-pusher-data/index.js", "../../../../../node_modules/@qwerty.software/store-manager/middlewares/events/store-event-target.ts", "../../../../../node_modules/@qwerty.software/helpers/singleton.ts", "../../../../../node_modules/@qwerty.software/store-manager/middlewares/events/index.ts", "../../../../../node_modules/@qwerty.software/store-manager/sagas.ts", "../../../../../node_modules/@qwerty.software/utils/is-plain-object.ts", "../../../../../node_modules/packages/ab-test/src/component/hydrators/check-request.ts", "../../../../../node_modules/packages/ab-test/src/component/_register.ts", "../../../../../node_modules/packages/ab-test/src/component/_hydrators.ts", "../../../../../node_modules/packages/ab-test/src/component/constants.ts", "../../../../../node_modules/packages/ab-test/src/component/store/slice.ts", "../../../../../node_modules/packages/ab-test/src/component/store/hydrate-listener.ts", "../../../../../node_modules/packages/ab-test/src/component/store/index.ts", "../../../../../node_modules/@qwerty.software/global-entities/discount/side-effects/index.ts", "../../../../../node_modules/@qwerty.software/store-manager/core.ts", "../../../../../node_modules/@qwerty.software/global-entities/ref-to-interact-slice/store.ts", "../../../../../node_modules/@qwerty.software/global-entities/files-uploader/validators/_build-validator.ts", "../../../../../node_modules/@qwerty.software/utils/notify/index.ts", "../../../../../node_modules/@qwerty.software/global-entities/files-uploader/validators/material-extension.ts", "../../../../../node_modules/@qwerty.software/global-entities/configs/utils/init.ts", "../../../../../node_modules/@qwerty.software/global-entities/configs/utils/get.ts", "../../../../../node_modules/static/default.json", "../../../../../node_modules/@qwerty.software/helpers/configs/get-from-configs.js", "../../../../../node_modules/@qwerty.software/constants/configs.ts", "../../../../../node_modules/@qwerty.software/constants/auth.js", "../../../../../node_modules/@qwerty.software/constants/pagesWordsSwitcher.js", "../../../../../node_modules/@qwerty.software/common/fields-configs.js", "../../../../../node_modules/@qwerty.software/global-entities/files-uploader/validators/material-size-limit.ts", "../../../../../node_modules/@qwerty.software/global-entities/files-uploader/validators/index.ts", "../../../../../node_modules/@qwerty.software/constants/sagas.ts", "../../../../../node_modules/@qwerty.software/global-entities/files-uploader/definitions.ts", "../../../../../node_modules/@qwerty.software/global-entities/files-uploader/selectors.ts", "../../../../../node_modules/@qwerty.software/global-entities/files-uploader/persistor/transforms/aborted.ts", "../../../../../node_modules/@qwerty.software/global-entities/files-uploader/slice.ts", "../../../../../node_modules/@qwerty.software/global-entities/discount/definitions.ts", "../../../../../node_modules/@qwerty.software/global-entities/discount/persistor/transforms/whitelist.ts", "../../../../../node_modules/@qwerty.software/global-entities/discount/slice.ts", "../../../../../node_modules/@qwerty.software/helpers/string/convert-string-to-boolean.js", "../../../../../node_modules/@qwerty.software/utils/storage/storagies/local.js", "../../../../../node_modules/@qwerty.software/utils/storage/storagies/session.js", "../../../../../node_modules/@qwerty.software/utils/storage/index.js", "../../../../../node_modules/@qwerty.software/microservices/sheared/universal-constants.js", "../../../../../node_modules/@qwerty.software/global-entities/user-data/constants.js", "../../../../../node_modules/@qwerty.software/constants/persistor.js", "../../../../../node_modules/@qwerty.software/constants/storage.js", "../../../../../node_modules/@qwerty.software/global-entities/user-data/reducer.js", "../../../../../node_modules/@qwerty.software/global-entities/price-data/constants.js", "../../../../../node_modules/@qwerty.software/global-entities/price-data/reducer.js", "../../../../../node_modules/@qwerty.software/global-entities/price-data/index.ts", "../../../../../node_modules/@qwerty.software/global-entities/geo-tag/constants.ts", "../../../../../node_modules/@qwerty.software/utils/query-string/methods/get-params.js", "../../../../../node_modules/@qwerty.software/utils/query-string/methods/manipulate-param-without-refresh.js", "../../../../../node_modules/@qwerty.software/utils/query-string/methods/build.js", "../../../../../node_modules/@qwerty.software/utils/query-string/methods/make-search-depends-on-env.js", "../../../../../node_modules/@qwerty.software/utils/query-string/index.js", "../../../../../node_modules/@qwerty.software/constants/query-params.js", "../../../../../node_modules/@qwerty.software/global-entities/geo-tag/utils/searchLocalContryCode.ts", "../../../../../node_modules/@qwerty.software/global-entities/geo-tag/utils/searchLocalIP.ts", "../../../../../node_modules/@qwerty.software/global-entities/geo-tag/utils/searchLocalGeoTag.ts", "../../../../../node_modules/@qwerty.software/global-entities/geo-tag/store/types.ts", "../../../../../node_modules/@qwerty.software/global-entities/geo-tag/store/reducer.ts", "../../../../../node_modules/@qwerty.software/store-manager/localforage.ts", "../../../../../node_modules/packages/live-chat/src/store/utils/extractCustomVaraibles.ts", "../../../../../node_modules/packages/live-chat/src/store/types.ts", "../../../../../node_modules/packages/live-chat/src/store/initialState.ts", "../../../../../node_modules/packages/live-chat/src/store/constants.ts", "../../../../../node_modules/packages/live-chat/src/store/reducer.ts", "../../../../../node_modules/packages/live-chat/src/constants.ts", "../../../../../node_modules/packages/live-chat/src/store/selectors.ts", "../../../../../node_modules/packages/live-chat/src/methods/constants.ts", "../../../../../node_modules/packages/live-chat/src/methods/open/saga.ts", "../../../../../node_modules/packages/live-chat/src/store/sagas/interactionWithUser.ts", "../../../../../node_modules/packages/live-chat/src/store/index.ts", "../../../../../node_modules/@qwerty.software/utils/http-client/tools/axios.js", "../../../../../node_modules/@qwerty.software/utils/custom-event/index.js", "../../../../../node_modules/@qwerty.software/constants/custom-events.js", "../../../../../node_modules/@qwerty.software/constants/visibility-actions.js", "../../../../../node_modules/@qwerty.software/utils/global-spinner/index.js", "../../../../../node_modules/@qwerty.software/utils/http-client/request-handler.js", "../../../../../node_modules/@qwerty.software/utils/from-url/redesign-referrer.ts", "../../../../../node_modules/@qwerty.software/utils/from-url/temp-query.ts", "../../../../../node_modules/@qwerty.software/utils/from-url/a-b-test-referrer.ts", "../../../../../node_modules/@qwerty.software/utils/from-url/index.ts", "../../../../../node_modules/@qwerty.software/utils/visitor/index.ts", "../../../../../node_modules/@qwerty.software/utils/action-tracker/interior-track/store/sagas/track/request.ts", "../../../../../node_modules/@qwerty.software/utils/action-tracker/interior-track/store/constants.ts", "../../../../../node_modules/@qwerty.software/utils/action-tracker/interior-track/store/sagas/track/index.ts", "../../../../../node_modules/@qwerty.software/global-entities/files-uploader/middlewares/reorient-image.ts", "../../../../../node_modules/@qwerty.software/global-entities/files-uploader/sagas/upload-files/single-file.ts", "../../../../../node_modules/@qwerty.software/global-entities/files-uploader/sagas/upload-files/index.ts", "../../../../../node_modules/packages/currency-switcher/src/store/constants.ts", "../../../../../node_modules/packages/currency-switcher/src/store/slice.ts", "../../../../../node_modules/@qwerty.software/global-entities/bootstrap-data/utils/init.ts", "../../../../../node_modules/@qwerty.software/global-entities/bootstrap-data/utils/get.ts", "../../../../../node_modules/packages/ui-order-form/src/contexts/constants.tsx", "../../../../../node_modules/packages/ui-order-form/src/utils/helpers/session-notify.ts", "../../../../../node_modules/packages/ui-order-form/src/constants.ts", "../../../../../node_modules/packages/ui-order-form/src/store/constants.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/order/constants.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/order/fields-relations/constants.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/order/fields-relations/work-type-paper-type.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/order/fields-relations/work-type.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/order/fields-relations/paper-type.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/order/fields-relations/deadline.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/order/fields-relations/pages-words-switcher.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/order/fields-relations/spacing.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/order/fields-relations/additional-features/ai-check-report.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/order/fields-relations/max-value/pages-slides-spacing-deadline.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/order/fields-relations/max-value/prodlems-questions-deadline.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/order/fields-relations/max-value/index.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/order/fields-relations/academic-level.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/order/fields-relations/subject.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/order/fields-relations/quantity-key.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/order/fields-relations/index.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/order/index.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/price-data/ContextPDAdapter.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/price-data/selectors.ts", "../../../../../node_modules/@qwerty.software/global-entities/discount/adapters/async-field.ts", "../../../../../node_modules/@qwerty.software/global-entities/discount/selectors.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/price-data/constants.ts", "../../../../../node_modules/packages/ui-order-form/src/store/slices/price-data/index.ts", "../../../../../node_modules/packages/currency-switcher/src/utils/replace-price-via-currency.ts", "../../../../../node_modules/@qwerty.software/global-entities/discount/sagas/apply-discount.ts", "../../../../../node_modules/@qwerty.software/store-manager/index.ts"], "sourcesContent": ["exports.ENV = 'production'\n\nexports.PORT = 8686\n\nexports.SERVER_URL = 'https://ms-hub.site.supplies'\n\nexports.PRICE_CALCULATOR_SERVER_URL = 'https://price-calculator-module.site.supplies'\n\nexports.API_URL = 'https://api.speedy.company/'\n\nexports.API_PROXY_URL = '/api/'\n\nexports.USE_HOST = false\n\nexports.PRICE_CALCULATOR_LOGGER = false\n\nexports.FETCH_GENERAL_CONFIGS_URL = 'https://api.speedy.company/client/configs/LAKSJHdASKLDFJLAljsaf897234hlafsf1LSf'\n\nexports.CLICK_JACKING_DEFENSE = true\n\nexports.ENABLE_PT = false\n", "import pako from 'pako'\n\nconst unzip = (data) => {\n const compressedData = atob(data)\n // eslint-disable-next-line\n const unziped = pako.inflate(new Uint8Array(compressedData.split('').map(x => x.charCodeAt(0))))\n // eslint-disable-next-line\n\treturn JSON.parse(String.fromCharCode.apply(null, new Uint16Array(unziped)))\n}\n\nexport default unzip\n", "/* utils general */\nimport unzip from 'utils/unzip'\n\nexport default store => next => action => {\n if (action.data && action.data.event_data && action.data.event_data.format === 'gzip') {\n const modifyedAction = {\n ...action,\n data: {\n ...action.data,\n event_data: {\n ...action.data.event_data,\n action_data: unzip(action.data.event_data.action_data),\n format: 'object',\n },\n },\n }\n\n return next(modifyedAction)\n }\n\n return next(action)\n}\n", "class StoreEventTarget extends EventTarget {\n protected listeners: { [key: string]: (EventListener)[] } = {}\n\n public addEventListener = (type: string, listener: EventListener, ...args: any) => {\n if (!this.listeners[type]) {\n this.listeners[type] = []\n }\n\n this.listeners[type].push(listener)\n\n super.addEventListener(type, listener, ...args)\n }\n\n public removeEventListener = (type: string, listener: EventListener, ...args: any) => {\n if (!this.listeners[type]) {\n return\n }\n\n const index = this.listeners[type].indexOf(listener)\n\n if (index !== -1) {\n this.listeners[type].splice(index, 1)\n }\n\n if (this.listeners[type].length === 0) {\n delete this.listeners[type]\n }\n\n super.removeEventListener(type, listener, ...args)\n }\n\n public getEventListeners = (type?: string) => {\n if (type && this.listeners[type] && this.listeners[type].length === 0) {\n delete this.listeners[type]\n }\n\n if (!type) {\n return this.listeners\n }\n\n return this.listeners[type]\n }\n\n public dispatchEvent = (event: Event) => {\n const listeners = this.getEventListeners(event.type)\n\n if (!listeners || listeners.length === 0) {\n return false\n }\n\n return super.dispatchEvent(event)\n }\n}\n\nexport default StoreEventTarget", "/**\n * Singleton factory\n * \n * Using for bind factory returned value to global scope on first call\n * and only return if value exists\n * \n * @warning Use as specific as possible key for avoid collisions (hashes, uuids, etc.) between different values,\n * but declare as string literal for avoid collisions with other singletons.\n * \n * @param key - global variable name\n * @param factory - factory function\n * @param onceCallback - callback for first call\n * \n * @returns factory returned value\n * \n * P.S.: helper writed for easy typing.\n */\nexport default function singleton unknown = () => unknown>(\n key: string,\n factory: TFactory,\n options?: {\n onCreate?: (factory: ReturnType) => void\n }\n): ReturnType {\n const { onCreate: handleCreate } = options ?? {}\n\n // @ts-ignore\n if (!window[key]) {\n // @ts-ignore\n window[key] = factory()\n\n if (handleCreate) {\n handleCreate(window[key])\n }\n }\n\n // @ts-ignore\n return window[key]\n}", "import StoreEventTarget from './store-event-target'\n\nimport singleton from 'helpers/singleton'\n\nexport const storeEvents = singleton('590912f1-8b25-40aa-b922-250960cbbeb2', () => new StoreEventTarget())\n\nconst eventsMiddlware = store => next => action => {\n storeEvents.dispatchEvent(new CustomEvent(action.type, { detail: action }))\n\n return next(action)\n}\n\nexport default eventsMiddlware", "import createSagaMiddleware from 'redux-saga'\n// @ts-ignore\nconst sagaMiddleware = window.sagaMiddleware ?? createSagaMiddleware()\n// @ts-ignore\nwindow.sagaMiddleware = sagaMiddleware\n\nexport default sagaMiddleware\n", "interface IsPlainObject {\n (value: any): boolean\n}\n\nconst isPlainObject: IsPlainObject = value => value?.constructor === Object\n\nexport default isPlainObject", "import { RegisteredAbTests } from '../_register'\n\nimport isPlainObject from 'utils/is-plain-object'\n\nimport type { Hydrator, ABTestsMap } from '../types'\n\nconst hydrateCheckRequest = (register: RegisteredAbTests[]): Hydrator => (payload: any) => {\n if (!isPlainObject(payload)) {\n return {} as ABTestsMap\n }\n\n return register.reduce((tests, testName) => {\n if (typeof payload[testName] !== 'undefined') {\n tests[testName] = payload[testName]\n }\n\n return tests\n }, {} as ABTestsMap)\n}\n\nexport default hydrateCheckRequest", "export enum RegisteredAbTests {\n IPHONE_BANNER = 'showIphoneBanner',\n ORDER_BOT = 'chatbotOrderFormAlternative',\n INC_PRICES = 'incPrices',\n NEW_ORDER_FORM = 'newOrderForm',\n}\n", "import hydrateCheckRequest from './hydrators/check-request'\n\nimport { RegisteredAbTests } from './_register'\n\nimport type { Hydrator } from './types'\n\nexport const hydrators: Array = [\n hydrateCheckRequest(Object.values(RegisteredAbTests)),\n]\n\nexport default hydrators", "import { v4 as uuid } from 'uuid'\n\nimport { RegisteredAbTests } from './_register'\n\nimport type { ABTests, ABTestsState } from './types.d'\n\nexport const NAME = 'ab-tests' as const\n\nexport const AB_TESTS_LIST = Object.values(RegisteredAbTests)\n\nexport const INITIAL_AB_TESTS: ABTests = AB_TESTS_LIST.reduce((acc, testName) => {\n acc[testName] = {\n name: testName,\n group: undefined,\n hydrated: false,\n rayId: uuid(),\n }\n\n return acc\n}, {} as ABTests)\n\nexport const INITIAL_STATE: ABTestsState = {\n abTests: INITIAL_AB_TESTS,\n checkRequestReady: false,\n}", "import * as RTK from '@reduxjs/toolkit'\n\nimport { RegisteredAbTests } from '../_register'\nimport hydrators from '../_hydrators'\n\nimport { NAME, INITIAL_STATE } from '../constants'\nimport type { State, ABTestsMap } from '../types.d'\n\nexport const slice = RTK.createSlice({\n name: NAME,\n initialState: INITIAL_STATE,\n reducers: {\n hydrate(state, action: RTK.PayloadAction) {\n state.checkRequestReady = true\n Object.entries(hydrate(action.payload)).forEach(([testName, group]) => {\n state.abTests[testName as RegisteredAbTests].group = group\n state.abTests[testName as RegisteredAbTests].hydrated = true\n })\n },\n }\n})\n\nexport const abTestsSlice = slice\n\nconst GET_STATE = (state: State) => state[NAME]\n\nexport const AB_TEST = (testName: RegisteredAbTests) => RTK.createSelector(GET_STATE, state => state.abTests[testName])\nexport const AB_TESTS = RTK.createSelector(GET_STATE, state => state.abTests)\nexport const CHECK_REQUEST_READY = RTK.createSelector(GET_STATE, state => state.checkRequestReady)\n\nexport function hydrate(payload: unknown) {\n return hydrators.reduce((acc, hydrator) => {\n const testsMap: ABTestsMap = hydrator(payload)\n\n for (const testName in testsMap) {\n acc[testName as RegisteredAbTests] = testsMap[testName]\n }\n\n return acc\n }, {} as ABTestsMap)\n}\n\n", "import { createListenerMiddleware } from '@reduxjs/toolkit'\n\nimport { slice, AB_TESTS } from './slice'\n\nimport type { State, ABTest } from '../types.d'\n\nconst ATTRS_DOMAIN = 'data-ab-test'\nconst CONTAINER_ATTR = 'data-ab-tests-container'\n\nconst listener = createListenerMiddleware()\n\nlistener.startListening({\n actionCreator: slice.actions.hydrate,\n effect(_, { getState }) {\n const state = getState() as State\n const abTests = AB_TESTS(state)\n\n const container = getContainer()\n\n Object.values(abTests).forEach((test) => {\n setTest(container, test)\n })\n },\n})\n\nexport const abTestsHydarateListener = listener\n\nfunction getContainer() {\n const existsRoot = document.body.querySelector(`div[${CONTAINER_ATTR}]`)\n\n const container = existsRoot || document.createElement('div')\n\n container.setAttribute(CONTAINER_ATTR, '')\n container.setAttribute('hidden', '')\n\n if (!existsRoot) {\n document.body.prepend(container)\n }\n\n return container\n}\n\nfunction setTest(container: HTMLDivElement, test: ABTest) {\n const existsNode = document.body.querySelector(`div[${ATTRS_DOMAIN}-ray-id=\"${test.rayId}\"]`)\n\n if (!test.hydrated) {\n return\n }\n\n const node = existsNode || document.createElement('div')\n\n const group = typeof test.group === 'string' ? test.group : JSON.stringify(test.group)\n\n node.setAttribute(ATTRS_DOMAIN, '')\n node.setAttribute(`${ATTRS_DOMAIN}-ray-id`, test.rayId)\n node.setAttribute('data-name', test.name)\n node.setAttribute('data-group', group)\n\n if (!existsNode) {\n container.append(node)\n }\n}", "export {\n abTestsSlice,\n\n AB_TEST,\n AB_TESTS,\n} from './slice'\nexport { abTestsHydarateListener } from './hydrate-listener'", "import { createListenerMiddleware } from '@reduxjs/toolkit'\n\nimport singleton from 'helpers/singleton'\n\nconst SINGLETON_ID = 'ab30ee82-f520-4686-8e37-29af85f87b21'\n\nexport const discountListener = singleton(SINGLETON_ID, () => createListenerMiddleware())", "import {\n // ENV,\n PRICE_CALCULATOR_SERVER_URL,\n\n // @ts-ignore\n} from 'env'\n\nimport { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n\n// import { promiseBaseQuery } from './api/base-query-functions'\n\nimport { configureStore, combineReducers, Store, Middleware, Reducer, ReducersMapObject, Slice } from '@reduxjs/toolkit'\nimport { persistStore, persistReducer, Persistor, PersistConfig } from 'redux-persist'\n\n// import { routerReducer } from 'react-router-redux'\n\n// import _throttle from 'lodash/throttle'\n// import _isEqual from 'lodash/isEqual'\n\nimport unzipPusherData from '@qwerty.software/store-manager/middlewares/unzip-pusher-data'\nimport events from '@qwerty.software/store-manager/middlewares/events'\nimport sagas from '@qwerty.software/store-manager/sagas'\n\nimport { abTestsSlice, abTestsHydarateListener } from '@qwerty.software/ab-test/src/component/store'\nimport { discountListener } from 'global-entities/discount/side-effects'\n// import { filesUploaderListener } from 'global-entities/files-uploader/side-effects'\n\nimport type { IStoreManager } from './types'\nimport type { ICurrencySwitcherState, ResponseData } from './api/price-calculator-api/exchange-rates'\n\n// const DEV_TOOLS = ENV !== 'production'\n\nabstract class StoreManager implements IStoreManager {\n public store!: Store\n\n public persistor!: Persistor\n\n public persist!: () => void\n\n // Create an object which maps keys to reducers\n private reducers!: ReducersMapObject\n\n // Create the initial combinedReducer\n private combinedReducer!: ReturnType\n\n // An array which is used to delete state keys when reducers are removed\n private keysToRemove: string[] = []\n\n // static APIv1 = createApi({\n // reducerPath: '[APIv1]',\n // baseQuery: fetchBaseQuery({\n // baseUrl: `/api`,\n // }),\n // endpoints: () => ({}),\n // })\n\n static PriceCalculatorApiV1 = createApi({\n reducerPath: '[PriceCalculatorApiV1]',\n baseQuery: fetchBaseQuery({\n baseUrl: PRICE_CALCULATOR_SERVER_URL,\n }),\n endpoints: (builder) => ({\n rates: builder.query({\n query: () => ({\n url: `/exchange-rates`,\n method: 'GET',\n params: {},\n }),\n transformResponse: (response: ResponseData) => ({\n rates: response?.rates,\n timestamp: response?.timestamp,\n }),\n providesTags: ['CurrencyRate'],\n }),\n }),\n tagTypes: ['CurrencyRate'],\n })\n\n // static Promises = createApi({\n // reducerPath: '[Promises]',\n // baseQuery: promiseBaseQuery(),\n // endpoints: () => ({}),\n // })\n\n protected constructor(\n reducers: ReducersMapObject = {},\n ) {\n this.reducers = {\n // api reducers\n // [StoreManager.APIv1.reducerPath]: StoreManager.APIv1.reducer,\n [StoreManager.PriceCalculatorApiV1.reducerPath]: StoreManager.PriceCalculatorApiV1.reducer,\n // [StoreManager.Promises.reducerPath]: StoreManager.Promises.reducer,\n\n [abTestsSlice.name]: abTestsSlice.reducer,\n\n // @ts-ignore\n // routing: routerReducer,\n\n ...reducers,\n }\n this.combinedReducer = combineReducers(this.reducers)\n\n this.store = configureStore({\n // devTools: DEV_TOOLS,\n\n reducer: this.reduce,\n middleware: (getDefaultMiddleware) => getDefaultMiddleware({\n serializableCheck: false,\n immutableCheck: false,\n })\n .concat([\n unzipPusherData,\n events,\n sagas,\n\n // api middlewares\n // StoreManager.APIv1.middleware,\n StoreManager.PriceCalculatorApiV1.middleware,\n // StoreManager.Promises.middleware,\n\n // side effects middlewares\n abTestsHydarateListener.middleware,\n discountListener.middleware,\n // filesUploaderListener.middleware,\n ]),\n })\n\n this.persistor = persistStore(this.store)\n\n this.persist = this.persistor.persist\n // this.persist = _throttle(this.persistor.persist, 500, {\n // leading: false,\n // trailing: true,\n // })\n }\n\n // The root reducer function exposed by this object\n // This will be passed to the store\n protected reduce = (state, action) => {\n // If any reducers have been removed, clean up their state first\n if (this.keysToRemove.length > 0) {\n state = { ...state }\n for (const key of this.keysToRemove) {\n delete state[key]\n }\n this.keysToRemove = []\n }\n\n // Delegate to the combined reducer\n return this.combinedReducer(state, action)\n }\n\n public addReducer = (key: string, reducer: Reducer, persistConfig?: PersistConfig) => {\n if (persistConfig) {\n reducer = persistReducer(\n persistConfig,\n reducer,\n )\n }\n\n if (!key || this.reducers[key]) {\n return\n }\n\n // Add the reducer to the reducer mapping\n this.reducers[key] = reducer\n\n // Generate a new combined reducer\n this.combinedReducer = combineReducers(this.reducers)\n\n this.store.replaceReducer(this.reduce)\n\n this.persist()\n }\n\n // Removes a reducer with the specified key\n public removeReducer = (key: string) => {\n if (!key || !this.reducers[key]) {\n return\n }\n\n // Remove it from the reducer mapping\n delete this.reducers[key]\n\n // Add the key to the list of keys to clean up\n this.keysToRemove.push(key)\n\n // Generate a new combined reducer\n this.combinedReducer = combineReducers(this.reducers)\n\n this.store.replaceReducer(this.reduce)\n\n this.persist()\n }\n\n public addReducers = (reducers, persistConfig?: PersistConfig) => {\n for (const key in reducers) {\n this.addReducer(key, reducers[key], persistConfig)\n }\n }\n\n public removeReducers = (keys) => {\n for (const key of keys) {\n this.removeReducer(key)\n }\n }\n\n public addSlice = (slice: Slice, persistConfig?: PersistConfig) => {\n this.addReducer(slice.name, slice.reducer, persistConfig)\n }\n\n public removeSlice = (slice: Slice | string) => {\n this.removeReducer(typeof slice === 'string' ? slice : slice.name)\n }\n\n public addSlices = (slices: (Slice | [slice: Slice, persistConfig?: PersistConfig])[]) => {\n for (const _slice of slices) {\n const [slice, persistConfig] = Array.isArray(_slice) ? _slice : [_slice]\n\n this.addSlice(slice, persistConfig)\n }\n }\n\n public removeSlices = (slices: (Slice | string)[]) => {\n for (const slice of slices) {\n this.removeSlice(slice)\n }\n }\n}\n\nexport default StoreManager\n", "import { createSlice, PayloadAction, } from '@reduxjs/toolkit'\nimport type { ReactNode } from 'react'\n\nexport interface State {\n cookiePolicyNode: ReactNode | null\n}\n\nconst initialState: State = {\n cookiePolicyNode: null\n}\n\nexport const slice = createSlice({\n name: `slice://global-entities/ref-to-interact`,\n initialState,\n reducers: {\n setCookiePolicyNode(state, action: PayloadAction) {\n state.cookiePolicyNode = action.payload\n },\n },\n})\n\nexport const { setCookiePolicyNode } = slice.actions\n\ntype Store = {\n [slice.name]: State\n}\n\nexport const COOKIE_POLICY_NODE = (state: Store) => state[slice.name]?.cookiePolicyNode\n", "import { Validator } from '../definitions'\n\nfunction buildValidator(\n name: Validator['name'],\n fn: Omit,\n Error: Validator['Error'],\n): Validator {\n Object.defineProperty(fn, 'name', {\n value: name,\n\n configurable: false,\n enumerable: false,\n writable: false,\n })\n Object.defineProperty(fn, 'Error', {\n value: Error,\n\n configurable: false,\n enumerable: false,\n writable: false,\n })\n\n return fn as Validator\n}\n\nexport default buildValidator", "import { SharedProps, enqueueSnackbar } from 'notistack'\n\nconst DEFAULT_OPTIONS: SharedProps = {\n anchorOrigin: { horizontal: 'left', vertical: 'bottom' },\n autoHideDuration: 3000,\n}\n\nconst notify = {\n success: (messageText: string, options?: SharedProps) => {\n try {\n enqueueSnackbar && enqueueSnackbar(messageText, { // enqueueSnackbar && - this fix files uploader bug with uploaded file with error on page load\n variant: 'success',\n autoHideDuration: options?.autoHideDuration || DEFAULT_OPTIONS.autoHideDuration,\n anchorOrigin: options?.anchorOrigin || DEFAULT_OPTIONS.anchorOrigin\n })\n } catch (error) {\n console.error(error)\n }\n },\n error: (messageText: string, options?: SharedProps) => {\n try {\n enqueueSnackbar && enqueueSnackbar(messageText, {\n variant: 'error',\n autoHideDuration: options?.autoHideDuration || DEFAULT_OPTIONS.autoHideDuration,\n anchorOrigin: options?.anchorOrigin || DEFAULT_OPTIONS.anchorOrigin\n })\n } catch (error) {\n console.error(error)\n }\n },\n warning: (messageText: string, options?: SharedProps) => {\n try {\n enqueueSnackbar && enqueueSnackbar(messageText, {\n variant: 'warning',\n autoHideDuration: options?.autoHideDuration || DEFAULT_OPTIONS.autoHideDuration,\n anchorOrigin: options?.anchorOrigin || DEFAULT_OPTIONS.anchorOrigin\n })\n } catch (error) {\n console.error(error)\n }\n },\n info: (messageText: string, options?: SharedProps) => {\n try {\n enqueueSnackbar && enqueueSnackbar(messageText, {\n variant: 'info',\n autoHideDuration: options?.autoHideDuration || DEFAULT_OPTIONS.autoHideDuration,\n anchorOrigin: options?.anchorOrigin || DEFAULT_OPTIONS.anchorOrigin\n })\n } catch (error) {\n console.error(error)\n }\n },\n}\n\n// @ts-ignore\nwindow.toastr = notify\n\nexport default notify\n", "import buildValidator from './_build-validator'\nimport type { ValidationError } from './_error-interface'\n\nimport notify from 'utils/notify'\n\nimport { FileMeta } from '../definitions'\n\nclass NotAllowedExtensionError extends Error implements ValidationError {\n protected fileName: string\n\n constructor({ file }: FileMeta) {\n super('Security reasons error')\n\n this.fileName = file.name\n }\n\n notify() {\n // notify.error(`'${this.fileName}' was not uploaded due to security reasons. Please contact support staff.`)\n }\n}\n\nconst materialExtension = buildValidator(\n 'material-extension',\n (fileMeta: FileMeta) => {\n const ext = fileext(fileMeta.file.name)\n const allowedExtensions = getAllowedExtensions()\n\n if (ext && !allowedExtensions.includes(ext)) {\n notify.error(`'${fileMeta.file.name}' was not uploaded due to security reasons. Please contact support staff.`)\n throw new NotAllowedExtensionError(fileMeta)\n }\n },\n NotAllowedExtensionError,\n)\n\nexport default materialExtension\n\nfunction fileext(fileName: string) {\n return fileName.split('.')[fileName.split('.').length - 1]\n}\n\nfunction getAllowedExtensions() {\n return [\n 'docx',\n 'doc',\n 'txt',\n 'pdf',\n 'sav',\n 'scv',\n 'xlsx',\n 'xls',\n 'pptx',\n 'ppt',\n 'png',\n 'jpg',\n 'webp',\n 'jpeg',\n 'mp4',\n 'pub',\n 'rar',\n 'zip',\n 'rtf',\n ]\n}", "import type { Configs as ConfigsMapType } from 'common/configs/types'\n\nexport const KEY = 'MICROSERVICES_CONFIGS' as const\n\ndeclare global {\n interface Window {\n MICROSERVICES_INNER_CONFIGS?: ConfigsMapType\n MICROSERVICES_OUTER_CONFIGS?: ConfigsMapType\n\n [KEY]?: ConfigsMapType\n }\n}\n\nexport const initConfigs = (...args: Array) => {\n const prevConfigs = window[KEY] || {}\n\n const innerConfigs = window.MICROSERVICES_INNER_CONFIGS || {}\n const outerConfigs = window.MICROSERVICES_OUTER_CONFIGS || {}\n\n const configs = Object.assign({}, innerConfigs, outerConfigs, prevConfigs, ...args) as ConfigsMapType\n\n window[KEY] = configs\n}\n\nexport type { Configs as ConfigsMapType } from 'common/configs/types'", "import { KEY } from './init'\n\nexport const getConfigs = () => {\n if (!window[KEY]) {\n throw new Error('Configs are not initialized')\n }\n\n return window[KEY]\n}", "{\n \"calculatorConfigs\": \"default\",\n \"orderFormConfigs\": \"default\",\n \"inquiryFormConfigs\": \"default\",\n \"orderInfoConfigs\": \"default\",\n \"defaultCalculatorType\": \"vertical\",\n \"inquiryFormSidebarType\": \"default\",\n \"defaultEmailsCollectorType\": \"default\",\n \"livechatOptions\": {\n \"license\": 5580561,\n \"chat_between_groups\": false\n }\n}\n", "import { getConfigs } from 'global-entities/configs/utils/get'\n\n/* helpers general */\n// import getDomain from 'helpers/domain/get-domain'\n// import getInnerConfigs from 'helpers/configs/get-inner-configs'\n// import getOuterConfigs from 'helpers/configs/get-outer-configs'\n// import getContextConfigs from 'helpers/configs/get-context-configs'\n\n/* configs mh default */\nimport defaultConfigs from 'static/default.json'\n\nexport default (key) => {\n // if (!window.hasOwnProperty('globalNumberOfCallsForGetFromConfigs')) {\n // window.globalNumberOfCallsForGetFromConfigs = 0\n // }\n\n // window.globalNumberOfCallsForGetFromConfigs++\n\n const configs = getConfigs()\n\n // if (!Object.keys(configs).length && window.globalNumberOfCallsForGetFromConfigs === 1) {\n // // eslint-disable-next-line no-console\n // console.warn(`Can't find configs for '${getDomain()}' project!`)\n // return\n // }\n\n if (!key) {\n return configs\n }\n\n if (!configs[key]) {\n // console.warn(`[FALLBACK_TO_DEFAULT] used ${value} instead of \"${key}\" of \"${getDomain()}\"`);\n return defaultConfigs[key] || undefined\n }\n\n return configs[key]\n}\n", "export const PROJECT_ID = 'id' as const\nexport const PROJECT_DOMAIN = 'domain' as const\nexport const PROJECT_FAMILY = 'family' as const\nexport const PROJECT_PARENT = 'parent' as const\n\nexport const ORDER_PAGE_PATH = 'orderPagePath' as const\n\nexport const IS_ALIAS_DOMAIN = 'isAliasDomain' as const\nexport const SHARE_LOCAL_STORAGE_TO = 'shareLocalStorageTo' as const\n\nexport const ORDER_DATA_DEFAULTS = 'orderDataDefaults' as const\nexport const ORDER_DATA_DISABLED_PERSISTOR = 'orderDataDisabledPersistor' as const\n\nexport const CALCULATOR_CONFIGS = 'calculatorConfigs' as const\n\nexport const HIDE_JINP = 'hideNewJinp' as const\n\nexport const ORDER_FORM_CONFIGS = 'orderFormConfigs' as const\nexport const ORDER_FORM_BOTTOMBAR_TYPE = 'orderFormBottombarType' as const\nexport const ORDER_FORM_IS_AVAILABLE_ONLY_FOR_AUTHORIZED_USER = 'orderFormIsAvailableOnlyForAuthorizedUser' as const\n\nexport const INQUIRY_FORM_CONFIGS = 'inquiryFormConfigs' as const\nexport const INQUIRY_FORM_SIDEBAR_TYPE = 'inquiryFormSidebarType' as const\nexport const INQUIRY_FORM_BOTTOMBAR_TYPE = 'inquiryFormBottombarType' as const\nexport const INQUIRY_PAGE_PATH = 'inquiryPagePath' as const\n\nexport const ORDER_INFO_CONFIGS = 'orderInfoConfigs' as const\n\nexport const DELIVER_DATA_FROM_CALCULATOR_TO_ORDER_FORM_VIA_QUERY_STRING = 'deliverDataFromCalculatorToOrderFormViaQueryString' as const\n\nexport const SHOULD_DISABLE_USER_CHECK_REQUEST = 'shouldDisableUserCheckRequest' as const\n\nexport const SHOULD_REDIRECT_TO_PARENT_SITE = 'shouldRedirectToParentSite' as const\nexport const PARENT_SITE_URL = 'parentSiteUrl' as const\nexport const ADDITIONAL_QUERY_PARAMS_TO_PARENT_SITE = 'additionalQueryParamsToParentSite' as const\n\nexport const SHOULD_USE_SPECIFIC_API = 'shouldUseSpecificApi' as const\nexport const SPECIFIC_API_URL = 'specificApiUrl' as const\n\nexport const DASHBOARD_SUBDOMAIN = 'dashboardSubdomain'\n\nexport const LIVECHAT_OPTIONS = 'livechatOptions' as const\n\nexport const SHOULD_DISABLE_LOAD_ALWAYS_SERVICES = 'shouldDisableLoadAlwaysServices' as const\n\nexport const SHOULD_DISABLE_RATE_US = 'shouldDisableRateUs' as const\n\nexport const IS_NEW_SPEEDYPAPER_DESIGN = 'newSpeedyDesign' as const\n\nexport const TRACK_TOOL = 'trackTool' as const\n\nexport const CASHBACK_PERCENT_IN_CALCULATOR = 'cashback' as const //LA-2461 !!!!\nexport const CALCULATOR_QUERY_FLOW = 'calculatorQueryFlow' as const\n\nexport const WITH_RECAPTCHA = 'withRecaptcha' as const\n\nexport const ORDER_FORM_BOT_SWITCHER_FORCE_ENABLED = 'orderFormBotSwitcherForceEnabled' as const\nexport const ORDER_FORM_BOT_SWITCHER_VARIANT = 'orderFormBotSwitcherVariant' as const\n\nexport const INC_PRICES_AB_TEST_VERSION = 'incPricesAbTestVersion' as const\n\nexport const FORCE_HIDE_TURNITIN_UPSALE = 'forceHideTurnitinUpsale' as const", "export const USER_DATA_EXPIRES_TIMEOUT = 7.2e+6 // 2 hours, same with api\n\nexport const AUTHORISATION_STATUSES = {\n authorized: 'AUTHORIZED',\n unauthorized: 'UNAUTHORIZED',\n}\n\nexport const SIGNUP = {\n authType: 'signup',\n aliasedAuthTypes: ['register'],\n route: 'register',\n authFormStep: 1,\n orderFormStep: 2,\n}\n\nexport const SIGNIN = {\n authType: 'signin',\n aliasedAuthTypes: ['login'],\n route: 'login',\n authFormStep: 2,\n orderFormStep: 1,\n}\n\nexport const FORGOT = {\n authType: 'forgot',\n route: 'password/forgot',\n authFormStep: 2,\n}\n\nexport const RESET = {\n authType: 'reset',\n route: 'password/reset',\n}\n\nexport const FACEBOOK = {\n authType: 'facebook',\n}\n\nexport const GOOGLE = {\n authType: 'google',\n}\n\nexport const APPLE = {\n authType: 'apple',\n}\n\nexport const DASHBOARD = {\n action: 'dashboard',\n}\n\nexport const SIGNOUT = {\n action: 'signout',\n aliasedAuthTypes: ['logout'],\n route: 'logout',\n}\n\nexport const CHECK_TRIGGERED = 'CHECK_TRIGGERED'\nexport const CHECK = {\n action: 'check',\n route: 'check',\n}\n", "export const PAGES = 'pages'\nexport const WORDS = 'words'\nexport const SWITCHER_BUTTONS = [\n PAGES,\n WORDS,\n]\n\nexport const PAGES_INDEX = SWITCHER_BUTTONS.findIndex((button) => button === PAGES)\nexport const WORDS_INDEX = SWITCHER_BUTTONS.findIndex((button) => button === WORDS)\n", "/* helpers general */\nimport getFromConfigs from 'helpers/configs/get-from-configs'\n\n/* constants general */\nimport { ORDER_DATA_DEFAULTS } from 'constants/configs'\nimport { SIGNUP } from 'constants/auth'\n\nimport { PAGES_INDEX } from 'constants/pagesWordsSwitcher'\n\nconst orderDataDefaults = getFromConfigs(ORDER_DATA_DEFAULTS)\n\nexport default {\n authType: {\n name: 'authType',\n defaultValue: (orderDataDefaults && orderDataDefaults.authType) || SIGNUP.authType,\n defaultType: 'string',\n effectsOnOrderDataChange: false,\n },\n\n name: {\n name: 'name',\n defaultValue: '',\n defaultType: 'string',\n debounceTime: 500,\n effectsOnOrderDataChange: false,\n },\n\n firstName: {\n name: 'firstName',\n defaultValue: '',\n defaultType: 'string',\n debounceTime: 500,\n effectsOnOrderDataChange: false,\n },\n\n lastName: {\n name: 'lastName',\n defaultValue: '',\n defaultType: 'string',\n debounceTime: 500,\n effectsOnOrderDataChange: false,\n },\n\n email: {\n name: 'email',\n defaultValue: '',\n defaultType: 'string',\n debounceTime: 500,\n effectsOnOrderDataChange: false,\n },\n\n phone: {\n name: 'phone',\n defaultValue: '',\n defaultType: 'string',\n effectsOnOrderDataChange: false,\n },\n\n oldPassword: {\n name: 'oldPassword',\n defaultValue: '',\n defaultType: 'string',\n minLength: 6,\n debounceTime: 500,\n effectsOnOrderDataChange: false,\n },\n\n password: {\n name: 'password',\n defaultValue: '',\n defaultType: 'string',\n minLength: 6,\n debounceTime: 500,\n effectsOnOrderDataChange: false,\n },\n\n passwordConfirmation: {\n name: 'passwordConfirmation',\n defaultValue: '',\n defaultType: 'string',\n minLength: 6,\n debounceTime: 500,\n effectsOnOrderDataChange: false,\n },\n\n rememberMe: {\n name: 'rememberMe',\n defaultValue: (orderDataDefaults && orderDataDefaults.rememberMe) || true,\n defaultType: 'boolean',\n effectsOnOrderDataChange: false,\n },\n\n facebookAuth: {\n name: 'facebookAuth',\n defaultValue: {},\n defaultType: 'object',\n effectsOnOrderDataChange: false,\n },\n\n googleAuth: {\n name: 'googleAuth',\n defaultValue: {},\n defaultType: 'object',\n effectsOnOrderDataChange: false,\n },\n\n appleAuth: {\n name: 'appleAuth',\n defaultValue: {},\n defaultType: 'object',\n effectsOnOrderDataChange: false,\n },\n\n topic: {\n name: 'topic',\n defaultValue: (orderDataDefaults && orderDataDefaults.topic) || '',\n defaultType: 'string',\n minLength: 8,\n maxLength: 300,\n debounceTime: 500,\n effectsOnOrderDataChange: true,\n },\n\n paperDetails: {\n name: 'paperDetails',\n defaultValue: (orderDataDefaults && orderDataDefaults.paperDetails) || '',\n defaultType: 'string',\n minLength: 15,\n maxLength: 1000,\n debounceTime: 500,\n effectsOnOrderDataChange: true,\n },\n\n academicLevel: {\n name: 'academicLevel',\n defaultValue: (orderDataDefaults && orderDataDefaults.academicLevel) || 10,\n defaultType: 'number',\n effectsOnOrderDataChange: true,\n },\n\n paperType: {\n name: 'paperType',\n defaultValue: (orderDataDefaults && orderDataDefaults.paperType) || 90,\n problemSolvingKey: 110,\n resumeKey: 116,\n multiplyQuestionsKey: 200,\n questionsAndAnswersKey: 199,\n includesFollowUpThankYouLetterKeys: [166, 168],\n defaultType: 'number',\n effectsOnOrderDataChange: true,\n },\n\n workType: {\n name: 'workType',\n defaultValue: (orderDataDefaults && orderDataDefaults.workType) || 20,\n problemSolvingKey: 22,\n gradingMarkingKey: 172,\n multiplyQuestionsKey: 201,\n questionsAndAnswersKey: 202,\n defaultType: 'number',\n effectsOnOrderDataChange: true,\n },\n\n paperFormat: {\n name: 'paperFormat',\n defaultValue: (orderDataDefaults && orderDataDefaults.paperFormat) || 26,\n defaultType: 'number',\n effectsOnOrderDataChange: true,\n },\n\n subject: {\n name: 'subject',\n defaultValue: (orderDataDefaults && orderDataDefaults.subject) || 78,\n defaultType: 'number',\n effectsOnOrderDataChange: true,\n },\n\n deadline: {\n name: 'deadline',\n defaultValue: (orderDataDefaults && orderDataDefaults.deadline) || 9,\n defaultType: 'number',\n effectsOnOrderDataChange: true,\n },\n\n pagesWordsSwitcher: {\n name: 'pagesWordsSwitcher',\n defaultValue: (orderDataDefaults && orderDataDefaults.pagesWordsSwitcher) || PAGES_INDEX,\n problemSolvingKey: 0,\n questionsKey: 0,\n defaultType: 'number',\n debounceTime: 300,\n effectsOnOrderDataChange: true,\n },\n\n pages: {\n name: 'pages',\n defaultValue: (orderDataDefaults && orderDataDefaults.pages) || 1,\n problemSolvingKey: 0,\n questionsKey: 0,\n defaultType: 'number',\n debounceTime: 300,\n effectsOnOrderDataChange: true,\n },\n\n words: {\n name: 'words',\n defaultValue: (orderDataDefaults && orderDataDefaults.words) || 0,\n problemSolvingKey: 0,\n questionsKey: 0,\n defaultType: 'number',\n debounceTime: 300,\n effectsOnOrderDataChange: true,\n },\n\n problems: {\n name: 'problems',\n defaultValue: (orderDataDefaults && orderDataDefaults.problems) || 0,\n problemSolvingKey: 1,\n questionsKey: 0,\n defaultType: 'number',\n defaultHidden: true,\n debounceTime: 300,\n effectsOnOrderDataChange: true,\n },\n\n questions: {\n name: 'questions',\n defaultValue: (orderDataDefaults && orderDataDefaults.questions) || 0,\n questionsKey: 1,\n problemSolvingKey: 0,\n defaultType: 'number',\n defaultHidden: true,\n debounceTime: 300,\n effectsOnOrderDataChange: true,\n },\n\n slides: {\n name: 'slides',\n defaultValue: {\n slidesCount: (orderDataDefaults && orderDataDefaults.slides) || 0,\n checkedSpeakernotes: false,\n },\n problemSolvingKey: {\n slidesCount: 0,\n checkedSpeakernotes: false,\n },\n defaultType: 'object',\n speakerNotesID: 14,\n debounceTime: 300,\n effectsOnOrderDataChange: true,\n },\n\n spacing: {\n name: 'spacing',\n defaultValue: (orderDataDefaults && orderDataDefaults.spacing) || 118,\n problemSolvingKey: 118,\n multiplyQuestionsKey: 118,\n defaultType: 'number',\n effectsOnOrderDataChange: true,\n },\n\n sources: {\n name: 'sources',\n defaultValue: {\n sourcesCount: (orderDataDefaults && orderDataDefaults.sources) || 0,\n checkedSoftcopies: false,\n },\n multiplyQuestionsKey: {\n sourcesCount: 0,\n checkedSoftcopies: false,\n },\n defaultType: 'object',\n softcopiesID: 8,\n debounceTime: 300,\n effectsOnOrderDataChange: true,\n },\n\n software: {\n name: 'software',\n requiresPreEnable: true,\n enabled: false,\n defaultValue: (orderDataDefaults && orderDataDefaults.software) || 9,\n defaultType: 'number',\n effectsOnOrderDataChange: true,\n },\n\n writerCategory: {\n name: 'writerCategory',\n defaultValue: (orderDataDefaults && orderDataDefaults.writerCategory) || 1,\n defaultType: 'number',\n minDeadlineKey: 4,\n proWriterKey: 2,\n topWriterKey: 3,\n preferredWriterKey: 11,\n effectsOnOrderDataChange: true,\n },\n\n preferredOrder: {\n name: 'preferredOrder',\n defaultValue: null,\n defaultType: 'string',\n minLength: 4,\n maxLength: 10,\n effectsOnOrderDataChange: true,\n },\n\n additionalFeatures: {\n name: 'additionalFeatures',\n defaultValue: (orderDataDefaults && orderDataDefaults.additionalFeatures) || [],\n defaultType: 'array',\n followUpThankYouLetterKey: 6,\n effectsOnOrderDataChange: true,\n },\n\n discount: {\n name: 'discount',\n defaultValue: '',\n defaultType: 'string',\n buttonText: {\n apply: 'Apply',\n cancel: 'Cancel',\n },\n debounceTime: 300,\n effectsOnOrderDataChange: true,\n },\n\n files: {\n name: 'files',\n defaultValue: [],\n defaultType: 'array',\n maxFileSize: 1024 * 1024 * 25, // 25Mb\n status: {\n CANCELED: 'canceled',\n PENDING: 'pending',\n INDEFINITE: 'indefinite',\n SUCCESS: 'success',\n ERROR: 'error',\n },\n effectsOnOrderDataChange: true,\n },\n\n clientAgreements: {\n name: 'clientAgreements',\n defaultValue: [],\n requiredValues: [1, 2, 3],\n subscribedValue: 4,\n defaultType: 'array',\n effectsOnOrderDataChange: false,\n },\n\n amount: {\n name: 'amount',\n defaultValue: 1,\n defaultType: 'number',\n effectsOnOrderDataChange: false,\n debounceTime: 100,\n },\n\n tipsAmountWriter: {\n name: 'tipsAmountWriter',\n defaultValue: 10,\n defaultType: 'number',\n effectsOnOrderDataChange: false,\n },\n\n tipsAmountSupport: {\n name: 'tipsAmountSupport',\n defaultValue: 10,\n defaultType: 'number',\n effectsOnOrderDataChange: false,\n },\n\n tipsSupportsList: {\n name: 'tipsSupportsList',\n defaultValue: [],\n defaultType: 'array',\n effectsOnOrderDataChange: false,\n },\n\n revisionDaysAmount: {\n name: 'revisionDaysAmount',\n defaultValue: 8,\n maxValue: 20,\n defaultType: 'number',\n effectsOnOrderDataChange: false,\n },\n\n revisionHoursAmount: {\n name: 'revisionHoursAmount',\n maxValue: 24,\n defaultValue: 0,\n defaultType: 'number',\n effectsOnOrderDataChange: false,\n },\n\n revisionMinutesAmount: {\n name: 'revisionMinutesAmount',\n maxValue: 60,\n defaultValue: 0,\n defaultType: 'number',\n effectsOnOrderDataChange: false,\n },\n\n revisionComment: {\n name: 'revisionComment',\n defaultValue: '',\n defaultType: 'string',\n minLength: 8,\n effectsOnOrderDataChange: false,\n },\n\n revisionDeadline: {\n name: 'revisionDeadline',\n defaultType: 'string',\n defaultValue: '',\n effectsOnOrderDataChange: false,\n },\n\n /* steppers */\n orderFormStepper: {\n name: 'orderFormStepper',\n defaultValue: 1,\n defaultType: 'number',\n effectsOnOrderDataChange: false,\n },\n\n userAreaStepper: {\n name: 'userAreaStepper',\n defaultValue: 2,\n defaultType: 'number',\n effectsOnOrderDataChange: false,\n },\n\n authFormStepper: {\n name: 'authFormStepper',\n defaultValue: 1,\n defaultType: 'number',\n effectsOnOrderDataChange: false,\n },\n\n pricesTableStepper: {\n name: 'pricesTableStepper',\n defaultValue: 1,\n defaultType: 'number',\n effectsOnOrderDataChange: false,\n },\n\n ordersTableStepper: {\n name: 'ordersTableStepper',\n defaultValue: 3,\n defaultType: 'number',\n effectsOnOrderDataChange: false,\n },\n\n orderInfoStepper: {\n name: 'orderInfoStepper',\n defaultValue: 1,\n defaultType: 'number',\n effectsOnOrderDataChange: false,\n orderDetailsStep: 1,\n messagesStep: 2,\n filesStep: 3,\n },\n\n walletStepper: {\n name: 'walletStepper',\n defaultValue: 1,\n defaultType: 'number',\n effectsOnOrderDataChange: false,\n },\n}\n", "import buildValidator from './_build-validator'\nimport type { ValidationError } from './_error-interface'\n\nimport notify from 'utils/notify'\n\nimport { FileMeta } from '../definitions'\n\nimport cc from 'common/fields-configs'\n\nclass MaxFileSizeError extends Error implements ValidationError {\n protected fileName: string\n\n constructor({ file }: FileMeta) {\n super('File size is too big')\n\n this.fileName = file.name\n }\n\n notify() {\n // notify.error(`'${this.fileName}' should not exceed 25MB. Please contact support staff.`)\n }\n}\n\nconst materialExtension = buildValidator(\n 'material-size-limit',\n (fileMeta: FileMeta) => {\n if (fileMeta.file.size && fileMeta.file.size > cc.files.maxFileSize) {\n notify.error(`'${fileMeta.file.name}' should not exceed 25MB. Please contact support staff.`)\n throw new MaxFileSizeError(fileMeta)\n }\n },\n MaxFileSizeError,\n)\n\nexport default materialExtension", "import materialExtensionValidator from './material-extension'\nimport materialSizeLimitValidator from './material-size-limit'\n\nimport { Validator, FileMeta } from '../definitions'\n\n/**\n * Factory for getting validator by name\n *\n * @param name validator`s name\n * @returns Validator\n */\nconst validation = (name: string): Validator => {\n switch (name) {\n case materialExtensionValidator.name:\n return materialExtensionValidator\n\n case materialSizeLimitValidator.name:\n return materialSizeLimitValidator\n\n default:\n throw new Error(`Validator \"${name}\" not found`)\n }\n}\n\nexport const baseGetValidatorMapName = (namespace: string) => {\n /**\n * write here rules for dynamic file-uploader namespace name transform for key of validator map\n */\n return namespace\n}\n\nconst register = (\n getValidatorMapName: (namespace: string, file: FileMeta) => string = baseGetValidatorMapName,\n) => (namespace: string, file: FileMeta) => {\n switch (getValidatorMapName(namespace, file)) {\n case 'new-order':\n case 'dashboard':\n return [\n validation('material-extension'),\n validation('material-size-limit'),\n ]\n\n default:\n return []\n }\n}\n\nexport default register", "export const SAGAS_SCHEMA = 'saga://' as const", "import { createAction } from '@reduxjs/toolkit'\n\nimport { SAGAS_SCHEMA } from 'constants/sagas'\n\nimport type { PayloadAction } from '@reduxjs/toolkit'\n\nexport const NAME = 'files-uploader' as const\nexport type NAME = typeof NAME\nexport const FILES_UPLOADER_SLICE = `slice://${NAME}/` as const\nexport const UPLOAD_FILES_SAGA = `${SAGAS_SCHEMA}${NAME}/upload` as const\nexport const CANCEL_UPLOAD_FILES = `${SAGAS_SCHEMA}${NAME}/upload/cancel` as const\n\nexport type Namespace = string\n\nexport interface FileStat {\n name: string,\n size: number,\n}\n\nexport const PreloadState = {\n PENDING: 'pending',\n PROGRESS: 'progress',\n FULFILLED: 'fulfilled',\n REJECTED: 'rejected',\n} as const\nexport type PreloadState = typeof PreloadState[keyof typeof PreloadState]\n\nexport interface FileMeta {\n hash: string,\n id: number | null,\n file: FileStat\n preload?: {\n state?: PreloadState\n progress?: number\n\n error: string | null\n }\n}\n\nexport interface FileUploaderState {\n files: {\n [namespace in Namespace]?: FileMeta[]\n }\n}\n\nexport type UploadFilesSagaAction = PayloadAction<{\n namespace: Namespace\n\n files: File | File[]\n}, typeof UPLOAD_FILES_SAGA>\n\nexport interface FileErrorConstructor {\n new(file: FileMeta): Error\n}\n\nexport interface Validator {\n (file: FileMeta): void\n readonly name: string\n readonly Error: FileErrorConstructor\n}\n\nexport interface UploadFileResponse {\n errors: string[]\n data?: {\n uploaded_file_id: number\n }\n}\n\nexport const INITIAL_STATE: FileUploaderState = {\n files: {},\n}\n\nexport function uploadFilesSagaAction(namespace: string, files: File | File[]) {\n return createAction(UPLOAD_FILES_SAGA)({ namespace, files })\n}\n\nexport function cancelFileUpload(hash: string) {\n return createAction(`${CANCEL_UPLOAD_FILES}/${hash}`)()\n}", "import { createSelector } from '@reduxjs/toolkit'\n\nimport validatorRegister from './validators'\n\nimport {\n FILES_UPLOADER_SLICE,\n\n Namespace,\n FileUploaderState,\n} from './definitions'\n\nexport const validation = (namespace: Namespace, file: FileUploaderState['files'][Namespace][number]) => {\n const getValidator = validatorRegister()\n const validators = getValidator(namespace, file)\n\n return validators.reduce((acc, validator) => {\n let validationResult = null\n\n try {\n validator(file)\n } catch (error) {\n validationResult = error\n } finally {\n return {\n ...acc,\n [validator.name]: validationResult,\n }\n }\n }, {} as Record)\n}\n\nexport const createFilesSelector = (namespace: Namespace) => createSelector(\n [createSelector(GET_STATE, state => state.files[namespace] || [])],\n files => files.map(file => ({\n ...file,\n\n validation: validation(namespace, file),\n }))\n)\n\nexport const createFileSelector = (namespace: Namespace, hash: string) => createSelector(\n [createFilesSelector(namespace)],\n files => {\n const file = files.find(file => file.hash === hash)\n\n if (!file) {\n throw new Error(`File with hash \"${hash}\" not found`)\n }\n\n return file\n })\n\nfunction GET_STATE(state: any) {\n return state[FILES_UPLOADER_SLICE] as FileUploaderState\n}", "import { createTransform } from 'redux-persist'\n\nimport { validation } from '../../selectors'\n\nimport { PreloadState, FileUploaderState, FileMeta } from '../../definitions'\n\nconst write = (inboundState, key) => {\n switch (key) {\n default:\n return { ...inboundState }\n }\n}\n\nconst CompletedStates = [PreloadState.FULFILLED, PreloadState.REJECTED] as PreloadState[]\n\nconst hydrate = (outboundState, key) => {\n switch (key) {\n case 'files': {\n const namespaces = Object.keys(outboundState as FileUploaderState['files'])\n\n const result = namespaces.reduce((accumulator, namespace) => {\n accumulator[namespace] = outboundState[namespace].map((file) => {\n // failure front-end validation checks\n const invalid = Object.values(validation(namespace, file)).some(error => error !== null)\n // preload request fulfilled or rejected\n const uploaded = CompletedStates.indexOf(file.preload?.state as PreloadState) !== -1\n\n if (invalid || uploaded) {\n return file\n }\n\n return {\n ...file,\n\n preload: {\n ...file.preload,\n state: PreloadState.REJECTED,\n\n error: 'Aborted',\n }\n }\n }, [] as FileMeta[])\n\n return accumulator\n }, {} as FileUploaderState['files'])\n\n return result\n }\n\n default:\n return { ...outboundState }\n }\n}\n\nconst whitelist = createTransform(write, hydrate, {})\n\nexport default whitelist", "import { createSlice, PayloadAction, DeepPartial } from '@reduxjs/toolkit'\nimport localStorage from 'redux-persist/es/storage'\n\nimport aborted from './persistor/transforms/aborted'\n\nimport {\n INITIAL_STATE,\n\n FILES_UPLOADER_SLICE,\n\n FileMeta,\n} from './definitions'\n\nconst filesUploaderSlice = createSlice({\n name: FILES_UPLOADER_SLICE,\n initialState: INITIAL_STATE,\n reducers: {\n addFile(state, action: PayloadAction<{ namespace: string, files: FileMeta | FileMeta[] }>) {\n const { namespace } = action.payload\n const files = Array.isArray(action.payload.files)\n ? action.payload.files\n : [action.payload.files]\n\n if (!state.files[namespace]) {\n state.files[namespace] = []\n }\n\n state.files[namespace].push(...files)\n },\n\n updateFile(state, action: PayloadAction<{ namespace: string, hash: string, file: DeepPartial> }>) {\n const { namespace, hash, file } = action.payload\n\n if (!state.files[namespace]) {\n state.files[namespace] = []\n }\n\n const fileIndex = state.files[namespace].findIndex(file => file.hash === hash)\n\n if (fileIndex === -1) {\n console.error(`File with hash \"${hash}\" not found`)\n return\n }\n\n const fileMeta = state.files[namespace][fileIndex]\n\n state.files[namespace][fileIndex] = {\n ...fileMeta,\n ...file,\n\n preload: {\n error: null,\n\n ...(fileMeta.preload || {}),\n ...(file.preload || {}),\n },\n }\n },\n\n removeFile(state, action: PayloadAction<{ namespace: string, hash: string }>) {\n const { namespace, hash } = action.payload\n\n if (!state.files[namespace]) {\n state.files[namespace] = []\n }\n\n const fileIndex = state.files[namespace].findIndex(file => file.hash === hash)\n\n if (fileIndex === -1) {\n throw new Error(`File with hash \"${hash}\" not found`)\n }\n\n state.files[namespace] = state.files[namespace].filter(file => file.hash !== hash)\n },\n\n resetFiles(state, action: PayloadAction<{ namespace: string }>) {\n const { namespace } = action.payload\n\n state.files[namespace] = []\n }\n },\n})\n\nexport const FILES_UPLOADER_PERSIST_CONFIG = {\n key: FILES_UPLOADER_SLICE,\n storage: localStorage,\n transforms: [aborted],\n}\n\nexport const slice = filesUploaderSlice", "import { createAction } from '@reduxjs/toolkit'\n\nimport { SAGAS_SCHEMA } from 'constants/sagas'\n\nimport type { Response, SuccessData, UnauthorizedData } from './discount.d'\n\nexport const NAME = 'discount' as const\nexport type NAME = typeof NAME\nexport const DISCOUNT_SLICE = `slice://${NAME}/` as const\nexport const CHECK_SEARCH_PARAM = `side-effect://${NAME}/check-search-param` as const\nexport const APPLY_DISCOUNT_KEY = 'apply-discount' as const\nexport const APPLY_DISCOUNT_SAGA = `${SAGAS_SCHEMA}${NAME}/${APPLY_DISCOUNT_KEY}` as const\nexport const CANCEL_APPLY_DISCOUNT = `${SAGAS_SCHEMA}${NAME}/${APPLY_DISCOUNT_KEY}/cancel` as const\nexport const APPLIED_DISCOUNT = `${SAGAS_SCHEMA}${NAME}/applied` as const\n\nexport type Namespace = string\n\nexport interface Discount {\n name: string,\n size: number,\n}\n\nexport const PreloadState = {\n PENDING: 'pending',\n PROGRESS: 'progress',\n FULFILLED: 'fulfilled',\n REJECTED: 'rejected',\n} as const\nexport type PreloadState = typeof PreloadState[keyof typeof PreloadState]\n\nexport type DiscountResponse = Response | Response | Response<[]>\n\nexport interface DiscountMeta {\n code: string\n\n sended: boolean\n applied: boolean\n\n data: SuccessData | UnauthorizedData | null\n\n response: Omit | null\n\n preload?: {\n state?: PreloadState\n progress?: number\n\n error: string | null\n }\n}\n\nexport const DiscountVariant = {\n PERCENT: 'percent',\n SUM: 'sum',\n LIMIT: 'limit',\n} as const\nexport type DiscountVariant = typeof DiscountVariant[keyof typeof DiscountVariant]\n\nexport interface DiscountState {\n discount: {\n [namespace in Namespace]?: DiscountMeta\n }\n}\n\nexport const INITIAL_STATE: DiscountState = {\n discount: {},\n}\n\nexport const NOOP_DISCOUNT: DiscountMeta = {\n code: '',\n sended: false,\n applied: false,\n data: null,\n response: null,\n}\n\nexport const applyDiscountAction = createAction<{\n namespace: Namespace\n\n disableNotify?: boolean\n useCheckRoute?: boolean\n}>(APPLY_DISCOUNT_SAGA)\n\nexport function applyDiscount(namespace: Namespace, options: {\n disableNotify?: boolean\n useCheckRoute?: boolean\n} = {}) {\n return applyDiscountAction({ namespace, ...options })\n}\nexport type ApplyDiscountAction = ReturnType\n\nexport function cancelApplyDiscount(namespace: Namespace) {\n return createAction(`${CANCEL_APPLY_DISCOUNT}/${namespace}`)()\n}\nexport type CancelApplyDiscountAction = ReturnType\n\nexport function appliedDiscount(namespace: Namespace) {\n return createAction(`${APPLIED_DISCOUNT}/${namespace}`)()\n}\nexport type AppliedDiscountAction = ReturnType", "import { createTransform } from 'redux-persist'\n\nimport { DiscountMeta, NOOP_DISCOUNT } from '../../definitions'\n\ntype PersistedMap = {\n [namespace: string]: {\n code: string,\n sended: boolean,\n }\n}\n\nconst write = (inboundState, key) => {\n switch (key) {\n case 'discount': {\n const discount = inboundState as Record\n\n return Object.keys(discount).reduce((acc, ns) => {\n acc[ns] = {\n code: discount[ns].code,\n sended: discount[ns].sended,\n }\n\n return acc\n }, {} as PersistedMap)\n }\n\n default:\n return inboundState\n }\n}\n\nconst hydrate = (outboundState, key) => {\n switch (key) {\n case 'discount': {\n const discount = outboundState as PersistedMap\n\n return Object.keys(discount).reduce((acc, ns) => {\n acc[ns] = {\n ...NOOP_DISCOUNT,\n ...discount[ns],\n }\n\n return acc\n }, {} as Record)\n }\n\n default:\n return outboundState\n }\n}\n\nconst whitelist = createTransform(write, hydrate, {})\n\nexport default whitelist", "import { createSlice, PayloadAction, DeepPartial } from '@reduxjs/toolkit'\nimport localStorage from 'redux-persist/es/storage'\n\nimport whitelist from './persistor/transforms/whitelist'\n\nimport {\n INITIAL_STATE,\n\n DISCOUNT_SLICE,\n NOOP_DISCOUNT,\n\n applyDiscountAction,\n\n DiscountResponse,\n DiscountMeta,\n} from './definitions'\n\nconst discountSlice = createSlice({\n name: DISCOUNT_SLICE,\n initialState: INITIAL_STATE,\n reducers: {\n setCode(state, action: PayloadAction<{ namespace: string, code: string }>) {\n const { namespace, code } = action.payload\n\n state.discount[namespace] = {\n ...NOOP_DISCOUNT,\n code,\n }\n },\n updateDiscount(state, action: PayloadAction<{\n namespace: string\n discount?: Omit, 'code' | 'response' | 'data'>\n response?: DiscountResponse | null\n }>) {\n const { namespace, discount = {} } = action.payload\n\n state.discount[namespace] = {\n ...NOOP_DISCOUNT,\n\n ...state.discount[namespace],\n ...discount,\n\n preload: {\n error: null,\n\n ...(state.discount[namespace]?.preload || {}),\n ...(discount.preload || {}),\n },\n }\n\n const rawResponse = action.payload.response\n\n if (!rawResponse) {\n return\n }\n\n let { data, ...response } = rawResponse\n const normalizedData = Array.isArray(data) ? null : data\n\n state.discount[namespace] = {\n ...NOOP_DISCOUNT,\n\n ...state.discount[namespace],\n\n data: normalizedData,\n response,\n }\n },\n cancelDiscount(state, action: PayloadAction<{ namespace: string }>) {\n const { namespace } = action.payload\n\n state.discount[namespace] = {\n ...NOOP_DISCOUNT,\n code: state.discount[namespace]?.code || NOOP_DISCOUNT.code\n }\n },\n resetDiscount(state, action: PayloadAction<{ namespace: string }>) {\n const { namespace } = action.payload\n\n state.discount[namespace] = {\n ...NOOP_DISCOUNT,\n }\n },\n },\n extraReducers(builder) {\n builder.addCase(applyDiscountAction, (state, action) => {\n const { namespace } = action.payload\n\n state.discount[namespace] = {\n ...NOOP_DISCOUNT,\n ...state.discount[namespace],\n sended: true,\n }\n })\n },\n})\n\nexport const DISCOUNT_PERSIST_CONFIG = {\n key: DISCOUNT_SLICE,\n storage: localStorage,\n transforms: [whitelist],\n}\n\nexport const slice = discountSlice", "export default (string) => {\n let boolean\n\n switch (string) {\n case 'true':\n boolean = true\n break\n\n case 'false':\n boolean = false\n break\n\n default:\n boolean = undefined\n break\n }\n\n return boolean\n}\n", "const isEnabled = () => navigator.cookieEnabled && typeof localStorage !== 'undefined'\n\nconst get = (storageItemKey) => {\n if (!isEnabled()) {\n return\n }\n\n return localStorage.getItem(storageItemKey)\n}\n\nconst set = async (storageItemKey, storageItemValue, { expiresAt, share = false } = {}) => {\n if (!isEnabled()) {\n return false\n }\n\n localStorage.setItem(storageItemKey, JSON.stringify({ value: storageItemValue, expiresAt }))\n\n return null\n}\n\nconst remove = async (storageItemKey, { share = false } = {}) => {\n if (!isEnabled()) {\n return false\n }\n\n localStorage.removeItem(storageItemKey)\n\n return null\n}\n\nconst getRelatedKeys = (storageItemKey) => {\n if (!isEnabled()) {\n return\n }\n return Object.keys(localStorage).filter((key) => key.includes(`${storageItemKey}__`))\n}\n\nexport default {\n isEnabled,\n get,\n set,\n remove,\n getRelatedKeys,\n}\n", "const isEnabled = () => navigator.cookieEnabled && typeof sessionStorage !== 'undefined'\n\nconst get = (storageItemKey) => {\n if (!isEnabled()) {\n return\n }\n return sessionStorage.getItem(storageItemKey)\n}\n\nconst set = (storageItemKey, storageItemValue, { expiresAt }) => {\n if (!isEnabled()) {\n return\n }\n\n sessionStorage.setItem(storageItemKey, JSON.stringify({\n value: storageItemValue,\n expiresAt,\n }))\n}\n\nconst remove = (storageItemKey) => {\n if (!isEnabled()) {\n return\n }\n sessionStorage.removeItem(storageItemKey)\n}\n\nconst getRelatedKeys = (storageItemKey) => {\n if (!isEnabled()) {\n return\n }\n return Object.keys(sessionStorage).filter((key) => key.includes(`${storageItemKey}__`))\n}\n\nexport default {\n isEnabled,\n get,\n set,\n remove,\n getRelatedKeys,\n}\n", "import isPlainObject from 'lodash/isPlainObject'\n\n/* env */\nimport { ENV } from 'env'\n\n/* helpers general */\nimport getFromConfigs from 'helpers/configs/get-from-configs'\nimport convertStringToBoolean from 'helpers/string/convert-string-to-boolean'\n\n/* constants general */\nimport { PROJECT_DOMAIN } from 'constants/configs'\n\n/* storagies */\nimport localStorage from 'utils/storage/storagies/local'\nimport sessionStorage from 'utils/storage/storagies/session'\n\nconst version = 'v-0.0.12'\n\nconst addVersion = (storageItemKey) => `${storageItemKey}__${version}`\n\nconst changeDependsOnENV = (storageItemKey) => {\n if (ENV !== 'production') {\n const domain = getFromConfigs(PROJECT_DOMAIN)\n storageItemKey = `${storageItemKey}__${domain}`\n\n return storageItemKey\n }\n\n return storageItemKey\n}\n\nconst getRelatedKeys = (storageItemKey, { storageType = 'local' }) => {\n let keys\n switch (storageType) {\n case 'local':\n keys = localStorage.getRelatedKeys(storageItemKey)\n break\n case 'session':\n keys = sessionStorage.getRelatedKeys(storageItemKey)\n break\n default:\n // eslint-disable-next-line no-console\n console.error(`This '${storageType}' storage type doesn't available`)\n break\n }\n\n return keys\n}\n\nconst remove = (storageItemKey, { storageType = 'local', isOuterKey = false, shouldCompletelyRemove = false, ...rest } = {}) => {\n if (!isOuterKey) {\n if (!shouldCompletelyRemove) {\n storageItemKey = addVersion(storageItemKey)\n storageItemKey = changeDependsOnENV(storageItemKey)\n }\n }\n\n switch (storageType) {\n case 'local':\n localStorage.remove(storageItemKey, rest)\n break\n case 'session':\n sessionStorage.remove(storageItemKey)\n break\n default:\n // eslint-disable-next-line no-console\n console.error(`This '${storageType}' storage type doesn't available`)\n break\n }\n}\n\nconst removeOldVersions = (storageItemKey, { storageType = 'local' } = {}) => {\n const relatedKeys = getRelatedKeys(storageItemKey, { storageType })\n\n relatedKeys && relatedKeys.forEach((key) => {\n const keyVersion = key.split('__')[1]\n if (keyVersion !== version) {\n storageItemKey = `${storageItemKey}__${keyVersion}`\n storageItemKey = changeDependsOnENV(storageItemKey)\n remove(storageItemKey, { storageType, shouldCompletelyRemove: true })\n }\n })\n}\n\nconst get = (storageItemKey, { storageType = 'local', isOuterKey = false, ignoreExpitesAt = false } = {}) => {\n removeOldVersions(storageItemKey, { storageType })\n\n if (!isOuterKey) {\n storageItemKey = addVersion(storageItemKey)\n storageItemKey = changeDependsOnENV(storageItemKey)\n }\n\n let storageItem\n switch (storageType) {\n case 'local':\n storageItem = localStorage.get(storageItemKey)\n break\n case 'session':\n storageItem = sessionStorage.get(storageItemKey)\n break\n default:\n // eslint-disable-next-line no-console\n console.error(`This '${storageType}' storage type doesn't available`)\n break\n }\n\n let parsedStorageItem\n try {\n parsedStorageItem = JSON.parse(storageItem)\n } catch (error) {\n parsedStorageItem = storageItem\n }\n\n let storageItemValue = parsedStorageItem\n\n if (isPlainObject(parsedStorageItem)) {\n if (parsedStorageItem.hasOwnProperty('value')) {\n storageItemValue = parsedStorageItem.value\n\n if (!ignoreExpitesAt && parsedStorageItem.hasOwnProperty('expiresAt') && parsedStorageItem.expiresAt) {\n const expiresAt = parsedStorageItem.expiresAt\n\n const date = new Date()\n const timestamp = date.getTime()\n\n if (expiresAt < timestamp) {\n remove(storageItemKey, { storageType })\n return null\n }\n }\n } else {\n return null\n }\n }\n\n if (storageItemValue === 'true' || storageItemValue === 'false') {\n storageItemValue = convertStringToBoolean(storageItemValue)\n }\n\n let parsedStorageItemValue\n try {\n parsedStorageItemValue = JSON.parse(storageItemValue)\n } catch (error) {\n parsedStorageItemValue = storageItemValue\n }\n\n return parsedStorageItemValue\n}\n\nconst set = (storageItemKey, storageItemValue, { storageType = 'local', expires = null, isOuterKey = false, ...rest } = {}) => {\n if (!isOuterKey) {\n storageItemKey = addVersion(storageItemKey)\n storageItemKey = changeDependsOnENV(storageItemKey)\n }\n\n storageItemValue = JSON.stringify(storageItemValue)\n\n let expiresAt = null\n if (expires && typeof expires === 'number') {\n const date = new Date()\n expiresAt = date.setTime(date.getTime() + expires)\n }\n\n switch (storageType) {\n case 'local':\n localStorage.set(storageItemKey, storageItemValue, { expiresAt, ...rest })\n break\n case 'session':\n sessionStorage.set(storageItemKey, storageItemValue, { expiresAt })\n break\n default:\n // eslint-disable-next-line no-console\n console.error(`This '${storageType}' storage type doesn't available`)\n break\n }\n}\n\nconst isEnabled = (storageType) => {\n let isEnabled\n switch (storageType) {\n case 'local':\n isEnabled = localStorage.isEnabled()\n break\n case 'session':\n isEnabled = sessionStorage.isEnabled()\n break\n default:\n // eslint-disable-next-line no-console\n console.error(`This '${storageType}' storage type doesn't available`)\n break\n }\n\n return isEnabled\n}\n\nconst storage = {\n isEnabled,\n\n get,\n set,\n remove,\n\n version,\n addVersion,\n changeDependsOnENV,\n removeOldVersions,\n}\n\nexport default storage\n\nwindow.MICROSERVICES_UTILS_AND_HELPERS = window.MICROSERVICES_UTILS_AND_HELPERS || {}\n!window.MICROSERVICES_UTILS_AND_HELPERS?.storage && (window.MICROSERVICES_UTILS_AND_HELPERS.storage = storage)", "export const UNIVERSAL_UPDATE_ACROSS_STORES = 'UNIVERSAL_UPDATE_ACROSS_STORES'\n\nexport const REMOTE_ATTEMPT = '/REMOTE_ATTEMPT'\nexport const REMOTE_ERROR = '/REMOTE_ERROR'\nexport const REMOTE_SUCCESS = '/REMOTE_SUCCESS'\n", "export const USER_CHECK = 'USER_CHECK'\nexport const USER_UPDATE = 'USER_UPDATE'\nexport const USER_AUTHORIZE = 'USER_AUTHORIZE'\nexport const USER_UNAUTHORIZE = 'USER_UNAUTHORIZE'\n\nexport const REMOTE_SUCCESS = '/REMOTE_SUCCESS'\n\nexport const ORDER_PAYMENT_SUCCESS = 'user-data/order-payment/success'\n", "export const PERSISTOR_PREFIX = 'persist:'\n\nexport const ORDER_DATA_PERSISTOR_NAME = 'order_data'\n\nexport const ORDER_DATA_PERSISTOR_EXPIRES_TIMEOUT = 8.64e7 // 1 day\n", "import { ORDER_DATA_PERSISTOR_NAME, PERSISTOR_PREFIX } from 'constants/persistor'\n\nexport const ORDER_DATA_PERSISTOR_KEY = `${PERSISTOR_PREFIX}${ORDER_DATA_PERSISTOR_NAME}`\n\nexport const AUTH_ACTION_KEY = 'auth_action'\nexport const USER_DATA_KEY = 'user_data'\nexport const IS_EXISTING_USER_KEY = 'is_existing_user'\n\nexport const SHOULD_PREVENT_REDIRECT_TO_DASHBOARD_KEY = 'should_prevent_redirect_to_dashboard'\n\nexport const PLACE_ORDER_AUTHORIZATION_FROM_MODAL = 'place_order_authorization_from_modal'\n\nexport const ORDER_DATA_CHANGED_FROM_FORM_ASSERTS_KEY = 'order_data_changed_from_form_asserts_item'\nexport const ORDER_DATA_CHANGED_FROM_CALCULATOR_ASSERTS_KEY = 'order_data_changed_from_calculator_asserts_item'\n\nexport const HIDE_DISCOUNT_NOTIFICATION_KEY = 'hide_discount_notification'\n\nexport const THANKS_PAGE_VOTING_KEY = 'thanks_page_voting'\n\nexport const ACCOUNT_MANAGER_PROCESSED_KEY = 'account_manager_processed'\n\nexport const REFERRALS_PAGE_WITH_BADGE_VISITED = 'referrals_page_with_badge_visited'\n\nexport const DESIGN_TYPE = 'design_type'\n\n/* outer */\nexport const TEMP_QS_KEY = 'tempQS'\nexport const REFERRER = 'refer'\n\nexport const CONVERSION_PARAMS_KEY = 'conversionParams'\nexport const CONVERSION_PARAMS_FROM_PRICE_COMPARATOR_KEY = 'conversionPriceComparatorParams'\n\nexport const VERSION = 'msh-version'\nexport const CONTENTHASH = 'msh-contenthash'\n", "import isEmpty from 'lodash/isEmpty'\n\n/* utils general */\nimport storage from 'utils/storage'\n\n/* redux-constants microservices */\nimport { UNIVERSAL_UPDATE_ACROSS_STORES } from 'microservices/sheared/universal-constants'\n/* redux-constants local */\nimport {\n USER_CHECK,\n USER_UPDATE,\n USER_AUTHORIZE,\n USER_UNAUTHORIZE,\n\n REMOTE_SUCCESS,\n\n ORDER_PAYMENT_SUCCESS,\n} from 'global-entities/user-data/constants'\n\n/* constants general */\nimport { USER_DATA_EXPIRES_TIMEOUT } from 'constants/auth'\nimport { USER_DATA_KEY } from 'constants/storage'\n\nconst initialStateFromBrowserStorage = storage.get(USER_DATA_KEY)\nconst initialStateFromReduxStorage = {\n authorizationStatus: undefined,\n isAuthorized: false,\n\n userID: null,\n visitorID: null,\n referrerID: null,\n\n email: '',\n phone: '',\n firstName: '',\n lastName: '',\n subscribed: false,\n\n paidOrdersCount: 0,\n}\n\nconst defaultState =\n !isEmpty(initialStateFromBrowserStorage) ?\n initialStateFromBrowserStorage\n :\n initialStateFromReduxStorage\n\nexport default (state = defaultState, action) => {\n switch (action.type) {\n case UNIVERSAL_UPDATE_ACROSS_STORES:\n case USER_CHECK + REMOTE_SUCCESS:\n case USER_UPDATE + REMOTE_SUCCESS:\n case USER_AUTHORIZE + REMOTE_SUCCESS:\n case USER_UNAUTHORIZE + REMOTE_SUCCESS:\n storage.set(USER_DATA_KEY, action.payload, { expires: USER_DATA_EXPIRES_TIMEOUT })\n return {\n checked: true,\n ...state,\n ...action.payload,\n }\n\n case ORDER_PAYMENT_SUCCESS:\n return {\n ...state,\n paidOrdersCount: state.paidOrdersCount + 1,\n }\n\n default:\n return state\n }\n}\n", "export const NAME = 'priceData'\n\nexport const CALCULATE_PRICE__ATTEMPT = 'CALCULATE_PRICE__ATTEMPT'\nexport const CALCULATE_PRICE__SUCCESS = 'CALCULATE_PRICE__SUCCESS'\n", "/* redux-constants local */\nimport {\n CALCULATE_PRICE__ATTEMPT,\n CALCULATE_PRICE__SUCCESS,\n} from 'global-entities/price-data/constants'\n\nconst defaultState = {\n currency: '$',\n\n priceFull: 0,\n priceBasic: 0,\n priceForCalculatorItems: 0,\n\n pricePerUnit: {\n default: 0,\n pages: 0,\n words: 0,\n slides: 0,\n problems: 0,\n questions: 0,\n },\n priceForUnits: {\n pages: 0,\n words: 0,\n slides: 0,\n problems: 0,\n questions: 0,\n },\n\n priceAdditionals: {\n writerCategory: {\n total: 0,\n basic: 0,\n additional: 0,\n },\n additionalFeatures: {\n total: 0,\n },\n softcopies: 0,\n software: 0,\n },\n\n discountAmount: 0,\n\n priceWithDiscount: 0,\n priceWithUpsales: 0,\n\n technicalSubjectPricePB: 0,\n technicalSubjectPricePWD: 0,\n}\n\nexport default (state = defaultState, action) => {\n switch (action.type) {\n case CALCULATE_PRICE__ATTEMPT:\n return {\n ...state,\n }\n\n case CALCULATE_PRICE__SUCCESS:\n return {\n ...state,\n ...action.payload,\n }\n\n default:\n return state\n }\n}\n", "import reducer from './reducer'\n\nimport { NAME } from './constants'\n\nexport const priceDataReducers = {\n [NAME]: reducer,\n}\n", "export const KEY = 'geo-tag'\n\nexport const BLACKLIST_COUNTRIES = {\n ke: { name: 'Kenia', iso2: 'ke' },\n bd: { name: 'Bangladesh', iso2: 'bd' },\n ph: { name: 'Phillipines', iso2: 'ph' },\n in: { name: 'India', iso2: 'in' },\n pk: { name: 'Pakistan', iso2: 'pk' },\n zw: { name: 'Zimbabwe', iso2: 'zw' },\n bn: { name: 'Brunei', iso2: 'bn' },\n ye: { name: 'Yemen', iso2: 'ye' },\n lr: { name: 'Liberia', iso2: 'lr' },\n lk: { name: 'Sri Lanka', iso2: 'lk' },\n ps: { name: 'Palestine', iso2: 'ps' },\n uz: { name: 'Uzbekistan', iso2: 'uz'},\n ar: { name: 'Argentina', iso2: 'ar'},\n am: { name: 'Armenia', iso2: 'am'},\n mn: { name: 'Mongolia', iso2: 'mn'},\n md: { name: 'Moldova', iso2: 'md'},\n}\n", "/* helpers general */\nimport convertStringToBoolean from 'helpers/string/convert-string-to-boolean'\n\nexport default (key) => {\n const queryParamsString = window.location.search\n if (!queryParamsString) {\n return\n }\n\n const queryParamsArray = queryParamsString.replace('?', '').split('&')\n const queryParamsObject = {}\n\n queryParamsArray.forEach((param) => {\n const paramArray = param.split('=')\n const paramKey = paramArray[0]\n let paramValue = paramArray[1]\n\n if (paramValue) {\n // paramValue = paramValue.replace(/%20/g, ' ')\n // paramValue = paramValue.replace(/%2C/g, ',')\n // paramValue = paramValue.replace(/%22/g, '\"')\n // paramValue = paramValue.replace(/%27/g, '\\'')\n // paramValue = paramValue.replace(/%3A/g, ':')\n\n paramValue = decodeURIComponent(paramValue)\n\n if (paramValue === 'true' || paramValue === 'false') {\n paramValue = convertStringToBoolean(paramValue)\n }\n queryParamsObject[paramKey] = paramValue\n }\n })\n\n if (!key) {\n return queryParamsObject\n }\n\n if (key && queryParamsObject[key]) {\n return queryParamsObject[key]\n }\n}\n", "export default (key, value = undefined, method = undefined) => {\n const queryParamsString = window.location.search\n if (method !== 'add' && !queryParamsString) {\n return\n }\n\n const queryParamsArray = queryParamsString.replace('?', '').split('&')\n\n let staticQueryParamsString = ''\n\n let divider = ''\n for (let i = 0; i < queryParamsArray.length; i++) {\n if (queryParamsArray[i].split('=')[0] !== key) {\n staticQueryParamsString += divider + queryParamsArray[i]\n divider = staticQueryParamsString.length ? '&' : ''\n }\n }\n\n let updatedQueryParamsString = staticQueryParamsString\n if (value) {\n updatedQueryParamsString = `${staticQueryParamsString}${divider}${key}=${value}`\n }\n\n updatedQueryParamsString = updatedQueryParamsString.length ? `?${updatedQueryParamsString}` : window.location.origin + window.location.pathname\n\n window.history.replaceState('', '', updatedQueryParamsString)\n}\n", "export default (queryParamsObject) => {\n const keys = Object.keys(queryParamsObject)\n const values = keys.map((key) => queryParamsObject[key])\n\n return keys.map((key, index) => `${key}=${values[index]}`).join('&')\n}\n", "import isEmpty from 'lodash/isEmpty'\nimport isPlainObject from 'lodash/isPlainObject'\n\n/* utils general */\nimport queryString from 'utils/query-string'\n\nexport default (additionalQueryParams = {}) => {\n let queryParamsString = ''\n\n const currentQueryParams = queryString.getParams()\n if (!isEmpty(currentQueryParams)) {\n queryParamsString = queryString.build(currentQueryParams)\n }\n\n if (isPlainObject(additionalQueryParams) && !isEmpty(additionalQueryParams)) {\n if (queryParamsString) {\n queryParamsString += `&${queryString.build(additionalQueryParams)}`\n } else {\n queryParamsString += queryString.build(additionalQueryParams)\n }\n }\n\n return queryParamsString ? `?${queryParamsString}` : ''\n}\n", "/* methods */\nimport getParams from 'utils/query-string/methods/get-params'\nimport manipulateParamWithoutRefresh from 'utils/query-string/methods/manipulate-param-without-refresh'\nimport build from 'utils/query-string/methods/build'\n\nimport makeSearchDependsOnENV from 'utils/query-string/methods/make-search-depends-on-env'\n\nexport default {\n getParams,\n getParam: (key) => getParams(key),\n addParam: (key, value) => manipulateParamWithoutRefresh(key, value, 'add'),\n updateParam: (key, value) => manipulateParamWithoutRefresh(key, value, 'update'),\n removeParam: (key) => manipulateParamWithoutRefresh(key, null, 'remove'),\n build,\n\n makeSearchDependsOnENV,\n}\n", "export const PNAME_KEY = 'pname'\n\n/* auth */\nexport const AUTH_TYPE_KEY = 'authType'\nexport const SINGLE_AUTH_METHOD_KEY = 'singleAuthMethod'\nexport const PAGE_REDIRECT = 'pageRedirect'\n\n/* order */\nexport const DUPLICATE_ORDER_DATA_CHANGES_INTO_URL_KEY = 'duplicateOrderDataChangesIntoURL'\nexport const ORDER_DATA_DISABLED_PERSISTOR_KEY = 'disabledOrderPersistor'\nexport const UNDO_REDO_KEY = 'undo-redo'\n\n/* dashboard */\nexport const ORDERS_TABLE_ACTIVE_TAB_KEY = 'ordersTableActiveTab'\nexport const ORDER_INFO_ACTIVE_TAB_KEY = 'orderInfoActiveTab'\n\nexport const PRICE_DATA_LOGGER_KEY = 'priceDataLogger'\nexport const PRICE_RESULT_LOGGER_KEY = 'priceResultLogger'\n\n/* outer */\nexport const E2E_KEY = 'e2e'\n", "import storage from 'utils/storage'\n\nimport { KEY } from 'global-entities/geo-tag/constants'\n\nimport queryString from 'utils/query-string'\n\nimport { E2E_KEY } from 'constants/query-params'\n\nconst E2E_ENABLE = queryString.getParam(E2E_KEY)\n\nconst searchLocalCountryCode = (): string | undefined => {\n // 1st step: const hardcore for e2e testing\n if (E2E_ENABLE) {\n return 'us'\n }\n\n // 2nd step: search geo tag in sessionStorage\n let countryCode = sessionStorage.getItem(KEY)\n if (countryCode) {\n countryCode = JSON.parse(countryCode)?.countryCode\n }\n\n // 3rd step: search in geo_params - fallback\n if (!countryCode) {\n countryCode = storage.get('geo_params', { storageType: 'session' })?.country\n }\n\n // 4th step: search countryCode in sessionSotage\n if (!countryCode) {\n countryCode = sessionStorage.getItem('countryCode')\n\n if (countryCode) {\n countryCode = JSON.parse(countryCode)?.value\n }\n }\n\n // 5th step: can't find\n if (!countryCode) {\n return\n }\n\n return countryCode.toLowerCase()\n}\n\nexport default searchLocalCountryCode\n", "import storage from 'utils/storage'\n\nimport { KEY } from 'global-entities/geo-tag/constants'\n\nimport queryString from 'utils/query-string'\n\nimport { E2E_KEY } from 'constants/query-params'\n\nconst E2E_ENABLE = queryString.getParam(E2E_KEY)\n\nconst searchLocalIP = (): string | undefined => {\n // 1st step: const hardcore for e2e testing\n if (E2E_ENABLE) {\n return '0.0.0.0'\n }\n\n // 2st step: search geo tag in sessionStorage\n let IP = sessionStorage.getItem(KEY)\n\n if (IP) {\n IP = JSON.parse(IP)?.IP\n }\n\n // 3nd step: search geo_params - fallback\n if (!IP) {\n IP = storage.get('geo_params', { storageType: 'session' })?.ip\n }\n\n // 4nd step: search IP in sessionSotage\n if (!IP) {\n IP = sessionStorage.getItem('IP')\n\n if (IP) {\n IP = JSON.parse(IP)?.value\n }\n }\n\n // 5th step: can't find\n if (!IP) {\n return\n }\n\n return IP.toLowerCase()\n}\n\nexport default searchLocalIP\n", "import searchLocalCountryCode from 'global-entities/geo-tag/utils/searchLocalContryCode'\nimport searchLocalIP from 'global-entities/geo-tag/utils/searchLocalIP'\n\nconst searchLocalGeoTag = () => ({\n countryCode: searchLocalCountryCode(),\n IP: searchLocalIP(),\n})\n\nexport default searchLocalGeoTag\n", "// #region COUNTRY_CODE\nexport type CountryCodeType = string\n\nexport interface ICountryCodeStore {\n countryCode?: CountryCodeType\n}\n\nexport const SET_CONTRY_CODE = 'geo-tag/SET_CONTRY_CODE'\n// #endregion COUNTRY_CODE\n\n// #region IP\nexport type IPType = string\n\nexport interface IIPStore {\n IP?: IPType\n}\n\nexport const SET_IP = 'geo-tag/SET_IP'\n// #endregion IP\n\n// #region GeoTag\nexport type GeoTagStoreType = ICountryCodeStore & IIPStore\n\nexport interface IGeoTagStore {\n 'geo-tag': GeoTagStoreType\n}\n// #endregion GeoTag\n", "import { Reducer } from 'redux'\n\nimport searchLocalGeoTag from 'global-entities/geo-tag/utils/searchLocalGeoTag'\n\nimport queryString from 'utils/query-string'\n\nimport { KEY } from 'global-entities/geo-tag/constants'\nimport { E2E_KEY } from 'constants/query-params'\n\nimport * as types from 'global-entities/geo-tag/store/types'\n\nimport type { GeoTagActions } from 'global-entities/geo-tag/store/actions'\n\nconst E2E_ENABLE = queryString.getParam(E2E_KEY)\n\nconst initialState: types.GeoTagStoreType = searchLocalGeoTag()\n\nconst save = (state: types.GeoTagStoreType): types.GeoTagStoreType => {\n sessionStorage.setItem(KEY, JSON.stringify(state))\n\n return state\n}\n\nconst reducer: Reducer = (\n state: types.GeoTagStoreType = initialState,\n action: GeoTagActions,\n): types.GeoTagStoreType => {\n switch (action.type) {\n case types.SET_CONTRY_CODE:\n state = {\n ...state,\n countryCode: E2E_ENABLE ? 'us' : action.payload.toLowerCase(),\n }\n break\n case types.SET_IP:\n state = {\n ...state,\n IP: E2E_ENABLE ? '0.0.0.0' : action.payload.toLowerCase(),\n }\n break\n default:\n if (!sessionStorage.getItem(KEY)) {\n save(state)\n }\n return state\n }\n\n return save(state)\n}\n\nexport const geoTagReducers = {\n [KEY]: reducer\n}\n\nexport default reducer\n", "import localforage from 'localforage'\n\nconst instance = localforage.createInstance({\n name: '[MSH] Storage',\n driver: [\n // localforage.INDEXEDDB,\n // localforage.WEBSQL,\n localforage.LOCALSTORAGE,\n ],\n})\n\nexport default instance\n", "import type { CustomParamType } from '../types'\n\nconst extractCustomVaraibles = (params: Array = []) => {\n const LC_EXPERIMENT_CUSTOM_VARIABLES = typeof (window as any).LC_EXPERIMENT_CUSTOM_VARIABLES !== 'undefined'\n ? (window as any).LC_EXPERIMENT_CUSTOM_VARIABLES\n : []\n\n if (Array.isArray(LC_EXPERIMENT_CUSTOM_VARIABLES)) {\n return [...params, ...LC_EXPERIMENT_CUSTOM_VARIABLES]\n }\n\n return [...params]\n}\n\nexport default extractCustomVaraibles\n", "import { ILivechat } from '../types'\n\nexport enum Loaded {\n DISCONNECTED,\n CONNECTING,\n CONNECTED,\n}\n\nexport enum Interaction {\n NO = 'no',\n YES = 'yes',\n DISABLE_CHECK = 'disable_check',\n}\n\nexport type CustomParamType = {\n name: string\n value: string\n}\n\n// #region Livechat\nexport interface ILiveChatStore {\n 'live-chat': {\n ref: ILivechat | null\n options: {\n license?: number\n group?: number\n chat_between_groups?: boolean\n /**\n * The available options are:\n * ga \u2013 Universal Analytics;\n * gtm \u2013 Google Tag Manager;\n * gtag \u2013 Global Site Tag (gtag.js);\n * gaq \u2013 traditional asynchronous code for Google Analytics.\n */\n ga_version?: 'ga' | 'gtm' | 'gtag' | 'gaq'\n visitor?: {\n name: string\n email: string\n }\n params?: Array\n }\n loaded: {\n flag: Loaded\n }\n open: boolean\n interactionWithUser: Interaction\n }\n}\n// #endregion Livechat\n", "import _get from 'lodash/get'\n\nimport getFromConfigs from 'helpers/configs/get-from-configs'\n\nimport { LIVECHAT_OPTIONS } from 'constants/configs'\n\nimport extractCustomVaraibles from './utils/extractCustomVaraibles'\n\nimport {\n ILiveChatStore,\n Interaction,\n Loaded,\n} from '@qwerty.software/live-chat/src/store/types'\n\nconst initialState: ILiveChatStore['live-chat'] = {\n loaded: {\n flag: Loaded.DISCONNECTED,\n },\n options: {\n chat_between_groups: false,\n visitor: {},\n params: extractCustomVaraibles([]),\n ...getFromConfigs(LIVECHAT_OPTIONS),\n ...(window as any)[LIVECHAT_OPTIONS],\n },\n ref: null,\n open: false,\n interactionWithUser: Interaction.NO,\n}\n\nexport default initialState\n", "export const LOADING = 'live-chat/LOADING'\n\nexport const SET_CUSTOM_VARIABLES = 'live-chat/SET_CUSTOM_VARIABLES'\nexport const UPDATE_CUSTOM_VARIABLES = 'live-chat/UPDATE_CUSTOM_VARIABLES'\n\nexport const REF_SET = 'live-chat/ref/SET'\n\nexport const OPEN = 'live-chat/OPEN'\n\nexport const INTERACTION = 'live-chat/USER_INTERACTION'\nexport const INTERACTION_SAGA = 'live-chat/saga/USER_INTERACTION'\n", "import _get from 'lodash/get'\nimport { set } from 'monolite'\nimport { Reducer } from 'redux'\n\nimport initialState from './initialState'\n\nimport {\n LOADING,\n SET_CUSTOM_VARIABLES,\n UPDATE_CUSTOM_VARIABLES,\n REF_SET,\n OPEN,\n INTERACTION,\n} from './constants'\n\nimport { ILivechat } from '../types'\nimport { ILiveChatStore, Loaded, Interaction, CustomParamType } from './types'\n\nimport { IAction as Action } from '@qwerty.software/store-manager/types'\n\ntype Actions = Action\n | Action>\n | Action>\n | Action\n | Action\n | Action\n\nconst reducer: Reducer = (state = initialState, action) => {\n switch (action.type) {\n case LOADING:\n return set(state, _ => _.loaded.flag, action.payload)\n\n case SET_CUSTOM_VARIABLES:\n return set(state, _ => _.options.params, [...action.payload])\n case UPDATE_CUSTOM_VARIABLES:\n return set(state, _ => _.options.params, (params) => [...(params || []), ...action.payload])\n\n case REF_SET:\n return set(state, _ => _.ref, action.payload)\n\n case OPEN:\n return set(state, _ => _.open, action.payload)\n\n case INTERACTION:\n return set(state, _ => _.interactionWithUser, action.payload)\n\n default:\n return state\n }\n}\n\nexport default reducer\n", "export const msName = 'live-chat'\n\nexport const GLOBAL_VISIBILITY_STATE = 'LIVE_CHAT__GLOBAL_VISIBILITY_STATE'\n", "import type { ILiveChatStore, Loaded, Interaction } from './types'\n\nimport { msName } from '../constants'\nimport { ILivechat } from '../types'\n\nexport const LOADED = (state: ILiveChatStore): Loaded => state[msName].loaded.flag\n\nexport const OPTIONS = (state: ILiveChatStore): ILiveChatStore['live-chat']['options'] => state[msName].options\n\nexport const REF = (state: ILiveChatStore): ILivechat | null => state[msName].ref\n\nexport const OPEN = (state: ILiveChatStore): boolean => state[msName].open\n\nexport const INTERACTION_WITH_USER = (state: ILiveChatStore): Interaction => state[msName].interactionWithUser\n", "export const LIVECHAT_OPEN = 'livechat/OPEN'\n", "import { put, select, takeEvery } from 'redux-saga/effects'\nimport { SagaIterator } from '@redux-saga/types'\n\nimport { REF, LOADED } from '../../store/selectors'\n\nimport { LOADING, OPEN } from '../../store/constants'\nimport { LIVECHAT_OPEN } from '../constants'\n\nimport { Loaded } from '../../store/types'\n\nfunction* open(): SagaIterator {\n const loaded: ReturnType = yield select(LOADED)\n\n if (loaded === Loaded.DISCONNECTED) {\n yield put({ type: LOADING, payload: Loaded.CONNECTING })\n yield put({ type: OPEN, payload: true })\n }\n\n const ref = yield select(REF)\n if (ref) {\n ref.open_chat_window()\n }\n}\n\nexport default function* () {\n yield takeEvery(LIVECHAT_OPEN, open)\n}\n", "import { put, select, takeEvery } from 'redux-saga/effects'\nimport { SagaIterator } from '@redux-saga/types'\n\n// import { INTERACTION_WITH_USER } from '../selectors'\n\nimport { INTERACTION, INTERACTION_SAGA } from '../constants'\n\nimport { Interaction } from '../types'\n\nfunction* interactionWithUser(): SagaIterator {\n // const interactionWithUser: Interaction = yield select(INTERACTION_WITH_USER)\n\n // if (interactionWithUser === Interaction.DISABLE_CHECK) {\n // return\n // }\n\n yield put({ type: INTERACTION, payload: Interaction.YES })\n\n // yield put({ type: INTERACTION, payload: Interaction.DISABLE_CHECK })\n}\n\nexport default function* () {\n yield takeEvery(INTERACTION_SAGA, interactionWithUser)\n}\n", "import _get from 'lodash/get'\nimport { persistReducer } from 'redux-persist'\n\nimport localforage from '@qwerty.software/store-manager/localforage'\n\nimport reducer from './reducer'\n\nimport { msName as NAME } from '../constants'\n\nexport const liveChatReducers = {\n [NAME]: persistReducer({\n key: NAME,\n storage: localforage,\n blacklist: [\n 'ref',\n 'options',\n 'loaded',\n ],\n }, reducer),\n}\n\nexport { default as livechatOpenWatcher } from '../methods/open/saga'\nexport { default as livechatInteractionWithUserWatcher } from './sagas/interactionWithUser'", "import axios from 'axios'\n\n/* utils general */\nimport storage from 'utils/storage'\nimport notify from 'utils/notify'\n\nimport { ENV } from 'env'\nimport { CookieStorage } from 'cookie-storage'\n\nexport const axiosTool = ({ options, cb }) => {\n options.withCredentials = true\n options.timeout = 9e4 // 1.5m\n\n const reqSource = axios.CancelToken.source()\n options.cancelToken = options.cancelToken || reqSource.token\n\n const reqInstance = axios.create(options)\n\n const createAxiosResponseInterceptor = () => {\n const interceptor = reqInstance.interceptors.response.use(\n response => {\n if (cb && typeof cb === 'function') {\n return cb(response.data)\n }\n\n return response\n },\n error => {\n console.log(error)\n if (axios.isCancel(error)) {\n // eslint-disable-next-line no-console\n console.warn('Request canceled')\n }\n\n if (error?.response?.status === 401) {\n reqInstance.interceptors.response.eject(interceptor)\n\n return reqInstance.post('/api/v2/auth/refresh')\n .then(response => {\n if (ENV === 'local') {\n error.response.config.params.token = response.data.access_token\n }\n\n if (response.data.expires_in) {\n storage.set('jwt', response.data.access_token, { expires: response.data.expires_in })\n } else {\n storage.set('jwt', response.data.access_token)\n }\n\n error.response.config.headers.Authorization = `Bearer ${response.data.access_token}`\n reqInstance.defaults.headers.common.Authorization = `Bearer ${response.data.access_token}`\n\n return axios(error.response.config)\n })\n .catch(err => {\n delete reqInstance.defaults.headers.common.Authorization\n delete error.response.config.headers.Authorization\n const cookieStorage = new CookieStorage()\n cookieStorage.removeItem('access_token')\n storage.remove('jwt')\n notify.error('Your session has expired. Please login again.')\n\n // setTimeout(() => {\n // window.location.href = '/signin'\n // }, 3000)\n\n return axios(error.response.config)\n })\n .finally(createAxiosResponseInterceptor)\n }\n\n if (cb && typeof cb === 'function') {\n return cb(null, error)\n }\n\n return Promise.reject(error)\n },\n )\n }\n\n createAxiosResponseInterceptor()\n\n return {\n instance: reqInstance(),\n source: !options.cancelToken ? reqSource : null,\n }\n}\n", "const trigger = (name, detail = {}) => {\n const event = new CustomEvent(name, { detail })\n document.dispatchEvent(event)\n}\n\nconst on = (name, handler) => {\n document.addEventListener(name, handler)\n}\n\nconst off = (name, handler) => {\n document.removeEventListener(name, handler, false)\n}\n\nexport default {\n on,\n off,\n trigger,\n}\n", "/* inner */\nexport const USER_AUTHORIZED = 'USER_AUTHORIZED' // overall event when authorized\nexport const USER_SIGNED_IN = 'USER_SIGNED_IN'\nexport const USER_SIGNED_UP = 'USER_SIGNED_UP'\n\nexport const USER_AUTHORIZED_VIA_SOCIAL_ACCOUNT = 'USER_AUTHORIZED_VIA_SOCIAL_ACCOUNT' // overall event when authorized via social account\nexport const USER_AUTHORIZED_VIA_FACEBOOK = 'USER_AUTHORIZED_VIA_FACEBOOK'\n\nexport const USER_UNAUTHORIZED = 'USER_UNAUTHORIZED' // overall event when unauthorized\n\nexport const USER_CHECKED = 'USER_CHECKED'\nexport const AUTH_TYPE_CHANGED = 'AUTH_TYPE_CHANGED'\n\nexport const AUTH_MODAL_OPENED = 'AUTH_MODAL_OPENED'\nexport const REQUEST_CALL_MODAL_OPENED = 'REQUEST_CALL_MODAL_OPENED'\n\nexport const VALIDATE_DISCOUNT_FOR_UNAUTHORIZED = 'VALIDATE_DISCOUNT_FOR_UNAUTHORIZED'\n\nexport const TIPS_MODAL_OPENED = 'TIPS_MODAL_OPENED'\nexport const TIPS_MODAL_CLOSED = 'TIPS_MODAL_CLOSED'\n\nexport const SPECIAL_DISCOUNT_MODAL_OPENED = 'SPECIAL_DISCOUNT_MODAL_OPENED'\nexport const SPECIAL_DISCOUNT_MODAL_CLOSED = 'SPECIAL_DISCOUNT_MODAL_CLOSED'\n\nexport const REVISION_MODAL_OPENED = 'REVISION_MODAL_OPENED'\nexport const REVISION_MODAL_CLOSED = 'REVISION_MODAL_CLOSED'\n\nexport const PRICE_CALCULATED = 'PRICE_CALCULATED'\n\nexport const FIELD_VALIDATED = 'FIELD_VALIDATED__'\n\nexport const VALIDATE_FIELD = 'VALIDATE_FIELD__'\n\nexport const UNIVERSAL_ANIMATION = 'UNIVERSAL_ANIMATION__'\n\nexport const IS_MICROSERVICE_READY = 'IS_MICROSERVICE_READY__'\n\nexport const INQUIRY_FORM_SHOULD_BE_SUBMITTED = 'INQUIRY_FORM_SHOULD_BE_SUBMITTED'\n\nexport const INQUIRY_FORM_REMOTE_SUCCESS = 'INQUIRY_FORM_REMOTE_SUCCESS'\nexport const PHONE_COLLECTOR_REMOTE_SUCCESS = 'PHONE_COLLECTOR_REMOTE_SUCCESS'\n\nexport const TOGGLE_SPINNER_VISIBILITY = 'TOGGLE_SPINNER_VISIBILITY'\nexport const TOGGLE_LIVECHAT_VISIBILITY = 'TOGGLE_LIVECHAT_VISIBILITY'\n\nexport const ORDER_DATA_CHANGED_FROM_CALCULATOR = 'ORDER_DATA_CHANGED_FROM_CALCULATOR'\nexport const ORDER_DATA_CHANGED_FROM_FORM = 'ORDER_DATA_CHANGED_FROM_FORM'\nexport const ORDER_DATA_CHANGED_FROM_DASHBOARD_EDIT = 'ORDER_DATA_CHANGED_FROM_DASHBOARD_EDIT'\n\nexport const COOKIE_POLICY_ACCEPTED = 'COOKIE_POLICY_ACCEPTED'\n\nexport const LIVE_CHAT_APPEARED = 'LIVE_CHAT_APPEARED'\n\nexport const FIELD_VALUE_UPDATED = 'FIELD_VALUE_UPDATED__'\n\nexport const MESSAGE_RECEIVED = 'MESSAGE_RECEIVED'\n\nexport const REFERRALS_PAGE_OPENED = 'REFERRALS_PAGE_OPENED'\nexport const REFERRALS_PAGE_CLOSED = 'REFERRALS_PAGE_CLOSED'\n\nexport const SUBMIT_ORDER_FORM_AFTER_AUTH = 'SUBMIT_ORDER_FORM_AFTER_AUTH'\n", "export const SHOW = 'show'\nexport const HIDE = 'hide'\n", "/* utils general */\nimport customEvent from 'utils/custom-event'\n\n/* constants general */\nimport { TOGGLE_SPINNER_VISIBILITY } from 'constants/custom-events'\nimport { SHOW, HIDE } from 'constants/visibility-actions'\n\nconst toggle = (action) => {\n customEvent.trigger(TOGGLE_SPINNER_VISIBILITY, { action })\n}\n\nconst show = () => {\n toggle(SHOW)\n}\n\nconst hide = () => {\n toggle(HIDE)\n}\n\nexport default {\n show,\n hide,\n toggle,\n}\n", "import FormData from 'form-data'\nimport isPlainObject from 'lodash/isPlainObject'\nimport isBoolean from 'lodash/isBoolean'\nimport QS from 'utils/query-string'\n// import { get as getFingerprint } from 'utils/fingerprint'\nimport { CookieStorage } from 'cookie-storage'\n\n/* env */\nimport {\n ENV,\n API_URL,\n API_PROXY_URL,\n} from 'env'\n\nimport searchLocalGeoTag from 'global-entities/geo-tag/utils/searchLocalGeoTag'\n\n/* tools local */\nimport { axiosTool } from 'utils/http-client/tools/axios'\n\n/* utils general */\nimport globalSpinner from 'utils/global-spinner'\nimport storage from 'utils/storage'\n\n/* helpers general */\nimport getFromConfigs from 'helpers/configs/get-from-configs'\n\n/* constants general */\nimport {\n PROJECT_DOMAIN,\n PROJECT_ID,\n SHOULD_USE_SPECIFIC_API,\n SPECIFIC_API_URL,\n IS_ALIAS_DOMAIN,\n DASHBOARD_SUBDOMAIN,\n} from 'constants/configs'\n\nconst reqH = (options = {}, cb) => {\n const cookieStorage = new CookieStorage()\n\n const requiredDataParams = {\n app_id: getFromConfigs(PROJECT_ID),\n pname: getFromConfigs(PROJECT_DOMAIN),\n }\n const advancedDataParams = {\n ...requiredDataParams,\n timezone: -(new Date()).getTimezoneOffset(),\n url: window.location.origin + window.location.pathname,\n }\n\n if (getFromConfigs(IS_ALIAS_DOMAIN)) {\n advancedDataParams.from_alias_domain = true\n advancedDataParams.alias_domain = window.location.origin\n }\n\n const { IP } = searchLocalGeoTag()\n if (IP) {\n advancedDataParams._ip = IP\n }\n\n const queryJwt = QS.getParam('jwt')\n\n if (queryJwt) {\n storage.set('jwt', queryJwt)\n }\n\n const requestOptions = {}\n\n if (typeof options.shouldUseSpecificApi === 'undefined') {\n options.shouldUseSpecificApi = false\n }\n\n if (typeof options.urlPrefix === 'undefined') {\n options.urlPrefix = 'client'\n }\n if (options.urlPrefix) {\n options.url = `${options.urlPrefix}/${options.url}`\n }\n\n if (options.shouldUseSpecificApi || getFromConfigs(SHOULD_USE_SPECIFIC_API)) {\n const specificApiUrl = options.specificApiUrl || getFromConfigs(SPECIFIC_API_URL)\n requestOptions.url = specificApiUrl + options.url\n } else {\n if (typeof options.useProxy === 'undefined') {\n options.useProxy = true\n }\n\n if (ENV === 'test') {\n options.useProxy = false\n }\n\n if (options.useProxy) {\n if (ENV === 'production' && getFromConfigs(IS_ALIAS_DOMAIN)) {\n const aliasedDomain = getFromConfigs(PROJECT_DOMAIN)\n requestOptions.url = `https://${aliasedDomain}${API_PROXY_URL}${options.url}`\n } else {\n requestOptions.url = API_PROXY_URL + options.url\n }\n } else {\n requestOptions.url = API_URL + options.url\n }\n }\n\n if (typeof options.method === 'undefined') {\n options.method = 'GET'\n }\n if (typeof options.params === 'undefined') {\n options.params = {}\n }\n\n if (!options.params.k && options.params.k !== false) {\n // Random parameter for API requests,\n // so that the exact address does not match\n // and the Cloudflare cache does not work\n options.params.k = Math.random()\n }\n options.params = { ...options.params, ...requiredDataParams }\n requestOptions.params = options.params\n\n if (options.method !== 'GET' && options.data) {\n if (typeof options.sendMethod === 'undefined') {\n options.sendMethod = 'form-data'\n }\n if (options.method === 'PUT') {\n options.sendMethod = 'urlencoded'\n }\n\n options.data = { ...options.data, ...advancedDataParams }\n\n if (options.sendMethod === 'json') {\n requestOptions.data = JSON.stringify(options.data)\n } else if (options.sendMethod === 'urlencoded') {\n requestOptions.data = Object.keys(options.data).map((key) => {\n const value = options.data[key]\n const encodedKey = encodeURIComponent(key)\n\n if (Array.isArray(value)) {\n return value.map((item) => `${encodedKey}[]=${encodeURIComponent(item)}`).join('&')\n }\n\n if (isPlainObject(value) && !(value instanceof File)) {\n const encodedObject = []\n for (const innerKey in value) {\n encodedObject.push(`${encodedKey}[${innerKey}]=${encodeURIComponent(value[innerKey])}`)\n }\n return encodedObject.join('&')\n }\n\n return `${encodedKey}=${encodeURIComponent(value)}`\n }).join('&')\n } else {\n const formData = new FormData()\n Object.keys(options.data).forEach((key) => {\n const value = options.data[key]\n if (Array.isArray(value)) { // if value is array - add each key\n Object.keys(value).forEach((innerKey) => {\n formData.append(`${key}[]`, value[innerKey])\n })\n } else if (isPlainObject(value) && !(value instanceof File)) { // if value is object - add each key to the overall key\n for (const innerKey in value) {\n formData.append(`${key}[${innerKey}]`, value[innerKey])\n }\n } else {\n formData.append(key, value)\n }\n })\n requestOptions.data = formData\n }\n }\n\n requestOptions.method = options.method\n\n requestOptions.headers = {\n // Fingerprint: getFingerprint(),\n ...(options?.headers || {}),\n }\n\n let jwt = storage.get('jwt', { ignoreExpitesAt: true })\n\n const isCookieSessionFlow = !!getFromConfigs(DASHBOARD_SUBDOMAIN)\n const jwtCookieStorage = cookieStorage.getItem('access_token')\n\n if (isCookieSessionFlow && !jwtCookieStorage && !queryJwt) {\n storage.remove('jwt')\n jwt = null\n }\n\n if (isCookieSessionFlow && jwtCookieStorage && !jwt && !queryJwt) {\n storage.set('jwt', jwtCookieStorage)\n jwt = jwtCookieStorage\n }\n\n if (jwt) {\n if (ENV === 'local') {\n requestOptions.params.token = jwt\n requestOptions.headers.Authorization = `Bearer ${jwt}`\n } else {\n requestOptions.headers.Authorization = `Bearer ${jwt}`\n }\n }\n\n if (storage.get('Visitor')) {\n requestOptions.headers.Visitor = storage.get('Visitor')\n }\n\n requestOptions.mode = 'cors'\n\n if (options.cancelToken) {\n requestOptions.cancelToken = options.cancelToken\n }\n\n if (!options.skipGlobalSpinner) {\n globalSpinner.show()\n }\n\n if (options.onUploadProgress) {\n requestOptions.onUploadProgress = options.onUploadProgress\n }\n\n const requestToolOptions = {\n options: requestOptions,\n cb,\n }\n\n if (isBoolean(options.hideGlobalSpinnerAfterResponse)) {\n requestToolOptions.hideGlobalSpinner = options.hideGlobalSpinnerAfterResponse\n } else if (options.skipGlobalSpinner) {\n requestToolOptions.hideGlobalSpinner = false\n }\n\n return axiosTool(requestToolOptions)\n}\n\n/**\n * @type (options?: TOptions) => Promise\n */\nexport const reqHPromise = (options = {}) => new Promise((resolve, reject) => {\n\n reqH(options, (response, error) => {\n if (error) {\n reject(error)\n } else {\n resolve(response)\n }\n })\n})\n\nexport default reqH\n", "import { CookieStorage } from 'cookie-storage'\n\nconst REDESIGN_REFERRER = 'redesign-referrer'\nconst REDESIGN_REFERRER_FLAG = 'redesign-referrer-flag'\nconst REDESIGN_REFERRER_MARK = 'sended'\n\nexport const getRedesignReferrer = (): string | false => {\n const cookieStorage = new CookieStorage()\n\n // setted from cloudflare worker\n const redesignReferrer = cookieStorage.getItem(REDESIGN_REFERRER)\n const redesignReferrerFlag = localStorage[REDESIGN_REFERRER_FLAG] !== REDESIGN_REFERRER_MARK\n\n if (redesignReferrerFlag && redesignReferrer) {\n return redesignReferrer\n }\n\n return false\n}\n\nexport const setRedesignReferrer = (): boolean => {\n const cookieStorage = new CookieStorage()\n\n const redesignReferrer = cookieStorage.getItem(REDESIGN_REFERRER)\n const redesignReferrerFlag = localStorage[REDESIGN_REFERRER_FLAG] !== REDESIGN_REFERRER_MARK\n\n if (redesignReferrerFlag && redesignReferrer) {\n localStorage['redesign-referrer-flag'] = 'sended'\n\n return true\n }\n\n return false\n}\n", "import storage from 'utils/storage'\n\nimport { TEMP_QS_KEY } from 'constants/storage'\n\ntype TempQueryType = string[]\ntype QueryType = {\n [key: string]: any\n}\n\nexport const getTempQuery = () => {\n const tempQuery: TempQueryType = storage.get(TEMP_QS_KEY, { isOuterKey: true }) || []\n\n return tempQuery.reduce((accumulator, param) => {\n const [key, value] = param.split('=')\n\n if (key && value) {\n accumulator[key] = decodeURIComponent(value)\n }\n\n return accumulator\n }, {} as QueryType)\n}\n", "const AB_TEST_REFERRER = 'abTestReferrer'\n\nexport const getABTestReferrer = (): string | false => {\n if (localStorage.abTestReferrer) {\n setTimeout(() => {\n localStorage.removeItem(AB_TEST_REFERRER)\n }, 1000)\n\n return localStorage.abTestReferrer\n }\n\n return false\n}\n", "import storage from 'utils/storage'\n\nimport { getRedesignReferrer } from 'utils/from-url/redesign-referrer'\nimport { getTempQuery } from 'utils/from-url/temp-query'\nimport { getABTestReferrer } from 'utils/from-url/a-b-test-referrer'\n\nimport { REFERRER } from 'constants/storage'\n\nexport const getFromURL = () => {\n const redesignReferrer = getRedesignReferrer()\n if (redesignReferrer) {\n return redesignReferrer\n }\n\n const query = getTempQuery()\n if ('from_url' in query) {\n return query.from_url\n }\n\n const abTestReferrer = getABTestReferrer()\n if (abTestReferrer) {\n return abTestReferrer\n }\n\n if ('utm_referrer' in query && document.referrer === '') {\n return query.utm_referrer\n }\n\n const referrer = storage.get(REFERRER, { isOuterKey: true })\n if (referrer) {\n return referrer\n }\n\n return document.referrer\n}\n", "import storage from 'utils/storage'\n\nexport enum Visitor {\n OLD,\n NEW,\n}\n\nlet issetVisitorFlag = false\nlet issetVisitorIsNewFlag = false\n\nexport const getVisitor = (): number => storage.get('Visitor')\n\nexport const setVisitor = (visitorId: number): void => {\n // @ts-ignore\n storage.set('Visitor', visitorId, { share: true })\n issetVisitorFlag = true\n}\n\nexport const getIsNewVisitor = (): Visitor => (storage.get('is_new_visitor') ? Visitor.NEW : Visitor.OLD)\n\nexport const setIsNewVisitor = (isNew: Visitor): void => {\n // @ts-ignore\n storage.set('is_new_visitor', isNew ? Visitor.NEW : Visitor.OLD, { share: true })\n issetVisitorIsNewFlag = true\n}\n\nexport const issetVisitor = (): boolean => issetVisitorFlag && issetVisitorIsNewFlag\n", "import _size from 'lodash/size'\nimport Bugsnag from '@bugsnag/js'\nimport pluralize from 'pluralize'\n\nimport { reqHPromise } from 'utils/http-client/request-handler'\n\nimport { getFromURL } from 'utils/from-url'\nimport { getVisitor, getIsNewVisitor, setIsNewVisitor, Visitor } from 'utils/visitor'\n\nimport type { InteriorTrackDataType } from 'utils/action-tracker/interior-track/types'\nimport type { Action, Response } from 'utils/action-tracker/interior-track/store/sagas/track/types'\n\nconst request = async (payload: Action['payload']) => {\n const is_new = getIsNewVisitor()\n setIsNewVisitor(Visitor.OLD)\n\n try {\n const response: Response = await reqHPromise({\n method: 'POST',\n url: 'hj/TcKBd22fwu5TG',\n urlPrefix: false,\n data: {\n ...(payload.data || {}),\n event_name: payload.eventName,\n url_current: window.location.href,\n url_from: getFromURL(),\n visitor_id: getVisitor(),\n is_new,\n } as InteriorTrackDataType,\n })\n\n if (_size(response.errors) > 0) {\n setIsNewVisitor(is_new)\n throw new Error(`${pluralize('Reason', _size(response.errors))}: \"${response.errors.join('\", \"')}\".`)\n }\n\n return response\n } catch (error) {\n setIsNewVisitor(is_new)\n Bugsnag.notify(error as any)\n }\n}\n\nexport default request\n", "export const INTERIOR_TRACK = 'INTERIOR_TRACK'\n", "import { SagaIterator } from '@redux-saga/types'\nimport { call, takeEvery } from 'redux-saga/effects'\nimport _size from 'lodash/size'\n\nimport request from 'utils/action-tracker/interior-track/store/sagas/track/request'\n\nimport { INTERIOR_TRACK } from 'utils/action-tracker/interior-track/store/constants'\n\nimport type { Action } from 'utils/action-tracker/interior-track/store/sagas/track/types'\n\nfunction* track(action: Action): SagaIterator {\n try {\n if (!action.payload.eventName) {\n return\n }\n\n const response: Request = yield call(request, action.payload)\n\n if (action.payload.callback) {\n action.payload.callback(null, response)\n }\n } catch (error) {\n let errorMessage = \"Unknown error\"\n if (error instanceof Error) {\n errorMessage = error.message\n }\n console.error('[Track failure]', errorMessage)\n\n if (action.payload.callback) {\n action.payload.callback(error, null)\n }\n }\n}\n\nexport default function* () {\n yield takeEvery(INTERIOR_TRACK, track)\n}\n", "import loadImage from 'blueimp-load-image'\n\ninterface ReorientImageMiddleware {\n (file: FileList | File[]): Promise\n}\n\nexport const reorientImagesMiddleware: ReorientImageMiddleware = async (files: FileList | File[]) => {\n const result: Array = await Promise.all(Array.from(files).map(async (file) => {\n return await loadImage(\n file,\n { orientation: true, meta: true, canvas: true }\n )\n .then(data => {\n if (!data?.imageHead) throw new Error()\n loadImage.writeExifData(data.imageHead, data, 'Orientation', 1)\n return new Promise(resolve => {\n data.image.toBlob(blob => {\n data.blob = blob\n resolve(data)\n }, file.type)\n })\n })\n .then(data => loadImage.replaceHead(data.blob, data.imageHead))\n .then(blob => {\n return new File([blob], file.name)\n })\n .catch(() => file)\n }))\n\n return result\n}", "import { put, call, take, race } from 'redux-saga/effects'\nimport axios from 'axios'\n\nimport md5 from 'md5'\n\nimport StoreManager from '@qwerty.software/store-manager'\n\nimport { reqHPromise } from 'utils/http-client/request-handler'\n\nimport { slice } from '../../slice'\n\nimport { reorientImagesMiddleware } from '../../middlewares/reorient-image'\n\nimport validatorRegister from '../../validators'\n\nimport {\n cancelFileUpload,\n\n CANCEL_UPLOAD_FILES,\n\n UploadFileResponse,\n\n FileMeta,\n} from '../../definitions'\nimport { PreloadState } from 'global-entities/files-uploader/definitions'\n\ntype UpdateFile = (file: Parameters[0]['file']) => ReturnType\ntype Pending = () => ReturnType\ntype Fulfilled = () => ReturnType\ntype Rejected = (error: string) => ReturnType\ntype Progress = (progress: number) => ReturnType\n\nconst createUploadFile = (namespace: string) => {\n const getValidator = validatorRegister()\n\n return function* uploadFile(file: File) {\n file = (yield call(reorientImagesMiddleware, [file]))[0]\n\n const hash = `${md5(file.name)}${Math.random()}`\n\n const update: UpdateFile = file => slice.actions.updateFile({ namespace, hash, file })\n\n const pending: Pending = () => update({ preload: { state: PreloadState.PENDING, progress: 0, error: null } })\n const progress: Progress = progress => update({ preload: { state: PreloadState.PROGRESS, progress, error: null } })\n const fulfilled: Fulfilled = () => update({ preload: { state: PreloadState.FULFILLED, progress: 100, error: null } })\n const rejected: Rejected = error => update({ preload: { state: PreloadState.REJECTED, error } })\n\n const fileMeta: FileMeta = {\n id: null,\n file: {\n name: file.name,\n size: file.size,\n },\n\n hash,\n }\n\n yield put(slice.actions.addFile({ namespace, files: fileMeta }))\n\n const validators = getValidator(namespace, fileMeta)\n\n const errors = validators.reduce((acc, validator) => {\n try {\n validator(fileMeta)\n } catch (error) {\n return [...acc, error]\n }\n\n return acc\n }, [] as Array)\n\n if (errors.length > 0) {\n return\n }\n\n let errorMessage = 'Something went wrong'\n try {\n const { token, cancel } = axios.CancelToken.source()\n function* request() {\n let result: UploadFileResponse | null = null\n try {\n yield put(pending())\n result = yield call(reqHPromise, {\n method: 'POST',\n url: 'preload-files',\n data: { file },\n cancelToken: token,\n onUploadProgress: (progressEvent: ProgressEvent) => {\n const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total)\n\n StoreManager.getInstance().store.dispatch(progress(percentCompleted))\n },\n })\n yield put(fulfilled())\n } catch (error) {\n yield put(rejected(error.message))\n }\n\n return result\n }\n\n const result: {\n response?: UploadFileResponse\n cancelation?: ReturnType\n removeFile?: ReturnType\n } = yield race({\n response: call(request),\n cancelation: take(`${CANCEL_UPLOAD_FILES}/${fileMeta.hash}`),\n removeFile: call(function* () {\n while (true) {\n const removeFileAction: ReturnType = yield take(slice.actions.removeFile.type)\n\n if (namespace === removeFileAction.payload.namespace) {\n return removeFileAction\n }\n }\n }),\n })\n\n if (result.removeFile) {\n cancel('File removed.')\n\n return\n }\n\n if (result.cancelation) {\n errorMessage = 'Canceled'\n\n cancel(errorMessage)\n yield put(rejected(errorMessage))\n }\n\n const { data, errors } = (result.response || {}) as UploadFileResponse\n\n if (!data) {\n if (errors?.length > 0) {\n throw new ResponseError(errors[0])\n }\n\n throw new EmptyResponseError()\n }\n\n yield put(update({\n id: data.uploaded_file_id,\n }))\n } catch (error) {\n if (error instanceof ResponseError) {\n errorMessage = error.message\n }\n\n yield put(update({\n preload: {\n error: errorMessage,\n }\n }))\n }\n }\n}\n\nexport default createUploadFile\n\nexport class ResponseError extends Error { }\nexport class EmptyResponseError extends Error { }", "import { takeEvery, fork } from 'redux-saga/effects'\n\nimport createUploadFile from './single-file'\n\nimport {\n UPLOAD_FILES_SAGA,\n\n UploadFilesSagaAction,\n} from '../../definitions'\n\nfunction* uploadFilesSaga(action: UploadFilesSagaAction) {\n const { namespace } = action.payload\n const files = Array.isArray(action.payload.files)\n ? action.payload.files\n : [action.payload.files]\n\n const upload = createUploadFile(namespace)\n\n for (const file of files) {\n yield fork(upload, file)\n }\n}\n\nexport function* uploadFilesSagaWatcher() {\n yield takeEvery(UPLOAD_FILES_SAGA, uploadFilesSaga)\n}", "export enum CurrencyIds {\n USD = 1,\n EUR = 2,\n GBP = 3,\n AUD = 4,\n CAD = 6,\n AED = 7,\n SGD = 9,\n HKD = 10,\n}\n\nexport interface ICurrency {\n id: number,\n name: string,\n symbol: string | undefined\n rate: number\n}\n\nexport const DEFAULT_CURRENCY: ICurrency = { id: CurrencyIds.USD, name: 'USD', symbol: '$', rate: 1 }\n\nexport const NAME = 'currency'\n", "import localforage from 'localforage'\n\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { DEFAULT_CURRENCY, ICurrency, NAME } from './constants'\n\nimport getFromConfigs from 'helpers/configs/get-from-configs'\nimport { PROJECT_DOMAIN } from 'constants/configs'\n\ninterface ICurrencyState {\n currency: ICurrency\n}\n\nconst INITIAL_STATE: ICurrencyState = {\n currency: DEFAULT_CURRENCY\n}\n\nconst domain: string = getFromConfigs(PROJECT_DOMAIN)\n\nexport const currencySlice = createSlice({\n name: `slice://${NAME}/`,\n initialState: INITIAL_STATE,\n reducers: {\n change(state: ICurrencyState, action: PayloadAction<{ currency: ICurrency }>) {\n state.currency = action.payload.currency\n },\n },\n})\n\nexport const CURRENCY_SLICE_PERSIST_CONFIG = {\n keyPrefix: '',\n key: currencySlice.name,\n storage: localforage.createInstance({\n name: '[MSH] Storage',\n storeName: `${NAME}:${domain}`,\n driver: [\n // localforage.INDEXEDDB,\n localforage.LOCALSTORAGE,\n ]\n }),\n}\n\n\ninterface State {\n [currencySlice.name]: ICurrencyState\n}\n\n// @ts-ignore\nexport const HYDRATED = (state: State): boolean => Boolean(state?.[currencySlice.name]?._persist?.rehydrated)\nexport const CURRENCY = (state: State): ICurrencyState['currency'] => state[currencySlice.name]['currency']\n", "import type { BootstrapData } from 'types/BootstrapData'\n\nconst GLOBAL_BOOTSTRAP_DATA_FIELDS = ['livechatGroupsIDs'] as const\n\nenum PickedBdFields {\n paperTypes = 'paperTypes',\n paperTypeGroups = 'paperTypeGroups',\n subjects = 'subjects',\n academicLevels = 'academicLevels',\n paperFormats = 'paperFormats',\n workTypes = 'workTypes',\n deadlines = 'deadlines',\n spacings = 'spacings',\n writerCategories = 'writerCategories',\n additionalFeatures = 'additionalFeatures',\n softwares = 'softwares',\n softcopies = 'softcopies',\n speakerNotes = 'speakerNotes',\n prices = 'prices',\n currencies = 'currencies'\n}\n\nexport const KEY = 'MICROSERVICES_BOOTSTRAP_DATA' as const\n\ndeclare global {\n interface Window {\n [KEY]?: BootstrapData.ICore\n }\n}\n\nexport const initBootstrapData = (...args: Array) => {\n const prevBootstrapData = window[KEY] || {}\n\n const bootstrapData = Object.assign({}, prevBootstrapData, ...args) as BootstrapData.ICore\n\n // transform for price calculator\n // @ts-ignore\n bootstrapData.priceCalculatorAdapted = {\n bdPrices: bootstrapData[PickedBdFields.prices],\n bdPaperTypeGroups: bootstrapData[PickedBdFields.paperTypeGroups],\n bdPaperTypes: bootstrapData[PickedBdFields.paperTypes],\n bdAcademicLevels: bootstrapData[PickedBdFields.academicLevels],\n bdSpacings: bootstrapData[PickedBdFields.spacings],\n bdSubjects: bootstrapData[PickedBdFields.subjects],\n bdSoftwares: bootstrapData[PickedBdFields.softwares],\n bdWriterCategories: bootstrapData[PickedBdFields.writerCategories],\n bdAdditionalFeatures: bootstrapData[PickedBdFields.additionalFeatures],\n bdSoftcopies: bootstrapData[PickedBdFields.softcopies],\n bdSpeakerNotes: bootstrapData[PickedBdFields.speakerNotes],\n bdCurrencies: bootstrapData[PickedBdFields.currencies],\n }\n\n for (const key of GLOBAL_BOOTSTRAP_DATA_FIELDS) {\n window[key] = bootstrapData[key]\n }\n\n window[KEY] = bootstrapData\n\n return bootstrapData\n}\n\nexport type { BootstrapData } from 'types/BootstrapData'\n", "import { KEY } from './init'\n\nexport const getBootstrapData = () => {\n if (!window[KEY]) {\n throw new Error('Bootstrap data is not initialized')\n }\n\n return window[KEY]\n}", "export enum Entity {\n MAIN = 'main',\n CALCULATOR = 'calculator',\n BOT = 'bot',\n INQUIRY = 'inquiry',\n DASHBOARD = 'dashboard'\n}", "import notify from 'utils/notify'\nimport storage from \"utils/storage\"\n\ninterface ISessionNotify {\n text: string\n timeOut?: number\n extendedTimeOut?: number\n method?: 'success' | 'warning'\n key: string\n}\n\nexport const sessionNotify = ({\n text,\n method = 'success',\n timeOut = 8000,\n extendedTimeOut = 3000,\n key\n}: ISessionNotify) => {\n if (!storage.get(key, { storageType: 'session' })) {\n\n notify[method](text, {\n autoHideDuration: timeOut,\n },\n )\n\n storage.set(key, true, { storageType: 'session' })\n }\n}\n", "export const FORM_ID = 'constants://order.formID' as const\nexport const INQUIRY_FORM_ID = 'constants://inquiry.formID' as const\n\nexport const NAME = 'new-order' as const\nexport const ORDER_NAMESPACE = 'new-order' as const", "import { SAGAS_SCHEMA } from 'constants/sagas'\nimport { NAME } from '@qwerty.software/ui-order-form/src/constants'\n\nexport const SAGAS_PREFIX = `${SAGAS_SCHEMA}${NAME}/` as const\n\nexport enum FieldNames {\n PAPER_TYPE = 'paperType',\n SUBJECT = 'subject',\n TOPIC = 'topic',\n PAPER_DETAILS = 'paperDetails',\n PAPER_FORMAT = 'paperFormat',\n\n ACADEMIC_LEVEL = 'academicLevel',\n WORK_TYPE = 'workType',\n DEADLINE = 'deadline',\n\n QUANTITY_KEY = 'quantityKey',\n QUANTITY = 'quantity',\n WORDS = 'words',\n\n PAGES_WORDS_SWITCHER = 'pagesWordsSwitcher',\n SPACING = 'spacing',\n SLIDES = 'slides',\n SPEAKER_NOTES = 'speakerNotes',\n SOURCES = 'sources',\n SOFT_COPIES = 'softCopies',\n\n WRITER_CATEGORY = 'writerCategory',\n PREFERRED_ORDER = 'preferredOrder',\n ADDITIONAL_FEATURES = 'additionalFeatures',\n SOFTWARE = 'software',\n}\n\nexport enum QuantityKeys {\n PAGES = 'pages',\n WORDS = 'words',\n PROBLEMS = 'problems',\n QUESTIONS = 'questions',\n}\n\nexport enum SpacingIds {\n DOUBLE = 118,\n ONE_AND_HALF = 186,\n SINGLE = 117,\n}\n\nexport const DEFAULT_NUMBER_MAX_VALUE = 9999\nexport const DEFAULT_WORDS_PER_PAGE = 275\n\nexport enum WorkTypeIds {\n MULTIPLY_CHOISE_QUESTIONS = 201,\n PROBLEM_SOLVING = 22,\n WRITING_FROM_SCRATCH = 20,\n PARAPHRASING_REWRITING = 175,\n EDITING_PROOFREADING = 21,\n QUESTIONS_AND_ANSWERS_DEP = 212,\n GRADING_MARKING_DEP = 172,\n}\n\nexport enum PaperTypeIds {\n MULTIPLY_CHOISE_QUESTIONS = 200,\n PROBLEM_SOLVING = 110,\n ESSAY = 90,\n QUESTIONS_AND_ANSWERS_DEP = 211,\n QUESTIONS_AND_ANSWERS = 219,\n REPORT = 94,\n COURSE_WORK = 87,\n CASE_STUDY = 86,\n RESEARCH_PAPER = 95,\n CV_WRITING__COVER_LETTER__FOLLOW_UP = 166,\n RESUME_WRITING__COVER_LETTER__FOLLOW_UP = 168,\n}\n\nexport enum UpsaleIds {\n PLAGIARISM_REPORT = 4,\n PROGRESSIVE_DELIVERY = 5,\n FOLLOW_UP = 6,\n LINKED_IN = 7,\n SOFT_COPIES = 8,\n SUMMARY = 9,\n DRAFT = 10,\n ABSTRACT = 12,\n GRAMMARLY_REPORT = 13,\n SPEAKER_NOTES = 14,\n SECOND_VERSION_ORDER = 15,\n TURNITIN_REPORT = 16,\n AI_CHECK_REPORT = 17,\n VIP_SERVICE = 18,\n}\n\nexport enum AcademicLevelIds {\n HIGH_SCHOOL = 10,\n UNDERGRADUATE = 11,\n PHD = 13,\n}\n\nexport enum DeadlineIds {\n FOUR_HOURS = 215,\n SIX_HOURS = 1,\n TWELVE_HOURS = 2,\n TWENTY_FOUR_HOURS = 3,\n TWO_DAYS = 4,\n THREE_DAYS = 5,\n FIVE_DAYS = 6,\n SEVEN_DAYS = 7,\n NINE_DAYS = 8,\n FOURTEEN_DAYS = 9,\n TWENTY_DAYS = 190,\n}\n\nexport enum WriterCategoryIds {\n BEST_AVAILIBLE = 1,\n PRO = 2,\n TOP = 3,\n PREFERRED = 11,\n}\n\nexport enum PaperFormatIds {\n APA = 26,\n}\n\nexport enum SubjectIds {\n OTHER = 78,\n NURSING = 63,\n BUSINESS = 35,\n ENGLISH = 45,\n PSYCHOLOGY = 68,\n MANAGEMENT = 58,\n}\n\nexport enum SoftwareIds {\n AUTO_CAD = 1,\n MATLAB = 2,\n SPSS = 3,\n MS_ACCESS = 4,\n STATA = 5,\n DATABASE = 6,\n PROGRAMMING_LANGUAGE = 7,\n OTHER = 8,\n WRITERS_CHOICE = 9,\n JAVA_SCRIPT = 10,\n HTML_CSS = 11,\n R_STUDIO = 12,\n PYTHON = 13,\n CISCO_PACKET_TRACER = 14,\n}\n", "import { PAGES_INDEX } from 'constants/pagesWordsSwitcher'\n\nimport getFromConfigs from 'helpers/configs/get-from-configs'\nimport { PROJECT_DOMAIN } from 'constants/configs'\n\nimport { ORDER_DATA_DEFAULTS } from 'constants/configs'\n\nimport type {\n OrderDataLists,\n OrderValues,\n OrderState,\n} from './types'\n\nimport { SAGAS_SCHEMA } from 'constants/sagas'\nimport {\n FieldNames,\n PaperTypeIds,\n WriterCategoryIds,\n SubjectIds,\n PaperFormatIds,\n DeadlineIds,\n AcademicLevelIds,\n WorkTypeIds,\n QuantityKeys,\n SpacingIds,\n DEFAULT_NUMBER_MAX_VALUE,\n} from '@qwerty.software/ui-order-form/src/store/constants'\n\nconst domain: string = getFromConfigs(PROJECT_DOMAIN)\n\nexport const NAME = `order.form:${domain}` as const\n\nexport const SAGAS_PREFIX = `${SAGAS_SCHEMA}${NAME}/` as const\n\nexport const PAGES_SWITCHER_KEY = 0 as const\nexport const WORDS_SWITCHER_KEY = 1 as const\n\nexport enum PickedBdFields {\n paperTypes = 'paperTypes',\n paperTypeGroups = 'paperTypeGroups',\n subjects = 'subjects',\n academicLevels = 'academicLevels',\n paperFormats = 'paperFormats',\n workTypes = 'workTypes',\n deadlines = 'deadlines',\n spacings = 'spacings',\n writerCategories = 'writerCategories',\n additionalFeatures = 'additionalFeatures',\n softwares = 'softwares',\n softcopies = 'softcopies',\n speakerNotes = 'speakerNotes',\n prices = 'prices',\n currencies = 'currencies'\n}\n\nexport const MAX_QUANTITY_KEY = 'maxQuantity'\nexport const MAX_SLIDES_KEY = 'maxSlides'\n\nexport const INITIAL_LISTS: OrderDataLists = {\n paperFormats: [],\n paperTypes: [],\n subjects: [],\n academicLevels: [],\n workTypes: [],\n deadlines: [],\n spacings: [],\n writerCategories: [],\n additionalFeatures: [],\n softwares: [],\n currencies: [],\n}\nconst orderDataDefaults = getFromConfigs(ORDER_DATA_DEFAULTS)\n\nexport const INITIAL_VALUES: OrderValues = {\n [FieldNames.PAPER_TYPE]: (orderDataDefaults && orderDataDefaults.paperType) || PaperTypeIds.ESSAY,\n [FieldNames.SUBJECT]: (orderDataDefaults && orderDataDefaults.subject) || SubjectIds.OTHER,\n [FieldNames.TOPIC]: (orderDataDefaults && orderDataDefaults.topic) || '',\n [FieldNames.PAPER_DETAILS]: (orderDataDefaults && orderDataDefaults.paperDetails) || '',\n [FieldNames.PAPER_FORMAT]: (orderDataDefaults && orderDataDefaults.paperFormat) || PaperFormatIds.APA,\n\n [FieldNames.ACADEMIC_LEVEL]: (orderDataDefaults && orderDataDefaults.academicLevel) || AcademicLevelIds.HIGH_SCHOOL,\n [FieldNames.WORK_TYPE]: (orderDataDefaults && orderDataDefaults.workType) || WorkTypeIds.WRITING_FROM_SCRATCH,\n [FieldNames.DEADLINE]: (orderDataDefaults && orderDataDefaults.deadline) || DeadlineIds.FOURTEEN_DAYS,\n [FieldNames.QUANTITY_KEY]: QuantityKeys.PAGES,\n [FieldNames.QUANTITY]: (orderDataDefaults && orderDataDefaults.pages) || (orderDataDefaults && orderDataDefaults.pages) === 0 ? orderDataDefaults.pages : 1,\n [FieldNames.WORDS]: (orderDataDefaults && orderDataDefaults.words) || (orderDataDefaults && orderDataDefaults.words) === 0 ? orderDataDefaults.words : 275,\n [FieldNames.PAGES_WORDS_SWITCHER]: (orderDataDefaults && orderDataDefaults.pagesWordsSwitcher) || (orderDataDefaults && orderDataDefaults.pagesWordsSwitcher) === 0 ? orderDataDefaults.pagesWordsSwitcher : PAGES_INDEX,\n [FieldNames.SPACING]: SpacingIds.DOUBLE,\n [FieldNames.SLIDES]: (orderDataDefaults && orderDataDefaults.slides) || 0,\n [FieldNames.SPEAKER_NOTES]: false,\n [FieldNames.SOURCES]: (orderDataDefaults && orderDataDefaults.sources) || 0,\n [FieldNames.SOFT_COPIES]: false,\n\n [FieldNames.WRITER_CATEGORY]: (orderDataDefaults && orderDataDefaults.writerCategory) || WriterCategoryIds.BEST_AVAILIBLE,\n [FieldNames.PREFERRED_ORDER]: {\n value: '',\n sended: false,\n\n errors: [],\n data: undefined,\n isLoading: false,\n },\n [FieldNames.ADDITIONAL_FEATURES]: (orderDataDefaults && orderDataDefaults.additionalFeatures) || [],\n [FieldNames.SOFTWARE]: {\n checked: false,\n value: (orderDataDefaults && orderDataDefaults.software) || 9,\n },\n\n validation: {},\n\n placeOrderPending: false,\n\n orderChanged: false,\n showReminder: false,\n\n lastChangedAt: undefined,\n\n [MAX_QUANTITY_KEY]: DEFAULT_NUMBER_MAX_VALUE,\n [MAX_SLIDES_KEY]: DEFAULT_NUMBER_MAX_VALUE,\n}\n\nexport const INITIAL_STATE: OrderState = {\n ...INITIAL_VALUES,\n}\n\nexport const COMMON_PERSIST_BLACKLIST = [\n 'preferredOrder.isLoading',\n 'discount.isLoading',\n 'validation',\n 'placeOrderPending',\n]\n\nexport const ORDER_SLICE_NAME = `slice://${NAME}/`\n", "import { UpsaleIds, DeadlineIds, QuantityKeys, WorkTypeIds, SpacingIds, FieldNames, AcademicLevelIds } from '@qwerty.software/ui-order-form/src/store/constants'\n\nexport const MIN_DEADLINE_WRITING_FROM_SCRATCH = DeadlineIds.FOUR_HOURS\nexport const MIN_DEADLINE_BY_WORKTYPE = DeadlineIds.SIX_HOURS\n\nexport const subjectFlagToDisableDeadline = 'isTechnical'\n\nexport const disabledAdditionalFeaturesByMultiplyChoiseQuestions = [\n UpsaleIds.PLAGIARISM_REPORT,\n UpsaleIds.SUMMARY,\n UpsaleIds.DRAFT,\n UpsaleIds.ABSTRACT,\n UpsaleIds.GRAMMARLY_REPORT,\n]\n\nexport const disabledAdditionalFeaturesByPaperType = [\n UpsaleIds.FOLLOW_UP,\n]\n\nexport const disabledDeadlinesByWorkType = {\n [WorkTypeIds.MULTIPLY_CHOISE_QUESTIONS]: [\n DeadlineIds.FOUR_HOURS,\n ],\n [WorkTypeIds.PROBLEM_SOLVING]: [\n DeadlineIds.FOUR_HOURS,\n ],\n [WorkTypeIds.PARAPHRASING_REWRITING]: [\n DeadlineIds.FOUR_HOURS,\n ],\n [WorkTypeIds.EDITING_PROOFREADING]: [\n DeadlineIds.FOUR_HOURS,\n ],\n}\n\nexport const disabledDeadlinesByAcademicLevel = {\n [AcademicLevelIds.PHD]: [\n DeadlineIds.FOUR_HOURS,\n ],\n}\n\nexport const MAX_PROBLEMS_AND_QUESTIONS_CONFIG = {\n [QuantityKeys.PROBLEMS]: {\n [DeadlineIds.FOUR_HOURS]: 4, // deadlineId: problems or questions\n [DeadlineIds.SIX_HOURS]: 5,\n [DeadlineIds.TWELVE_HOURS]: 10,\n [DeadlineIds.TWENTY_FOUR_HOURS]: 20,\n },\n [QuantityKeys.QUESTIONS]: {\n [DeadlineIds.FOUR_HOURS]: 20,\n [DeadlineIds.SIX_HOURS]: 35,\n [DeadlineIds.TWELVE_HOURS]: 70,\n [DeadlineIds.TWENTY_FOUR_HOURS]: 140,\n },\n}\n\nexport const MAX_SLIDES_AND_PAGES_CONFIG = {\n [WorkTypeIds.EDITING_PROOFREADING]: {\n [SpacingIds.DOUBLE]: {\n [DeadlineIds.FOUR_HOURS]: 6, // deadlineId: pages + slides\n [DeadlineIds.SIX_HOURS]: 8,\n [DeadlineIds.TWELVE_HOURS]: 16,\n [DeadlineIds.TWENTY_FOUR_HOURS]: 32,\n },\n [SpacingIds.ONE_AND_HALF]: {\n [DeadlineIds.FOUR_HOURS]: 4,\n [DeadlineIds.SIX_HOURS]: 5,\n [DeadlineIds.TWELVE_HOURS]: 10,\n [DeadlineIds.TWENTY_FOUR_HOURS]: 21,\n },\n [SpacingIds.SINGLE]: {\n [DeadlineIds.FOUR_HOURS]: 3,\n [DeadlineIds.SIX_HOURS]: 4,\n [DeadlineIds.TWELVE_HOURS]: 8,\n [DeadlineIds.TWENTY_FOUR_HOURS]: 16,\n },\n },\n other: {\n [SpacingIds.DOUBLE]: {\n [DeadlineIds.FOUR_HOURS]: 4,\n [DeadlineIds.SIX_HOURS]: 5,\n [DeadlineIds.TWELVE_HOURS]: 10,\n [DeadlineIds.TWENTY_FOUR_HOURS]: 20,\n },\n [SpacingIds.ONE_AND_HALF]: {\n [DeadlineIds.FOUR_HOURS]: 3,\n [DeadlineIds.SIX_HOURS]: 4,\n [DeadlineIds.TWELVE_HOURS]: 8,\n [DeadlineIds.TWENTY_FOUR_HOURS]: 15,\n },\n [SpacingIds.SINGLE]: {\n [DeadlineIds.FOUR_HOURS]: 2,\n [DeadlineIds.SIX_HOURS]: 3,\n [DeadlineIds.TWELVE_HOURS]: 5,\n [DeadlineIds.TWENTY_FOUR_HOURS]: 10,\n },\n },\n}\n\nexport const AFFECTING_TO_MAX_VALUE_FIELDS = [\n FieldNames.PAPER_TYPE,\n FieldNames.WORK_TYPE,\n FieldNames.DEADLINE,\n FieldNames.SPACING,\n FieldNames.PAGES_WORDS_SWITCHER,\n FieldNames.QUANTITY,\n FieldNames.WORDS,\n FieldNames.SLIDES,\n]\n\nexport const MULTIPLY_QUESTIONS_NOTIFICATION_KEY = 'SHOW_MULTIPLY_QUESTIONS_NOTIF'\n", "import _difference from 'lodash/difference'\nimport { OrderValues } from \"../types\"\n\nimport { sessionNotify } from '@qwerty.software/ui-order-form/src/utils/helpers/session-notify'\n\nimport { FieldNames, PaperTypeIds, QuantityKeys, WorkTypeIds } from '@qwerty.software/ui-order-form/src/store/constants'\nimport { PAGES_SWITCHER_KEY } from '@qwerty.software/ui-order-form/src/store/slices/order/constants'\nimport { MIN_DEADLINE_BY_WORKTYPE, disabledAdditionalFeaturesByMultiplyChoiseQuestions, disabledDeadlinesByWorkType } from './constants'\nimport { PayloadAction } from '@reduxjs/toolkit'\n\nexport const workTypePaperTypeMirrorRelations = (state, action: PayloadAction<{ key: K, value: OrderValues[K] }>) => {\n const FieldIds = action.payload.key === FieldNames.PAPER_TYPE ? PaperTypeIds : WorkTypeIds\n const RelatedFieldIds = action.payload.key === FieldNames.PAPER_TYPE ? WorkTypeIds : PaperTypeIds\n const RelatedFieldName = action.payload.key === FieldNames.PAPER_TYPE ? FieldNames.WORK_TYPE : FieldNames.PAPER_TYPE\n const defaultValue = RelatedFieldName === FieldNames.PAPER_TYPE ? PaperTypeIds.ESSAY : WorkTypeIds.WRITING_FROM_SCRATCH\n\n switch (action.payload.value) {\n case FieldIds.PROBLEM_SOLVING:\n state[RelatedFieldName] = RelatedFieldIds.PROBLEM_SOLVING\n state[FieldNames.QUANTITY_KEY] = QuantityKeys.PROBLEMS\n disabledDeadlinesByWorkType[WorkTypeIds.PROBLEM_SOLVING].includes(state[FieldNames.DEADLINE]) && (state[FieldNames.DEADLINE] = MIN_DEADLINE_BY_WORKTYPE)\n break\n\n case FieldIds.MULTIPLY_CHOISE_QUESTIONS:\n state[RelatedFieldName] = RelatedFieldIds.MULTIPLY_CHOISE_QUESTIONS\n state[FieldNames.QUANTITY_KEY] = QuantityKeys.QUESTIONS\n state[FieldNames.ADDITIONAL_FEATURES] = _difference(state[FieldNames.ADDITIONAL_FEATURES], disabledAdditionalFeaturesByMultiplyChoiseQuestions)\n disabledDeadlinesByWorkType[WorkTypeIds.MULTIPLY_CHOISE_QUESTIONS].includes(state[FieldNames.DEADLINE]) && (state[FieldNames.DEADLINE] = MIN_DEADLINE_BY_WORKTYPE)\n\n sessionNotify({\n text: 'Please note that we do not accept online tests with limited attempts and a deadline',\n key: 'SHOW_MULTIPLY_QUESTIONS_NOTIF',\n })\n break\n\n default:\n if (\n state[RelatedFieldName] === RelatedFieldIds.PROBLEM_SOLVING ||\n state[RelatedFieldName] === RelatedFieldIds.MULTIPLY_CHOISE_QUESTIONS ||\n state[RelatedFieldName] === RelatedFieldIds.QUESTIONS_AND_ANSWERS_DEP\n ) {\n state[RelatedFieldName] = defaultValue // change to default\n state[FieldNames.QUANTITY_KEY] = state[FieldNames.PAGES_WORDS_SWITCHER] === PAGES_SWITCHER_KEY ? QuantityKeys.PAGES : QuantityKeys.WORDS\n }\n break\n }\n\n}\n", "import { OrderValues } from \"../types\"\n\nimport { FieldNames, WorkTypeIds } from '@qwerty.software/ui-order-form/src/store/constants'\nimport { MIN_DEADLINE_BY_WORKTYPE, disabledDeadlinesByWorkType } from './constants'\n\nexport const workTypeRelations = (state, value: OrderValues[K]) => {\n const disabledDeadlines = disabledDeadlinesByWorkType[value as WorkTypeIds]\n\n if (disabledDeadlines && disabledDeadlines.includes(state[FieldNames.DEADLINE])) {\n state[FieldNames.DEADLINE] = MIN_DEADLINE_BY_WORKTYPE\n }\n}\n", "import _difference from 'lodash/difference'\n\nimport { OrderValues } from \"../types\"\n\nimport { FieldNames, PaperTypeIds } from '@qwerty.software/ui-order-form/src/store/constants'\nimport { disabledAdditionalFeaturesByPaperType } from './constants'\n\nexport const paperTypeRelations = (state, value: OrderValues[K]) => {\n switch (value) {\n case PaperTypeIds.CV_WRITING__COVER_LETTER__FOLLOW_UP:\n case PaperTypeIds.RESUME_WRITING__COVER_LETTER__FOLLOW_UP:\n state[FieldNames.ADDITIONAL_FEATURES] = _difference(state[FieldNames.ADDITIONAL_FEATURES], disabledAdditionalFeaturesByPaperType)\n break\n\n default:\n break\n }\n}\n", "import { FieldNames, DeadlineIds, WriterCategoryIds } from '@qwerty.software/ui-order-form/src/store/constants'\n\nexport const deadlineRelations = (state, value: number) => {\n if (\n state[FieldNames.WRITER_CATEGORY] === WriterCategoryIds.PREFERRED &&\n (value < DeadlineIds.TWO_DAYS || value === DeadlineIds.FOUR_HOURS)\n ) {\n state[FieldNames.WRITER_CATEGORY] = WriterCategoryIds.BEST_AVAILIBLE\n }\n}\n", "import { OrderValues } from \"../types\"\n\nimport { FieldNames, QuantityKeys } from '@qwerty.software/ui-order-form/src/store/constants'\nimport { WORDS_SWITCHER_KEY, PAGES_SWITCHER_KEY } from '@qwerty.software/ui-order-form/src/store/slices/order/constants'\n\nexport const pagesWordsSwitcherRelations = (state, value: OrderValues[K]) => {\n switch (value) {\n case WORDS_SWITCHER_KEY:\n state[FieldNames.QUANTITY_KEY] = QuantityKeys.WORDS\n break\n\n case PAGES_SWITCHER_KEY:\n state[FieldNames.QUANTITY_KEY] = QuantityKeys.PAGES\n break\n\n default:\n break\n }\n}\n", "import { FieldNames, QuantityKeys } from '@qwerty.software/ui-order-form/src/store/constants'\nimport { BootstrapData } from 'store/types'\n\nexport const spacingRelations = (state, currentSpacing: BootstrapData.ISpacing) => {\n switch (state[FieldNames.QUANTITY_KEY]) {\n case QuantityKeys.PAGES:\n state[FieldNames.WORDS] = Math.ceil(state[FieldNames.QUANTITY] * currentSpacing.wordsCount)\n break\n\n case QuantityKeys.WORDS:\n state[FieldNames.QUANTITY] = Math.ceil(state[FieldNames.WORDS] / currentSpacing.wordsCount)\n break\n }\n}\n", "import _difference from 'lodash/difference'\n\nimport { getBootstrapData } from 'global-entities/bootstrap-data/utils/get'\n\nimport { FieldNames, QuantityKeys, UpsaleIds, WorkTypeIds } from '@qwerty.software/ui-order-form/src/store/constants'\n\nimport type { OrderState as State } from '../../types'\nimport type { DisabledChecker } from './types'\n\nconst AI_CHECK_REPORT_DISABLED_TOOLTIP = 'AI writing detection tool is unavailable for less than 400 words or more than 15000'\n\nconst checker: DisabledChecker = (state: State) => {\n const spacingValue = getSpacingValue(state)\n\n const quantity = parseFloat(`${state[FieldNames.QUANTITY]}`)\n const quantityKey = state[FieldNames.QUANTITY_KEY]\n const words = parseFloat(`${state[FieldNames.WORDS]}`)\n const workType = parseFloat(`${state[FieldNames.WORK_TYPE]}`)\n\n const disabled = {}\n\n switch (true) {\n case Boolean(quantityKey === QuantityKeys.PAGES && quantity === 1 && spacingValue === 2): // 1 page double spacing\n case Boolean(quantityKey === QuantityKeys.WORDS && words !== 0 && words < 400): // lt 400 words\n case Boolean(quantityKey === QuantityKeys.PAGES && quantity > 54 && spacingValue === 2): // gt 54 pages with double spacing\n case Boolean(quantityKey === QuantityKeys.PAGES && quantity > 37 && spacingValue === 1.5): // gt 37 pages with 1.5 spacing\n case Boolean(quantityKey === QuantityKeys.PAGES && quantity > 27 && spacingValue === 1): // gt 27 pages with single spacing\n case Boolean(quantityKey === QuantityKeys.WORDS && words > 15000): // gt 15_000 words\n case Boolean(workType === WorkTypeIds.MULTIPLY_CHOISE_QUESTIONS): // Multiple choice questions\n case Boolean(workType === WorkTypeIds.PROBLEM_SOLVING): // Problem solving\n disabled[UpsaleIds.AI_CHECK_REPORT] = AI_CHECK_REPORT_DISABLED_TOOLTIP\n break\n }\n\n return disabled\n}\n\nexport const additionalFeaturesAIreport = (state: State) => {\n const features = Object.keys(checker(state)).map(Number)\n\n state[FieldNames.ADDITIONAL_FEATURES] = _difference(state[FieldNames.ADDITIONAL_FEATURES], features)\n}\n\nexport const aiCheckReport = checker\n\nfunction getSpacingValue(state: State) {\n const { spacings } = getBootstrapData()\n const spacing = spacings.find((item) => item.id === state[FieldNames.SPACING])\n\n if (!spacing) {\n return null\n }\n\n return spacing.value\n}", "import { FieldNames, QuantityKeys, WorkTypeIds, DEFAULT_NUMBER_MAX_VALUE } from \"@qwerty.software/ui-order-form/src/store/constants\";\nimport { MAX_QUANTITY_KEY, MAX_SLIDES_KEY } from \"@qwerty.software/ui-order-form/src/store/slices/order/constants\";\nimport { MAX_SLIDES_AND_PAGES_CONFIG } from \"../constants\";\n\nimport type { BootstrapData } from \"store/types\";\n\n// PAGES / SLIDES / DEADLINE / SPACING LOGIC (logic in task LR-4693 https://speedycompany.atlassian.net/browse/LR-4693)\n\nexport const setMaxPagesSlides = (state, currentSpacing: BootstrapData.ISpacing) => {\n // for editing/proofreading - 1 page cost equals 1 slide, for other worktypes - 1 page cost equals 2 slides\n const slidesMtl = state[FieldNames.WORK_TYPE] !== WorkTypeIds.EDITING_PROOFREADING ? 2 : 1\n\n const wordsMtl = state[FieldNames.QUANTITY_KEY] === QuantityKeys.WORDS ? currentSpacing.wordsCount : 1\n\n const maxSumFromConfig = state[FieldNames.WORK_TYPE] === WorkTypeIds.EDITING_PROOFREADING\n ? MAX_SLIDES_AND_PAGES_CONFIG[WorkTypeIds.EDITING_PROOFREADING][state[FieldNames.SPACING]][state[FieldNames.DEADLINE]]\n : MAX_SLIDES_AND_PAGES_CONFIG.other[state[FieldNames.SPACING]][state[FieldNames.DEADLINE]]\n\n const maxSumCurrent = state[FieldNames.QUANTITY] + Math.round(state[FieldNames.SLIDES] / slidesMtl)\n\n if (maxSumCurrent > maxSumFromConfig) {\n state[FieldNames.QUANTITY] = state[FieldNames.QUANTITY] >= maxSumFromConfig ? maxSumFromConfig : state[FieldNames.QUANTITY]\n state[FieldNames.WORDS] = state[FieldNames.QUANTITY] * currentSpacing.wordsCount\n state[FieldNames.SLIDES] = (maxSumFromConfig - state[FieldNames.QUANTITY]) * slidesMtl\n }\n\n if (!maxSumFromConfig) {\n state[MAX_QUANTITY_KEY] = DEFAULT_NUMBER_MAX_VALUE * wordsMtl\n state[MAX_SLIDES_KEY] = DEFAULT_NUMBER_MAX_VALUE\n } else {\n state[MAX_QUANTITY_KEY] = (maxSumFromConfig - Math.round(state[FieldNames.SLIDES] / slidesMtl)) * wordsMtl\n state[MAX_SLIDES_KEY] = (maxSumFromConfig - state[FieldNames.QUANTITY]) * slidesMtl\n }\n}\n", "import { FieldNames, DEFAULT_NUMBER_MAX_VALUE } from \"@qwerty.software/ui-order-form/src/store/constants\";\nimport { MAX_QUANTITY_KEY } from \"@qwerty.software/ui-order-form/src/store/slices/order/constants\";\nimport { MAX_PROBLEMS_AND_QUESTIONS_CONFIG } from \"../constants\";\n\nexport const setMaxProblemsQuestions = (state) => {\n if (Object.keys(MAX_PROBLEMS_AND_QUESTIONS_CONFIG).includes(state[FieldNames.QUANTITY_KEY])) {\n const maxValue = MAX_PROBLEMS_AND_QUESTIONS_CONFIG[state[FieldNames.QUANTITY_KEY]][state[FieldNames.DEADLINE]] || DEFAULT_NUMBER_MAX_VALUE\n if (state[FieldNames.QUANTITY] > maxValue) {\n state[FieldNames.QUANTITY] = maxValue\n }\n state[MAX_QUANTITY_KEY] = maxValue\n }\n}\n", "import { FieldNames, QuantityKeys} from \"@qwerty.software/ui-order-form/src/store/constants\";\nimport { BootstrapData } from \"store/types\";\nimport { setMaxPagesSlides } from './pages-slides-spacing-deadline';\nimport { setMaxProblemsQuestions } from './prodlems-questions-deadline';\n\nexport const maxValueRelations = (state, currentSpacing: BootstrapData.ISpacing) => {\n switch (state[FieldNames.QUANTITY_KEY]) {\n case QuantityKeys.PAGES:\n case QuantityKeys.WORDS:\n setMaxPagesSlides(state, currentSpacing)\n break\n\n case QuantityKeys.PROBLEMS:\n case QuantityKeys.QUESTIONS:\n setMaxProblemsQuestions(state)\n break\n\n default:\n break\n }\n}\n", "import notify from 'utils/notify'\nimport { FieldNames, DeadlineIds, AcademicLevelIds } from '@qwerty.software/ui-order-form/src/store/constants'\nimport { disabledDeadlinesByAcademicLevel } from './constants'\n\nexport const academicLevelRelations = (state, value: AcademicLevelIds) => {\n const disabledDeadlines = disabledDeadlinesByAcademicLevel[value]\n if (disabledDeadlines && disabledDeadlines.includes(state[FieldNames.DEADLINE])) {\n state[FieldNames.DEADLINE] = DeadlineIds.SIX_HOURS\n notify.warning('The 4-hour deadline is not applicable to the Ph.D. academic level, so it has been changed to the closest available option.')\n }\n}\n", "import notify from 'utils/notify'\nimport { FieldNames, DeadlineIds } from '@qwerty.software/ui-order-form/src/store/constants'\nimport { getBootstrapData } from 'global-entities/bootstrap-data/utils/get'\nimport { subjectFlagToDisableDeadline } from './constants'\n\n/**\n * RELATED! functional for chat-bot using in:\n * - packages/chat-bot/src/store/selectors/disabled-deadlines/errors/complex-subject.ts\n * - packages/chat-bot/src/components/inputs/deadline/index.tsx:59\n */\nexport const subjectRelations = (state, value) => {\n const { subjects } = getBootstrapData()\n const bdSubject = subjects.find((item) => item.id === value)\n\n if (bdSubject?.[subjectFlagToDisableDeadline] && state[FieldNames.DEADLINE] === DeadlineIds.FOUR_HOURS) {\n state[FieldNames.DEADLINE] = DeadlineIds.SIX_HOURS\n notify.warning('The 4-hour deadline is not applicable to the selected subject, so it has been changed to the closest available option.')\n }\n}\n", "import { OrderValues } from \"../types\"\n\nimport { FieldNames, QuantityKeys } from '@qwerty.software/ui-order-form/src/store/constants'\nimport { WORDS_SWITCHER_KEY, PAGES_SWITCHER_KEY } from '@qwerty.software/ui-order-form/src/store/slices/order/constants'\n\nexport const quantityKeyRelations = (state, value: OrderValues[K]) => {\n switch (value) {\n case QuantityKeys.PAGES:\n state[FieldNames.PAGES_WORDS_SWITCHER] = PAGES_SWITCHER_KEY\n break\n\n case QuantityKeys.WORDS:\n state[FieldNames.PAGES_WORDS_SWITCHER] = WORDS_SWITCHER_KEY\n break\n\n default:\n break\n }\n}\n", "import { PayloadAction } from \"@reduxjs/toolkit\";\n\nimport { getBootstrapData } from \"global-entities/bootstrap-data/utils/get\";\n\nimport { workTypePaperTypeMirrorRelations } from \"./work-type-paper-type\";\nimport { workTypeRelations } from \"./work-type\";\nimport { paperTypeRelations } from './paper-type'\nimport { deadlineRelations } from \"./deadline\";\nimport { pagesWordsSwitcherRelations } from \"./pages-words-switcher\";\nimport { spacingRelations } from \"./spacing\";\nimport { additionalFeaturesAIreport } from './additional-features/ai-check-report'\n\nimport { maxValueRelations } from \"./max-value\";\n\nimport { FieldNames, AcademicLevelIds, WorkTypeIds } from '@qwerty.software/ui-order-form/src/store/constants';\nimport { AFFECTING_TO_MAX_VALUE_FIELDS } from \"./constants\";\n\nimport type { OrderValues } from \"../types\";\nimport { academicLevelRelations } from \"./academic-level\";\nimport { subjectRelations } from \"./subject\";\nimport { quantityKeyRelations } from \"./quantity-key\";\n\nexport const fieldsRelations = (state, action: PayloadAction<{ key: K, value: OrderValues[K] }>) => {\n const { spacings } = getBootstrapData()\n const currentSpacing = spacings.find((item) => item.id === state[FieldNames.SPACING])\n\n // TODO: added 29.05.2024 - teprorary relation for deleted worktype - remove it after 2 months\n // because persisted orders with this worktype can be with 0 price\n if (state[FieldNames.WORK_TYPE] === WorkTypeIds.GRADING_MARKING_DEP) {\n state[FieldNames.WORK_TYPE] = WorkTypeIds.WRITING_FROM_SCRATCH\n }\n // END TODO\n\n switch (action.payload.key) {\n case FieldNames.SUBJECT:\n subjectRelations(state, action.payload.value)\n break\n\n case FieldNames.ACADEMIC_LEVEL:\n academicLevelRelations(state, action.payload.value as AcademicLevelIds)\n break\n\n case FieldNames.PAPER_TYPE:\n workTypePaperTypeMirrorRelations(state, action)\n paperTypeRelations(state, action.payload.value)\n additionalFeaturesAIreport(state)\n break\n\n case FieldNames.WORK_TYPE:\n workTypePaperTypeMirrorRelations(state, action)\n workTypeRelations(state, action.payload.value as WorkTypeIds)\n additionalFeaturesAIreport(state)\n break\n\n case FieldNames.DEADLINE:\n deadlineRelations(state, action.payload.value as OrderValues[FieldNames.DEADLINE])\n break\n\n case FieldNames.SPACING:\n spacingRelations(state, currentSpacing)\n additionalFeaturesAIreport(state)\n break\n\n case FieldNames.PAGES_WORDS_SWITCHER:\n pagesWordsSwitcherRelations(state, action.payload.value)\n additionalFeaturesAIreport(state)\n break\n\n case FieldNames.QUANTITY_KEY:\n quantityKeyRelations(state, action.payload.value)\n additionalFeaturesAIreport(state)\n break\n\n case FieldNames.QUANTITY:\n state[FieldNames.WORDS] = Math.ceil(action.payload.value as OrderValues[FieldNames.QUANTITY] * currentSpacing.wordsCount)\n additionalFeaturesAIreport(state)\n break\n\n case FieldNames.WORDS:\n state[FieldNames.QUANTITY] = Math.ceil(action.payload.value as OrderValues[FieldNames.WORDS] / currentSpacing.wordsCount)\n additionalFeaturesAIreport(state)\n break\n\n default:\n break\n }\n\n // !!! this order is important - maxValueRelations should be the last\n AFFECTING_TO_MAX_VALUE_FIELDS.includes(action.payload.key) && maxValueRelations(state, currentSpacing)\n}\n", "import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport localforage from 'localforage'\n\nimport type { PreferredOrderData } from './types/preferred-order'\nimport type { OrderState, OrderValues, Validation } from './types'\n\nimport { Entity } from '@qwerty.software/ui-order-form/src/contexts/constants'\n\nimport { fieldsRelations } from './fields-relations'\n\nimport {\n NAME,\n INITIAL_STATE,\n COMMON_PERSIST_BLACKLIST,\n\n MAX_QUANTITY_KEY,\n MAX_SLIDES_KEY,\n ORDER_SLICE_NAME,\n} from './constants'\nimport { FieldNames } from '@qwerty.software/ui-order-form/src/store/constants'\n\nexport const orderSlice = createSlice({\n name: ORDER_SLICE_NAME,\n initialState: INITIAL_STATE,\n reducers: {\n init(state, action: PayloadAction) {\n return {...state, ...action.payload}\n },\n change(state, action: PayloadAction<{ key: K, value: OrderValues[K], entity?: Entity }>) {\n state[action.payload.key] = action.payload.value\n\n // !!! this order is important - fieldsRelations should be after change value\n fieldsRelations(state, action)\n state.orderChanged = true\n state.lastChangedAt = Date.now()\n\n if (!state.showReminder && action.payload.entity && action.payload.entity === Entity.MAIN) {\n state.showReminder = true\n }\n },\n validation(state, action: PayloadAction<{ key: TKey, validation: Validation }>) {\n if (action.payload.validation.valid) {\n delete state.validation[action.payload.key]\n return\n }\n\n state.validation[action.payload.key] = action.payload.validation\n },\n reset(state, action: PayloadAction<{ key?: K | K[] }>) {\n if (!action.payload?.key) {\n return { ...INITIAL_STATE }\n } else {\n const keys = Array.isArray(action.payload.key) ? action.payload.key : [action.payload.key]\n\n keys.forEach(key => {\n state[key] = INITIAL_STATE[key]\n })\n }\n\n state.orderChanged = false\n state.showReminder = false\n },\n\n // preferred order\n loadingPreferredOrderStart(state) {\n state.preferredOrder.isLoading = true\n },\n fetchPreferredOrderError(state, action: PayloadAction) {\n state.preferredOrder.isLoading = false\n state.preferredOrder.sended = false\n state.preferredOrder.errors = action.payload\n state.preferredOrder.data = undefined\n },\n checkPreferredOrder(state, action: PayloadAction) {\n state.preferredOrder.isLoading = false\n state.preferredOrder.data = action.payload\n state.preferredOrder.errors = undefined\n },\n cancelPreferredOrderData(state, action: PayloadAction<{shouldClearOnCancel?: boolean}>) {\n state.preferredOrder.data = undefined\n state.preferredOrder.errors = undefined\n state.preferredOrder.sended = false\n\n if (action.payload.shouldClearOnCancel) {\n state.preferredOrder.value = ''\n }\n },\n\n // place order pending\n placeOrderLoadingStart(state) {\n state.placeOrderPending = true\n },\n placeOrderLoadingStop(state) {\n state.placeOrderPending = false\n },\n },\n})\n\nexport const HYDRATED = (state: State): boolean => Boolean(state?.[orderSlice.name]?._persist?.rehydrated)\n\ninterface State {\n //@ts-ignore\n [orderSlice.name]: OrderState\n}\n\nexport const value = (name: Name) => (state: State): OrderValues[Name] => state[orderSlice.name][name]\nexport const validation = (name: Name) => (state: State): Validation => state[orderSlice.name].validation[name] ?? { valid: true }\nexport const ORDER = (state: State): OrderValues => state[orderSlice.name]\n\nexport const PLACE_ORDER_PENDING = (state: State) => state[orderSlice.name].placeOrderPending\nexport const SHOW_REMINDER = (state: State) => state[orderSlice.name].showReminder\nexport const ORDER_CHANGED = (state: State) => state[orderSlice.name].orderChanged\n\nexport const ORDER_LAST_CHANGED_AT = (state: State) => state[orderSlice.name].lastChangedAt\n\nexport const MAX_QUANTITY = (state: State) => state[orderSlice.name][MAX_QUANTITY_KEY]\nexport const MAX_SLIDES = (state: State) => state[orderSlice.name][MAX_SLIDES_KEY]\n\nexport * from './constants'\n\nexport const COMMON_PERSIST_CONFIG = {\n keyPrefix: '',\n key: orderSlice.name,\n // TODO: Disable serialization.\n // serialize: false,\n storage: localforage.createInstance({\n name: '[MSH] Storage',\n storeName: NAME,\n driver: [\n // localforage.INDEXEDDB,\n localforage.LOCALSTORAGE,\n ]\n }),\n blacklist: COMMON_PERSIST_BLACKLIST,\n}\n\nexport function GET_STATE(state: any) {\n return state[orderSlice.name] as OrderState\n}", "import { DEFAULT_WORDS_PER_PAGE, FieldNames, QuantityKeys, SpacingIds, WorkTypeIds } from \"@qwerty.software/ui-order-form/src/store/constants\"\nimport type { Values } from \"global-entities/price-data/hooks/useCalculator\"\n\nimport type { DiscountMeta } from 'global-entities/discount/definitions'\nimport { isDiscountData } from 'global-entities/discount/selectors'\n\nimport { OrderState } from '../order/types'\nimport { NAME as CURRENCY_FIELD_NAME, ICurrency } from \"@qwerty.software/currency-switcher/src/store/constants\"\n\nexport const ContextPDAdapter = (order: OrderState, currency: ICurrency, discount: Partial) => ({\n pages: 0,\n problems: 0,\n questions: 0,\n [FieldNames.WORDS]: 0,\n [`${order[FieldNames.QUANTITY_KEY]}`]: order.quantityKey === QuantityKeys.WORDS ? order.words : order.quantity,\n\n [FieldNames.SLIDES]: order.slides,\n [FieldNames.SPEAKER_NOTES]: order.speakerNotes,\n [FieldNames.DEADLINE]: order.deadline,\n [FieldNames.SPACING]: order.spacing,\n [FieldNames.WORK_TYPE]: order.workType,\n [FieldNames.PAPER_TYPE]: order.paperType,\n [FieldNames.ACADEMIC_LEVEL]: order.academicLevel,\n [FieldNames.WRITER_CATEGORY]: { chosenID: order.writerCategory },\n [FieldNames.ADDITIONAL_FEATURES]: order.additionalFeatures,\n [FieldNames.SOURCES]: order.sources,\n softcopies: order.softCopies,\n [FieldNames.SUBJECT]: order.subject,\n [CURRENCY_FIELD_NAME]: currency?.name,\n [FieldNames.SOFTWARE]: order.software.checked\n ? order.software.value\n : undefined,\n preferredOrderData: order.preferredOrder.sended && order.preferredOrder.data?.preferredWriterStatus\n ? { writerCategory: order.preferredOrder.data.preferredWriterStatus }\n : undefined,\n\n discountData: discount.applied && isDiscountData(discount?.data)\n ? discount.data.discount\n : undefined,\n\n ...((order[FieldNames.QUANTITY_KEY] === QuantityKeys.WORDS) ? {\n pages: Math.ceil(order.words / DEFAULT_WORDS_PER_PAGE),\n spacing: SpacingIds.DOUBLE,\n } : {}),\n\n\n ...((order[FieldNames.WORK_TYPE] === WorkTypeIds.MULTIPLY_CHOISE_QUESTIONS) ? {\n [FieldNames.SOFTWARE]: undefined,\n } : {}),\n\n ...((order[FieldNames.QUANTITY_KEY] === QuantityKeys.PROBLEMS || order[FieldNames.QUANTITY_KEY] === QuantityKeys.QUESTIONS) ? {\n spacing: SpacingIds.DOUBLE,\n slides: 0,\n speakerNotes: false,\n } : {}),\n\n ...((order[FieldNames.QUANTITY_KEY] === QuantityKeys.QUESTIONS) ? {\n sources: 0,\n softcopies: false,\n } : {}),\n\n} as Values)\n", "import { createSelector } from '@reduxjs/toolkit'\n\nimport calculator from '@qwerty.software/calc-of-price/adapters/microservices'\n\nimport { getBootstrapData } from 'global-entities/bootstrap-data/utils/get'\n\nimport { ORDER } from '../order'\nimport { ContextPDAdapter } from './ContextPDAdapter'\n\nimport { CURRENCY } from '@qwerty.software/currency-switcher/src/store/slice'\nimport { DEFAULT_CURRENCY } from '@qwerty.software/currency-switcher/src/store/constants'\nimport { DiscountMeta } from 'global-entities/discount/definitions'\n\ninterface Options {\n discountSelector: (state: any) => DiscountMeta\n}\n\nexport const createPriceDataSelector = (options: Options) => {\n const selector = createSelector(\n [ORDER, CURRENCY, options.discountSelector],\n (order, currency, discount) => {\n const adaptedOrderValues = ContextPDAdapter(order, currency, discount)\n\n const data = {\n fieldValues: adaptedOrderValues,\n bd: getBootstrapData().priceCalculatorAdapted,\n currency: currency.symbol,\n }\n\n const priceData = calculator({ ...data }, {\n currency: currency.name,\n rate: currency.rate\n })\n const priceDataBase = currency.name !== DEFAULT_CURRENCY.name\n ? calculator({ ...data }, {\n currency: DEFAULT_CURRENCY.name,\n rate: DEFAULT_CURRENCY.rate\n })\n : priceData\n\n return {\n priceData,\n values: adaptedOrderValues,\n priceDataBase,\n }\n },\n )\n\n return selector\n}\n\nexport const createPriceDataValuesSelector = (options: Options) => {\n const PRICE_DATA = createPriceDataSelector(options)\n\n return createSelector([PRICE_DATA], ({ values }) => values)\n}\n\nexport const createCurrentPriceDataSelector = (options: Options) => {\n const PRICE_DATA = createPriceDataSelector(options)\n\n return createSelector([PRICE_DATA], ({ priceData }) => priceData)\n}\n\nexport const createBasePriceDataSelector = (options: Options) => {\n const PRICE_DATA = createPriceDataSelector(options)\n\n return createSelector([PRICE_DATA], ({ priceDataBase }) => priceDataBase)\n}\n\nfunction GET_STATE(state: any) {\n return state as any\n}", "import { PreloadState } from 'global-entities/discount/definitions'\n\nimport type { DiscountData } from '../discount.d'\n\nfunction adaptee(discount): AsyncField {\n return {\n data: discount?.data,\n errors: discount?.preload?.error ? [discount.preload.error] : [],\n isLoading: ([\n PreloadState.PENDING,\n PreloadState.PROGRESS,\n ] as PreloadState[]).includes(discount?.preload?.state),\n sended: Date.now(),\n value: discount?.code\n }\n}\n\nexport default adaptee", "import { createSelector } from '@reduxjs/toolkit'\n\nimport _get from 'lodash/get'\n\nimport { CURRENCY } from '@qwerty.software/currency-switcher/src/store/slice'\nimport type { ICurrency } from '@qwerty.software/currency-switcher/src/store/constants'\nimport * as orderForm from '@qwerty.software/ui-order-form/src/store/slices/price-data/selectors'\n\nimport asyncFieldAdapter from './adapters/async-field'\n\nimport {\n DiscountVariant,\n\n DISCOUNT_SLICE,\n\n NOOP_DISCOUNT,\n\n Namespace,\n DiscountState,\n\n PreloadState,\n} from './definitions'\n\nimport type { DiscountData, SuccessData } from './discount.d'\n\nexport const isDiscountData = (data: DiscountData | null): data is SuccessData => Boolean(data?.discount)\n\nexport const GET_STATE = (state: any) => state[DISCOUNT_SLICE] as DiscountState\n\n/**\n * class - for reduce code: namespace is used in all selectors\n */\nclass Discount {\n constructor(\n protected readonly namespace: Namespace,\n ) { }\n\n public NOOP_DISCOUNT = NOOP_DISCOUNT\n public DiscountVariant = DiscountVariant\n public PreloadState = PreloadState\n public adapters = {\n asyncField: asyncFieldAdapter,\n }\n\n public DISCOUNT = createSelector([GET_STATE], state => state?.discount?.[this.namespace] || NOOP_DISCOUNT)\n\n public PRICE_DATA = orderForm.createPriceDataSelector({\n discountSelector: this.DISCOUNT,\n })\n\n public PRICE_DATA_VALUES = orderForm.createPriceDataValuesSelector({\n discountSelector: this.DISCOUNT,\n })\n\n public CURRENT_PRICE_DATA = orderForm.createCurrentPriceDataSelector({\n discountSelector: this.DISCOUNT,\n })\n\n public BASE_PRICE_DATA = orderForm.createBasePriceDataSelector({\n discountSelector: this.DISCOUNT,\n })\n\n public IS_APPLIED = createSelector([this.DISCOUNT], discount => discount.applied)\n public TYPE = createSelector([this.DISCOUNT], discount => isDiscountData(discount.data) ? discount.data.discount.type : null)\n public LIMIT = createSelector([this.TYPE], discountType => discountType?.limit ?? null)\n public PERCENT = createSelector([this.TYPE], discountType => discountType?.discount_rate ?? null)\n public SUM = createSelector([this.TYPE], discountType => discountType?.discount_sum ?? null)\n public VARIANT = createSelector([this.PERCENT, this.SUM, this.LIMIT], this.getVariant)\n public VARIANT_TITLE = createSelector([this.VARIANT, this.LIMIT, this.PERCENT, this.CURRENT_PRICE_DATA, CURRENCY], this.getVariantTitle)\n public ID = createSelector([this.DISCOUNT], discount => isDiscountData(discount.data) ? discount.data.discount?.id || null : null)\n public TITLE = createSelector([this.TYPE], discountType => discountType?.title ?? null)\n public CODE = createSelector([this.DISCOUNT], discount => discount.code ?? null)\n public PRELOAD_STATE = createSelector([this.DISCOUNT], discount => discount.preload?.state)\n\n public PENDING = createSelector([this.PRELOAD_STATE], state => state === PreloadState.PENDING)\n public PROGRESS = createSelector([this.PRELOAD_STATE], state => state === PreloadState.PROGRESS)\n public FULFILLED = createSelector([this.PRELOAD_STATE], state => state === PreloadState.FULFILLED)\n public REJECTED = createSelector([this.PRELOAD_STATE], state => state === PreloadState.REJECTED)\n\n protected getVariant(percent: number, sum: number, limit: number) {\n if ((limit || 0) > 0) {\n return DiscountVariant.LIMIT\n }\n\n if ((percent || 0) > 0) {\n return DiscountVariant.PERCENT\n }\n\n if ((sum || 0) > 0) {\n return DiscountVariant.SUM\n }\n\n return null\n }\n\n protected getVariantTitle(variant: DiscountVariant, limit: number, percent: number, { discountAmount }: { discountAmount: number }, currency: ICurrency) {\n if (!variant) {\n return null\n }\n\n switch (variant) {\n case DiscountVariant.LIMIT:\n return `${limit}%`\n\n case DiscountVariant.PERCENT:\n return `${percent}%`\n\n case DiscountVariant.SUM:\n default:\n return `${currency?.symbol}${discountAmount}`\n }\n }\n}\n\nexport default function DiscountFacade(namespace: string) {\n return new Discount(namespace)\n}", "import { ContextPDAdapter } from './ContextPDAdapter'\nimport { IPriceDataState } from './types'\nimport { INITIAL_STATE as INITIAL_ORDER_STATE } from '../order/constants'\nimport { DEFAULT_CURRENCY } from '@qwerty.software/currency-switcher/src/store/constants'\nimport { NOOP_DISCOUNT } from 'global-entities/discount/definitions'\n\nexport const NAME = 'order.price-data' as const\nexport const SLICE_NAME = `slice://${NAME}/` as const\n\nexport const INITIAL_PRICE_DATA = {\n discountAmount: 0,\n priceAdditionals: {\n softcopies: 0,\n software: 0,\n speakerNotes: 0,\n writerCategory: {\n additional: 0,\n basic: 0,\n total: 0,\n },\n additionalFeatures: {\n 4: 0,\n 5: 0,\n 8: 0,\n 9: 0,\n 10: 0,\n 12: 0,\n 13: 0,\n 14: 0,\n total: 0\n }\n },\n priceBasic: 0,\n priceBasicWithoutDiscount: 0,\n priceFullWithoutDiscount: 0,\n priceForCalculatorItems: 0,\n priceForCock: 0,\n priceForUnits: {\n pages: 0,\n problems: 0,\n questions: 0,\n slides: 0,\n software: 0,\n },\n priceFull: 0,\n pricePerUnit: {\n default: 0,\n pages: 0,\n problems: 0,\n questions: 0,\n slides: 0,\n software: 0,\n },\n technicalSubjectPricePB: 0,\n}\n\nexport const INITIAL_STATE: IPriceDataState = {\n priceData: INITIAL_PRICE_DATA,\n priceDataBase: INITIAL_PRICE_DATA,\n\n values: ContextPDAdapter(INITIAL_ORDER_STATE, DEFAULT_CURRENCY, NOOP_DISCOUNT),\n}\n", "import { createSlice, createSelector, PayloadAction } from '@reduxjs/toolkit'\n\nimport {\n SLICE_NAME,\n INITIAL_STATE,\n} from './constants'\nimport type { Values } from 'global-entities/price-data/hooks/useCalculator'\nimport { IPriceDataState, IPriceData } from './types'\n\nconst slice = createSlice({\n name: SLICE_NAME,\n initialState: INITIAL_STATE,\n reducers: {\n change(state: IPriceDataState, action: PayloadAction<{\n priceData: IPriceData,\n priceDataBase: IPriceData,\n adaptedOrderValues: Values,\n }>) {\n state.priceData = action.payload.priceData\n state.priceDataBase = action.payload.priceDataBase\n state.values = action.payload.adaptedOrderValues\n },\n },\n})\n\nexport const priceDataSlice = slice\n\nexport const PRICE_DATA_USD = createSelector(GET_STATE, state => state.priceDataBase)\nexport const PRICE_DATA = createSelector(GET_STATE, state => state.priceData)\nexport const PD_VALUES = createSelector(GET_STATE, state => state.values)\n\nfunction GET_STATE(state: {\n [slice.name]: IPriceDataState\n}) {\n return state[slice.name] as IPriceDataState\n}\n", "import _replace from 'lodash/replace'\nimport _toNumber from 'lodash/toNumber'\nimport { ICurrency } from '../store/constants'\n\nexport interface IUseReplacePriceViaCurrency {\n currency: ICurrency\n textWithPrice: string\n}\n\nexport const replacePriceViaCurrency = ({\n currency,\n textWithPrice,\n}) => {\n if (currency?.name === 'USD') {\n return textWithPrice\n }\n\n const priceValuesFromCaption = textWithPrice.includes('$') ? textWithPrice.match(/\\$\\d+(\\.\\d+)?/g) : null\n\n if (priceValuesFromCaption && priceValuesFromCaption.length > 0) {\n let modifiedText = textWithPrice\n priceValuesFromCaption.forEach(priceValue => {\n const priceValueFromCaption = _toNumber(priceValue.replace(/[^\\d\\.]*/g, ''))\n modifiedText = _replace(modifiedText, priceValue, `${currency.symbol}${(priceValueFromCaption * currency.rate).toFixed(2)}`)\n })\n\n return modifiedText\n }\n\n return textWithPrice\n}\n", "import axios from 'axios'\n\nimport type { SagaIterator } from 'redux-saga'\nimport { call, put, take, race, select, takeLatest } from 'redux-saga/effects'\n\nimport StoreManager from '@qwerty.software/store-manager'\n\nimport { reqHPromise } from 'utils/http-client/request-handler'\n\nimport _size from 'lodash/size'\nimport _isEmpty from 'lodash/isEmpty'\n\nimport { slice } from '../slice'\n\nimport Discount from '../selectors'\n\nimport {\n APPLY_DISCOUNT_SAGA,\n ApplyDiscountAction,\n\n appliedDiscount,\n\n CANCEL_APPLY_DISCOUNT,\n CancelApplyDiscountAction,\n\n DiscountResponse,\n} from '../definitions'\nimport { PreloadState } from 'global-entities/discount/definitions'\nimport notify from 'utils/notify'\nimport { PRICE_DATA_USD } from '@qwerty.software/ui-order-form/src/store/slices/price-data'\nimport { replacePriceViaCurrency } from '@qwerty.software/currency-switcher/src/utils/replace-price-via-currency'\n\nimport { CURRENCY } from '@qwerty.software/currency-switcher/src/store/slice'\n\ntype UpdateAction = typeof slice.actions.updateDiscount\ntype UpdatePayload = Parameters[0]\n\ntype Update = (discount: Omit) => ReturnType\n\ntype Pending = () => ReturnType\ntype Fulfilled = () => ReturnType\ntype Rejected = (error: string) => ReturnType\ntype Progress = (progress: number) => ReturnType\n\nexport function* applyDiscount(action: ApplyDiscountAction): SagaIterator {\n const { namespace, disableNotify, useCheckRoute } = action.payload\n\n const discountMeta = yield select(Discount(namespace).DISCOUNT)\n\n const update: Update = (discount) => slice.actions.updateDiscount({ namespace, ...discount })\n\n const pending: Pending = () => update({ discount: { preload: { state: PreloadState.PENDING, progress: 0, error: null } } })\n const progress: Progress = progress => update({ discount: { preload: { state: PreloadState.PROGRESS, progress, error: null } } })\n const fulfilled: Fulfilled = () => update({ discount: { preload: { state: PreloadState.FULFILLED, progress: 100, error: null }, applied: true } })\n const rejected: Rejected = error => update({ discount: { preload: { state: PreloadState.REJECTED, error }, applied: false } })\n\n let errorMessage = 'Something went wrong.'\n try {\n const { token, cancel } = axios.CancelToken.source()\n function* request() {\n let response: DiscountResponse | null = null\n try {\n yield put(pending())\n response = yield call(reqHPromise, {\n method: 'GET',\n url: useCheckRoute ? 'discounts/check' : 'discounts/get-current',\n params: {\n price: 0,\n code: discountMeta.code,\n },\n cancelToken: token,\n onUploadProgress: (progressEvent: ProgressEvent) => {\n const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total)\n\n StoreManager.getInstance().store.dispatch(progress(percentCompleted))\n },\n })\n yield put(fulfilled())\n } catch (error) {\n yield put(rejected(error.message))\n } finally {\n yield put(update({ response }))\n }\n\n return response\n }\n\n const result: {\n response?: DiscountResponse\n cancelation?: CancelApplyDiscountAction\n } = yield race({\n response: call(request),\n cancelation: take(`${CANCEL_APPLY_DISCOUNT}/${namespace}`)\n })\n\n if (result.cancelation) {\n cancel(errorMessage)\n\n return\n }\n\n const { data, errors } = result.response || {}\n\n if (!data || (Array.isArray(data) && data.length === 0)) {\n if ((errors?.length || 0) > 0) {\n throw new ResponseError(errors?.[0] || errorMessage)\n }\n\n throw new EmptyResponseError()\n }\n\n const price = yield select(PRICE_DATA_USD)\n const currency = yield select(CURRENCY)\n\n // @ts-ignore\n const priceActivationSum = data.discount?.type?.price_activation\n const modifiedText = replacePriceViaCurrency({ currency, textWithPrice: `Sorry, the code is valid for order over $${priceActivationSum}. Add pages or additional services on $${(priceActivationSum - price.priceFull).toFixed(2)} to activate the code` })\n\n if (data && priceActivationSum) {\n if (price.priceFull < priceActivationSum) {\n yield put(rejected(modifiedText))\n return\n }\n }\n\n yield put(update({\n discount: { applied: true },\n }))\n yield put(appliedDiscount(namespace))\n\n !disableNotify && notify.success('Your discount is applied.')\n } catch (error) {\n if (error instanceof ResponseError) {\n errorMessage = error.message\n }\n\n yield put(rejected(errorMessage))\n }\n}\n\nexport function* applyDiscontSagaWatcher() {\n yield takeLatest(APPLY_DISCOUNT_SAGA, applyDiscount)\n}\n\nexport class ResponseError extends Error { }\nexport class EmptyResponseError extends Error { }\n", "import AbstractStoreManager from './core'\nimport sagasManager from './sagas'\n\nclass StoreManager extends AbstractStoreManager {\n static async init(cb?: () => void): Promise {\n if (window.storeManager?.instance) {\n console.warn('Store already initialized')\n\n return\n }\n\n const instance = new StoreManager({})\n\n for await (const { } of instance.init(finish));\n\n function finish() {\n window.storeManager = { instance }\n\n cb?.()\n }\n }\n\n static getInstance(): StoreManager {\n if (!window.storeManager?.instance) {\n throw new Error('StoreManager not initialized')\n }\n\n return window.storeManager.instance\n }\n\n private async *init(cb?: () => void) {\n yield* this.initSyncSlices()\n yield* this.initSyncReducers()\n yield* this.initSyncSagas()\n\n yield* this.initAsyncSlices()\n yield* this.initAsyncReducers()\n yield* this.initAsyncSagas()\n\n cb?.()\n }\n\n private *initSyncSlices() {\n const slices = [\n require('global-entities/ref-to-interact-slice/store').slice,\n ]\n\n // @ts-ignore\n if (!window?.dev__disableDicountFilesSyncSLises) {\n const filesUploaderSlice = require('global-entities/files-uploader/slice').slice\n const filesUploaderPersistConfig = require('global-entities/files-uploader/slice').FILES_UPLOADER_PERSIST_CONFIG\n const discountSlice = require('global-entities/discount/slice').slice\n const discountPersistConfig = require('global-entities/discount/slice').DISCOUNT_PERSIST_CONFIG\n\n this.addSlice(filesUploaderSlice, filesUploaderPersistConfig)\n yield { slice: filesUploaderSlice }\n\n this.addSlice(discountSlice, discountPersistConfig)\n yield { slice: discountSlice }\n }\n\n for (const slice of slices) {\n this.addSlice(slice)\n\n yield { slice }\n }\n }\n\n private async *initAsyncSlices() {\n const slices = []\n\n for (const slice of slices) {\n await tick()\n\n this.addSlice(slice)\n\n yield { asyncSlice: slice }\n }\n }\n\n private *initSyncReducers() {\n const reducers = {\n 'userData': require('global-entities/user-data/reducer').default,\n ...require('global-entities/price-data').priceDataReducers,\n ...require('global-entities/geo-tag/store/reducer').geoTagReducers,\n ...require('@qwerty.software/live-chat/src/store').liveChatReducers,\n }\n\n for (const name in reducers) {\n this.addReducer(name, reducers[name])\n\n yield { reducer: reducers[name], name }\n }\n }\n\n private async *initAsyncReducers() {\n const reducers = {}\n\n for (const name in reducers) {\n await tick()\n\n this.addReducer(name, reducers[name])\n\n yield { asyncReducer: reducers[name], name }\n }\n }\n\n private *initSyncSagas() {\n const sagas = [\n require('utils/action-tracker/interior-track/store/sagas/track').default,\n ]\n\n for (const saga of sagas) {\n sagasManager.run(saga)\n\n yield { saga }\n }\n }\n\n private async *initAsyncSagas() {\n const liveChat = require('@qwerty.software/live-chat/src/store')\n const uploadFiles = require('global-entities/files-uploader/sagas/upload-files')\n const applyDiscount = require('global-entities/discount/sagas/apply-discount')\n\n const sagas = [\n liveChat.livechatOpenWatcher,\n liveChat.livechatInteractionWithUserWatcher,\n uploadFiles.uploadFilesSagaWatcher,\n applyDiscount.applyDiscontSagaWatcher,\n ]\n\n for (const saga of sagas) {\n await tick()\n\n sagasManager.run(saga)\n\n yield { asyncSaga: saga }\n }\n }\n}\n\nexport type StoreManagerClass = typeof StoreManager\nexport type StoreManagerInstance = StoreManager\n\nwindow.StoreManager = StoreManager\n\nexport default StoreManager\n\nfunction tick() {\n return new Promise((resolve) => setTimeout(resolve, 0))\n}"], "mappings": "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", "names": ["require_env", "__commonJSMin", "exports", "import_pako", "unzip", "unzip_default", "init_unzip", "__esmMin", "data", "compressedData", "unziped", "Hr", "pako", "x", "unzip_pusher_data_default", "init_unzip_pusher_data", "store", "next", "action", "modifyedAction", "StoreEventTarget", "store_event_target_default", "init_store_event_target", "type", "listener", "args", "index", "event", "listeners", "singleton", "key", "factory", "options", "handleCreate", "init_singleton", "storeEvents", "eventsMiddlware", "events_default", "init_events", "import_redux_saga", "sagaMiddleware", "sagas_default", "init_sagas", "jr", "createSagaMiddleware", "isPlainObject", "is_plain_object_default", "init_is_plain_object", "value", "hydrateCheckRequest", "check_request_default", "init_check_request", "register", "payload", "tests", "testName", "RegisteredAbTests", "init_register", "hydrators", "hydrators_default", "init_hydrators", "import_uuid", "NAME", "AB_TESTS_LIST", "INITIAL_AB_TESTS", "INITIAL_STATE", "init_constants", "acc", "oo", "uuid", "hydrate", "hydrator", "testsMap", "RTK", "slice", "abTestsSlice", "GET_STATE", "AB_TESTS", "CHECK_REQUEST_READY", "init_slice", "Le", "state", "group", "getContainer", "existsRoot", "CONTAINER_ATTR", "container", "setTest", "test", "existsNode", "ATTRS_DOMAIN", "node", "import_toolkit", "abTestsHydarateListener", "init_hydrate_listener", "co", "_", "getState", "abTests", "init_store", "SINGLETON_ID", "discountListener", "init_side_effects", "Eo", "import_env", "import_react", "import_redux_persist", "_StoreManager", "StoreManager", "core_default", "init_core", "ge", "reducers", "de", "getDefaultMiddleware", "et", "reducer", "persistConfig", "keys", "slices", "_slice", "__publicField", "Ze", "So", "builder", "response", "store_exports", "__export", "COOKIE_POLICY_NODE", "setCookiePolicyNode", "initialState", "Ao", "buildValidator", "name", "fn", "Error", "build_validator_default", "init_build_validator", "import_notistack", "DEFAULT_OPTIONS", "notify", "notify_default", "init_notify", "messageText", "V", "error", "fileext", "fileName", "getAllowedExtensions", "NotAllowedExtensionError", "materialExtension", "material_extension_default", "init_material_extension", "file", "fileMeta", "ext", "allowedExtensions", "KEY", "init_init", "getConfigs", "init_get", "default_default", "init_default", "get_from_configs_default", "init_get_from_configs", "configs", "PROJECT_ID", "PROJECT_DOMAIN", "IS_ALIAS_DOMAIN", "ORDER_DATA_DEFAULTS", "SHOULD_USE_SPECIFIC_API", "SPECIFIC_API_URL", "DASHBOARD_SUBDOMAIN", "LIVECHAT_OPTIONS", "init_configs", "SIGNUP", "init_auth", "PAGES", "WORDS", "SWITCHER_BUTTONS", "PAGES_INDEX", "WORDS_INDEX", "init_pagesWordsSwitcher", "button", "orderDataDefaults", "fields_configs_default", "init_fields_configs", "MaxFileSizeError", "material_size_limit_default", "init_material_size_limit", "validation", "baseGetValidatorMapName", "validators_default", "init_validators", "namespace", "getValidatorMapName", "SAGAS_SCHEMA", "FILES_UPLOADER_SLICE", "UPLOAD_FILES_SAGA", "CANCEL_UPLOAD_FILES", "PreloadState", "init_definitions", "init_selectors", "validator", "validationResult", "write", "CompletedStates", "whitelist", "aborted_default", "init_aborted", "inboundState", "outboundState", "accumulator", "invalid", "uploaded", "Qo", "slice_exports", "FILES_UPLOADER_PERSIST_CONFIG", "import_storage", "filesUploaderSlice", "jo", "files", "hash", "fileIndex", "zo", "localStorage", "appliedDiscount", "ar", "APPLIED_DISCOUNT", "DISCOUNT_SLICE", "CHECK_SEARCH_PARAM", "APPLY_DISCOUNT_KEY", "APPLY_DISCOUNT_SAGA", "CANCEL_APPLY_DISCOUNT", "DiscountVariant", "NOOP_DISCOUNT", "applyDiscountAction", "whitelist_default", "init_whitelist", "discount", "ns", "ra", "DISCOUNT_PERSIST_CONFIG", "discountSlice", "sa", "code", "rawResponse", "normalizedData", "na", "convert_string_to_boolean_default", "init_convert_string_to_boolean", "string", "boolean", "isEnabled", "get", "set", "remove", "getRelatedKeys", "local_default", "init_local", "storageItemKey", "storageItemValue", "expiresAt", "share", "session_default", "init_session", "import_isPlainObject", "version", "addVersion", "changeDependsOnENV", "removeOldVersions", "storage", "storage_default", "init_storage", "pa", "domain", "storageType", "isOuterKey", "shouldCompletelyRemove", "rest", "relatedKeys", "keyVersion", "ignoreExpitesAt", "storageItem", "parsedStorageItem", "la", "timestamp", "parsedStorageItemValue", "expires", "date", "UNIVERSAL_UPDATE_ACROSS_STORES", "init_universal_constants", "USER_CHECK", "USER_UPDATE", "USER_AUTHORIZE", "USER_UNAUTHORIZE", "REMOTE_SUCCESS", "ORDER_PAYMENT_SUCCESS", "PERSISTOR_PREFIX", "ORDER_DATA_PERSISTOR_NAME", "init_persistor", "ORDER_DATA_PERSISTOR_KEY", "USER_DATA_KEY", "TEMP_QS_KEY", "REFERRER", "reducer_exports", "reducer_default", "import_isEmpty", "initialStateFromBrowserStorage", "initialStateFromReduxStorage", "defaultState", "init_reducer", "Na", "isEmpty", "CALCULATE_PRICE__ATTEMPT", "CALCULATE_PRICE__SUCCESS", "price_data_exports", "priceDataReducers", "init_price_data", "get_params_default", "init_get_params", "queryParamsString", "queryParamsArray", "queryParamsObject", "param", "paramArray", "paramKey", "paramValue", "manipulate_param_without_refresh_default", "init_manipulate_param_without_refresh", "method", "staticQueryParamsString", "divider", "i", "updatedQueryParamsString", "build_default", "init_build", "values", "make_search_depends_on_env_default", "init_make_search_depends_on_env", "init_query_string", "additionalQueryParams", "currentQueryParams", "query_string_default", "mr", "Ya", "E2E_KEY", "init_query_params", "E2E_ENABLE", "searchLocalCountryCode", "searchLocalContryCode_default", "init_searchLocalContryCode", "countryCode", "searchLocalIP", "searchLocalIP_default", "init_searchLocalIP", "IP", "searchLocalGeoTag", "searchLocalGeoTag_default", "init_searchLocalGeoTag", "SET_CONTRY_CODE", "SET_IP", "init_types", "geoTagReducers", "save", "import_localforage", "instance", "localforage_default", "init_localforage", "Sr", "localforage", "extractCustomVaraibles", "extractCustomVaraibles_default", "init_extractCustomVaraibles", "params", "LC_EXPERIMENT_CUSTOM_VARIABLES", "initialState_default", "init_initialState", "LOADING", "SET_CUSTOM_VARIABLES", "UPDATE_CUSTOM_VARIABLES", "REF_SET", "OPEN", "INTERACTION", "INTERACTION_SAGA", "import_monolite", "ie", "msName", "LOADED", "REF", "LIVECHAT_OPEN", "open", "J", "ref", "saga_default", "import_effects", "init_saga", "interactionWithUser", "It", "interactionWithUser_default", "init_interactionWithUser", "liveChatReducers", "Ds", "import_axios", "import_cookie_storage", "axiosTool", "init_axios", "cb", "reqSource", "_e", "axios", "reqInstance", "createAxiosResponseInterceptor", "interceptor", "ys", "err", "Cs", "trigger", "on", "off", "custom_event_default", "init_custom_event", "detail", "handler", "TOGGLE_SPINNER_VISIBILITY", "init_custom_events", "SHOW", "HIDE", "init_visibility_actions", "toggle", "show", "hide", "global_spinner_default", "init_global_spinner", "import_form_data", "import_isBoolean", "reqH", "reqHPromise", "init_request_handler", "cookieStorage", "Gs", "requiredDataParams", "advancedDataParams", "queryJwt", "requestOptions", "specificApiUrl", "Y", "aliasedDomain", "encodedKey", "item", "Or", "encodedObject", "innerKey", "formData", "vs", "FormData", "jwt", "isCookieSessionFlow", "jwtCookieStorage", "requestToolOptions", "Vs", "isBoolean", "resolve", "reject", "REDESIGN_REFERRER", "REDESIGN_REFERRER_FLAG", "REDESIGN_REFERRER_MARK", "getRedesignReferrer", "init_redesign_referrer", "redesignReferrer", "Hs", "getTempQuery", "init_temp_query", "AB_TEST_REFERRER", "getABTestReferrer", "init_a_b_test_referrer", "getFromURL", "init_from_url", "query", "abTestReferrer", "issetVisitorIsNewFlag", "getVisitor", "getIsNewVisitor", "setIsNewVisitor", "init_visitor", "isNew", "import_size", "import_js", "import_pluralize", "request", "request_default", "init_request", "is_new", "Ir", "_size", "Zs", "pluralize", "Js", "Bugsnag", "INTERIOR_TRACK", "track_exports", "track_default", "track", "Ct", "errorMessage", "init_track", "import_blueimp_load_image", "reorientImagesMiddleware", "init_reorient_image", "gt", "loadImage", "blob", "import_md5", "createUploadFile", "single_file_default", "ResponseError", "EmptyResponseError", "init_single_file", "init_store_manager", "getValidator", "R", "pn", "md5", "update", "pending", "progress", "fulfilled", "rejected", "token", "cancel", "ln", "result", "progressEvent", "percentCompleted", "store_manager_default", "removeFileAction", "errors", "upload_files_exports", "uploadFilesSagaWatcher", "uploadFilesSaga", "upload", "Pt", "init_upload_files", "DEFAULT_CURRENCY", "currencySlice", "CURRENCY_SLICE_PERSIST_CONFIG", "CURRENCY", "Cr", "getBootstrapData", "sessionNotify", "init_session_notify", "text", "timeOut", "extendedTimeOut", "SAGAS_PREFIX", "DEFAULT_NUMBER_MAX_VALUE", "DEFAULT_WORDS_PER_PAGE", "WorkTypeIds", "PaperTypeIds", "PAGES_SWITCHER_KEY", "WORDS_SWITCHER_KEY", "MAX_QUANTITY_KEY", "MAX_SLIDES_KEY", "INITIAL_VALUES", "COMMON_PERSIST_BLACKLIST", "ORDER_SLICE_NAME", "MIN_DEADLINE_WRITING_FROM_SCRATCH", "MIN_DEADLINE_BY_WORKTYPE", "subjectFlagToDisableDeadline", "disabledAdditionalFeaturesByMultiplyChoiseQuestions", "disabledAdditionalFeaturesByPaperType", "disabledDeadlinesByWorkType", "disabledDeadlinesByAcademicLevel", "MAX_PROBLEMS_AND_QUESTIONS_CONFIG", "MAX_SLIDES_AND_PAGES_CONFIG", "AFFECTING_TO_MAX_VALUE_FIELDS", "import_difference", "workTypePaperTypeMirrorRelations", "init_work_type_paper_type", "FieldIds", "RelatedFieldIds", "RelatedFieldName", "defaultValue", "xn", "_difference", "workTypeRelations", "init_work_type", "disabledDeadlines", "paperTypeRelations", "init_paper_type", "wn", "deadlineRelations", "init_deadline", "pagesWordsSwitcherRelations", "init_pages_words_switcher", "spacingRelations", "init_spacing", "currentSpacing", "getSpacingValue", "spacings", "spacing", "AI_CHECK_REPORT_DISABLED_TOOLTIP", "checker", "additionalFeaturesAIreport", "init_ai_check_report", "spacingValue", "quantity", "quantityKey", "words", "workType", "disabled", "features", "Wn", "setMaxPagesSlides", "init_pages_slides_spacing_deadline", "slidesMtl", "wordsMtl", "maxSumFromConfig", "setMaxProblemsQuestions", "init_prodlems_questions_deadline", "maxValue", "maxValueRelations", "init_max_value", "academicLevelRelations", "init_academic_level", "subjectRelations", "init_subject", "subjects", "quantityKeyRelations", "init_quantity_key", "fieldsRelations", "init_fields_relations", "orderSlice", "ORDER", "COMMON_PERSIST_CONFIG", "init_order", "ii", "Lr", "ContextPDAdapter", "init_ContextPDAdapter", "order", "currency", "isDiscountData", "import_microservices", "createPriceDataSelector", "createPriceDataValuesSelector", "createCurrentPriceDataSelector", "createBasePriceDataSelector", "$e", "adaptedOrderValues", "priceData", "br", "calculator", "priceDataBase", "PRICE_DATA", "adaptee", "async_field_default", "init_async_field", "DiscountFacade", "Discount", "I", "discountType", "percent", "sum", "limit", "variant", "discountAmount", "SLICE_NAME", "INITIAL_PRICE_DATA", "PRICE_DATA_USD", "PD_VALUES", "De", "import_replace", "import_toNumber", "replacePriceViaCurrency", "init_replace_price_via_currency", "textWithPrice", "priceValuesFromCaption", "modifiedText", "priceValue", "priceValueFromCaption", "yi", "_toNumber", "Di", "_replace", "apply_discount_exports", "applyDiscontSagaWatcher", "applyDiscount", "disableNotify", "useCheckRoute", "discountMeta", "S", "Ni", "price", "priceActivationSum", "init_apply_discount", "store_manager_exports", "module", "__toCommonJS", "tick", "finish", "Oo", "N", "Ro", "ct", "or", "filesUploaderPersistConfig", "lt", "ir", "discountPersistConfig", "ha", "Pa", "wa", "Ma", "ts", "es", "Ar", "Tr", "sagas", "sn", "an", "saga", "liveChat", "uploadFiles", "mn", "En", "Li", "hi"] }