{ "version": 3, "sources": ["../../../../node_modules/react-dom/client.js", "../../../../node_modules/react/cjs/react-jsx-runtime.production.min.js", "../../../../node_modules/react/jsx-runtime.js", "../javascripts/client.tsx", "../../../../node_modules/react-dnd/src/core/DndProvider.tsx", "../../../../node_modules/dnd-core/src/createDragDropManager.ts", "../../../../node_modules/dnd-core/src/classes/DragDropManagerImpl.ts", "../../../../node_modules/dnd-core/src/actions/dragDrop/index.ts", "../../../../node_modules/dnd-core/src/actions/dragDrop/beginDrag.ts", "../../../../node_modules/dnd-core/src/utils/js_utils.ts", "../../../../node_modules/dnd-core/src/actions/dragDrop/local/setClientOffset.ts", "../../../../node_modules/dnd-core/src/actions/dragDrop/types.ts", "../../../../node_modules/dnd-core/src/actions/dragDrop/drop.ts", "../../../../node_modules/dnd-core/src/actions/dragDrop/endDrag.ts", "../../../../node_modules/dnd-core/src/actions/dragDrop/hover.ts", "../../../../node_modules/dnd-core/src/utils/matchesType.ts", "../../../../node_modules/dnd-core/src/actions/dragDrop/publishDragSource.ts", "../../../../node_modules/dnd-core/src/classes/DragDropMonitorImpl.ts", "../../../../node_modules/dnd-core/src/utils/coords.ts", "../../../../node_modules/dnd-core/src/utils/dirtiness.ts", "../../../../node_modules/dnd-core/src/classes/HandlerRegistryImpl.ts", "../../../../node_modules/@react-dnd/asap/src/index.ts", "../../../../node_modules/@react-dnd/asap/src/asap.ts", "../../../../node_modules/@react-dnd/asap/src/AsapQueue.ts", "../../../../node_modules/@react-dnd/asap/src/makeRequestCall.ts", "../../../../node_modules/@react-dnd/asap/src/TaskFactory.ts", "../../../../node_modules/@react-dnd/asap/src/RawTask.ts", "../../../../node_modules/@react-dnd/asap/src/types.ts", "../../../../node_modules/dnd-core/src/actions/registry.ts", "../../../../node_modules/dnd-core/src/contracts.ts", "../../../../node_modules/dnd-core/src/interfaces.ts", "../../../../node_modules/dnd-core/src/utils/getNextUniqueId.ts", "../../../../node_modules/dnd-core/src/reducers/index.ts", "../../../../node_modules/dnd-core/src/reducers/dirtyHandlerIds.ts", "../../../../node_modules/dnd-core/src/utils/equality.ts", "../../../../node_modules/dnd-core/src/reducers/dragOffset.ts", "../../../../node_modules/dnd-core/src/reducers/dragOperation.ts", "../../../../node_modules/dnd-core/src/reducers/refCount.ts", "../../../../node_modules/dnd-core/src/reducers/stateId.ts", "../../../../node_modules/react-dnd-html5-backend/src/index.ts", "../../../../node_modules/react-dnd-html5-backend/src/HTML5BackendImpl.ts", "../../../../node_modules/react-dnd-html5-backend/src/EnterLeaveCounter.ts", "../../../../node_modules/react-dnd-html5-backend/src/utils/js_utils.ts", "../../../../node_modules/react-dnd-html5-backend/src/NativeDragSources/index.ts", "../../../../node_modules/react-dnd-html5-backend/src/NativeDragSources/NativeDragSource.ts", "../../../../node_modules/react-dnd-html5-backend/src/NativeDragSources/nativeTypesConfig.ts", "../../../../node_modules/react-dnd-html5-backend/src/NativeTypes.ts", "../../../../node_modules/react-dnd-html5-backend/src/NativeDragSources/getDataFromDataTransfer.ts", "../../../../node_modules/react-dnd-html5-backend/src/OffsetUtils.ts", "../../../../node_modules/react-dnd-html5-backend/src/BrowserDetector.ts", "../../../../node_modules/react-dnd-html5-backend/src/MonotonicInterpolant.ts", "../../../../node_modules/react-dnd-html5-backend/src/OptionsReader.ts", "../javascripts/shared/store.ts", "../../../../node_modules/redux-thunk/es/index.js", "../javascripts/reducers/index.ts", "../javascripts/reducers/admin.ts", "../javascripts/reducers/analytics.ts", "../javascripts/reducers/assignment.ts", "../javascripts/actions/assignment.ts", "../javascripts/reducers/auth.ts", "../javascripts/actions/auth.ts", "../../../../node_modules/oidc-client-ts/node_modules/jwt-decode/build/esm/index.js", "../../../../node_modules/oidc-client-ts/src/utils/Logger.ts", "../../../../node_modules/oidc-client-ts/src/utils/CryptoUtils.ts", "../../../../node_modules/oidc-client-ts/src/utils/Event.ts", "../../../../node_modules/oidc-client-ts/src/utils/JwtUtils.ts", "../../../../node_modules/oidc-client-ts/src/utils/PopupUtils.ts", "../../../../node_modules/oidc-client-ts/src/utils/Timer.ts", "../../../../node_modules/oidc-client-ts/src/utils/UrlUtils.ts", "../../../../node_modules/oidc-client-ts/src/errors/ErrorResponse.ts", "../../../../node_modules/oidc-client-ts/src/errors/ErrorTimeout.ts", "../../../../node_modules/oidc-client-ts/src/AccessTokenEvents.ts", "../../../../node_modules/oidc-client-ts/src/CheckSessionIFrame.ts", "../../../../node_modules/oidc-client-ts/src/InMemoryWebStorage.ts", "../../../../node_modules/oidc-client-ts/src/JsonService.ts", "../../../../node_modules/oidc-client-ts/src/MetadataService.ts", "../../../../node_modules/oidc-client-ts/src/WebStorageStateStore.ts", "../../../../node_modules/oidc-client-ts/src/OidcClientSettings.ts", "../../../../node_modules/oidc-client-ts/src/UserInfoService.ts", "../../../../node_modules/oidc-client-ts/src/TokenClient.ts", "../../../../node_modules/oidc-client-ts/src/ResponseValidator.ts", "../../../../node_modules/oidc-client-ts/src/State.ts", "../../../../node_modules/oidc-client-ts/src/SigninState.ts", "../../../../node_modules/oidc-client-ts/src/SigninRequest.ts", "../../../../node_modules/oidc-client-ts/src/SigninResponse.ts", "../../../../node_modules/oidc-client-ts/src/SignoutRequest.ts", "../../../../node_modules/oidc-client-ts/src/SignoutResponse.ts", "../../../../node_modules/oidc-client-ts/src/ClaimsService.ts", "../../../../node_modules/oidc-client-ts/src/OidcClient.ts", "../../../../node_modules/oidc-client-ts/src/SessionMonitor.ts", "../../../../node_modules/oidc-client-ts/src/User.ts", "../../../../node_modules/oidc-client-ts/src/navigators/AbstractChildWindow.ts", "../../../../node_modules/oidc-client-ts/src/UserManagerSettings.ts", "../../../../node_modules/oidc-client-ts/src/navigators/IFrameWindow.ts", "../../../../node_modules/oidc-client-ts/src/navigators/IFrameNavigator.ts", "../../../../node_modules/oidc-client-ts/src/navigators/PopupWindow.ts", "../../../../node_modules/oidc-client-ts/src/navigators/PopupNavigator.ts", "../../../../node_modules/oidc-client-ts/src/navigators/RedirectNavigator.ts", "../../../../node_modules/oidc-client-ts/src/UserManagerEvents.ts", "../../../../node_modules/oidc-client-ts/src/SilentRenewService.ts", "../../../../node_modules/oidc-client-ts/src/RefreshState.ts", "../../../../node_modules/oidc-client-ts/src/UserManager.ts", "../../../../node_modules/oidc-client-ts/package.json", "../../../../node_modules/oidc-client-ts/src/Version.ts", "../javascripts/reducers/bankid.ts", "../javascripts/reducers/financial-institution.ts", "../javascripts/reducers/manufacturers.ts", "../javascripts/reducers/notification.ts", "../javascripts/reducers/organisation-branch.ts", "../javascripts/reducers/organisation-custom-image-source.ts", "../javascripts/actions/organisation-custom-image-source.ts", "../javascripts/reducers/organisation-opening-hours.ts", "../javascripts/reducers/organisation-reseller-package.ts", "../javascripts/reducers/organisation-service.ts", "../javascripts/reducers/organisation-user.ts", "../javascripts/reducers/default-contact-options.ts", "../javascripts/reducers/profile.ts", "../javascripts/reducers/reseller-package.ts", "../javascripts/reducers/user.ts", "../javascripts/reducers/vehicles-options.ts", "../javascripts/actions/vehicles-options.ts", "../javascripts/reducers/wxr.ts", "../javascripts/reducers/pdf-template.ts", "../javascripts/actions/pdf-template.ts", "../javascripts/reducers/document.ts", "../javascripts/actions/document.ts", "../javascripts/reducers/declaration.ts", "../javascripts/actions/declaration.ts", "../javascripts/reducers/advertisement-media.ts", "../javascripts/reducers/advertisements-media.ts", "../javascripts/reducers/advertisement-metadata.ts", "../javascripts/reducers/leasing-promos.ts", "../javascripts/reducers/model-series.ts", "../javascripts/reducers/media-upload.ts", "../javascripts/reducers/financial-options.ts", "../javascripts/reducers/insurances.ts", "../javascripts/reducers/vehicle-search.ts", "../javascripts/reducers/event.ts", "../javascripts/actions/event.ts", "../javascripts/reducers/social-boost.ts", "../javascripts/reducers/social-boost-settings.ts", "../javascripts/reducers/leads.ts", "../javascripts/reducers/wip.ts", "../javascripts/actions/wip.ts", "../javascripts/reducers/ad-boost.ts", "../javascripts/reducers/vimeo.ts", "../javascripts/actions/vimeo.ts", "../javascripts/reducers/order.ts", "../javascripts/reducers/order-logs.ts", "../javascripts/reducers/ecom-setting.ts", "../javascripts/reducers/permissions.ts", "../javascripts/actions/permissions.ts", "../javascripts/reducers/credentials.ts", "../javascripts/reducers/facets.ts", "../javascripts/reducers/export-facets.ts", "../javascripts/reducers/branch-facets.ts", "../javascripts/reducers/branch-export-facets.ts", "../javascripts/reducers/export-filter.ts", "../javascripts/reducers/system-clients.ts", "../javascripts/reducers/payment-options.ts", "../javascripts/reducers/brandings.ts", "../javascripts/reducers/custom-video-source.ts", "../javascripts/reducers/import-media-video.ts", "../javascripts/reducers/custom-image-source.ts", "../javascripts/reducers/import-media-image.ts", "../javascripts/components/app/PreApp.tsx", "../javascripts/components/app/index.tsx", "../javascripts/components/app/header.tsx", "../javascripts/components/app/navigation.tsx", "../javascripts/components/app/NavItem.tsx", "../javascripts/components/app/WebsiteNavigation.tsx", "../javascripts/data/useAssignmentsNotificationCount.ts", "../javascripts/data/useUnreadConversationCount.ts", "../javascripts/components/app/information-bar.tsx", "../javascripts/components/app/branch-list.tsx", "../javascripts/selectors/analytics.ts", "../javascripts/components/app/branch-item.tsx", "../javascripts/components/app/statistic.tsx", "../javascripts/components/app/profile-image.tsx", "../javascripts/selectors/profile.ts", "../javascripts/components/app/GlobalProviders.tsx", "../javascripts/state/Page/PageProvider.tsx", "../javascripts/state/Page/PageReducer.ts", "../javascripts/state/Page/utils.ts", "../javascripts/state/Site/SiteProvider.tsx", "../javascripts/state/Site/SiteReducer.ts", "../javascripts/state/Contact/ContactProvider.tsx", "../javascripts/state/Contact/ContactReducer.ts", "../javascripts/state/Media/MediaProvider.tsx", "../javascripts/state/Media/MediaReducer.ts", "../javascripts/state/UnsavedChanges/UnsavedChangesProvider.tsx", "../javascripts/state/UnsavedChanges/UnsavedChangesContext.ts", "../javascripts/state/Fonts/FontProvider.tsx", "../javascripts/state/Fonts/FontReducer.ts", "../javascripts/state/Form/FormProvider.tsx", "../javascripts/state/Form/FormReducer.ts", "../javascripts/state/FormSubmission/FormSubmissionProvider.tsx", "../javascripts/state/FormSubmission/FormSubmissionContext.ts", "../javascripts/state/FormSubmission/FormSubmissionReducer.ts", "../javascripts/state/Campaign/CampaignProvider.tsx", "../javascripts/state/Campaign/CampaignReducer.ts", "../javascripts/state/Auth/AuthProvider.tsx", "../javascripts/state/Users/UsersProvider.tsx", "../javascripts/state/Users/UsersReducer.tsx", "../javascripts/state/Document/DocumentProvider.tsx", "../javascripts/utils/guid.ts", "../javascripts/state/Document/DocumentReducer.tsx", "../javascripts/state/SocialBoost/SocialBoostProvider.tsx", "../javascripts/state/SocialBoost/socialBoostReducer.ts", "../javascripts/state/RenewAd/RenewAdProvider.tsx", "../javascripts/state/RenewAd/renewAdReducer.ts", "../javascripts/components/app/GoogleTagManager.tsx", "../javascripts/components/Snackbar/index.tsx", "../javascripts/components/Snackbar/SnackbarItem.tsx", "../javascripts/components/Snackbar/wrapper.tsx", "../javascripts/components/app/DealerV2Check.tsx", "../javascripts/data/useEquipmentSettings.ts", "../javascripts/hooks/useScrollToTop.ts", "../javascripts/components/app/imbox.tsx", "../javascripts/routes/index.tsx", "../javascripts/styled-components/layout/global-style.tsx", "../javascripts/styled-components/layout/custom-properties.tsx", "../javascripts/data/QueryClient.ts"], "sourcesContent": ["'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n", "/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n", "import '../styles/default-dealer-admin.scss';\n\nimport React, { Suspense } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\n\nimport { Provider } from 'react-redux';\nimport { QueryClientProvider } from 'react-query';\n\nimport { setDefaultLocale, registerLocale } from 'react-datepicker';\nimport sv from 'date-fns/locale/sv';\nregisterLocale('sv', sv);\nsetDefaultLocale('sv');\n\nimport configureStore from './shared/store';\n\nimport { BrowserRouter } from 'react-router-dom';\n\nimport PreApp from './components/app/PreApp';\nimport { Routes } from './routes';\nimport { ThemeProvider } from 'styled-components';\nimport theme from './styled-components/layout/theme';\nimport GlobalStyle from './styled-components/layout/global-style';\nimport { SpinnerBlock } from './components/spinner';\nimport queryClient from './data/QueryClient';\n\nconst store = configureStore();\n\nwindow.addEventListener('load', () => {\n const element = document.querySelector('#application-node');\n if (!element) throw 'Missing root element';\n\n const root = createRoot(element);\n root.render(\n \n \n \n \n \n \n \n }>\n \n \n \n \n \n \n \n ,\n );\n});\n", "import type { BackendFactory, DragDropManager } from 'dnd-core'\nimport { createDragDropManager } from 'dnd-core'\nimport type { FC, ReactNode } from 'react'\nimport { memo, useEffect } from 'react'\n\nimport { DndContext } from './DndContext.js'\n\nexport type DndProviderProps =\n\t| {\n\t\t\tchildren?: ReactNode\n\t\t\tmanager: DragDropManager\n\t }\n\t| {\n\t\t\tbackend: BackendFactory\n\t\t\tchildren?: ReactNode\n\t\t\tcontext?: BackendContext\n\t\t\toptions?: BackendOptions\n\t\t\tdebugMode?: boolean\n\t }\n\nlet refCount = 0\nconst INSTANCE_SYM = Symbol.for('__REACT_DND_CONTEXT_INSTANCE__')\n\n/**\n * A React component that provides the React-DnD context\n */\nexport const DndProvider: FC> = memo(\n\tfunction DndProvider({ children, ...props }) {\n\t\tconst [manager, isGlobalInstance] = getDndContextValue(props) // memoized from props\n\t\t/**\n\t\t * If the global context was used to store the DND context\n\t\t * then where theres no more references to it we should\n\t\t * clean it up to avoid memory leaks\n\t\t */\n\t\tuseEffect(() => {\n\t\t\tif (isGlobalInstance) {\n\t\t\t\tconst context = getGlobalContext()\n\t\t\t\t++refCount\n\n\t\t\t\treturn () => {\n\t\t\t\t\tif (--refCount === 0) {\n\t\t\t\t\t\tcontext[INSTANCE_SYM] = null\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn\n\t\t}, [])\n\n\t\treturn {children}\n\t},\n)\n\nfunction getDndContextValue(props: DndProviderProps) {\n\tif ('manager' in props) {\n\t\tconst manager = { dragDropManager: props.manager }\n\t\treturn [manager, false]\n\t}\n\n\tconst manager = createSingletonDndContext(\n\t\tprops.backend,\n\t\tprops.context,\n\t\tprops.options,\n\t\tprops.debugMode,\n\t)\n\tconst isGlobalInstance = !props.context\n\n\treturn [manager, isGlobalInstance]\n}\n\nfunction createSingletonDndContext(\n\tbackend: BackendFactory,\n\tcontext: BackendContext = getGlobalContext(),\n\toptions: BackendOptions,\n\tdebugMode?: boolean,\n) {\n\tconst ctx = context as any\n\tif (!ctx[INSTANCE_SYM]) {\n\t\tctx[INSTANCE_SYM] = {\n\t\t\tdragDropManager: createDragDropManager(\n\t\t\t\tbackend,\n\t\t\t\tcontext,\n\t\t\t\toptions,\n\t\t\t\tdebugMode,\n\t\t\t),\n\t\t}\n\t}\n\treturn ctx[INSTANCE_SYM]\n}\n\ndeclare const global: any\nfunction getGlobalContext() {\n\treturn typeof global !== 'undefined' ? global : (window as any)\n}\n", "import type { Store } from 'redux'\nimport { createStore } from 'redux'\n\nimport { DragDropManagerImpl } from './classes/DragDropManagerImpl.js'\nimport { DragDropMonitorImpl } from './classes/DragDropMonitorImpl.js'\nimport { HandlerRegistryImpl } from './classes/HandlerRegistryImpl.js'\nimport type { BackendFactory, DragDropManager } from './interfaces.js'\nimport type { State } from './reducers/index.js'\nimport { reduce } from './reducers/index.js'\n\nexport function createDragDropManager(\n\tbackendFactory: BackendFactory,\n\tglobalContext: unknown = undefined,\n\tbackendOptions: unknown = {},\n\tdebugMode = false,\n): DragDropManager {\n\tconst store = makeStoreInstance(debugMode)\n\tconst monitor = new DragDropMonitorImpl(store, new HandlerRegistryImpl(store))\n\tconst manager = new DragDropManagerImpl(store, monitor)\n\tconst backend = backendFactory(manager, globalContext, backendOptions)\n\tmanager.receiveBackend(backend)\n\treturn manager\n}\n\nfunction makeStoreInstance(debugMode: boolean): Store {\n\t// TODO: if we ever make a react-native version of this,\n\t// we'll need to consider how to pull off dev-tooling\n\tconst reduxDevTools =\n\t\ttypeof window !== 'undefined' &&\n\t\t(window as any).__REDUX_DEVTOOLS_EXTENSION__\n\treturn createStore(\n\t\treduce,\n\t\tdebugMode &&\n\t\t\treduxDevTools &&\n\t\t\treduxDevTools({\n\t\t\t\tname: 'dnd-core',\n\t\t\t\tinstanceId: 'dnd-core',\n\t\t\t}),\n\t)\n}\n", "import type { Action, Store } from 'redux'\n\nimport { createDragDropActions } from '../actions/dragDrop/index.js'\nimport type {\n\tActionCreator,\n\tBackend,\n\tDragDropActions,\n\tDragDropManager,\n\tDragDropMonitor,\n\tHandlerRegistry,\n} from '../interfaces.js'\nimport type { State } from '../reducers/index.js'\nimport type { DragDropMonitorImpl } from './DragDropMonitorImpl.js'\n\nexport class DragDropManagerImpl implements DragDropManager {\n\tprivate store: Store\n\tprivate monitor: DragDropMonitor\n\tprivate backend: Backend | undefined\n\tprivate isSetUp = false\n\n\tpublic constructor(store: Store, monitor: DragDropMonitor) {\n\t\tthis.store = store\n\t\tthis.monitor = monitor\n\t\tstore.subscribe(this.handleRefCountChange)\n\t}\n\n\tpublic receiveBackend(backend: Backend): void {\n\t\tthis.backend = backend\n\t}\n\n\tpublic getMonitor(): DragDropMonitor {\n\t\treturn this.monitor\n\t}\n\n\tpublic getBackend(): Backend {\n\t\treturn this.backend as Backend\n\t}\n\n\tpublic getRegistry(): HandlerRegistry {\n\t\treturn (this.monitor as DragDropMonitorImpl).registry\n\t}\n\n\tpublic getActions(): DragDropActions {\n\t\t/* eslint-disable-next-line @typescript-eslint/no-this-alias */\n\t\tconst manager = this\n\t\tconst { dispatch } = this.store\n\n\t\tfunction bindActionCreator(actionCreator: ActionCreator) {\n\t\t\treturn (...args: any[]) => {\n\t\t\t\tconst action = actionCreator.apply(manager, args as any)\n\t\t\t\tif (typeof action !== 'undefined') {\n\t\t\t\t\tdispatch(action)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst actions = createDragDropActions(this)\n\n\t\treturn Object.keys(actions).reduce(\n\t\t\t(boundActions: DragDropActions, key: string) => {\n\t\t\t\tconst action: ActionCreator = (actions as any)[\n\t\t\t\t\tkey\n\t\t\t\t] as ActionCreator\n\t\t\t\t;(boundActions as any)[key] = bindActionCreator(action)\n\t\t\t\treturn boundActions\n\t\t\t},\n\t\t\t{} as DragDropActions,\n\t\t)\n\t}\n\n\tpublic dispatch(action: Action): void {\n\t\tthis.store.dispatch(action)\n\t}\n\n\tprivate handleRefCountChange = (): void => {\n\t\tconst shouldSetUp = this.store.getState().refCount > 0\n\t\tif (this.backend) {\n\t\t\tif (shouldSetUp && !this.isSetUp) {\n\t\t\t\tthis.backend.setup()\n\t\t\t\tthis.isSetUp = true\n\t\t\t} else if (!shouldSetUp && this.isSetUp) {\n\t\t\t\tthis.backend.teardown()\n\t\t\t\tthis.isSetUp = false\n\t\t\t}\n\t\t}\n\t}\n}\n", "import type { DragDropActions, DragDropManager } from '../../interfaces.js'\nimport { createBeginDrag } from './beginDrag.js'\nimport { createDrop } from './drop.js'\nimport { createEndDrag } from './endDrag.js'\nimport { createHover } from './hover.js'\nimport { createPublishDragSource } from './publishDragSource.js'\n\nexport * from './types.js'\n\nexport function createDragDropActions(\n\tmanager: DragDropManager,\n): DragDropActions {\n\treturn {\n\t\tbeginDrag: createBeginDrag(manager),\n\t\tpublishDragSource: createPublishDragSource(manager),\n\t\thover: createHover(manager),\n\t\tdrop: createDrop(manager),\n\t\tendDrag: createEndDrag(manager),\n\t}\n}\n", "import { invariant } from '@react-dnd/invariant'\n\nimport type {\n\tAction,\n\tBeginDragOptions,\n\tBeginDragPayload,\n\tDragDropManager,\n\tDragDropMonitor,\n\tHandlerRegistry,\n\tIdentifier,\n\tXYCoord,\n} from '../../interfaces.js'\nimport { isObject } from '../../utils/js_utils.js'\nimport { setClientOffset } from './local/setClientOffset.js'\nimport { BEGIN_DRAG, INIT_COORDS } from './types.js'\n\nconst ResetCoordinatesAction = {\n\ttype: INIT_COORDS,\n\tpayload: {\n\t\tclientOffset: null,\n\t\tsourceClientOffset: null,\n\t},\n}\n\nexport function createBeginDrag(manager: DragDropManager) {\n\treturn function beginDrag(\n\t\tsourceIds: Identifier[] = [],\n\t\toptions: BeginDragOptions = {\n\t\t\tpublishSource: true,\n\t\t},\n\t): Action | undefined {\n\t\tconst {\n\t\t\tpublishSource = true,\n\t\t\tclientOffset,\n\t\t\tgetSourceClientOffset,\n\t\t}: BeginDragOptions = options\n\t\tconst monitor = manager.getMonitor()\n\t\tconst registry = manager.getRegistry()\n\n\t\t// Initialize the coordinates using the client offset\n\t\tmanager.dispatch(setClientOffset(clientOffset))\n\n\t\tverifyInvariants(sourceIds, monitor, registry)\n\n\t\t// Get the draggable source\n\t\tconst sourceId = getDraggableSource(sourceIds, monitor)\n\t\tif (sourceId == null) {\n\t\t\tmanager.dispatch(ResetCoordinatesAction)\n\t\t\treturn\n\t\t}\n\n\t\t// Get the source client offset\n\t\tlet sourceClientOffset: XYCoord | null = null\n\t\tif (clientOffset) {\n\t\t\tif (!getSourceClientOffset) {\n\t\t\t\tthrow new Error('getSourceClientOffset must be defined')\n\t\t\t}\n\t\t\tverifyGetSourceClientOffsetIsFunction(getSourceClientOffset)\n\t\t\tsourceClientOffset = getSourceClientOffset(sourceId)\n\t\t}\n\n\t\t// Initialize the full coordinates\n\t\tmanager.dispatch(setClientOffset(clientOffset, sourceClientOffset))\n\n\t\tconst source = registry.getSource(sourceId)\n\t\tconst item = source.beginDrag(monitor, sourceId)\n\t\t// If source.beginDrag returns null, this is an indicator to cancel the drag\n\t\tif (item == null) {\n\t\t\treturn undefined\n\t\t}\n\t\tverifyItemIsObject(item)\n\t\tregistry.pinSource(sourceId)\n\n\t\tconst itemType = registry.getSourceType(sourceId)\n\t\treturn {\n\t\t\ttype: BEGIN_DRAG,\n\t\t\tpayload: {\n\t\t\t\titemType,\n\t\t\t\titem,\n\t\t\t\tsourceId,\n\t\t\t\tclientOffset: clientOffset || null,\n\t\t\t\tsourceClientOffset: sourceClientOffset || null,\n\t\t\t\tisSourcePublic: !!publishSource,\n\t\t\t},\n\t\t}\n\t}\n}\n\nfunction verifyInvariants(\n\tsourceIds: Identifier[],\n\tmonitor: DragDropMonitor,\n\tregistry: HandlerRegistry,\n) {\n\tinvariant(!monitor.isDragging(), 'Cannot call beginDrag while dragging.')\n\tsourceIds.forEach(function (sourceId) {\n\t\tinvariant(\n\t\t\tregistry.getSource(sourceId),\n\t\t\t'Expected sourceIds to be registered.',\n\t\t)\n\t})\n}\n\nfunction verifyGetSourceClientOffsetIsFunction(getSourceClientOffset: any) {\n\tinvariant(\n\t\ttypeof getSourceClientOffset === 'function',\n\t\t'When clientOffset is provided, getSourceClientOffset must be a function.',\n\t)\n}\n\nfunction verifyItemIsObject(item: any) {\n\tinvariant(isObject(item), 'Item must be an object.')\n}\n\nfunction getDraggableSource(sourceIds: Identifier[], monitor: DragDropMonitor) {\n\tlet sourceId = null\n\tfor (let i = sourceIds.length - 1; i >= 0; i--) {\n\t\tif (monitor.canDragSource(sourceIds[i])) {\n\t\t\tsourceId = sourceIds[i]\n\t\t\tbreak\n\t\t}\n\t}\n\treturn sourceId\n}\n", "// cheap lodash replacements\n\n/**\n * drop-in replacement for _.get\n * @param obj\n * @param path\n * @param defaultValue\n */\nexport function get(obj: any, path: string, defaultValue: T): T {\n\treturn path\n\t\t.split('.')\n\t\t.reduce((a, c) => (a && a[c] ? a[c] : defaultValue || null), obj) as T\n}\n\n/**\n * drop-in replacement for _.without\n */\nexport function without(items: T[], item: T): T[] {\n\treturn items.filter((i) => i !== item)\n}\n\n/**\n * drop-in replacement for _.isString\n * @param input\n */\nexport function isString(input: any): boolean {\n\treturn typeof input === 'string'\n}\n\n/**\n * drop-in replacement for _.isString\n * @param input\n */\nexport function isObject(input: any): boolean {\n\treturn typeof input === 'object'\n}\n\n/**\n * replacement for _.xor\n * @param itemsA\n * @param itemsB\n */\nexport function xor(itemsA: T[], itemsB: T[]): T[] {\n\tconst map = new Map()\n\tconst insertItem = (item: T) => {\n\t\tmap.set(item, map.has(item) ? (map.get(item) as number) + 1 : 1)\n\t}\n\titemsA.forEach(insertItem)\n\titemsB.forEach(insertItem)\n\n\tconst result: T[] = []\n\tmap.forEach((count, key) => {\n\t\tif (count === 1) {\n\t\t\tresult.push(key)\n\t\t}\n\t})\n\treturn result\n}\n\n/**\n * replacement for _.intersection\n * @param itemsA\n * @param itemsB\n */\nexport function intersection(itemsA: T[], itemsB: T[]): T[] {\n\treturn itemsA.filter((t) => itemsB.indexOf(t) > -1)\n}\n", "import type { AnyAction } from 'redux'\n\nimport type { XYCoord } from '../../../interfaces.js'\nimport { INIT_COORDS } from '../types.js'\n\nexport function setClientOffset(\n\tclientOffset: XYCoord | null | undefined,\n\tsourceClientOffset?: XYCoord | null | undefined,\n): AnyAction {\n\treturn {\n\t\ttype: INIT_COORDS,\n\t\tpayload: {\n\t\t\tsourceClientOffset: sourceClientOffset || null,\n\t\t\tclientOffset: clientOffset || null,\n\t\t},\n\t}\n}\n", "export const INIT_COORDS = 'dnd-core/INIT_COORDS'\nexport const BEGIN_DRAG = 'dnd-core/BEGIN_DRAG'\nexport const PUBLISH_DRAG_SOURCE = 'dnd-core/PUBLISH_DRAG_SOURCE'\nexport const HOVER = 'dnd-core/HOVER'\nexport const DROP = 'dnd-core/DROP'\nexport const END_DRAG = 'dnd-core/END_DRAG'\n", "import { invariant } from '@react-dnd/invariant'\n\nimport type {\n\tAction,\n\tDragDropManager,\n\tDragDropMonitor,\n\tDropPayload,\n\tHandlerRegistry,\n\tIdentifier,\n} from '../../interfaces.js'\nimport { isObject } from '../../utils/js_utils.js'\nimport { DROP } from './types.js'\n\nexport function createDrop(manager: DragDropManager) {\n\treturn function drop(options = {}): void {\n\t\tconst monitor = manager.getMonitor()\n\t\tconst registry = manager.getRegistry()\n\t\tverifyInvariants(monitor)\n\t\tconst targetIds = getDroppableTargets(monitor)\n\n\t\t// Multiple actions are dispatched here, which is why this doesn't return an action\n\t\ttargetIds.forEach((targetId, index) => {\n\t\t\tconst dropResult = determineDropResult(targetId, index, registry, monitor)\n\t\t\tconst action: Action = {\n\t\t\t\ttype: DROP,\n\t\t\t\tpayload: {\n\t\t\t\t\tdropResult: {\n\t\t\t\t\t\t...options,\n\t\t\t\t\t\t...dropResult,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tmanager.dispatch(action)\n\t\t})\n\t}\n}\n\nfunction verifyInvariants(monitor: DragDropMonitor) {\n\tinvariant(monitor.isDragging(), 'Cannot call drop while not dragging.')\n\tinvariant(\n\t\t!monitor.didDrop(),\n\t\t'Cannot call drop twice during one drag operation.',\n\t)\n}\n\nfunction determineDropResult(\n\ttargetId: Identifier,\n\tindex: number,\n\tregistry: HandlerRegistry,\n\tmonitor: DragDropMonitor,\n) {\n\tconst target = registry.getTarget(targetId)\n\tlet dropResult = target ? target.drop(monitor, targetId) : undefined\n\tverifyDropResultType(dropResult)\n\tif (typeof dropResult === 'undefined') {\n\t\tdropResult = index === 0 ? {} : monitor.getDropResult()\n\t}\n\treturn dropResult\n}\n\nfunction verifyDropResultType(dropResult: any) {\n\tinvariant(\n\t\ttypeof dropResult === 'undefined' || isObject(dropResult),\n\t\t'Drop result must either be an object or undefined.',\n\t)\n}\n\nfunction getDroppableTargets(monitor: DragDropMonitor) {\n\tconst targetIds = monitor\n\t\t.getTargetIds()\n\t\t.filter(monitor.canDropOnTarget, monitor)\n\ttargetIds.reverse()\n\treturn targetIds\n}\n", "import { invariant } from '@react-dnd/invariant'\n\nimport type {\n\tDragDropManager,\n\tDragDropMonitor,\n\tSentinelAction,\n} from '../../interfaces.js'\nimport { END_DRAG } from './types.js'\n\nexport function createEndDrag(manager: DragDropManager) {\n\treturn function endDrag(): SentinelAction {\n\t\tconst monitor = manager.getMonitor()\n\t\tconst registry = manager.getRegistry()\n\t\tverifyIsDragging(monitor)\n\n\t\tconst sourceId = monitor.getSourceId()\n\t\tif (sourceId != null) {\n\t\t\tconst source = registry.getSource(sourceId, true)\n\t\t\tsource.endDrag(monitor, sourceId)\n\t\t\tregistry.unpinSource()\n\t\t}\n\t\treturn { type: END_DRAG }\n\t}\n}\n\nfunction verifyIsDragging(monitor: DragDropMonitor) {\n\tinvariant(monitor.isDragging(), 'Cannot call endDrag while not dragging.')\n}\n", "import { invariant } from '@react-dnd/invariant'\n\nimport type {\n\tAction,\n\tDragDropManager,\n\tDragDropMonitor,\n\tHandlerRegistry,\n\tHoverOptions,\n\tHoverPayload,\n\tIdentifier,\n} from '../../interfaces.js'\nimport { matchesType } from '../../utils/matchesType.js'\nimport { HOVER } from './types.js'\n\nexport function createHover(manager: DragDropManager) {\n\treturn function hover(\n\t\ttargetIdsArg: string[],\n\t\t{ clientOffset }: HoverOptions = {},\n\t): Action {\n\t\tverifyTargetIdsIsArray(targetIdsArg)\n\t\tconst targetIds = targetIdsArg.slice(0)\n\t\tconst monitor = manager.getMonitor()\n\t\tconst registry = manager.getRegistry()\n\t\tconst draggedItemType = monitor.getItemType()\n\t\tremoveNonMatchingTargetIds(targetIds, registry, draggedItemType)\n\t\tcheckInvariants(targetIds, monitor, registry)\n\t\thoverAllTargets(targetIds, monitor, registry)\n\n\t\treturn {\n\t\t\ttype: HOVER,\n\t\t\tpayload: {\n\t\t\t\ttargetIds,\n\t\t\t\tclientOffset: clientOffset || null,\n\t\t\t},\n\t\t}\n\t}\n}\n\nfunction verifyTargetIdsIsArray(targetIdsArg: string[]) {\n\tinvariant(Array.isArray(targetIdsArg), 'Expected targetIds to be an array.')\n}\n\nfunction checkInvariants(\n\ttargetIds: string[],\n\tmonitor: DragDropMonitor,\n\tregistry: HandlerRegistry,\n) {\n\tinvariant(monitor.isDragging(), 'Cannot call hover while not dragging.')\n\tinvariant(!monitor.didDrop(), 'Cannot call hover after drop.')\n\tfor (let i = 0; i < targetIds.length; i++) {\n\t\tconst targetId = targetIds[i] as string\n\t\tinvariant(\n\t\t\ttargetIds.lastIndexOf(targetId) === i,\n\t\t\t'Expected targetIds to be unique in the passed array.',\n\t\t)\n\n\t\tconst target = registry.getTarget(targetId)\n\t\tinvariant(target, 'Expected targetIds to be registered.')\n\t}\n}\n\nfunction removeNonMatchingTargetIds(\n\ttargetIds: string[],\n\tregistry: HandlerRegistry,\n\tdraggedItemType: Identifier | null,\n) {\n\t// Remove those targetIds that don't match the targetType. This\n\t// fixes shallow isOver which would only be non-shallow because of\n\t// non-matching targets.\n\tfor (let i = targetIds.length - 1; i >= 0; i--) {\n\t\tconst targetId = targetIds[i] as string\n\t\tconst targetType = registry.getTargetType(targetId)\n\t\tif (!matchesType(targetType, draggedItemType)) {\n\t\t\ttargetIds.splice(i, 1)\n\t\t}\n\t}\n}\n\nfunction hoverAllTargets(\n\ttargetIds: string[],\n\tmonitor: DragDropMonitor,\n\tregistry: HandlerRegistry,\n) {\n\t// Finally call hover on all matching targets.\n\ttargetIds.forEach(function (targetId) {\n\t\tconst target = registry.getTarget(targetId)\n\t\ttarget.hover(monitor, targetId)\n\t})\n}\n", "import type { Identifier } from '../interfaces.js'\n\nexport function matchesType(\n\ttargetType: Identifier | Identifier[] | null,\n\tdraggedItemType: Identifier | null,\n): boolean {\n\tif (draggedItemType === null) {\n\t\treturn targetType === null\n\t}\n\treturn Array.isArray(targetType)\n\t\t? (targetType as Identifier[]).some((t) => t === draggedItemType)\n\t\t: targetType === draggedItemType\n}\n", "import type { DragDropManager, SentinelAction } from '../../interfaces.js'\nimport { PUBLISH_DRAG_SOURCE } from './types.js'\n\nexport function createPublishDragSource(manager: DragDropManager) {\n\treturn function publishDragSource(): SentinelAction | undefined {\n\t\tconst monitor = manager.getMonitor()\n\t\tif (monitor.isDragging()) {\n\t\t\treturn { type: PUBLISH_DRAG_SOURCE }\n\t\t}\n\t\treturn\n\t}\n}\n", "import { invariant } from '@react-dnd/invariant'\nimport type { Store } from 'redux'\n\nimport type {\n\tDragDropMonitor,\n\tHandlerRegistry,\n\tIdentifier,\n\tListener,\n\tUnsubscribe,\n\tXYCoord,\n} from '../interfaces.js'\nimport type { State } from '../reducers/index.js'\nimport {\n\tgetDifferenceFromInitialOffset,\n\tgetSourceClientOffset,\n} from '../utils/coords.js'\nimport { areDirty } from '../utils/dirtiness.js'\nimport { matchesType } from '../utils/matchesType.js'\n\nexport class DragDropMonitorImpl implements DragDropMonitor {\n\tprivate store: Store\n\tpublic readonly registry: HandlerRegistry\n\n\tpublic constructor(store: Store, registry: HandlerRegistry) {\n\t\tthis.store = store\n\t\tthis.registry = registry\n\t}\n\n\tpublic subscribeToStateChange(\n\t\tlistener: Listener,\n\t\toptions: { handlerIds?: string[] } = {},\n\t): Unsubscribe {\n\t\tconst { handlerIds } = options\n\t\tinvariant(typeof listener === 'function', 'listener must be a function.')\n\t\tinvariant(\n\t\t\ttypeof handlerIds === 'undefined' || Array.isArray(handlerIds),\n\t\t\t'handlerIds, when specified, must be an array of strings.',\n\t\t)\n\n\t\tlet prevStateId = this.store.getState().stateId\n\t\tconst handleChange = () => {\n\t\t\tconst state = this.store.getState()\n\t\t\tconst currentStateId = state.stateId\n\t\t\ttry {\n\t\t\t\tconst canSkipListener =\n\t\t\t\t\tcurrentStateId === prevStateId ||\n\t\t\t\t\t(currentStateId === prevStateId + 1 &&\n\t\t\t\t\t\t!areDirty(state.dirtyHandlerIds, handlerIds))\n\n\t\t\t\tif (!canSkipListener) {\n\t\t\t\t\tlistener()\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tprevStateId = currentStateId\n\t\t\t}\n\t\t}\n\n\t\treturn this.store.subscribe(handleChange)\n\t}\n\n\tpublic subscribeToOffsetChange(listener: Listener): Unsubscribe {\n\t\tinvariant(typeof listener === 'function', 'listener must be a function.')\n\n\t\tlet previousState = this.store.getState().dragOffset\n\t\tconst handleChange = () => {\n\t\t\tconst nextState = this.store.getState().dragOffset\n\t\t\tif (nextState === previousState) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tpreviousState = nextState\n\t\t\tlistener()\n\t\t}\n\n\t\treturn this.store.subscribe(handleChange)\n\t}\n\n\tpublic canDragSource(sourceId: string | undefined): boolean {\n\t\tif (!sourceId) {\n\t\t\treturn false\n\t\t}\n\t\tconst source = this.registry.getSource(sourceId)\n\t\tinvariant(source, `Expected to find a valid source. sourceId=${sourceId}`)\n\n\t\tif (this.isDragging()) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn source.canDrag(this, sourceId)\n\t}\n\n\tpublic canDropOnTarget(targetId: string | undefined): boolean {\n\t\t// undefined on initial render\n\t\tif (!targetId) {\n\t\t\treturn false\n\t\t}\n\t\tconst target = this.registry.getTarget(targetId)\n\t\tinvariant(target, `Expected to find a valid target. targetId=${targetId}`)\n\n\t\tif (!this.isDragging() || this.didDrop()) {\n\t\t\treturn false\n\t\t}\n\n\t\tconst targetType = this.registry.getTargetType(targetId)\n\t\tconst draggedItemType = this.getItemType()\n\t\treturn (\n\t\t\tmatchesType(targetType, draggedItemType) && target.canDrop(this, targetId)\n\t\t)\n\t}\n\n\tpublic isDragging(): boolean {\n\t\treturn Boolean(this.getItemType())\n\t}\n\n\tpublic isDraggingSource(sourceId: string | undefined): boolean {\n\t\t// undefined on initial render\n\t\tif (!sourceId) {\n\t\t\treturn false\n\t\t}\n\t\tconst source = this.registry.getSource(sourceId, true)\n\t\tinvariant(source, `Expected to find a valid source. sourceId=${sourceId}`)\n\n\t\tif (!this.isDragging() || !this.isSourcePublic()) {\n\t\t\treturn false\n\t\t}\n\n\t\tconst sourceType = this.registry.getSourceType(sourceId)\n\t\tconst draggedItemType = this.getItemType()\n\t\tif (sourceType !== draggedItemType) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn source.isDragging(this, sourceId)\n\t}\n\n\tpublic isOverTarget(\n\t\ttargetId: string | undefined,\n\t\toptions = { shallow: false },\n\t): boolean {\n\t\t// undefined on initial render\n\t\tif (!targetId) {\n\t\t\treturn false\n\t\t}\n\n\t\tconst { shallow } = options\n\t\tif (!this.isDragging()) {\n\t\t\treturn false\n\t\t}\n\n\t\tconst targetType = this.registry.getTargetType(targetId)\n\t\tconst draggedItemType = this.getItemType()\n\t\tif (draggedItemType && !matchesType(targetType, draggedItemType)) {\n\t\t\treturn false\n\t\t}\n\n\t\tconst targetIds = this.getTargetIds()\n\t\tif (!targetIds.length) {\n\t\t\treturn false\n\t\t}\n\n\t\tconst index = targetIds.indexOf(targetId)\n\t\tif (shallow) {\n\t\t\treturn index === targetIds.length - 1\n\t\t} else {\n\t\t\treturn index > -1\n\t\t}\n\t}\n\n\tpublic getItemType(): Identifier {\n\t\treturn this.store.getState().dragOperation.itemType as Identifier\n\t}\n\n\tpublic getItem(): any {\n\t\treturn this.store.getState().dragOperation.item\n\t}\n\n\tpublic getSourceId(): string | null {\n\t\treturn this.store.getState().dragOperation.sourceId\n\t}\n\n\tpublic getTargetIds(): string[] {\n\t\treturn this.store.getState().dragOperation.targetIds\n\t}\n\n\tpublic getDropResult(): any {\n\t\treturn this.store.getState().dragOperation.dropResult\n\t}\n\n\tpublic didDrop(): boolean {\n\t\treturn this.store.getState().dragOperation.didDrop\n\t}\n\n\tpublic isSourcePublic(): boolean {\n\t\treturn Boolean(this.store.getState().dragOperation.isSourcePublic)\n\t}\n\n\tpublic getInitialClientOffset(): XYCoord | null {\n\t\treturn this.store.getState().dragOffset.initialClientOffset\n\t}\n\n\tpublic getInitialSourceClientOffset(): XYCoord | null {\n\t\treturn this.store.getState().dragOffset.initialSourceClientOffset\n\t}\n\n\tpublic getClientOffset(): XYCoord | null {\n\t\treturn this.store.getState().dragOffset.clientOffset\n\t}\n\n\tpublic getSourceClientOffset(): XYCoord | null {\n\t\treturn getSourceClientOffset(this.store.getState().dragOffset)\n\t}\n\n\tpublic getDifferenceFromInitialOffset(): XYCoord | null {\n\t\treturn getDifferenceFromInitialOffset(this.store.getState().dragOffset)\n\t}\n}\n", "import type { XYCoord } from '../interfaces.js'\nimport type { State } from '../reducers/dragOffset.js'\n\n/**\n * Coordinate addition\n * @param a The first coordinate\n * @param b The second coordinate\n */\nexport function add(a: XYCoord, b: XYCoord): XYCoord {\n\treturn {\n\t\tx: a.x + b.x,\n\t\ty: a.y + b.y,\n\t}\n}\n\n/**\n * Coordinate subtraction\n * @param a The first coordinate\n * @param b The second coordinate\n */\nexport function subtract(a: XYCoord, b: XYCoord): XYCoord {\n\treturn {\n\t\tx: a.x - b.x,\n\t\ty: a.y - b.y,\n\t}\n}\n\n/**\n * Returns the cartesian distance of the drag source component's position, based on its position\n * at the time when the current drag operation has started, and the movement difference.\n *\n * Returns null if no item is being dragged.\n *\n * @param state The offset state to compute from\n */\nexport function getSourceClientOffset(state: State): XYCoord | null {\n\tconst { clientOffset, initialClientOffset, initialSourceClientOffset } = state\n\tif (!clientOffset || !initialClientOffset || !initialSourceClientOffset) {\n\t\treturn null\n\t}\n\treturn subtract(\n\t\tadd(clientOffset, initialSourceClientOffset),\n\t\tinitialClientOffset,\n\t)\n}\n\n/**\n * Determines the x,y offset between the client offset and the initial client offset\n *\n * @param state The offset state to compute from\n */\nexport function getDifferenceFromInitialOffset(state: State): XYCoord | null {\n\tconst { clientOffset, initialClientOffset } = state\n\tif (!clientOffset || !initialClientOffset) {\n\t\treturn null\n\t}\n\treturn subtract(clientOffset, initialClientOffset)\n}\n", "import { intersection } from './js_utils.js'\n\nexport const NONE: string[] = []\nexport const ALL: string[] = []\n// Add these flags for debug\n;(NONE as any).__IS_NONE__ = true\n;(ALL as any).__IS_ALL__ = true\n\n/**\n * Determines if the given handler IDs are dirty or not.\n *\n * @param dirtyIds The set of dirty handler ids\n * @param handlerIds The set of handler ids to check\n */\nexport function areDirty(\n\tdirtyIds: string[],\n\thandlerIds: string[] | undefined,\n): boolean {\n\tif (dirtyIds === NONE) {\n\t\treturn false\n\t}\n\n\tif (dirtyIds === ALL || typeof handlerIds === 'undefined') {\n\t\treturn true\n\t}\n\n\tconst commonIds = intersection(handlerIds, dirtyIds)\n\treturn commonIds.length > 0\n}\n", "import { asap } from '@react-dnd/asap'\nimport { invariant } from '@react-dnd/invariant'\nimport type { Store } from 'redux'\n\nimport {\n\taddSource,\n\taddTarget,\n\tremoveSource,\n\tremoveTarget,\n} from '../actions/registry.js'\nimport {\n\tvalidateSourceContract,\n\tvalidateTargetContract,\n\tvalidateType,\n} from '../contracts.js'\nimport type {\n\tDragSource,\n\tDropTarget,\n\tHandlerRegistry,\n\tIdentifier,\n\tSourceType,\n\tTargetType,\n} from '../interfaces.js'\nimport { HandlerRole } from '../interfaces.js'\nimport type { State } from '../reducers/index.js'\nimport { getNextUniqueId } from '../utils/getNextUniqueId.js'\n\nfunction getNextHandlerId(role: HandlerRole): string {\n\tconst id = getNextUniqueId().toString()\n\tswitch (role) {\n\t\tcase HandlerRole.SOURCE:\n\t\t\treturn `S${id}`\n\t\tcase HandlerRole.TARGET:\n\t\t\treturn `T${id}`\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown Handler Role: ${role}`)\n\t}\n}\n\nfunction parseRoleFromHandlerId(handlerId: string) {\n\tswitch (handlerId[0]) {\n\t\tcase 'S':\n\t\t\treturn HandlerRole.SOURCE\n\t\tcase 'T':\n\t\t\treturn HandlerRole.TARGET\n\t\tdefault:\n\t\t\tthrow new Error(`Cannot parse handler ID: ${handlerId}`)\n\t}\n}\n\nfunction mapContainsValue(map: Map, searchValue: T) {\n\tconst entries = map.entries()\n\tlet isDone = false\n\tdo {\n\t\tconst {\n\t\t\tdone,\n\t\t\tvalue: [, value],\n\t\t} = entries.next()\n\t\tif (value === searchValue) {\n\t\t\treturn true\n\t\t}\n\t\tisDone = !!done\n\t} while (!isDone)\n\treturn false\n}\n\nexport class HandlerRegistryImpl implements HandlerRegistry {\n\tprivate types: Map = new Map()\n\tprivate dragSources: Map = new Map()\n\tprivate dropTargets: Map = new Map()\n\tprivate pinnedSourceId: string | null = null\n\tprivate pinnedSource: any = null\n\tprivate store: Store\n\n\tpublic constructor(store: Store) {\n\t\tthis.store = store\n\t}\n\n\tpublic addSource(type: SourceType, source: DragSource): string {\n\t\tvalidateType(type)\n\t\tvalidateSourceContract(source)\n\n\t\tconst sourceId = this.addHandler(HandlerRole.SOURCE, type, source)\n\t\tthis.store.dispatch(addSource(sourceId))\n\t\treturn sourceId\n\t}\n\n\tpublic addTarget(type: TargetType, target: DropTarget): string {\n\t\tvalidateType(type, true)\n\t\tvalidateTargetContract(target)\n\n\t\tconst targetId = this.addHandler(HandlerRole.TARGET, type, target)\n\t\tthis.store.dispatch(addTarget(targetId))\n\t\treturn targetId\n\t}\n\n\tpublic containsHandler(handler: DragSource | DropTarget): boolean {\n\t\treturn (\n\t\t\tmapContainsValue(this.dragSources, handler) ||\n\t\t\tmapContainsValue(this.dropTargets, handler)\n\t\t)\n\t}\n\n\tpublic getSource(sourceId: string, includePinned = false): DragSource {\n\t\tinvariant(this.isSourceId(sourceId), 'Expected a valid source ID.')\n\t\tconst isPinned = includePinned && sourceId === this.pinnedSourceId\n\t\tconst source = isPinned ? this.pinnedSource : this.dragSources.get(sourceId)\n\t\treturn source\n\t}\n\n\tpublic getTarget(targetId: string): DropTarget {\n\t\tinvariant(this.isTargetId(targetId), 'Expected a valid target ID.')\n\t\treturn this.dropTargets.get(targetId) as DropTarget\n\t}\n\n\tpublic getSourceType(sourceId: string): Identifier {\n\t\tinvariant(this.isSourceId(sourceId), 'Expected a valid source ID.')\n\t\treturn this.types.get(sourceId) as Identifier\n\t}\n\n\tpublic getTargetType(targetId: string): Identifier | Identifier[] {\n\t\tinvariant(this.isTargetId(targetId), 'Expected a valid target ID.')\n\t\treturn this.types.get(targetId) as Identifier | Identifier[]\n\t}\n\n\tpublic isSourceId(handlerId: string): boolean {\n\t\tconst role = parseRoleFromHandlerId(handlerId)\n\t\treturn role === HandlerRole.SOURCE\n\t}\n\n\tpublic isTargetId(handlerId: string): boolean {\n\t\tconst role = parseRoleFromHandlerId(handlerId)\n\t\treturn role === HandlerRole.TARGET\n\t}\n\n\tpublic removeSource(sourceId: string): void {\n\t\tinvariant(this.getSource(sourceId), 'Expected an existing source.')\n\t\tthis.store.dispatch(removeSource(sourceId))\n\t\tasap(() => {\n\t\t\tthis.dragSources.delete(sourceId)\n\t\t\tthis.types.delete(sourceId)\n\t\t})\n\t}\n\n\tpublic removeTarget(targetId: string): void {\n\t\tinvariant(this.getTarget(targetId), 'Expected an existing target.')\n\t\tthis.store.dispatch(removeTarget(targetId))\n\t\tthis.dropTargets.delete(targetId)\n\t\tthis.types.delete(targetId)\n\t}\n\n\tpublic pinSource(sourceId: string): void {\n\t\tconst source = this.getSource(sourceId)\n\t\tinvariant(source, 'Expected an existing source.')\n\n\t\tthis.pinnedSourceId = sourceId\n\t\tthis.pinnedSource = source\n\t}\n\n\tpublic unpinSource(): void {\n\t\tinvariant(this.pinnedSource, 'No source is pinned at the time.')\n\n\t\tthis.pinnedSourceId = null\n\t\tthis.pinnedSource = null\n\t}\n\n\tprivate addHandler(\n\t\trole: HandlerRole,\n\t\ttype: SourceType | TargetType,\n\t\thandler: DragSource | DropTarget,\n\t): string {\n\t\tconst id = getNextHandlerId(role)\n\t\tthis.types.set(id, type)\n\t\tif (role === HandlerRole.SOURCE) {\n\t\t\tthis.dragSources.set(id, handler as DragSource)\n\t\t} else if (role === HandlerRole.TARGET) {\n\t\t\tthis.dropTargets.set(id, handler as DropTarget)\n\t\t}\n\t\treturn id\n\t}\n}\n", "export * from './asap.js'\nexport * from './AsapQueue.js'\nexport * from './TaskFactory.js'\nexport * from './types.js'\n", "import { AsapQueue } from './AsapQueue.js'\nimport { TaskFactory } from './TaskFactory.js'\nimport type { TaskFn } from './types.js'\n\nconst asapQueue = new AsapQueue()\nconst taskFactory = new TaskFactory(asapQueue.registerPendingError)\n\n/**\n * Calls a task as soon as possible after returning, in its own event, with priority\n * over other events like animation, reflow, and repaint. An error thrown from an\n * event will not interrupt, nor even substantially slow down the processing of\n * other events, but will be rather postponed to a lower priority event.\n * @param {{call}} task A callable object, typically a function that takes no\n * arguments.\n */\nexport function asap(task: TaskFn) {\n\tasapQueue.enqueueTask(taskFactory.create(task))\n}\n", "/* eslint-disable no-restricted-globals, @typescript-eslint/ban-ts-comment, @typescript-eslint/no-unused-vars, @typescript-eslint/no-non-null-assertion */\nimport { makeRequestCall, makeRequestCallFromTimer } from './makeRequestCall.js'\nimport type { Task } from './types.js'\n\nexport class AsapQueue {\n\tprivate queue: Task[] = []\n\t// We queue errors to ensure they are thrown in right order (FIFO).\n\t// Array-as-queue is good enough here, since we are just dealing with exceptions.\n\tprivate pendingErrors: any[] = []\n\t// Once a flush has been requested, no further calls to `requestFlush` are\n\t// necessary until the next `flush` completes.\n\t// @ts-ignore\n\tprivate flushing = false\n\t// `requestFlush` is an implementation-specific method that attempts to kick\n\t// off a `flush` event as quickly as possible. `flush` will attempt to exhaust\n\t// the event queue before yielding to the browser's own event loop.\n\tprivate requestFlush: () => void\n\n\tprivate requestErrorThrow: () => void\n\t// The position of the next task to execute in the task queue. This is\n\t// preserved between calls to `flush` so that it can be resumed if\n\t// a task throws an exception.\n\tprivate index = 0\n\t// If a task schedules additional tasks recursively, the task queue can grow\n\t// unbounded. To prevent memory exhaustion, the task queue will periodically\n\t// truncate already-completed tasks.\n\tprivate capacity = 1024\n\n\tpublic constructor() {\n\t\t// `requestFlush` requests that the high priority event queue be flushed as\n\t\t// soon as possible.\n\t\t// This is useful to prevent an error thrown in a task from stalling the event\n\t\t// queue if the exception handled by Node.js’s\n\t\t// `process.on(\"uncaughtException\")` or by a domain.\n\n\t\t// `requestFlush` is implemented using a strategy based on data collected from\n\t\t// every available SauceLabs Selenium web driver worker at time of writing.\n\t\t// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593\n\t\tthis.requestFlush = makeRequestCall(this.flush)\n\t\tthis.requestErrorThrow = makeRequestCallFromTimer(() => {\n\t\t\t// Throw first error\n\t\t\tif (this.pendingErrors.length) {\n\t\t\t\tthrow this.pendingErrors.shift()\n\t\t\t}\n\t\t})\n\t}\n\n\t// Use the fastest means possible to execute a task in its own turn, with\n\t// priority over other events including IO, animation, reflow, and redraw\n\t// events in browsers.\n\t//\n\t// An exception thrown by a task will permanently interrupt the processing of\n\t// subsequent tasks. The higher level `asap` function ensures that if an\n\t// exception is thrown by a task, that the task queue will continue flushing as\n\t// soon as possible, but if you use `rawAsap` directly, you are responsible to\n\t// either ensure that no exceptions are thrown from your task, or to manually\n\t// call `rawAsap.requestFlush` if an exception is thrown.\n\tpublic enqueueTask(task: Task): void {\n\t\tconst { queue: q, requestFlush } = this\n\t\tif (!q.length) {\n\t\t\trequestFlush()\n\t\t\tthis.flushing = true\n\t\t}\n\t\t// Equivalent to push, but avoids a function call.\n\t\tq[q.length] = task\n\t}\n\n\t// The flush function processes all tasks that have been scheduled with\n\t// `rawAsap` unless and until one of those tasks throws an exception.\n\t// If a task throws an exception, `flush` ensures that its state will remain\n\t// consistent and will resume where it left off when called again.\n\t// However, `flush` does not make any arrangements to be called again if an\n\t// exception is thrown.\n\tprivate flush = () => {\n\t\tconst { queue: q } = this\n\t\twhile (this.index < q.length) {\n\t\t\tconst currentIndex = this.index\n\t\t\t// Advance the index before calling the task. This ensures that we will\n\t\t\t// begin flushing on the next task the task throws an error.\n\t\t\tthis.index++\n\t\t\tq[currentIndex]!.call()\n\t\t\t// Prevent leaking memory for long chains of recursive calls to `asap`.\n\t\t\t// If we call `asap` within tasks scheduled by `asap`, the queue will\n\t\t\t// grow, but to avoid an O(n) walk for every task we execute, we don't\n\t\t\t// shift tasks off the queue after they have been executed.\n\t\t\t// Instead, we periodically shift 1024 tasks off the queue.\n\t\t\tif (this.index > this.capacity) {\n\t\t\t\t// Manually shift all values starting at the index back to the\n\t\t\t\t// beginning of the queue.\n\t\t\t\tfor (\n\t\t\t\t\tlet scan = 0, newLength = q.length - this.index;\n\t\t\t\t\tscan < newLength;\n\t\t\t\t\tscan++\n\t\t\t\t) {\n\t\t\t\t\tq[scan] = q[scan + this.index]!\n\t\t\t\t}\n\t\t\t\tq.length -= this.index\n\t\t\t\tthis.index = 0\n\t\t\t}\n\t\t}\n\t\tq.length = 0\n\t\tthis.index = 0\n\t\tthis.flushing = false\n\t}\n\n\t// In a web browser, exceptions are not fatal. However, to avoid\n\t// slowing down the queue of pending tasks, we rethrow the error in a\n\t// lower priority turn.\n\tpublic registerPendingError = (err: any) => {\n\t\tthis.pendingErrors.push(err)\n\t\tthis.requestErrorThrow()\n\t}\n}\n\n// The message channel technique was discovered by Malte Ubl and was the\n// original foundation for this library.\n// http://www.nonblocking.io/2011/06/windownexttick.html\n\n// Safari 6.0.5 (at least) intermittently fails to create message ports on a\n// page's first load. Thankfully, this version of Safari supports\n// MutationObservers, so we don't need to fall back in that case.\n\n// function makeRequestCallFromMessageChannel(callback) {\n// var channel = new MessageChannel();\n// channel.port1.onmessage = callback;\n// return function requestCall() {\n// channel.port2.postMessage(0);\n// };\n// }\n\n// For reasons explained above, we are also unable to use `setImmediate`\n// under any circumstances.\n// Even if we were, there is another bug in Internet Explorer 10.\n// It is not sufficient to assign `setImmediate` to `requestFlush` because\n// `setImmediate` must be called *by name* and therefore must be wrapped in a\n// closure.\n// Never forget.\n\n// function makeRequestCallFromSetImmediate(callback) {\n// return function requestCall() {\n// setImmediate(callback);\n// };\n// }\n\n// Safari 6.0 has a problem where timers will get lost while the user is\n// scrolling. This problem does not impact ASAP because Safari 6.0 supports\n// mutation observers, so that implementation is used instead.\n// However, if we ever elect to use timers in Safari, the prevalent work-around\n// is to add a scroll event listener that calls for a flush.\n\n// `setTimeout` does not call the passed callback if the delay is less than\n// approximately 7 in web workers in Firefox 8 through 18, and sometimes not\n// even then.\n\n// This is for `asap.js` only.\n// Its name will be periodically randomized to break any code that depends on\n// // its existence.\n// rawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer\n\n// ASAP was originally a nextTick shim included in Q. This was factored out\n// into this ASAP package. It was later adapted to RSVP which made further\n// amendments. These decisions, particularly to marginalize MessageChannel and\n// to capture the MutationObserver implementation in a closure, were integrated\n// back into ASAP proper.\n// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js\n", "// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that\n// have WebKitMutationObserver but not un-prefixed MutationObserver.\n// Must use `global` or `self` instead of `window` to work in both frames and web\n// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.\n\n/* globals self */\nconst scope = typeof global !== 'undefined' ? global : self\nconst BrowserMutationObserver =\n\t(scope as any).MutationObserver || (scope as any).WebKitMutationObserver\n\nexport function makeRequestCallFromTimer(callback: () => void) {\n\treturn function requestCall() {\n\t\t// We dispatch a timeout with a specified delay of 0 for engines that\n\t\t// can reliably accommodate that request. This will usually be snapped\n\t\t// to a 4 milisecond delay, but once we're flushing, there's no delay\n\t\t// between events.\n\t\tconst timeoutHandle = setTimeout(handleTimer, 0)\n\t\t// However, since this timer gets frequently dropped in Firefox\n\t\t// workers, we enlist an interval handle that will try to fire\n\t\t// an event 20 times per second until it succeeds.\n\t\tconst intervalHandle = setInterval(handleTimer, 50)\n\n\t\tfunction handleTimer() {\n\t\t\t// Whichever timer succeeds will cancel both timers and\n\t\t\t// execute the callback.\n\t\t\tclearTimeout(timeoutHandle)\n\t\t\tclearInterval(intervalHandle)\n\t\t\tcallback()\n\t\t}\n\t}\n}\n\n// To request a high priority event, we induce a mutation observer by toggling\n// the text of a text node between \"1\" and \"-1\".\nexport function makeRequestCallFromMutationObserver(callback: () => void) {\n\tlet toggle = 1\n\tconst observer = new BrowserMutationObserver(callback)\n\tconst node = document.createTextNode('')\n\tobserver.observe(node, { characterData: true })\n\treturn function requestCall() {\n\t\ttoggle = -toggle\n\t\t;(node as any).data = toggle\n\t}\n}\n\nexport const makeRequestCall =\n\ttypeof BrowserMutationObserver === 'function'\n\t\t? // MutationObservers are desirable because they have high priority and work\n\t\t // reliably everywhere they are implemented.\n\t\t // They are implemented in all modern browsers.\n\t\t //\n\t\t // - Android 4-4.3\n\t\t // - Chrome 26-34\n\t\t // - Firefox 14-29\n\t\t // - Internet Explorer 11\n\t\t // - iPad Safari 6-7.1\n\t\t // - iPhone Safari 7-7.1\n\t\t // - Safari 6-7\n\t\t makeRequestCallFromMutationObserver\n\t\t: // MessageChannels are desirable because they give direct access to the HTML\n\t\t // task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera\n\t\t // 11-12, and in web workers in many engines.\n\t\t // Although message channels yield to any queued rendering and IO tasks, they\n\t\t // would be better than imposing the 4ms delay of timers.\n\t\t // However, they do not work reliably in Internet Explorer or Safari.\n\n\t\t // Internet Explorer 10 is the only browser that has setImmediate but does\n\t\t // not have MutationObservers.\n\t\t // Although setImmediate yields to the browser's renderer, it would be\n\t\t // preferrable to falling back to setTimeout since it does not have\n\t\t // the minimum 4ms penalty.\n\t\t // Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and\n\t\t // Desktop to a lesser extent) that renders both setImmediate and\n\t\t // MessageChannel useless for the purposes of ASAP.\n\t\t // https://github.com/kriskowal/q/issues/396\n\n\t\t // Timers are implemented universally.\n\t\t // We fall back to timers in workers in most engines, and in foreground\n\t\t // contexts in the following browsers.\n\t\t // However, note that even this simple case requires nuances to operate in a\n\t\t // broad spectrum of browsers.\n\t\t //\n\t\t // - Firefox 3-13\n\t\t // - Internet Explorer 6-9\n\t\t // - iPad Safari 4.3\n\t\t // - Lynx 2.8.7\n\t\t makeRequestCallFromTimer\n", "import { RawTask } from './RawTask.js'\nimport type { Task } from './types.js'\n\nexport class TaskFactory {\n\tprivate freeTasks: RawTask[] = []\n\n\tpublic constructor(private onError: (err: any) => void) {}\n\n\tpublic create(task: () => void): Task {\n\t\tconst tasks = this.freeTasks\n\t\tconst t = tasks.length\n\t\t\t? (tasks.pop() as RawTask)\n\t\t\t: new RawTask(this.onError, (t) => (tasks[tasks.length] = t))\n\t\tt.task = task\n\t\treturn t\n\t}\n}\n", "// We wrap tasks with recyclable task objects. A task object implements\n\nimport type { Task, TaskFn } from 'types'\n\n// `call`, just like a function.\nexport class RawTask implements Task {\n\tpublic task: TaskFn | null = null\n\n\tpublic constructor(\n\t\tprivate onError: (err: any) => void,\n\t\tprivate release: (t: RawTask) => void,\n\t) {}\n\n\tpublic call() {\n\t\ttry {\n\t\t\tthis.task && this.task()\n\t\t} catch (error) {\n\t\t\tthis.onError(error)\n\t\t} finally {\n\t\t\tthis.task = null\n\t\t\tthis.release(this)\n\t\t}\n\t}\n}\n", "export interface Task {\n\tcall(): void\n}\nexport type TaskFn = () => void\n", "import type { Action, SourceIdPayload, TargetIdPayload } from '../interfaces.js'\n\nexport const ADD_SOURCE = 'dnd-core/ADD_SOURCE'\nexport const ADD_TARGET = 'dnd-core/ADD_TARGET'\nexport const REMOVE_SOURCE = 'dnd-core/REMOVE_SOURCE'\nexport const REMOVE_TARGET = 'dnd-core/REMOVE_TARGET'\n\nexport function addSource(sourceId: string): Action {\n\treturn {\n\t\ttype: ADD_SOURCE,\n\t\tpayload: {\n\t\t\tsourceId,\n\t\t},\n\t}\n}\n\nexport function addTarget(targetId: string): Action {\n\treturn {\n\t\ttype: ADD_TARGET,\n\t\tpayload: {\n\t\t\ttargetId,\n\t\t},\n\t}\n}\n\nexport function removeSource(sourceId: string): Action {\n\treturn {\n\t\ttype: REMOVE_SOURCE,\n\t\tpayload: {\n\t\t\tsourceId,\n\t\t},\n\t}\n}\n\nexport function removeTarget(targetId: string): Action {\n\treturn {\n\t\ttype: REMOVE_TARGET,\n\t\tpayload: {\n\t\t\ttargetId,\n\t\t},\n\t}\n}\n", "import { invariant } from '@react-dnd/invariant'\n\nimport type { DragSource, DropTarget, Identifier } from './interfaces.js'\n\nexport function validateSourceContract(source: DragSource): void {\n\tinvariant(\n\t\ttypeof source.canDrag === 'function',\n\t\t'Expected canDrag to be a function.',\n\t)\n\tinvariant(\n\t\ttypeof source.beginDrag === 'function',\n\t\t'Expected beginDrag to be a function.',\n\t)\n\tinvariant(\n\t\ttypeof source.endDrag === 'function',\n\t\t'Expected endDrag to be a function.',\n\t)\n}\n\nexport function validateTargetContract(target: DropTarget): void {\n\tinvariant(\n\t\ttypeof target.canDrop === 'function',\n\t\t'Expected canDrop to be a function.',\n\t)\n\tinvariant(\n\t\ttypeof target.hover === 'function',\n\t\t'Expected hover to be a function.',\n\t)\n\tinvariant(\n\t\ttypeof target.drop === 'function',\n\t\t'Expected beginDrag to be a function.',\n\t)\n}\n\nexport function validateType(\n\ttype: Identifier | Identifier[],\n\tallowArray?: boolean,\n): void {\n\tif (allowArray && Array.isArray(type)) {\n\t\ttype.forEach((t) => validateType(t, false))\n\t\treturn\n\t}\n\n\tinvariant(\n\t\ttypeof type === 'string' || typeof type === 'symbol',\n\t\tallowArray\n\t\t\t? 'Type can only be a string, a symbol, or an array of either.'\n\t\t\t: 'Type can only be a string or a symbol.',\n\t)\n}\n", "export type Identifier = string | symbol\nexport type SourceType = Identifier\nexport type TargetType = Identifier | Identifier[]\nexport type Unsubscribe = () => void\nexport type Listener = () => void\n\nexport interface XYCoord {\n\tx: number\n\ty: number\n}\n\nexport enum HandlerRole {\n\tSOURCE = 'SOURCE',\n\tTARGET = 'TARGET',\n}\n\nexport interface Backend {\n\tsetup(): void\n\tteardown(): void\n\tconnectDragSource(sourceId: any, node?: any, options?: any): Unsubscribe\n\tconnectDragPreview(sourceId: any, node?: any, options?: any): Unsubscribe\n\tconnectDropTarget(targetId: any, node?: any, options?: any): Unsubscribe\n\tprofile(): Record\n}\n\nexport interface DragDropMonitor {\n\tsubscribeToStateChange(\n\t\tlistener: Listener,\n\t\toptions?: {\n\t\t\thandlerIds?: Identifier[]\n\t\t},\n\t): Unsubscribe\n\tsubscribeToOffsetChange(listener: Listener): Unsubscribe\n\tcanDragSource(sourceId: Identifier | undefined): boolean\n\tcanDropOnTarget(targetId: Identifier | undefined): boolean\n\n\t/**\n\t * Returns true if a drag operation is in progress, and either the owner initiated the drag, or its isDragging()\n\t * is defined and returns true.\n\t */\n\tisDragging(): boolean\n\tisDraggingSource(sourceId: Identifier | undefined): boolean\n\tisOverTarget(\n\t\ttargetId: Identifier | undefined,\n\t\toptions?: {\n\t\t\tshallow?: boolean\n\t\t},\n\t): boolean\n\n\t/**\n\t * Returns a string or a symbol identifying the type of the current dragged item. Returns null if no item is being dragged.\n\t */\n\tgetItemType(): Identifier | null\n\n\t/**\n\t * Returns a plain object representing the currently dragged item. Every drag source must specify it by returning an object\n\t * from its beginDrag() method. Returns null if no item is being dragged.\n\t */\n\tgetItem(): any\n\tgetSourceId(): Identifier | null\n\tgetTargetIds(): Identifier[]\n\t/**\n\t * Returns a plain object representing the last recorded drop result. The drop targets may optionally specify it by returning an\n\t * object from their drop() methods. When a chain of drop() is dispatched for the nested targets, bottom up, any parent that\n\t * explicitly returns its own result from drop() overrides the child drop result previously set by the child. Returns null if\n\t * called outside endDrag().\n\t */\n\tgetDropResult(): any\n\t/**\n\t * Returns true if some drop target has handled the drop event, false otherwise. Even if a target did not return a drop result,\n\t * didDrop() returns true. Use it inside endDrag() to test whether any drop target has handled the drop. Returns false if called\n\t * outside endDrag().\n\t */\n\tdidDrop(): boolean\n\tisSourcePublic(): boolean | null\n\t/**\n\t * Returns the { x, y } client offset of the pointer at the time when the current drag operation has started.\n\t * Returns null if no item is being dragged.\n\t */\n\tgetInitialClientOffset(): XYCoord | null\n\t/**\n\t * Returns the { x, y } client offset of the drag source component's root DOM node at the time when the current drag\n\t * operation has started. Returns null if no item is being dragged.\n\t */\n\tgetInitialSourceClientOffset(): XYCoord | null\n\n\t/**\n\t * Returns the last recorded { x, y } client offset of the pointer while a drag operation is in progress.\n\t * Returns null if no item is being dragged.\n\t */\n\tgetClientOffset(): XYCoord | null\n\n\t/**\n\t * Returns the projected { x, y } client offset of the drag source component's root DOM node, based on its position at the time\n\t * when the current drag operation has started, and the movement difference. Returns null if no item is being dragged.\n\t */\n\tgetSourceClientOffset(): XYCoord | null\n\n\t/**\n\t * Returns the { x, y } difference between the last recorded client offset of the pointer and the client offset when the current\n\t * drag operation has started. Returns null if no item is being dragged.\n\t */\n\tgetDifferenceFromInitialOffset(): XYCoord | null\n}\n\nexport interface HandlerRegistry {\n\taddSource(type: SourceType, source: DragSource): Identifier\n\taddTarget(type: TargetType, target: DropTarget): Identifier\n\tcontainsHandler(handler: DragSource | DropTarget): boolean\n\tgetSource(sourceId: Identifier, includePinned?: boolean): DragSource\n\tgetSourceType(sourceId: Identifier): SourceType\n\tgetTargetType(targetId: Identifier): TargetType\n\tgetTarget(targetId: Identifier): DropTarget\n\tisSourceId(handlerId: Identifier): boolean\n\tisTargetId(handlerId: Identifier): boolean\n\tremoveSource(sourceId: Identifier): void\n\tremoveTarget(targetId: Identifier): void\n\tpinSource(sourceId: Identifier): void\n\tunpinSource(): void\n}\n\nexport interface Action {\n\ttype: Identifier\n\tpayload: Payload\n}\nexport interface SentinelAction {\n\ttype: Identifier\n}\n\nexport type ActionCreator = (args: any[]) => Action\n\nexport interface BeginDragOptions {\n\tpublishSource?: boolean\n\tclientOffset?: XYCoord\n\tgetSourceClientOffset?: (sourceId: Identifier | undefined) => XYCoord\n}\n\nexport interface InitCoordsPayload {\n\tclientOffset: XYCoord | null\n\tsourceClientOffset: XYCoord | null\n}\n\nexport interface BeginDragPayload {\n\titemType: Identifier\n\titem: any\n\tsourceId: Identifier\n\tclientOffset: XYCoord | null\n\tsourceClientOffset: XYCoord | null\n\tisSourcePublic: boolean\n}\n\nexport interface HoverPayload {\n\ttargetIds: Identifier[]\n\tclientOffset: XYCoord | null\n}\n\nexport interface HoverOptions {\n\tclientOffset?: XYCoord\n}\n\nexport interface DropPayload {\n\tdropResult: any\n}\n\nexport interface TargetIdPayload {\n\ttargetId: Identifier\n}\n\nexport interface SourceIdPayload {\n\tsourceId: Identifier\n}\n\nexport interface DragDropActions {\n\tbeginDrag(\n\t\tsourceIds?: Identifier[],\n\t\toptions?: any,\n\t): Action | undefined\n\tpublishDragSource(): SentinelAction | undefined\n\thover(targetIds: Identifier[], options?: any): Action\n\tdrop(options?: any): void\n\tendDrag(): SentinelAction\n}\n\nexport interface DragDropManager {\n\tgetMonitor(): DragDropMonitor\n\tgetBackend(): Backend\n\tgetRegistry(): HandlerRegistry\n\tgetActions(): DragDropActions\n\tdispatch(action: any): void\n}\n\nexport type BackendFactory = (\n\tmanager: DragDropManager,\n\tglobalContext?: any,\n\tconfiguration?: any,\n) => Backend\n\nexport interface DragSource {\n\tbeginDrag(monitor: DragDropMonitor, targetId: Identifier): void\n\tendDrag(monitor: DragDropMonitor, targetId: Identifier): void\n\tcanDrag(monitor: DragDropMonitor, targetId: Identifier): boolean\n\tisDragging(monitor: DragDropMonitor, targetId: Identifier): boolean\n}\n\nexport interface DropTarget {\n\tcanDrop(monitor: DragDropMonitor, targetId: Identifier): boolean\n\thover(monitor: DragDropMonitor, targetId: Identifier): void\n\tdrop(monitor: DragDropMonitor, targetId: Identifier): any\n}\n", "let nextUniqueId = 0\n\nexport function getNextUniqueId(): number {\n\treturn nextUniqueId++\n}\n", "import type { Action } from '../interfaces.js'\nimport { get } from '../utils/js_utils.js'\nimport type { State as DirtyHandlerIdsState } from './dirtyHandlerIds.js'\nimport { reduce as dirtyHandlerIds } from './dirtyHandlerIds.js'\nimport type { State as DragOffsetState } from './dragOffset.js'\nimport { reduce as dragOffset } from './dragOffset.js'\nimport type { State as DragOperationState } from './dragOperation.js'\nimport { reduce as dragOperation } from './dragOperation.js'\nimport type { State as RefCountState } from './refCount.js'\nimport { reduce as refCount } from './refCount.js'\nimport type { State as StateIdState } from './stateId.js'\nimport { reduce as stateId } from './stateId.js'\n\nexport interface State {\n\tdirtyHandlerIds: DirtyHandlerIdsState\n\tdragOffset: DragOffsetState\n\trefCount: RefCountState\n\tdragOperation: DragOperationState\n\tstateId: StateIdState\n}\n\nexport function reduce(state: State = {} as State, action: Action): State {\n\treturn {\n\t\tdirtyHandlerIds: dirtyHandlerIds(state.dirtyHandlerIds, {\n\t\t\ttype: action.type,\n\t\t\tpayload: {\n\t\t\t\t...action.payload,\n\t\t\t\tprevTargetIds: get(state, 'dragOperation.targetIds', []),\n\t\t\t},\n\t\t}),\n\t\tdragOffset: dragOffset(state.dragOffset, action),\n\t\trefCount: refCount(state.refCount, action),\n\t\tdragOperation: dragOperation(state.dragOperation, action),\n\t\tstateId: stateId(state.stateId),\n\t}\n}\n", "import {\n\tBEGIN_DRAG,\n\tDROP,\n\tEND_DRAG,\n\tHOVER,\n\tPUBLISH_DRAG_SOURCE,\n} from '../actions/dragDrop/index.js'\nimport {\n\tADD_SOURCE,\n\tADD_TARGET,\n\tREMOVE_SOURCE,\n\tREMOVE_TARGET,\n} from '../actions/registry.js'\nimport type { Action } from '../interfaces.js'\nimport { ALL, NONE } from '../utils/dirtiness.js'\nimport { areArraysEqual } from '../utils/equality.js'\nimport { xor } from '../utils/js_utils.js'\n\nexport type State = string[]\n\nexport interface DirtyHandlerIdPayload {\n\ttargetIds: string[]\n\tprevTargetIds: string[]\n}\n\nexport function reduce(\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t_state: State = NONE,\n\taction: Action,\n): State {\n\tswitch (action.type) {\n\t\tcase HOVER:\n\t\t\tbreak\n\t\tcase ADD_SOURCE:\n\t\tcase ADD_TARGET:\n\t\tcase REMOVE_TARGET:\n\t\tcase REMOVE_SOURCE:\n\t\t\treturn NONE\n\t\tcase BEGIN_DRAG:\n\t\tcase PUBLISH_DRAG_SOURCE:\n\t\tcase END_DRAG:\n\t\tcase DROP:\n\t\tdefault:\n\t\t\treturn ALL\n\t}\n\n\tconst { targetIds = [], prevTargetIds = [] } = action.payload\n\tconst result = xor(targetIds, prevTargetIds)\n\tconst didChange =\n\t\tresult.length > 0 || !areArraysEqual(targetIds, prevTargetIds)\n\n\tif (!didChange) {\n\t\treturn NONE\n\t}\n\n\t// Check the target ids at the innermost position. If they are valid, add them\n\t// to the result\n\tconst prevInnermostTargetId = prevTargetIds[prevTargetIds.length - 1]\n\tconst innermostTargetId = targetIds[targetIds.length - 1]\n\tif (prevInnermostTargetId !== innermostTargetId) {\n\t\tif (prevInnermostTargetId) {\n\t\t\tresult.push(prevInnermostTargetId)\n\t\t}\n\t\tif (innermostTargetId) {\n\t\t\tresult.push(innermostTargetId)\n\t\t}\n\t}\n\n\treturn result\n}\n", "import type { XYCoord } from '../interfaces.js'\n\nexport type EqualityCheck = (a: T, b: T) => boolean\nexport const strictEquality = (a: T, b: T): boolean => a === b\n\n/**\n * Determine if two cartesian coordinate offsets are equal\n * @param offsetA\n * @param offsetB\n */\nexport function areCoordsEqual(\n\toffsetA: XYCoord | null | undefined,\n\toffsetB: XYCoord | null | undefined,\n): boolean {\n\tif (!offsetA && !offsetB) {\n\t\treturn true\n\t} else if (!offsetA || !offsetB) {\n\t\treturn false\n\t} else {\n\t\treturn offsetA.x === offsetB.x && offsetA.y === offsetB.y\n\t}\n}\n\n/**\n * Determines if two arrays of items are equal\n * @param a The first array of items\n * @param b The second array of items\n */\nexport function areArraysEqual(\n\ta: T[],\n\tb: T[],\n\tisEqual: EqualityCheck = strictEquality,\n): boolean {\n\tif (a.length !== b.length) {\n\t\treturn false\n\t}\n\tfor (let i = 0; i < a.length; ++i) {\n\t\tif (!isEqual(a[i] as T, b[i] as T)) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n", "import {\n\tBEGIN_DRAG,\n\tDROP,\n\tEND_DRAG,\n\tHOVER,\n\tINIT_COORDS,\n} from '../actions/dragDrop/index.js'\nimport type { Action, XYCoord } from '../interfaces.js'\nimport { areCoordsEqual } from '../utils/equality.js'\n\nexport interface State {\n\tinitialSourceClientOffset: XYCoord | null\n\tinitialClientOffset: XYCoord | null\n\tclientOffset: XYCoord | null\n}\n\nconst initialState: State = {\n\tinitialSourceClientOffset: null,\n\tinitialClientOffset: null,\n\tclientOffset: null,\n}\n\nexport function reduce(\n\tstate: State = initialState,\n\taction: Action<{\n\t\tsourceClientOffset: XYCoord\n\t\tclientOffset: XYCoord\n\t}>,\n): State {\n\tconst { payload } = action\n\tswitch (action.type) {\n\t\tcase INIT_COORDS:\n\t\tcase BEGIN_DRAG:\n\t\t\treturn {\n\t\t\t\tinitialSourceClientOffset: payload.sourceClientOffset,\n\t\t\t\tinitialClientOffset: payload.clientOffset,\n\t\t\t\tclientOffset: payload.clientOffset,\n\t\t\t}\n\t\tcase HOVER:\n\t\t\tif (areCoordsEqual(state.clientOffset, payload.clientOffset)) {\n\t\t\t\treturn state\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tclientOffset: payload.clientOffset,\n\t\t\t}\n\t\tcase END_DRAG:\n\t\tcase DROP:\n\t\t\treturn initialState\n\t\tdefault:\n\t\t\treturn state\n\t}\n}\n", "import {\n\tBEGIN_DRAG,\n\tDROP,\n\tEND_DRAG,\n\tHOVER,\n\tPUBLISH_DRAG_SOURCE,\n} from '../actions/dragDrop/index.js'\nimport { REMOVE_TARGET } from '../actions/registry.js'\nimport type { Action, Identifier } from '../interfaces.js'\nimport { without } from '../utils/js_utils.js'\n\nexport interface State {\n\titemType: Identifier | Identifier[] | null\n\titem: any\n\tsourceId: string | null\n\ttargetIds: string[]\n\tdropResult: any\n\tdidDrop: boolean\n\tisSourcePublic: boolean | null\n}\n\nconst initialState: State = {\n\titemType: null,\n\titem: null,\n\tsourceId: null,\n\ttargetIds: [],\n\tdropResult: null,\n\tdidDrop: false,\n\tisSourcePublic: null,\n}\n\nexport function reduce(\n\tstate: State = initialState,\n\taction: Action<{\n\t\titemType: Identifier | Identifier[]\n\t\titem: any\n\t\tsourceId: string\n\t\ttargetId: string\n\t\ttargetIds: string[]\n\t\tisSourcePublic: boolean\n\t\tdropResult: any\n\t}>,\n): State {\n\tconst { payload } = action\n\tswitch (action.type) {\n\t\tcase BEGIN_DRAG:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\titemType: payload.itemType,\n\t\t\t\titem: payload.item,\n\t\t\t\tsourceId: payload.sourceId,\n\t\t\t\tisSourcePublic: payload.isSourcePublic,\n\t\t\t\tdropResult: null,\n\t\t\t\tdidDrop: false,\n\t\t\t}\n\t\tcase PUBLISH_DRAG_SOURCE:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tisSourcePublic: true,\n\t\t\t}\n\t\tcase HOVER:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\ttargetIds: payload.targetIds,\n\t\t\t}\n\t\tcase REMOVE_TARGET:\n\t\t\tif (state.targetIds.indexOf(payload.targetId) === -1) {\n\t\t\t\treturn state\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\ttargetIds: without(state.targetIds, payload.targetId),\n\t\t\t}\n\t\tcase DROP:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tdropResult: payload.dropResult,\n\t\t\t\tdidDrop: true,\n\t\t\t\ttargetIds: [],\n\t\t\t}\n\t\tcase END_DRAG:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\titemType: null,\n\t\t\t\titem: null,\n\t\t\t\tsourceId: null,\n\t\t\t\tdropResult: null,\n\t\t\t\tdidDrop: false,\n\t\t\t\tisSourcePublic: null,\n\t\t\t\ttargetIds: [],\n\t\t\t}\n\t\tdefault:\n\t\t\treturn state\n\t}\n}\n", "import {\n\tADD_SOURCE,\n\tADD_TARGET,\n\tREMOVE_SOURCE,\n\tREMOVE_TARGET,\n} from '../actions/registry.js'\nimport type { Action } from '../interfaces.js'\n\nexport type State = number\n\nexport function reduce(state: State = 0, action: Action): State {\n\tswitch (action.type) {\n\t\tcase ADD_SOURCE:\n\t\tcase ADD_TARGET:\n\t\t\treturn state + 1\n\t\tcase REMOVE_SOURCE:\n\t\tcase REMOVE_TARGET:\n\t\t\treturn state - 1\n\t\tdefault:\n\t\t\treturn state\n\t}\n}\n", "export type State = number\n\nexport function reduce(state: State = 0): State {\n\treturn state + 1\n}\n", "import type { BackendFactory, DragDropManager } from 'dnd-core'\n\nimport { HTML5BackendImpl } from './HTML5BackendImpl.js'\nimport type { HTML5BackendContext, HTML5BackendOptions } from './types.js'\nexport { getEmptyImage } from './getEmptyImage.js'\nexport * as NativeTypes from './NativeTypes.js'\nexport type { HTML5BackendContext, HTML5BackendOptions } from './types.js'\n\nexport const HTML5Backend: BackendFactory = function createBackend(\n\tmanager: DragDropManager,\n\tcontext?: HTML5BackendContext,\n\toptions?: HTML5BackendOptions,\n): HTML5BackendImpl {\n\treturn new HTML5BackendImpl(manager, context, options)\n}\n", "import type {\n\tBackend,\n\tDragDropActions,\n\tDragDropManager,\n\tDragDropMonitor,\n\tHandlerRegistry,\n\tIdentifier,\n\tUnsubscribe,\n\tXYCoord,\n} from 'dnd-core'\n\nimport { EnterLeaveCounter } from './EnterLeaveCounter.js'\nimport {\n\tcreateNativeDragSource,\n\tmatchNativeItemType,\n} from './NativeDragSources/index.js'\nimport type { NativeDragSource } from './NativeDragSources/NativeDragSource.js'\nimport * as NativeTypes from './NativeTypes.js'\nimport {\n\tgetDragPreviewOffset,\n\tgetEventClientOffset,\n\tgetNodeClientOffset,\n} from './OffsetUtils.js'\nimport { OptionsReader } from './OptionsReader.js'\nimport type { HTML5BackendContext, HTML5BackendOptions } from './types.js'\n\ntype RootNode = Node & { __isReactDndBackendSetUp: boolean | undefined }\n\nexport class HTML5BackendImpl implements Backend {\n\tprivate options: OptionsReader\n\n\t// React-Dnd Components\n\tprivate actions: DragDropActions\n\tprivate monitor: DragDropMonitor\n\tprivate registry: HandlerRegistry\n\n\t// Internal State\n\tprivate enterLeaveCounter: EnterLeaveCounter\n\n\tprivate sourcePreviewNodes: Map = new Map()\n\tprivate sourcePreviewNodeOptions: Map = new Map()\n\tprivate sourceNodes: Map = new Map()\n\tprivate sourceNodeOptions: Map = new Map()\n\n\tprivate dragStartSourceIds: string[] | null = null\n\tprivate dropTargetIds: string[] = []\n\tprivate dragEnterTargetIds: string[] = []\n\tprivate currentNativeSource: NativeDragSource | null = null\n\tprivate currentNativeHandle: Identifier | null = null\n\tprivate currentDragSourceNode: Element | null = null\n\tprivate altKeyPressed = false\n\tprivate mouseMoveTimeoutTimer: number | null = null\n\tprivate asyncEndDragFrameId: number | null = null\n\tprivate dragOverTargetIds: string[] | null = null\n\n\tprivate lastClientOffset: XYCoord | null = null\n\tprivate hoverRafId: number | null = null\n\n\tpublic constructor(\n\t\tmanager: DragDropManager,\n\t\tglobalContext?: HTML5BackendContext,\n\t\toptions?: HTML5BackendOptions,\n\t) {\n\t\tthis.options = new OptionsReader(globalContext, options)\n\t\tthis.actions = manager.getActions()\n\t\tthis.monitor = manager.getMonitor()\n\t\tthis.registry = manager.getRegistry()\n\t\tthis.enterLeaveCounter = new EnterLeaveCounter(this.isNodeInDocument)\n\t}\n\n\t/**\n\t * Generate profiling statistics for the HTML5Backend.\n\t */\n\tpublic profile(): Record {\n\t\treturn {\n\t\t\tsourcePreviewNodes: this.sourcePreviewNodes.size,\n\t\t\tsourcePreviewNodeOptions: this.sourcePreviewNodeOptions.size,\n\t\t\tsourceNodeOptions: this.sourceNodeOptions.size,\n\t\t\tsourceNodes: this.sourceNodes.size,\n\t\t\tdragStartSourceIds: this.dragStartSourceIds?.length || 0,\n\t\t\tdropTargetIds: this.dropTargetIds.length,\n\t\t\tdragEnterTargetIds: this.dragEnterTargetIds.length,\n\t\t\tdragOverTargetIds: this.dragOverTargetIds?.length || 0,\n\t\t}\n\t}\n\n\t// public for test\n\tpublic get window(): Window | undefined {\n\t\treturn this.options.window\n\t}\n\tpublic get document(): Document | undefined {\n\t\treturn this.options.document\n\t}\n\t/**\n\t * Get the root element to use for event subscriptions\n\t */\n\tprivate get rootElement(): Node | undefined {\n\t\treturn this.options.rootElement as Node\n\t}\n\n\tpublic setup(): void {\n\t\tconst root = this.rootElement as RootNode | undefined\n\t\tif (root === undefined) {\n\t\t\treturn\n\t\t}\n\n\t\tif (root.__isReactDndBackendSetUp) {\n\t\t\tthrow new Error('Cannot have two HTML5 backends at the same time.')\n\t\t}\n\t\troot.__isReactDndBackendSetUp = true\n\t\tthis.addEventListeners(root)\n\t}\n\n\tpublic teardown(): void {\n\t\tconst root = this.rootElement as RootNode\n\t\tif (root === undefined) {\n\t\t\treturn\n\t\t}\n\n\t\troot.__isReactDndBackendSetUp = false\n\t\tthis.removeEventListeners(this.rootElement as Element)\n\t\tthis.clearCurrentDragSourceNode()\n\t\tif (this.asyncEndDragFrameId) {\n\t\t\tthis.window?.cancelAnimationFrame(this.asyncEndDragFrameId)\n\t\t}\n\t}\n\n\tpublic connectDragPreview(\n\t\tsourceId: string,\n\t\tnode: Element,\n\t\toptions: any,\n\t): Unsubscribe {\n\t\tthis.sourcePreviewNodeOptions.set(sourceId, options)\n\t\tthis.sourcePreviewNodes.set(sourceId, node)\n\n\t\treturn (): void => {\n\t\t\tthis.sourcePreviewNodes.delete(sourceId)\n\t\t\tthis.sourcePreviewNodeOptions.delete(sourceId)\n\t\t}\n\t}\n\n\tpublic connectDragSource(\n\t\tsourceId: string,\n\t\tnode: Element,\n\t\toptions: any,\n\t): Unsubscribe {\n\t\tthis.sourceNodes.set(sourceId, node)\n\t\tthis.sourceNodeOptions.set(sourceId, options)\n\n\t\tconst handleDragStart = (e: any) => this.handleDragStart(e, sourceId)\n\t\tconst handleSelectStart = (e: any) => this.handleSelectStart(e)\n\n\t\tnode.setAttribute('draggable', 'true')\n\t\tnode.addEventListener('dragstart', handleDragStart)\n\t\tnode.addEventListener('selectstart', handleSelectStart)\n\n\t\treturn (): void => {\n\t\t\tthis.sourceNodes.delete(sourceId)\n\t\t\tthis.sourceNodeOptions.delete(sourceId)\n\n\t\t\tnode.removeEventListener('dragstart', handleDragStart)\n\t\t\tnode.removeEventListener('selectstart', handleSelectStart)\n\t\t\tnode.setAttribute('draggable', 'false')\n\t\t}\n\t}\n\n\tpublic connectDropTarget(targetId: string, node: HTMLElement): Unsubscribe {\n\t\tconst handleDragEnter = (e: DragEvent) => this.handleDragEnter(e, targetId)\n\t\tconst handleDragOver = (e: DragEvent) => this.handleDragOver(e, targetId)\n\t\tconst handleDrop = (e: DragEvent) => this.handleDrop(e, targetId)\n\n\t\tnode.addEventListener('dragenter', handleDragEnter)\n\t\tnode.addEventListener('dragover', handleDragOver)\n\t\tnode.addEventListener('drop', handleDrop)\n\n\t\treturn (): void => {\n\t\t\tnode.removeEventListener('dragenter', handleDragEnter)\n\t\t\tnode.removeEventListener('dragover', handleDragOver)\n\t\t\tnode.removeEventListener('drop', handleDrop)\n\t\t}\n\t}\n\n\tprivate addEventListeners(target: Node) {\n\t\t// SSR Fix (https://github.com/react-dnd/react-dnd/pull/813\n\t\tif (!target.addEventListener) {\n\t\t\treturn\n\t\t}\n\t\ttarget.addEventListener(\n\t\t\t'dragstart',\n\t\t\tthis.handleTopDragStart as EventListener,\n\t\t)\n\t\ttarget.addEventListener('dragstart', this.handleTopDragStartCapture, true)\n\t\ttarget.addEventListener('dragend', this.handleTopDragEndCapture, true)\n\t\ttarget.addEventListener(\n\t\t\t'dragenter',\n\t\t\tthis.handleTopDragEnter as EventListener,\n\t\t)\n\t\ttarget.addEventListener(\n\t\t\t'dragenter',\n\t\t\tthis.handleTopDragEnterCapture as EventListener,\n\t\t\ttrue,\n\t\t)\n\t\ttarget.addEventListener(\n\t\t\t'dragleave',\n\t\t\tthis.handleTopDragLeaveCapture as EventListener,\n\t\t\ttrue,\n\t\t)\n\t\ttarget.addEventListener('dragover', this.handleTopDragOver as EventListener)\n\t\ttarget.addEventListener(\n\t\t\t'dragover',\n\t\t\tthis.handleTopDragOverCapture as EventListener,\n\t\t\ttrue,\n\t\t)\n\t\ttarget.addEventListener('drop', this.handleTopDrop as EventListener)\n\t\ttarget.addEventListener(\n\t\t\t'drop',\n\t\t\tthis.handleTopDropCapture as EventListener,\n\t\t\ttrue,\n\t\t)\n\t}\n\n\tprivate removeEventListeners(target: Node) {\n\t\t// SSR Fix (https://github.com/react-dnd/react-dnd/pull/813\n\t\tif (!target.removeEventListener) {\n\t\t\treturn\n\t\t}\n\t\ttarget.removeEventListener('dragstart', this.handleTopDragStart as any)\n\t\ttarget.removeEventListener(\n\t\t\t'dragstart',\n\t\t\tthis.handleTopDragStartCapture,\n\t\t\ttrue,\n\t\t)\n\t\ttarget.removeEventListener('dragend', this.handleTopDragEndCapture, true)\n\t\ttarget.removeEventListener(\n\t\t\t'dragenter',\n\t\t\tthis.handleTopDragEnter as EventListener,\n\t\t)\n\t\ttarget.removeEventListener(\n\t\t\t'dragenter',\n\t\t\tthis.handleTopDragEnterCapture as EventListener,\n\t\t\ttrue,\n\t\t)\n\t\ttarget.removeEventListener(\n\t\t\t'dragleave',\n\t\t\tthis.handleTopDragLeaveCapture as EventListener,\n\t\t\ttrue,\n\t\t)\n\t\ttarget.removeEventListener(\n\t\t\t'dragover',\n\t\t\tthis.handleTopDragOver as EventListener,\n\t\t)\n\t\ttarget.removeEventListener(\n\t\t\t'dragover',\n\t\t\tthis.handleTopDragOverCapture as EventListener,\n\t\t\ttrue,\n\t\t)\n\t\ttarget.removeEventListener('drop', this.handleTopDrop as EventListener)\n\t\ttarget.removeEventListener(\n\t\t\t'drop',\n\t\t\tthis.handleTopDropCapture as EventListener,\n\t\t\ttrue,\n\t\t)\n\t}\n\n\tprivate getCurrentSourceNodeOptions() {\n\t\tconst sourceId = this.monitor.getSourceId() as string\n\t\tconst sourceNodeOptions = this.sourceNodeOptions.get(sourceId)\n\n\t\treturn {\n\t\t\tdropEffect: this.altKeyPressed ? 'copy' : 'move',\n\t\t\t...(sourceNodeOptions || {}),\n\t\t}\n\t}\n\n\tprivate getCurrentDropEffect() {\n\t\tif (this.isDraggingNativeItem()) {\n\t\t\t// It makes more sense to default to 'copy' for native resources\n\t\t\treturn 'copy'\n\t\t}\n\n\t\treturn this.getCurrentSourceNodeOptions().dropEffect\n\t}\n\n\tprivate getCurrentSourcePreviewNodeOptions() {\n\t\tconst sourceId = this.monitor.getSourceId() as string\n\t\tconst sourcePreviewNodeOptions = this.sourcePreviewNodeOptions.get(sourceId)\n\n\t\treturn {\n\t\t\tanchorX: 0.5,\n\t\t\tanchorY: 0.5,\n\t\t\tcaptureDraggingState: false,\n\t\t\t...(sourcePreviewNodeOptions || {}),\n\t\t}\n\t}\n\n\tprivate getSourceClientOffset = (sourceId: string): XYCoord | null => {\n\t\tconst source = this.sourceNodes.get(sourceId)\n\t\treturn (source && getNodeClientOffset(source as HTMLElement)) || null\n\t}\n\n\tprivate isDraggingNativeItem() {\n\t\tconst itemType = this.monitor.getItemType()\n\t\treturn Object.keys(NativeTypes).some(\n\t\t\t(key: string) => (NativeTypes as any)[key] === itemType,\n\t\t)\n\t}\n\n\tprivate beginDragNativeItem(type: string, dataTransfer?: DataTransfer) {\n\t\tthis.clearCurrentDragSourceNode()\n\n\t\tthis.currentNativeSource = createNativeDragSource(type, dataTransfer)\n\t\tthis.currentNativeHandle = this.registry.addSource(\n\t\t\ttype,\n\t\t\tthis.currentNativeSource,\n\t\t)\n\t\tthis.actions.beginDrag([this.currentNativeHandle])\n\t}\n\n\tprivate endDragNativeItem = (): void => {\n\t\tif (!this.isDraggingNativeItem()) {\n\t\t\treturn\n\t\t}\n\n\t\tthis.actions.endDrag()\n\t\tif (this.currentNativeHandle) {\n\t\t\tthis.registry.removeSource(this.currentNativeHandle)\n\t\t}\n\t\tthis.currentNativeHandle = null\n\t\tthis.currentNativeSource = null\n\t}\n\n\tprivate isNodeInDocument = (node: Node | null | undefined): boolean => {\n\t\t// Check the node either in the main document or in the current context\n\t\treturn Boolean(\n\t\t\tnode &&\n\t\t\t\tthis.document &&\n\t\t\t\tthis.document.body &&\n\t\t\t\tthis.document.body.contains(node),\n\t\t)\n\t}\n\n\tprivate endDragIfSourceWasRemovedFromDOM = (): void => {\n\t\tconst node = this.currentDragSourceNode\n\t\tif (node == null || this.isNodeInDocument(node)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (this.clearCurrentDragSourceNode() && this.monitor.isDragging()) {\n\t\t\tthis.actions.endDrag()\n\t\t}\n\t\tthis.cancelHover()\n\t}\n\n\tprivate setCurrentDragSourceNode(node: Element | null) {\n\t\tthis.clearCurrentDragSourceNode()\n\t\tthis.currentDragSourceNode = node\n\n\t\t// A timeout of > 0 is necessary to resolve Firefox issue referenced\n\t\t// See:\n\t\t// * https://github.com/react-dnd/react-dnd/pull/928\n\t\t// * https://github.com/react-dnd/react-dnd/issues/869\n\t\tconst MOUSE_MOVE_TIMEOUT = 1000\n\n\t\t// Receiving a mouse event in the middle of a dragging operation\n\t\t// means it has ended and the drag source node disappeared from DOM,\n\t\t// so the browser didn't dispatch the dragend event.\n\t\t//\n\t\t// We need to wait before we start listening for mousemove events.\n\t\t// This is needed because the drag preview needs to be drawn or else it fires an 'mousemove' event\n\t\t// immediately in some browsers.\n\t\t//\n\t\t// See:\n\t\t// * https://github.com/react-dnd/react-dnd/pull/928\n\t\t// * https://github.com/react-dnd/react-dnd/issues/869\n\t\t//\n\t\tthis.mouseMoveTimeoutTimer = setTimeout(() => {\n\t\t\treturn this.rootElement?.addEventListener(\n\t\t\t\t'mousemove',\n\t\t\t\tthis.endDragIfSourceWasRemovedFromDOM,\n\t\t\t\ttrue,\n\t\t\t)\n\t\t}, MOUSE_MOVE_TIMEOUT) as any as number\n\t}\n\n\tprivate clearCurrentDragSourceNode() {\n\t\tif (this.currentDragSourceNode) {\n\t\t\tthis.currentDragSourceNode = null\n\n\t\t\tif (this.rootElement) {\n\t\t\t\tthis.window?.clearTimeout(this.mouseMoveTimeoutTimer || undefined)\n\t\t\t\tthis.rootElement.removeEventListener(\n\t\t\t\t\t'mousemove',\n\t\t\t\t\tthis.endDragIfSourceWasRemovedFromDOM,\n\t\t\t\t\ttrue,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tthis.mouseMoveTimeoutTimer = null\n\t\t\treturn true\n\t\t}\n\n\t\treturn false\n\t}\n\n\tprivate scheduleHover = (dragOverTargetIds: string[] | null) => {\n\t\tif (\n\t\t\tthis.hoverRafId === null &&\n\t\t\ttypeof requestAnimationFrame !== 'undefined'\n\t\t) {\n\t\t\tthis.hoverRafId = requestAnimationFrame(() => {\n\t\t\t\tif (this.monitor.isDragging()) {\n\t\t\t\t\tthis.actions.hover(dragOverTargetIds || [], {\n\t\t\t\t\t\tclientOffset: this.lastClientOffset,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.hoverRafId = null\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate cancelHover = () => {\n\t\tif (\n\t\t\tthis.hoverRafId !== null &&\n\t\t\ttypeof cancelAnimationFrame !== 'undefined'\n\t\t) {\n\t\t\tcancelAnimationFrame(this.hoverRafId)\n\t\t\tthis.hoverRafId = null\n\t\t}\n\t}\n\n\tpublic handleTopDragStartCapture = (): void => {\n\t\tthis.clearCurrentDragSourceNode()\n\t\tthis.dragStartSourceIds = []\n\t}\n\n\tpublic handleDragStart(e: DragEvent, sourceId: string): void {\n\t\tif (e.defaultPrevented) {\n\t\t\treturn\n\t\t}\n\n\t\tif (!this.dragStartSourceIds) {\n\t\t\tthis.dragStartSourceIds = []\n\t\t}\n\t\tthis.dragStartSourceIds.unshift(sourceId)\n\t}\n\n\tpublic handleTopDragStart = (e: DragEvent): void => {\n\t\tif (e.defaultPrevented) {\n\t\t\treturn\n\t\t}\n\n\t\tconst { dragStartSourceIds } = this\n\t\tthis.dragStartSourceIds = null\n\n\t\tconst clientOffset = getEventClientOffset(e)\n\n\t\t// Avoid crashing if we missed a drop event or our previous drag died\n\t\tif (this.monitor.isDragging()) {\n\t\t\tthis.actions.endDrag()\n\t\t\tthis.cancelHover()\n\t\t}\n\n\t\t// Don't publish the source just yet (see why below)\n\t\tthis.actions.beginDrag(dragStartSourceIds || [], {\n\t\t\tpublishSource: false,\n\t\t\tgetSourceClientOffset: this.getSourceClientOffset,\n\t\t\tclientOffset,\n\t\t})\n\n\t\tconst { dataTransfer } = e\n\t\tconst nativeType = matchNativeItemType(dataTransfer)\n\n\t\tif (this.monitor.isDragging()) {\n\t\t\tif (dataTransfer && typeof dataTransfer.setDragImage === 'function') {\n\t\t\t\t// Use custom drag image if user specifies it.\n\t\t\t\t// If child drag source refuses drag but parent agrees,\n\t\t\t\t// use parent's node as drag image. Neither works in IE though.\n\t\t\t\tconst sourceId: string = this.monitor.getSourceId() as string\n\t\t\t\tconst sourceNode = this.sourceNodes.get(sourceId)\n\t\t\t\tconst dragPreview = this.sourcePreviewNodes.get(sourceId) || sourceNode\n\n\t\t\t\tif (dragPreview) {\n\t\t\t\t\tconst { anchorX, anchorY, offsetX, offsetY } =\n\t\t\t\t\t\tthis.getCurrentSourcePreviewNodeOptions()\n\t\t\t\t\tconst anchorPoint = { anchorX, anchorY }\n\t\t\t\t\tconst offsetPoint = { offsetX, offsetY }\n\t\t\t\t\tconst dragPreviewOffset = getDragPreviewOffset(\n\t\t\t\t\t\tsourceNode as HTMLElement,\n\t\t\t\t\t\tdragPreview as HTMLElement,\n\t\t\t\t\t\tclientOffset,\n\t\t\t\t\t\tanchorPoint,\n\t\t\t\t\t\toffsetPoint,\n\t\t\t\t\t)\n\n\t\t\t\t\tdataTransfer.setDragImage(\n\t\t\t\t\t\tdragPreview,\n\t\t\t\t\t\tdragPreviewOffset.x,\n\t\t\t\t\t\tdragPreviewOffset.y,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\t// Firefox won't drag without setting data\n\t\t\t\tdataTransfer?.setData('application/json', {} as any)\n\t\t\t} catch (err) {\n\t\t\t\t// IE doesn't support MIME types in setData\n\t\t\t}\n\n\t\t\t// Store drag source node so we can check whether\n\t\t\t// it is removed from DOM and trigger endDrag manually.\n\t\t\tthis.setCurrentDragSourceNode(e.target as Element)\n\n\t\t\t// Now we are ready to publish the drag source.. or are we not?\n\t\t\tconst { captureDraggingState } = this.getCurrentSourcePreviewNodeOptions()\n\t\t\tif (!captureDraggingState) {\n\t\t\t\t// Usually we want to publish it in the next tick so that browser\n\t\t\t\t// is able to screenshot the current (not yet dragging) state.\n\t\t\t\t//\n\t\t\t\t// It also neatly avoids a situation where render() returns null\n\t\t\t\t// in the same tick for the source element, and browser freaks out.\n\t\t\t\tsetTimeout(() => this.actions.publishDragSource(), 0)\n\t\t\t} else {\n\t\t\t\t// In some cases the user may want to override this behavior, e.g.\n\t\t\t\t// to work around IE not supporting custom drag previews.\n\t\t\t\t//\n\t\t\t\t// When using a custom drag layer, the only way to prevent\n\t\t\t\t// the default drag preview from drawing in IE is to screenshot\n\t\t\t\t// the dragging state in which the node itself has zero opacity\n\t\t\t\t// and height. In this case, though, returning null from render()\n\t\t\t\t// will abruptly end the dragging, which is not obvious.\n\t\t\t\t//\n\t\t\t\t// This is the reason such behavior is strictly opt-in.\n\t\t\t\tthis.actions.publishDragSource()\n\t\t\t}\n\t\t} else if (nativeType) {\n\t\t\t// A native item (such as URL) dragged from inside the document\n\t\t\tthis.beginDragNativeItem(nativeType)\n\t\t} else if (\n\t\t\tdataTransfer &&\n\t\t\t!dataTransfer.types &&\n\t\t\t((e.target && !(e.target as Element).hasAttribute) ||\n\t\t\t\t!(e.target as Element).hasAttribute('draggable'))\n\t\t) {\n\t\t\t// Looks like a Safari bug: dataTransfer.types is null, but there was no draggable.\n\t\t\t// Just let it drag. It's a native type (URL or text) and will be picked up in\n\t\t\t// dragenter handler.\n\t\t\treturn\n\t\t} else {\n\t\t\t// If by this time no drag source reacted, tell browser not to drag.\n\t\t\te.preventDefault()\n\t\t}\n\t}\n\n\tpublic handleTopDragEndCapture = (): void => {\n\t\tif (this.clearCurrentDragSourceNode() && this.monitor.isDragging()) {\n\t\t\t// Firefox can dispatch this event in an infinite loop\n\t\t\t// if dragend handler does something like showing an alert.\n\t\t\t// Only proceed if we have not handled it already.\n\t\t\tthis.actions.endDrag()\n\t\t}\n\t\tthis.cancelHover()\n\t}\n\n\tpublic handleTopDragEnterCapture = (e: DragEvent): void => {\n\t\tthis.dragEnterTargetIds = []\n\n\t\tif (this.isDraggingNativeItem()) {\n\t\t\tthis.currentNativeSource?.loadDataTransfer(e.dataTransfer)\n\t\t}\n\n\t\tconst isFirstEnter = this.enterLeaveCounter.enter(e.target)\n\t\tif (!isFirstEnter || this.monitor.isDragging()) {\n\t\t\treturn\n\t\t}\n\n\t\tconst { dataTransfer } = e\n\t\tconst nativeType = matchNativeItemType(dataTransfer)\n\n\t\tif (nativeType) {\n\t\t\t// A native item (such as file or URL) dragged from outside the document\n\t\t\tthis.beginDragNativeItem(nativeType, dataTransfer as DataTransfer)\n\t\t}\n\t}\n\n\tpublic handleDragEnter(_e: DragEvent, targetId: string): void {\n\t\tthis.dragEnterTargetIds.unshift(targetId)\n\t}\n\n\tpublic handleTopDragEnter = (e: DragEvent): void => {\n\t\tconst { dragEnterTargetIds } = this\n\t\tthis.dragEnterTargetIds = []\n\n\t\tif (!this.monitor.isDragging()) {\n\t\t\t// This is probably a native item type we don't understand.\n\t\t\treturn\n\t\t}\n\n\t\tthis.altKeyPressed = e.altKey\n\n\t\t// If the target changes position as the result of `dragenter`, `dragover` might still\n\t\t// get dispatched despite target being no longer there. The easy solution is to check\n\t\t// whether there actually is a target before firing `hover`.\n\t\tif (dragEnterTargetIds.length > 0) {\n\t\t\tthis.actions.hover(dragEnterTargetIds, {\n\t\t\t\tclientOffset: getEventClientOffset(e),\n\t\t\t})\n\t\t}\n\n\t\tconst canDrop = dragEnterTargetIds.some((targetId) =>\n\t\t\tthis.monitor.canDropOnTarget(targetId),\n\t\t)\n\n\t\tif (canDrop) {\n\t\t\t// IE requires this to fire dragover events\n\t\t\te.preventDefault()\n\t\t\tif (e.dataTransfer) {\n\t\t\t\te.dataTransfer.dropEffect = this.getCurrentDropEffect()\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic handleTopDragOverCapture = (e: DragEvent): void => {\n\t\tthis.dragOverTargetIds = []\n\n\t\tif (this.isDraggingNativeItem()) {\n\t\t\tthis.currentNativeSource?.loadDataTransfer(e.dataTransfer)\n\t\t}\n\t}\n\n\tpublic handleDragOver(_e: DragEvent, targetId: string): void {\n\t\tif (this.dragOverTargetIds === null) {\n\t\t\tthis.dragOverTargetIds = []\n\t\t}\n\t\tthis.dragOverTargetIds.unshift(targetId)\n\t}\n\n\tpublic handleTopDragOver = (e: DragEvent): void => {\n\t\tconst { dragOverTargetIds } = this\n\t\tthis.dragOverTargetIds = []\n\n\t\tif (!this.monitor.isDragging()) {\n\t\t\t// This is probably a native item type we don't understand.\n\t\t\t// Prevent default \"drop and blow away the whole document\" action.\n\t\t\te.preventDefault()\n\t\t\tif (e.dataTransfer) {\n\t\t\t\te.dataTransfer.dropEffect = 'none'\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tthis.altKeyPressed = e.altKey\n\t\tthis.lastClientOffset = getEventClientOffset(e)\n\n\t\tthis.scheduleHover(dragOverTargetIds)\n\n\t\tconst canDrop = (dragOverTargetIds || []).some((targetId) =>\n\t\t\tthis.monitor.canDropOnTarget(targetId),\n\t\t)\n\n\t\tif (canDrop) {\n\t\t\t// Show user-specified drop effect.\n\t\t\te.preventDefault()\n\t\t\tif (e.dataTransfer) {\n\t\t\t\te.dataTransfer.dropEffect = this.getCurrentDropEffect()\n\t\t\t}\n\t\t} else if (this.isDraggingNativeItem()) {\n\t\t\t// Don't show a nice cursor but still prevent default\n\t\t\t// \"drop and blow away the whole document\" action.\n\t\t\te.preventDefault()\n\t\t} else {\n\t\t\te.preventDefault()\n\t\t\tif (e.dataTransfer) {\n\t\t\t\te.dataTransfer.dropEffect = 'none'\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic handleTopDragLeaveCapture = (e: DragEvent): void => {\n\t\tif (this.isDraggingNativeItem()) {\n\t\t\te.preventDefault()\n\t\t}\n\n\t\tconst isLastLeave = this.enterLeaveCounter.leave(e.target)\n\t\tif (!isLastLeave) {\n\t\t\treturn\n\t\t}\n\n\t\tif (this.isDraggingNativeItem()) {\n\t\t\tsetTimeout(() => this.endDragNativeItem(), 0)\n\t\t}\n\t\tthis.cancelHover()\n\t}\n\n\tpublic handleTopDropCapture = (e: DragEvent): void => {\n\t\tthis.dropTargetIds = []\n\n\t\tif (this.isDraggingNativeItem()) {\n\t\t\te.preventDefault()\n\t\t\tthis.currentNativeSource?.loadDataTransfer(e.dataTransfer)\n\t\t} else if (matchNativeItemType(e.dataTransfer)) {\n\t\t\t// Dragging some elements, like and may still behave like a native drag event,\n\t\t\t// even if the current drag event matches a user-defined type.\n\t\t\t// Stop the default behavior when we're not expecting a native item to be dropped.\n\n\t\t\te.preventDefault()\n\t\t}\n\n\t\tthis.enterLeaveCounter.reset()\n\t}\n\n\tpublic handleDrop(_e: DragEvent, targetId: string): void {\n\t\tthis.dropTargetIds.unshift(targetId)\n\t}\n\n\tpublic handleTopDrop = (e: DragEvent): void => {\n\t\tconst { dropTargetIds } = this\n\t\tthis.dropTargetIds = []\n\n\t\tthis.actions.hover(dropTargetIds, {\n\t\t\tclientOffset: getEventClientOffset(e),\n\t\t})\n\t\tthis.actions.drop({ dropEffect: this.getCurrentDropEffect() })\n\n\t\tif (this.isDraggingNativeItem()) {\n\t\t\tthis.endDragNativeItem()\n\t\t} else if (this.monitor.isDragging()) {\n\t\t\tthis.actions.endDrag()\n\t\t}\n\t\tthis.cancelHover()\n\t}\n\n\tpublic handleSelectStart = (e: DragEvent): void => {\n\t\tconst target = e.target as HTMLElement & { dragDrop: () => void }\n\n\t\t// Only IE requires us to explicitly say\n\t\t// we want drag drop operation to start\n\t\tif (typeof target.dragDrop !== 'function') {\n\t\t\treturn\n\t\t}\n\n\t\t// Inputs and textareas should be selectable\n\t\tif (\n\t\t\ttarget.tagName === 'INPUT' ||\n\t\t\ttarget.tagName === 'SELECT' ||\n\t\t\ttarget.tagName === 'TEXTAREA' ||\n\t\t\ttarget.isContentEditable\n\t\t) {\n\t\t\treturn\n\t\t}\n\n\t\t// For other targets, ask IE\n\t\t// to enable drag and drop\n\t\te.preventDefault()\n\t\ttarget.dragDrop()\n\t}\n}\n", "import { union, without } from './utils/js_utils.js'\n\ntype NodePredicate = (node: Node | null | undefined) => boolean\n\nexport class EnterLeaveCounter {\n\tprivate entered: any[] = []\n\tprivate isNodeInDocument: NodePredicate\n\n\tpublic constructor(isNodeInDocument: NodePredicate) {\n\t\tthis.isNodeInDocument = isNodeInDocument\n\t}\n\n\tpublic enter(enteringNode: EventTarget | null): boolean {\n\t\tconst previousLength = this.entered.length\n\n\t\tconst isNodeEntered = (node: Node): boolean =>\n\t\t\tthis.isNodeInDocument(node) &&\n\t\t\t(!node.contains || node.contains(enteringNode as Node))\n\n\t\tthis.entered = union(this.entered.filter(isNodeEntered), [enteringNode])\n\n\t\treturn previousLength === 0 && this.entered.length > 0\n\t}\n\n\tpublic leave(leavingNode: EventTarget | null): boolean {\n\t\tconst previousLength = this.entered.length\n\n\t\tthis.entered = without(\n\t\t\tthis.entered.filter(this.isNodeInDocument),\n\t\t\tleavingNode,\n\t\t)\n\n\t\treturn previousLength > 0 && this.entered.length === 0\n\t}\n\n\tpublic reset(): void {\n\t\tthis.entered = []\n\t}\n}\n", "// cheap lodash replacements\n\nexport function memoize(fn: () => T): () => T {\n\tlet result: T | null = null\n\tconst memoized = () => {\n\t\tif (result == null) {\n\t\t\tresult = fn()\n\t\t}\n\t\treturn result\n\t}\n\treturn memoized\n}\n\n/**\n * drop-in replacement for _.without\n */\nexport function without(items: T[], item: T) {\n\treturn items.filter((i) => i !== item)\n}\n\nexport function union(itemsA: T[], itemsB: T[]) {\n\tconst set = new Set()\n\tconst insertItem = (item: T) => set.add(item)\n\titemsA.forEach(insertItem)\n\titemsB.forEach(insertItem)\n\n\tconst result: T[] = []\n\tset.forEach((key) => result.push(key))\n\treturn result\n}\n", "import { NativeDragSource } from './NativeDragSource.js'\nimport { nativeTypesConfig } from './nativeTypesConfig.js'\n\nexport function createNativeDragSource(\n\ttype: string,\n\tdataTransfer?: DataTransfer,\n): NativeDragSource {\n\tconst config = nativeTypesConfig[type]\n\tif (!config) {\n\t\tthrow new Error(`native type ${type} has no configuration`)\n\t}\n\tconst result = new NativeDragSource(config)\n\tresult.loadDataTransfer(dataTransfer)\n\treturn result\n}\n\nexport function matchNativeItemType(\n\tdataTransfer: DataTransfer | null,\n): string | null {\n\tif (!dataTransfer) {\n\t\treturn null\n\t}\n\n\tconst dataTransferTypes = Array.prototype.slice.call(dataTransfer.types || [])\n\treturn (\n\t\tObject.keys(nativeTypesConfig).filter((nativeItemType) => {\n\t\t\tconst typeConfig = nativeTypesConfig[nativeItemType]\n\t\t\tif (!typeConfig?.matchesTypes) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn typeConfig.matchesTypes.some(\n\t\t\t\t(t) => dataTransferTypes.indexOf(t) > -1,\n\t\t\t)\n\t\t})[0] || null\n\t)\n}\n", "import type { DragDropMonitor } from 'dnd-core'\n\nimport type { NativeItemConfig } from './nativeTypesConfig.js'\n\nexport class NativeDragSource {\n\tpublic item: any\n\tprivate config: NativeItemConfig\n\n\tpublic constructor(config: NativeItemConfig) {\n\t\tthis.config = config\n\t\tthis.item = {}\n\t\tthis.initializeExposedProperties()\n\t}\n\n\tprivate initializeExposedProperties() {\n\t\tObject.keys(this.config.exposeProperties).forEach((property) => {\n\t\t\tObject.defineProperty(this.item, property, {\n\t\t\t\tconfigurable: true, // This is needed to allow redefining it later\n\t\t\t\tenumerable: true,\n\t\t\t\tget() {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`Browser doesn't allow reading \"${property}\" until the drop event.`,\n\t\t\t\t\t)\n\t\t\t\t\treturn null\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t}\n\n\tpublic loadDataTransfer(dataTransfer: DataTransfer | null | undefined): void {\n\t\tif (dataTransfer) {\n\t\t\tconst newProperties: PropertyDescriptorMap = {}\n\t\t\tObject.keys(this.config.exposeProperties).forEach((property) => {\n\t\t\t\tconst propertyFn = this.config.exposeProperties[property]\n\t\t\t\tif (propertyFn != null) {\n\t\t\t\t\tnewProperties[property] = {\n\t\t\t\t\t\tvalue: propertyFn(dataTransfer, this.config.matchesTypes),\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\tObject.defineProperties(this.item, newProperties)\n\t\t}\n\t}\n\n\tpublic canDrag(): boolean {\n\t\treturn true\n\t}\n\n\tpublic beginDrag(): any {\n\t\treturn this.item\n\t}\n\n\tpublic isDragging(monitor: DragDropMonitor, handle: string): boolean {\n\t\treturn handle === monitor.getSourceId()\n\t}\n\n\tpublic endDrag(): void {\n\t\t// empty\n\t}\n}\n", "import * as NativeTypes from '../NativeTypes.js'\nimport { getDataFromDataTransfer } from './getDataFromDataTransfer.js'\n\nexport interface NativeItemConfigExposePropreties {\n\t[property: string]: (\n\t\tdataTransfer: DataTransfer,\n\t\tmatchesTypes: string[],\n\t) => any\n}\n\nexport interface NativeItemConfig {\n\texposeProperties: NativeItemConfigExposePropreties\n\tmatchesTypes: string[]\n}\n\nexport const nativeTypesConfig: {\n\t[key: string]: NativeItemConfig\n} = {\n\t[NativeTypes.FILE]: {\n\t\texposeProperties: {\n\t\t\tfiles: (dataTransfer: DataTransfer): File[] =>\n\t\t\t\tArray.prototype.slice.call(dataTransfer.files),\n\t\t\titems: (dataTransfer: DataTransfer): DataTransferItemList =>\n\t\t\t\tdataTransfer.items,\n\t\t\tdataTransfer: (dataTransfer: DataTransfer): DataTransfer => dataTransfer,\n\t\t},\n\t\tmatchesTypes: ['Files'],\n\t},\n\t[NativeTypes.HTML]: {\n\t\texposeProperties: {\n\t\t\thtml: (dataTransfer: DataTransfer, matchesTypes: string[]): string =>\n\t\t\t\tgetDataFromDataTransfer(dataTransfer, matchesTypes, ''),\n\t\t\tdataTransfer: (dataTransfer: DataTransfer): DataTransfer => dataTransfer,\n\t\t},\n\t\tmatchesTypes: ['Html', 'text/html'],\n\t},\n\t[NativeTypes.URL]: {\n\t\texposeProperties: {\n\t\t\turls: (dataTransfer: DataTransfer, matchesTypes: string[]): string[] =>\n\t\t\t\tgetDataFromDataTransfer(dataTransfer, matchesTypes, '').split('\\n'),\n\t\t\tdataTransfer: (dataTransfer: DataTransfer): DataTransfer => dataTransfer,\n\t\t},\n\t\tmatchesTypes: ['Url', 'text/uri-list'],\n\t},\n\t[NativeTypes.TEXT]: {\n\t\texposeProperties: {\n\t\t\ttext: (dataTransfer: DataTransfer, matchesTypes: string[]): string =>\n\t\t\t\tgetDataFromDataTransfer(dataTransfer, matchesTypes, ''),\n\t\t\tdataTransfer: (dataTransfer: DataTransfer): DataTransfer => dataTransfer,\n\t\t},\n\t\tmatchesTypes: ['Text', 'text/plain'],\n\t},\n}\n", "export const FILE = '__NATIVE_FILE__'\nexport const URL = '__NATIVE_URL__'\nexport const TEXT = '__NATIVE_TEXT__'\nexport const HTML = '__NATIVE_HTML__'\n", "export function getDataFromDataTransfer(\n\tdataTransfer: DataTransfer,\n\ttypesToTry: string[],\n\tdefaultValue: string,\n): string {\n\tconst result = typesToTry.reduce(\n\t\t(resultSoFar, typeToTry) => resultSoFar || dataTransfer.getData(typeToTry),\n\t\t'',\n\t)\n\n\treturn result != null ? result : defaultValue\n}\n", "import type { XYCoord } from 'dnd-core'\n\nimport { isFirefox, isSafari } from './BrowserDetector.js'\nimport { MonotonicInterpolant } from './MonotonicInterpolant.js'\n\nconst ELEMENT_NODE = 1\n\nexport function getNodeClientOffset(node: Node): XYCoord | null {\n\tconst el = node.nodeType === ELEMENT_NODE ? node : node.parentElement\n\n\tif (!el) {\n\t\treturn null\n\t}\n\n\tconst { top, left } = (el as HTMLElement).getBoundingClientRect()\n\treturn { x: left, y: top }\n}\n\nexport function getEventClientOffset(e: MouseEvent): XYCoord {\n\treturn {\n\t\tx: e.clientX,\n\t\ty: e.clientY,\n\t}\n}\n\nfunction isImageNode(node: any) {\n\treturn (\n\t\tnode.nodeName === 'IMG' &&\n\t\t(isFirefox() || !document.documentElement?.contains(node))\n\t)\n}\n\nfunction getDragPreviewSize(\n\tisImage: boolean,\n\tdragPreview: any,\n\tsourceWidth: number,\n\tsourceHeight: number,\n) {\n\tlet dragPreviewWidth = isImage ? dragPreview.width : sourceWidth\n\tlet dragPreviewHeight = isImage ? dragPreview.height : sourceHeight\n\n\t// Work around @2x coordinate discrepancies in browsers\n\tif (isSafari() && isImage) {\n\t\tdragPreviewHeight /= window.devicePixelRatio\n\t\tdragPreviewWidth /= window.devicePixelRatio\n\t}\n\treturn { dragPreviewWidth, dragPreviewHeight }\n}\n\nexport function getDragPreviewOffset(\n\tsourceNode: HTMLElement,\n\tdragPreview: HTMLElement,\n\tclientOffset: XYCoord,\n\tanchorPoint: { anchorX: number; anchorY: number },\n\toffsetPoint: { offsetX: number; offsetY: number },\n): XYCoord {\n\t// The browsers will use the image intrinsic size under different conditions.\n\t// Firefox only cares if it's an image, but WebKit also wants it to be detached.\n\tconst isImage = isImageNode(dragPreview)\n\tconst dragPreviewNode = isImage ? sourceNode : dragPreview\n\tconst dragPreviewNodeOffsetFromClient = getNodeClientOffset(\n\t\tdragPreviewNode,\n\t) as XYCoord\n\tconst offsetFromDragPreview = {\n\t\tx: clientOffset.x - dragPreviewNodeOffsetFromClient.x,\n\t\ty: clientOffset.y - dragPreviewNodeOffsetFromClient.y,\n\t}\n\tconst { offsetWidth: sourceWidth, offsetHeight: sourceHeight } = sourceNode\n\tconst { anchorX, anchorY } = anchorPoint\n\tconst { dragPreviewWidth, dragPreviewHeight } = getDragPreviewSize(\n\t\tisImage,\n\t\tdragPreview,\n\t\tsourceWidth,\n\t\tsourceHeight,\n\t)\n\n\tconst calculateYOffset = () => {\n\t\tconst interpolantY = new MonotonicInterpolant(\n\t\t\t[0, 0.5, 1],\n\t\t\t[\n\t\t\t\t// Dock to the top\n\t\t\t\toffsetFromDragPreview.y,\n\t\t\t\t// Align at the center\n\t\t\t\t(offsetFromDragPreview.y / sourceHeight) * dragPreviewHeight,\n\t\t\t\t// Dock to the bottom\n\t\t\t\toffsetFromDragPreview.y + dragPreviewHeight - sourceHeight,\n\t\t\t],\n\t\t)\n\t\tlet y = interpolantY.interpolate(anchorY)\n\t\t// Work around Safari 8 positioning bug\n\t\tif (isSafari() && isImage) {\n\t\t\t// We'll have to wait for @3x to see if this is entirely correct\n\t\t\ty += (window.devicePixelRatio - 1) * dragPreviewHeight\n\t\t}\n\t\treturn y\n\t}\n\n\tconst calculateXOffset = () => {\n\t\t// Interpolate coordinates depending on anchor point\n\t\t// If you know a simpler way to do this, let me know\n\t\tconst interpolantX = new MonotonicInterpolant(\n\t\t\t[0, 0.5, 1],\n\t\t\t[\n\t\t\t\t// Dock to the left\n\t\t\t\toffsetFromDragPreview.x,\n\t\t\t\t// Align at the center\n\t\t\t\t(offsetFromDragPreview.x / sourceWidth) * dragPreviewWidth,\n\t\t\t\t// Dock to the right\n\t\t\t\toffsetFromDragPreview.x + dragPreviewWidth - sourceWidth,\n\t\t\t],\n\t\t)\n\t\treturn interpolantX.interpolate(anchorX)\n\t}\n\n\t// Force offsets if specified in the options.\n\tconst { offsetX, offsetY } = offsetPoint\n\tconst isManualOffsetX = offsetX === 0 || offsetX\n\tconst isManualOffsetY = offsetY === 0 || offsetY\n\treturn {\n\t\tx: isManualOffsetX ? offsetX : calculateXOffset(),\n\t\ty: isManualOffsetY ? offsetY : calculateYOffset(),\n\t}\n}\n", "import { memoize } from './utils/js_utils.js'\n\ndeclare global {\n\tinterface Window extends HTMLElement {\n\t\tsafari: any\n\t}\n}\n\nexport type Predicate = () => boolean\nexport const isFirefox: Predicate = memoize(() =>\n\t/firefox/i.test(navigator.userAgent),\n)\nexport const isSafari: Predicate = memoize(() => Boolean(window.safari))\n", "export class MonotonicInterpolant {\n\tprivate xs: any\n\tprivate ys: any\n\tprivate c1s: any\n\tprivate c2s: any\n\tprivate c3s: any\n\n\tpublic constructor(xs: number[], ys: number[]) {\n\t\tconst { length } = xs\n\n\t\t// Rearrange xs and ys so that xs is sorted\n\t\tconst indexes = []\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tindexes.push(i)\n\t\t}\n\t\tindexes.sort((a, b) => ((xs[a] as number) < (xs[b] as number) ? -1 : 1))\n\n\t\t// Get consecutive differences and slopes\n\t\tconst dys = []\n\t\tconst dxs = []\n\t\tconst ms = []\n\t\tlet dx\n\t\tlet dy\n\t\tfor (let i = 0; i < length - 1; i++) {\n\t\t\tdx = (xs[i + 1] as number) - (xs[i] as number)\n\t\t\tdy = (ys[i + 1] as number) - (ys[i] as number)\n\t\t\tdxs.push(dx)\n\t\t\tdys.push(dy)\n\t\t\tms.push(dy / dx)\n\t\t}\n\n\t\t// Get degree-1 coefficients\n\t\tconst c1s = [ms[0]]\n\t\tfor (let i = 0; i < dxs.length - 1; i++) {\n\t\t\tconst m2 = ms[i] as number\n\t\t\tconst mNext = ms[i + 1] as number\n\t\t\tif (m2 * mNext <= 0) {\n\t\t\t\tc1s.push(0)\n\t\t\t} else {\n\t\t\t\tdx = dxs[i] as number\n\t\t\t\tconst dxNext = dxs[i + 1] as number\n\t\t\t\tconst common = dx + dxNext\n\t\t\t\tc1s.push(\n\t\t\t\t\t(3 * common) / ((common + dxNext) / m2 + (common + dx) / mNext),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tc1s.push(ms[ms.length - 1])\n\n\t\t// Get degree-2 and degree-3 coefficients\n\t\tconst c2s = []\n\t\tconst c3s = []\n\t\tlet m\n\t\tfor (let i = 0; i < c1s.length - 1; i++) {\n\t\t\tm = ms[i] as number\n\t\t\tconst c1 = c1s[i] as number\n\t\t\tconst invDx = 1 / (dxs[i] as number)\n\t\t\tconst common = c1 + (c1s[i + 1] as number) - m - m\n\t\t\tc2s.push((m - c1 - common) * invDx)\n\t\t\tc3s.push(common * invDx * invDx)\n\t\t}\n\n\t\tthis.xs = xs\n\t\tthis.ys = ys\n\t\tthis.c1s = c1s\n\t\tthis.c2s = c2s\n\t\tthis.c3s = c3s\n\t}\n\n\tpublic interpolate(x: number): number {\n\t\tconst { xs, ys, c1s, c2s, c3s } = this\n\n\t\t// The rightmost point in the dataset should give an exact result\n\t\tlet i = xs.length - 1\n\t\tif (x === xs[i]) {\n\t\t\treturn ys[i]\n\t\t}\n\n\t\t// Search for the interval x is in, returning the corresponding y if x is one of the original xs\n\t\tlet low = 0\n\t\tlet high = c3s.length - 1\n\t\tlet mid\n\t\twhile (low <= high) {\n\t\t\tmid = Math.floor(0.5 * (low + high))\n\t\t\tconst xHere = xs[mid]\n\t\t\tif (xHere < x) {\n\t\t\t\tlow = mid + 1\n\t\t\t} else if (xHere > x) {\n\t\t\t\thigh = mid - 1\n\t\t\t} else {\n\t\t\t\treturn ys[mid]\n\t\t\t}\n\t\t}\n\t\ti = Math.max(0, high)\n\n\t\t// Interpolate\n\t\tconst diff = x - xs[i]\n\t\tconst diffSq = diff * diff\n\t\treturn ys[i] + c1s[i] * diff + c2s[i] * diffSq + c3s[i] * diff * diffSq\n\t}\n}\n", "import type { HTML5BackendContext, HTML5BackendOptions } from './types.js'\n\nexport class OptionsReader {\n\tpublic ownerDocument: Document | null = null\n\tprivate globalContext: HTML5BackendContext\n\tprivate optionsArgs: HTML5BackendOptions | undefined\n\n\tpublic constructor(\n\t\tglobalContext: HTML5BackendContext,\n\t\toptions?: HTML5BackendOptions,\n\t) {\n\t\tthis.globalContext = globalContext\n\t\tthis.optionsArgs = options\n\t}\n\n\tpublic get window(): Window | undefined {\n\t\tif (this.globalContext) {\n\t\t\treturn this.globalContext\n\t\t} else if (typeof window !== 'undefined') {\n\t\t\treturn window\n\t\t}\n\t\treturn undefined\n\t}\n\n\tpublic get document(): Document | undefined {\n\t\tif (this.globalContext?.document) {\n\t\t\treturn this.globalContext.document\n\t\t} else if (this.window) {\n\t\t\treturn this.window.document\n\t\t} else {\n\t\t\treturn undefined\n\t\t}\n\t}\n\n\tpublic get rootElement(): Node | undefined {\n\t\treturn this.optionsArgs?.rootElement || this.window\n\t}\n}\n", "import { compose, createStore, applyMiddleware, StoreEnhancer } from 'redux';\nimport thunkMiddleware from 'redux-thunk';\n\nimport reducers, { RootState } from '../reducers';\n\nlet serverState: RootState | undefined;\nlet dte = (f: any) => f;\n\ntry {\n if (window.__INITIAL__STATE__) {\n serverState = window.__INITIAL__STATE__;\n delete window.__INITIAL__STATE__;\n }\n\n dte = window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__() : (f) => f;\n} catch (e) {\n dte = (f) => f;\n}\n\nexport default (initialState = null) =>\n createStore(\n reducers,\n initialState || serverState,\n compose(applyMiddleware(thunkMiddleware), dte) as StoreEnhancer,\n );\n", "/** A function that accepts a potential \"extra argument\" value to be injected later,\r\n * and returns an instance of the thunk middleware that uses that value\r\n */\nfunction createThunkMiddleware(extraArgument) {\n // Standard Redux middleware definition pattern:\n // See: https://redux.js.org/tutorials/fundamentals/part-4-store#writing-custom-middleware\n var middleware = function middleware(_ref) {\n var dispatch = _ref.dispatch,\n getState = _ref.getState;\n return function (next) {\n return function (action) {\n // The thunk middleware looks for any functions that were passed to `store.dispatch`.\n // If this \"action\" is really a function, call it and return the result.\n if (typeof action === 'function') {\n // Inject the store's `dispatch` and `getState` methods, as well as any \"extra arg\"\n return action(dispatch, getState, extraArgument);\n } // Otherwise, pass the action down the middleware chain as usual\n\n\n return next(action);\n };\n };\n };\n\n return middleware;\n}\n\nvar thunk = createThunkMiddleware(); // Attach the factory function so users can create a customized version\n// with whatever \"extra arg\" they want to inject into their thunks\n\nthunk.withExtraArgument = createThunkMiddleware;\nexport default thunk;", "import { combineReducers } from 'redux';\n\nimport admin from './admin';\nimport analytics from './analytics';\nimport assignment from './assignment';\nimport auth from './auth';\nimport bankid from './bankid';\nimport financialInstitution from './financial-institution';\nimport manufacturers from './manufacturers';\nimport notification from './notification';\nimport organisationBranch from './organisation-branch';\nimport organisationCustomImageSource from './organisation-custom-image-source';\nimport organisationOpeningHours from './organisation-opening-hours';\nimport organisationResellerPackage from './organisation-reseller-package';\nimport organisationService from './organisation-service';\nimport organisationUser from './organisation-user';\nimport defaultContactOption from './default-contact-options';\nimport profile from './profile';\nimport resellerPackage from './reseller-package';\nimport user from './user';\nimport vehiclesOptions from './vehicles-options';\nimport wxr from './wxr';\nimport pdfTemplate from './pdf-template';\nimport document from './document';\nimport declaration from './declaration';\nimport advertisementMedia from './advertisement-media';\nimport advertisementsMedia from './advertisements-media';\nimport advertisementMetadata from './advertisement-metadata';\nimport leasingPromos from './leasing-promos';\nimport modelSeries from './model-series';\nimport mediaUpload from './media-upload';\nimport financialOptions from './financial-options';\nimport insurances from './insurances';\nimport vehicleSearch from './vehicle-search';\nimport event from './event';\nimport socialBoost from './social-boost';\nimport socialBoostSettings from './social-boost-settings';\nimport leads from './leads';\nimport wip from './wip';\nimport adBoost from './ad-boost';\nimport vimeo from './vimeo';\nimport order from './order';\nimport orderLogs from './order-logs';\nimport ecomSetting from './ecom-setting';\nimport permissions from './permissions';\nimport credentials from './credentials';\nimport facets from './facets';\nimport exportFacets from './export-facets';\nimport branchFacets from './branch-facets';\nimport branchExportFacets from './branch-export-facets';\nimport exportFilter from './export-filter';\nimport systemClients from './system-clients';\nimport paymentOptions from './payment-options';\nimport brandings from './brandings';\nimport customVideoSource from './custom-video-source';\nimport importMediaVideo from './import-media-video';\nimport customImageSource from './custom-image-source';\nimport importMediaImage from './import-media-image';\n\nconst rootReducer = combineReducers({\n admin,\n analytics,\n assignment,\n auth,\n bankid,\n financialInstitution,\n manufacturers,\n notification,\n organisationBranch,\n organisationCustomImageSource,\n organisationOpeningHours,\n organisationResellerPackage,\n organisationService,\n organisationUser,\n defaultContactOption,\n profile,\n resellerPackage,\n user,\n vehiclesOptions,\n wxr,\n pdfTemplate,\n document,\n declaration,\n advertisementMedia,\n advertisementsMedia,\n advertisementMetadata,\n leasingPromos,\n modelSeries,\n mediaUpload,\n financialOptions,\n insurances,\n vehicleSearch,\n event,\n socialBoost,\n socialBoostSettings,\n leads,\n wip,\n adBoost,\n vimeo,\n order,\n orderLogs,\n ecomSetting,\n permissions,\n credentials,\n facets,\n exportFacets,\n branchFacets,\n branchExportFacets,\n exportFilter,\n systemClients,\n paymentOptions,\n brandings,\n customVideoSource,\n importMediaVideo,\n customImageSource,\n importMediaImage,\n});\n\nexport type RootState = ReturnType;\n\nexport default rootReducer;\n", "import { REQ_REFRESH_BRANCHES, RCV_REFRESH_BRANCHES, ERR_REFRESH_BRANCHES } from '../actions/admin';\nimport { Actions } from '../actions';\n\ninterface AdminState {\n refreshingBranches: boolean;\n refreshBranchesError: boolean;\n}\n\nconst initialState: AdminState = {\n refreshingBranches: false,\n refreshBranchesError: false,\n};\n\nexport default (state = initialState, action: Actions): AdminState => {\n switch (action.type) {\n case REQ_REFRESH_BRANCHES:\n return { ...state, refreshingBranches: true, refreshBranchesError: false };\n case RCV_REFRESH_BRANCHES:\n return { ...state, refreshingBranches: false };\n case ERR_REFRESH_BRANCHES:\n return { ...state, refreshingBranches: false, refreshBranchesError: true };\n default:\n return state;\n }\n};\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_ANALYTICS,\n RCV_ANALYTICS,\n REQ_ANALYTICS_BRANCH_BATCH,\n RCV_ANALYTICS_BRANCH_BATCH,\n REQ_ANALYTICS_ITEM,\n RCV_ANALYTICS_ITEM,\n REQ_ANALYTICS_ITEM_BATCH,\n RCV_ANALYTICS_ITEM_BATCH,\n CLEAR_ANALYTICS_NAMESPACE,\n REQ_FAILED,\n} from '../actions/analytics';\nimport { Actions } from '../actions';\nimport {\n Analytics,\n AnalyticsItemRequest,\n AnalyticsToday,\n AnalyticsItemCounts,\n} from '../@types/Analytics';\n\nexport type AnalyticsItemsObjectType = { [key: string]: AnalyticsItemRequest | undefined };\n\ninterface AnalyticsState {\n requestStatus: number;\n responseStatus: number;\n analytics: { [key: string]: Analytics | undefined } | null;\n items: AnalyticsItemsObjectType | null;\n}\n\nexport const initialState: AnalyticsState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n analytics: null,\n items: null,\n};\n\nconst Mock: AnalyticsToday = {\n views: 0,\n conversions: 0,\n microConversions: 0,\n exposures: 0,\n shownInterests: 0,\n};\n\nconst AnalyticsMock: AnalyticsItemCounts = {\n today: Mock,\n all: Mock,\n};\n\nconst analyticsReducer = (state = initialState, action: Actions): AnalyticsState => {\n switch (action.type) {\n case REQ_ANALYTICS:\n return {\n ...state,\n requestStatus: requestStatus.CREATING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_ANALYTICS:\n const analytics = { ...(state.analytics || {}) };\n if (action.response && action.branchId) {\n analytics[action.branchId] = action.response;\n }\n return {\n ...state,\n analytics,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_ANALYTICS_BRANCH_BATCH:\n return {\n ...state,\n requestStatus: requestStatus.FETCHING_LIST,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_ANALYTICS_BRANCH_BATCH:\n const aBatchBranch = { ...(state.analytics || {}) };\n if (\n action.response &&\n action.response.branches &&\n !!Object.keys(action.response.branches).length\n ) {\n Object.keys(action.response.branches).map((x) => {\n const branchCount = action.response.branches[x];\n if (branchCount) {\n aBatchBranch[x] = {\n took: action.response.took,\n counts: branchCount,\n };\n }\n });\n }\n return {\n ...state,\n analytics: aBatchBranch,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_ANALYTICS_ITEM:\n const items: AnalyticsItemsObjectType = { ...(state.items || {}) };\n if (action.waykeId) {\n items[action.waykeId] = {\n ...AnalyticsMock,\n fetchingDone: false,\n successful: false,\n };\n }\n return {\n ...state,\n items,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_ANALYTICS_ITEM:\n const items1: AnalyticsItemsObjectType = {\n ...(state.items || {}),\n };\n if (action.response.counts) {\n items1[action.waykeId] = {\n ...action.response.counts,\n fetchingDone: true,\n successful: true,\n };\n }\n return {\n ...state,\n items: items1,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_ANALYTICS_ITEM_BATCH:\n const items2 = { ...(state.items || {}) };\n if (action.waykeIds && action.waykeIds.length) {\n action.waykeIds.map((x) => {\n items2[x] = {\n ...AnalyticsMock,\n fetchingDone: false,\n successful: false,\n };\n });\n }\n return {\n ...state,\n items: items2,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_ANALYTICS_ITEM_BATCH:\n const items3 = { ...(state.items || {}) };\n if (!!action.response && Object.keys(action.response).length) {\n Object.keys(action.response).map((x) => {\n const _item3 = action.response[x];\n if (_item3) {\n items3[x] = {\n ...items3[x],\n all: _item3.all,\n today: _item3.today,\n fetchingDone: true,\n successful: true,\n };\n }\n });\n }\n return {\n ...state,\n items: items3,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case CLEAR_ANALYTICS_NAMESPACE:\n return {\n ...state,\n items: null,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_FAILED:\n const items4 = { ...(state.items || {}) };\n if (action.action === REQ_ANALYTICS_ITEM) {\n items4[action.waykeId] = {\n ...AnalyticsMock,\n fetchingDone: true,\n successful: false,\n };\n }\n return {\n ...state,\n items: items4,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default analyticsReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_ASSIGNMENTS,\n RCV_ASSIGNMENTS,\n REQ_ASSIGNMENT_INTEREST,\n RCV_ASSIGNMENT_INTEREST,\n REQ_ASSIGNMENT_DECLINE,\n RCV_ASSIGNMENT_DECLINE,\n REQ_NOTIFICATION_COUNT,\n RCV_NOTIFICATION_COUNT,\n REQ_ASSIGNMENT_APPEND_NOTE,\n RCV_ASSIGNMENT_APPEND_NOTE,\n REQ_CLEAR_ASSIGNMENTS,\n REQUEST_FAILED,\n} from '../actions/assignment';\nimport { Actions } from '../actions';\nimport { DocumentList, ElasticSearchResponse } from '../@types/ElasticSearchResponse';\nimport { Assignment, AssignmentUpdateResponse } from '../@types/Assignment';\n\ninterface AssignmentState {\n requestStatus: number;\n responseStatus: number;\n documentList: DocumentList | null;\n queryFilter: string | null;\n notificationCount: number;\n}\n\nexport const initialState: AssignmentState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n documentList: null,\n queryFilter: null,\n notificationCount: 0,\n};\n\nconst updateAssignmentState = (\n documentList: DocumentList,\n response: AssignmentUpdateResponse,\n) => ({\n ...documentList,\n documents: documentList.documents.map((d) => {\n if (d.id === response.id) {\n return {\n ...d,\n recipient: {\n ...d.recipient,\n status: response.status,\n notes: response.notes,\n },\n };\n }\n\n return d;\n }),\n});\n\nconst updateAssignmentRecipientState = (\n documentList: DocumentList,\n id: string,\n response: AssignmentUpdateResponse,\n) => ({\n ...documentList,\n documents: documentList.documents.map((d) => {\n if (d.id === id) {\n d.recipient = {\n ...response,\n };\n }\n\n return d;\n }),\n});\n\nconst updateNotificationCount = (response: ElasticSearchResponse) =>\n response.documentList.numberOfHits;\n\nexport default (state = initialState, action: Actions): AssignmentState => {\n switch (action.type) {\n case REQ_ASSIGNMENTS:\n return {\n ...state,\n documentList: null,\n queryFilter: null,\n requestStatus: requestStatus.FETCHING_LIST,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_ASSIGNMENTS:\n return {\n ...state,\n documentList: action.response.documentList,\n queryFilter: action.query,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_ASSIGNMENT_INTEREST:\n return {\n ...state,\n requestStatus: requestStatus.CREATING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_ASSIGNMENT_INTEREST:\n if (!state.documentList) return state;\n return {\n ...state,\n documentList: updateAssignmentState(state.documentList, action.response),\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_ASSIGNMENT_DECLINE:\n return {\n ...state,\n requestStatus: requestStatus.REMOVING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_ASSIGNMENT_DECLINE:\n if (!state.documentList) return state;\n return {\n ...state,\n documentList: updateAssignmentState(state.documentList, action.response),\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_NOTIFICATION_COUNT:\n return {\n ...state,\n requestStatus: requestStatus.UPDATING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_NOTIFICATION_COUNT:\n return {\n ...state,\n notificationCount: updateNotificationCount(action.response),\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_ASSIGNMENT_APPEND_NOTE:\n return {\n ...state,\n requestStatus: requestStatus.UPDATING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_ASSIGNMENT_APPEND_NOTE:\n if (!state.documentList) return state;\n return {\n ...state,\n documentList: updateAssignmentRecipientState(\n state.documentList,\n action.id,\n action.response,\n ),\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_CLEAR_ASSIGNMENTS:\n return { ...state, documentList: null };\n case REQUEST_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n", "import { Dispatch } from 'redux';\nimport { BaseAction } from '../@types/Action';\nimport {\n buildAuthorizedDeleteRequest,\n buildAuthorizedGetRequest,\n buildAuthorizedPostRequest,\n} from '../http/request-templates';\nimport { RootState } from '../reducers';\nimport { requestCache } from '../utils';\nimport * as http from '../http';\nimport { ElasticSearchResponse } from '../@types/ElasticSearchResponse';\nimport { Assignment, AssignmentUpdateResponse } from '../@types/Assignment';\nimport { Conversation } from '../@types/Conversation';\n\nexport const REQ_ASSIGNMENTS = 'REQ/ASSIGNMENTS_LIST';\nexport const RCV_ASSIGNMENTS = 'RCV/ASSIGNMENTS_LIST';\ntype REQ_ASSIGNMENTS_TYPE = BaseAction;\ntype RCV_ASSIGNMENTS_TYPE = BaseAction & {\n response: ElasticSearchResponse;\n query: string;\n};\n\nexport const REQ_NOTIFICATION_COUNT = 'REQ/NOTIFICATION_COUNT';\nexport const RCV_NOTIFICATION_COUNT = 'RCV/NOTIFICATION_COUNT';\ntype REQ_NOTIFICATION_COUNT_TYPE = BaseAction;\ntype RCV_NOTIFICATION_COUNT_TYPE = BaseAction & {\n response: ElasticSearchResponse;\n};\n\nexport const REQ_ASSIGNMENT_INTEREST = 'REQ/ASSIGNMENT_INTEREST';\nexport const RCV_ASSIGNMENT_INTEREST = 'RCV/ASSIGNMENT_INTEREST';\ntype REQ_ASSIGNMENT_INTEREST_TYPE = BaseAction;\ntype RCV_ASSIGNMENT_INTEREST_TYPE = BaseAction & {\n response: AssignmentUpdateResponse;\n};\n\nexport const REQ_ASSIGNMENT_DECLINE = 'REQ/ASSIGNMENT_DECLINE';\nexport const RCV_ASSIGNMENT_DECLINE = 'RCV/ASSIGNMENT_DECLINE';\ntype REQ_ASSIGNMENT_DECLINE_TYPE = BaseAction;\ntype RCV_ASSIGNMENT_DECLINE_TYPE = BaseAction & {\n response: AssignmentUpdateResponse;\n};\n\nexport const REQ_ASSIGNMENT_APPEND_NOTE = 'REQ/ASSIGNMENT_APPEND_NOTE';\nexport const RCV_ASSIGNMENT_APPEND_NOTE = 'RCV/ASSIGNMENT_APPEND_NOTE';\ntype REQ_ASSIGNMENT_APPEND_NOTE_TYPE = BaseAction;\ntype RCV_ASSIGNMENT_APPEND_NOTE_TYPE = BaseAction & {\n response: AssignmentUpdateResponse;\n id: string;\n};\n\nexport const REQ_CLEAR_ASSIGNMENTS = 'REQ/CLEAR_ASSIGNMENTS';\ntype REQ_CLEAR_ASSIGNMENTS_TYPE = BaseAction;\n\nexport const REQUEST_FAILED = 'ASSIGNMENTS/REQUEST_FAILED';\ntype REQ_ASSIGNMENT_FAILED_TYPE = BaseAction;\n\nexport type ASSIGNMENT_ACTION =\n | REQ_ASSIGNMENTS_TYPE\n | RCV_ASSIGNMENTS_TYPE\n | REQ_ASSIGNMENT_INTEREST_TYPE\n | RCV_ASSIGNMENT_INTEREST_TYPE\n | REQ_ASSIGNMENT_DECLINE_TYPE\n | RCV_ASSIGNMENT_DECLINE_TYPE\n | REQ_NOTIFICATION_COUNT_TYPE\n | RCV_NOTIFICATION_COUNT_TYPE\n | REQ_ASSIGNMENT_APPEND_NOTE_TYPE\n | RCV_ASSIGNMENT_APPEND_NOTE_TYPE\n | REQ_CLEAR_ASSIGNMENTS_TYPE\n | REQ_ASSIGNMENT_FAILED_TYPE;\n\nexport const get =\n (queryFilter: string) => async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n const branchId = organisationBranch.selectedBranch;\n\n const cacheKey = `${REQ_ASSIGNMENTS}/${branchId}/${queryFilter}`;\n if (!auth.token || !branchId || requestCache.isPending(cacheKey)) {\n return;\n }\n requestCache.isPending(cacheKey, true);\n\n try {\n dispatch({ type: REQ_ASSIGNMENTS });\n\n const response = await http.json>(\n `/api/${branchId}/assignments?filter=${encodeURIComponent(queryFilter)}`,\n buildAuthorizedGetRequest(auth.token),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_ASSIGNMENTS,\n response: response.response,\n query: queryFilter,\n });\n } catch (e) {\n dispatch({ type: REQUEST_FAILED, action: REQ_ASSIGNMENTS });\n }\n requestCache.isPending(cacheKey, false);\n };\n\nexport const count = () => async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n const branchId = organisationBranch.selectedBranch;\n if (!auth.token || !branchId || requestCache.isPending(REQ_NOTIFICATION_COUNT)) {\n return;\n }\n requestCache.isPending(REQ_NOTIFICATION_COUNT, true);\n\n try {\n dispatch({ type: REQ_NOTIFICATION_COUNT });\n\n const response = await http.json>(\n `/api/${branchId}/assignments?filter=${encodeURIComponent(\n 'assignmentStatus=Published&recipientStatus=Pending&hits=0',\n )}`,\n buildAuthorizedGetRequest(auth.token),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_NOTIFICATION_COUNT,\n response: response.response,\n });\n } catch (e) {\n dispatch({ type: REQUEST_FAILED, action: REQ_NOTIFICATION_COUNT });\n }\n requestCache.isPending(REQ_NOTIFICATION_COUNT, false);\n};\n\nexport const interest =\n (assignmentId: string) => async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n const branchId = organisationBranch.selectedBranch;\n\n const cacheKey = `${REQ_ASSIGNMENT_INTEREST}/${branchId}/${assignmentId}`;\n if (!auth.token || !branchId || requestCache.isPending(cacheKey)) {\n return;\n }\n requestCache.isPending(cacheKey, true);\n\n try {\n dispatch({ type: REQ_ASSIGNMENT_INTEREST });\n\n const response = await http.json(\n `/api/${branchId}/assignments/${assignmentId}/interest`,\n buildAuthorizedPostRequest(auth.token),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_ASSIGNMENT_INTEREST,\n response: response.response,\n });\n } catch (e) {\n dispatch({ type: REQUEST_FAILED, action: REQ_ASSIGNMENT_INTEREST });\n }\n requestCache.isPending(cacheKey, false);\n };\n\nexport const decline =\n (assignmentId: string) => async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n const branchId = organisationBranch.selectedBranch;\n\n const cacheKey = `${REQ_ASSIGNMENT_DECLINE}/${branchId}/${assignmentId}`;\n if (!auth.token || !branchId || requestCache.isPending(cacheKey)) {\n return;\n }\n requestCache.isPending(cacheKey, true);\n\n try {\n dispatch({ type: REQ_ASSIGNMENT_DECLINE });\n\n const response = await http.json(\n `/api/${branchId}/assignments/${assignmentId}/decline`,\n buildAuthorizedDeleteRequest(auth.token),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_ASSIGNMENT_DECLINE,\n response: response.response,\n });\n } catch (e) {\n dispatch({ type: REQUEST_FAILED, action: REQ_ASSIGNMENT_DECLINE });\n }\n requestCache.isPending(cacheKey, false);\n };\n\nexport const note =\n (id: string, message: string) => async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n const branchId = organisationBranch.selectedBranch;\n\n const cacheKey = `${REQ_ASSIGNMENT_APPEND_NOTE}/${branchId}/${id}`;\n if (!auth.token || !branchId || requestCache.isPending(cacheKey)) {\n return;\n }\n requestCache.isPending(cacheKey, true);\n\n try {\n dispatch({ type: REQ_ASSIGNMENT_APPEND_NOTE });\n\n const response = await http.json(\n `/api/${branchId}/assignments/${id}/notes`,\n buildAuthorizedPostRequest(auth.token, { message }),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_ASSIGNMENT_APPEND_NOTE,\n response: response.response,\n id,\n });\n } catch (e) {\n dispatch({ type: REQUEST_FAILED, action: REQ_ASSIGNMENT_APPEND_NOTE });\n }\n requestCache.isPending(cacheKey, false);\n };\n\nexport const callbackGetConversation =\n (assignmentId: string, callback: (conversation: Conversation | null, success: boolean) => void) =>\n async (_dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n const branchId = organisationBranch.selectedBranch;\n if (!auth.token || !branchId) return;\n\n try {\n const response = await http.json(\n `/api/${branchId}/assignments/${assignmentId}/conversation`,\n buildAuthorizedGetRequest(auth.token),\n );\n http.validateResponse(response);\n callback(response.response, true);\n } catch (e) {\n callback(null, true);\n }\n };\n\nexport const callbackGetAssignment =\n (\n assignmentId: string,\n callback: (conversation: ElasticSearchResponse | null, success: boolean) => void,\n ) =>\n async (_dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n const branchId = organisationBranch.selectedBranch;\n if (!auth.token || !branchId) return;\n\n try {\n const response = await http.json>(\n `/api/${branchId}/assignments/${assignmentId}`,\n buildAuthorizedGetRequest(auth.token),\n );\n http.validateResponse(response);\n callback(response.response, true);\n } catch (e) {\n callback(null, true);\n }\n };\n\nexport const clear = () => (dispatch: Dispatch) => dispatch({ type: REQ_CLEAR_ASSIGNMENTS });\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport { REQ_ACCESS_TOKEN, RCV_ACCESS_TOKEN, ERR_ACCESS_TOKEN } from '../actions/auth';\n\nimport { Actions } from '../actions';\n\ninterface InitialState {\n requestStatus: number;\n responseStatus: number;\n token?: string | null;\n}\n\nexport const initialState: InitialState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n token: null,\n};\n\nconst authReducer = (state = initialState, action: Actions) => {\n switch (action.type) {\n case REQ_ACCESS_TOKEN:\n return {\n ...state,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_ACCESS_TOKEN:\n return {\n ...state,\n token: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case ERR_ACCESS_TOKEN:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default authReducer;\n", "import { Dispatch } from 'redux';\n\nimport { BaseAction } from '../@types/Action';\nimport { UserManager, WebStorageStateStore, User } from 'oidc-client-ts';\nimport { get } from '../helpers/settings';\nimport { RootState } from '../reducers';\nimport { NavigateFunction } from 'react-router-dom';\n\nconst AUTHORITY = get('authority');\nconst CLIENT_ID = get('clientId');\nconst CLIENT_ROOT = get('clientRoot');\nconst RESPONSE_TYPE = get('responseType');\nconst CLIENT_SCOPE = get('clientScope');\n\nconst REDIRECT_PATH = '/oidc/signin';\nconst REDIRECT_URL_KEY = 'redirectUrl';\nconst REQUIRED_SCOPES = 'openid profile api-resource offline_access'.split(' ').sort().join(' ');\n\nconst userManager = new UserManager({\n authority: AUTHORITY,\n client_id: CLIENT_ID,\n redirect_uri: `${CLIENT_ROOT}${REDIRECT_PATH}`,\n post_logout_redirect_uri: `${CLIENT_ROOT}`,\n response_type: RESPONSE_TYPE,\n scope: CLIENT_SCOPE,\n loadUserInfo: false,\n automaticSilentRenew: true,\n userStore: new WebStorageStateStore({ store: window.localStorage }),\n stateStore: new WebStorageStateStore({ store: window.localStorage }),\n});\n\nexport const REQ_ACCESS_TOKEN = 'REQ_ACCESS_TOKEN';\nexport const RCV_ACCESS_TOKEN = 'RCV_ACCESS_TOKEN';\nexport const ERR_ACCESS_TOKEN = 'REQ_AUTH_FAILED';\n\nexport type REQ_ACCESS_TOKEN_TYPE = BaseAction;\nexport type RCV_ACCESS_TOKEN_TYPE = BaseAction & {\n response: string;\n};\nexport type ERR_ACCESS_TOKEN_TYPE = BaseAction & {\n action: typeof RCV_ACCESS_TOKEN;\n};\n\nexport type AUTH_ACTION = REQ_ACCESS_TOKEN_TYPE | RCV_ACCESS_TOKEN_TYPE | ERR_ACCESS_TOKEN_TYPE;\n\nconst currentUrlIsRedirectUrl = () => window.location.pathname.startsWith(REDIRECT_PATH);\n\nconst verifyScopes = (userScopes?: string) =>\n userScopes?.split(' ').sort().join(' ') === REQUIRED_SCOPES;\n\nconst signinRedirect = async () => {\n sessionStorage.setItem(\n REDIRECT_URL_KEY,\n window.location.pathname === REDIRECT_PATH ? '/' : window.location.pathname,\n );\n await userManager.signinRedirect();\n};\n\nconst getNumberOfTries = () =>\n parseInt(sessionStorage.getItem('WAYKE_SIGN_IN_TRIES') || '0', 10) || 0;\n\nconst clearNumberOfTries = () => sessionStorage.removeItem('WAYKE_SIGN_IN_TRIES');\n\nconst incrementNumberOfTries = () => {\n const tries = getNumberOfTries();\n sessionStorage.setItem('WAYKE_SIGN_IN_TRIES', `${tries + 1}`);\n};\n\nuserManager.clearStaleState();\n\nexport const signIn = (navigate: NavigateFunction) => async (dispatch: Dispatch) => {\n /**\n * When user comes online, ie from computer that has been idle/sleep. Will check and renew\n * if needed. Even if automaticSilentRenew is set to true, it's not fast enough\n */\n window.addEventListener('online', async () => {\n const user = await userManager.getUser();\n if (!user || user.expired) {\n try {\n await userManager.signinSilent();\n } catch (e) {\n await signinRedirect();\n }\n }\n });\n\n userManager.events.addUserLoaded((user: User) => {\n dispatch({ type: RCV_ACCESS_TOKEN, response: user?.access_token });\n if (currentUrlIsRedirectUrl()) {\n const redirectUrl = sessionStorage.getItem(REDIRECT_URL_KEY) || '/';\n sessionStorage.removeItem(REDIRECT_URL_KEY);\n navigate(redirectUrl);\n }\n });\n\n userManager.events.addSilentRenewError(async () => {\n if (navigator.onLine) {\n await signinRedirect();\n }\n });\n\n dispatch({ type: REQ_ACCESS_TOKEN });\n\n if (currentUrlIsRedirectUrl()) {\n try {\n await userManager.signinCallback();\n } catch (e) {\n const numberOfTries = getNumberOfTries();\n if (numberOfTries < 2) {\n incrementNumberOfTries();\n await signinRedirect();\n } else {\n clearNumberOfTries();\n signOut();\n }\n }\n } else {\n const user = await userManager.getUser();\n if (user) {\n if (user.expired || !verifyScopes(user.scope)) {\n try {\n await userManager.signinSilent();\n } catch (e) {\n await signinRedirect();\n }\n } else {\n dispatch({ type: RCV_ACCESS_TOKEN, response: user.access_token });\n }\n } else {\n await signinRedirect();\n }\n }\n};\n\nexport const signOut = () => async (_dispatch: Dispatch, _getState: () => RootState) => {\n const user = await userManager.getUser();\n userManager.signoutRedirect({\n id_token_hint: user?.id_token,\n });\n userManager.clearStaleState();\n\n if (user) {\n localStorage.removeItem(`oidc.user:${user.profile.iss}:${user.profile.aud}`);\n }\n};\n", "export class InvalidTokenError extends Error {\n}\nInvalidTokenError.prototype.name = \"InvalidTokenError\";\nfunction b64DecodeUnicode(str) {\n return decodeURIComponent(atob(str).replace(/(.)/g, (m, p) => {\n let code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = \"0\" + code;\n }\n return \"%\" + code;\n }));\n}\nfunction base64UrlDecode(str) {\n let output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw new Error(\"base64 string is not of the correct length\");\n }\n try {\n return b64DecodeUnicode(output);\n }\n catch (err) {\n return atob(output);\n }\n}\nexport function jwtDecode(token, options) {\n if (typeof token !== \"string\") {\n throw new InvalidTokenError(\"Invalid token specified: must be a string\");\n }\n options || (options = {});\n const pos = options.header === true ? 0 : 1;\n const part = token.split(\".\")[pos];\n if (typeof part !== \"string\") {\n throw new InvalidTokenError(`Invalid token specified: missing part #${pos + 1}`);\n }\n let decoded;\n try {\n decoded = base64UrlDecode(part);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid base64 for part #${pos + 1} (${e.message})`);\n }\n try {\n return JSON.parse(decoded);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid json for part #${pos + 1} (${e.message})`);\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\n/**\n * Native interface\n *\n * @public\n */\nexport interface ILogger {\n debug(...args: unknown[]): void;\n info(...args: unknown[]): void;\n warn(...args: unknown[]): void;\n error(...args: unknown[]): void;\n}\n\nconst nopLogger: ILogger = {\n debug: () => undefined,\n info: () => undefined,\n warn: () => undefined,\n error: () => undefined,\n};\n\nlet level: number;\nlet logger: ILogger;\n\n/**\n * Log levels\n *\n * @public\n */\nexport enum Log {\n NONE,\n ERROR,\n WARN,\n INFO,\n DEBUG\n}\n\n/**\n * Log manager\n *\n * @public\n */\nexport namespace Log { // eslint-disable-line @typescript-eslint/no-namespace\n export function reset(): void {\n level = Log.INFO;\n logger = nopLogger;\n }\n\n export function setLevel(value: Log): void {\n if (!(Log.NONE <= value && value <= Log.DEBUG)) {\n throw new Error(\"Invalid log level\");\n }\n level = value;\n }\n\n export function setLogger(value: ILogger): void {\n logger = value;\n }\n}\n\n/**\n * Internal logger instance\n *\n * @public\n */\nexport class Logger {\n private _method?: string;\n public constructor(private _name: string) {}\n\n /* eslint-disable @typescript-eslint/no-unsafe-enum-comparison */\n public debug(...args: unknown[]): void {\n if (level >= Log.DEBUG) {\n logger.debug(Logger._format(this._name, this._method), ...args);\n }\n }\n public info(...args: unknown[]): void {\n if (level >= Log.INFO) {\n logger.info(Logger._format(this._name, this._method), ...args);\n }\n }\n public warn(...args: unknown[]): void {\n if (level >= Log.WARN) {\n logger.warn(Logger._format(this._name, this._method), ...args);\n }\n }\n public error(...args: unknown[]): void {\n if (level >= Log.ERROR) {\n logger.error(Logger._format(this._name, this._method), ...args);\n }\n }\n /* eslint-enable @typescript-eslint/no-unsafe-enum-comparison */\n\n public throw(err: Error): never {\n this.error(err);\n throw err;\n }\n\n public create(method: string): Logger {\n const methodLogger: Logger = Object.create(this);\n methodLogger._method = method;\n methodLogger.debug(\"begin\");\n return methodLogger;\n }\n\n public static createStatic(name: string, staticMethod: string): Logger {\n const staticLogger = new Logger(`${name}.${staticMethod}`);\n staticLogger.debug(\"begin\");\n return staticLogger;\n }\n\n private static _format(name: string, method?: string) {\n const prefix = `[${name}]`;\n return method ? `${prefix} ${method}:` : prefix;\n }\n\n /* eslint-disable @typescript-eslint/no-unsafe-enum-comparison */\n // helpers for static class methods\n public static debug(name: string, ...args: unknown[]): void {\n if (level >= Log.DEBUG) {\n logger.debug(Logger._format(name), ...args);\n }\n }\n public static info(name: string, ...args: unknown[]): void {\n if (level >= Log.INFO) {\n logger.info(Logger._format(name), ...args);\n }\n }\n public static warn(name: string, ...args: unknown[]): void {\n if (level >= Log.WARN) {\n logger.warn(Logger._format(name), ...args);\n }\n }\n public static error(name: string, ...args: unknown[]): void {\n if (level >= Log.ERROR) {\n logger.error(Logger._format(name), ...args);\n }\n }\n /* eslint-enable @typescript-eslint/no-unsafe-enum-comparison */\n}\n\nLog.reset();\n", "import { Logger } from \"./Logger\";\n\nconst UUID_V4_TEMPLATE = \"10000000-1000-4000-8000-100000000000\";\n\nconst toBase64 = (val: ArrayBuffer): string =>\n btoa([...new Uint8Array(val)]\n .map((chr) => String.fromCharCode(chr))\n .join(\"\"));\n\n/**\n * @internal\n */\nexport class CryptoUtils {\n private static _randomWord(): number {\n const arr = new Uint32Array(1);\n crypto.getRandomValues(arr);\n return arr[0];\n }\n\n /**\n * Generates RFC4122 version 4 guid\n */\n public static generateUUIDv4(): string {\n const uuid = UUID_V4_TEMPLATE.replace(/[018]/g, c =>\n (+c ^ CryptoUtils._randomWord() & 15 >> +c / 4).toString(16),\n );\n return uuid.replace(/-/g, \"\");\n }\n\n /**\n * PKCE: Generate a code verifier\n */\n public static generateCodeVerifier(): string {\n return CryptoUtils.generateUUIDv4() + CryptoUtils.generateUUIDv4() + CryptoUtils.generateUUIDv4();\n }\n\n /**\n * PKCE: Generate a code challenge\n */\n public static async generateCodeChallenge(code_verifier: string): Promise {\n if (!crypto.subtle) {\n throw new Error(\"Crypto.subtle is available only in secure contexts (HTTPS).\");\n }\n\n try {\n const encoder = new TextEncoder();\n const data = encoder.encode(code_verifier);\n const hashed = await crypto.subtle.digest(\"SHA-256\", data);\n return toBase64(hashed).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n }\n catch (err) {\n Logger.error(\"CryptoUtils.generateCodeChallenge\", err);\n throw err;\n }\n }\n\n /**\n * Generates a base64-encoded string for a basic auth header\n */\n public static generateBasicAuth(client_id: string, client_secret: string): string {\n const encoder = new TextEncoder();\n const data = encoder.encode([client_id, client_secret].join(\":\"));\n return toBase64(data);\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger } from \"./Logger\";\n\n/**\n * @internal\n */\nexport type Callback = (...ev: EventType) => (Promise | void);\n\n/**\n * @internal\n */\nexport class Event {\n protected readonly _logger = new Logger(`Event('${this._name}')`);\n\n private _callbacks: Array> = [];\n\n public constructor(protected readonly _name: string) {}\n\n public addHandler(cb: Callback): () => void {\n this._callbacks.push(cb);\n return () => this.removeHandler(cb);\n }\n\n public removeHandler(cb: Callback): void {\n const idx = this._callbacks.lastIndexOf(cb);\n if (idx >= 0) {\n this._callbacks.splice(idx, 1);\n }\n }\n\n public async raise(...ev: EventType): Promise {\n this._logger.debug(\"raise:\", ...ev);\n for (const cb of this._callbacks) {\n await cb(...ev);\n }\n }\n}\n", "import { jwtDecode } from \"jwt-decode\";\n\nimport { Logger } from \"./Logger\";\nimport type { JwtClaims } from \"../Claims\";\n\n/**\n * @internal\n */\nexport class JwtUtils {\n // IMPORTANT: doesn't validate the token\n public static decode(token: string): JwtClaims {\n try {\n return jwtDecode(token);\n }\n catch (err) {\n Logger.error(\"JwtUtils.decode\", err);\n throw err;\n }\n }\n}\n", "/**\n *\n * @public\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/open#window_features\n */\nexport interface PopupWindowFeatures {\n left?: number;\n top?: number;\n width?: number;\n height?: number;\n menubar?: boolean | string;\n toolbar?: boolean | string;\n location?: boolean | string;\n status?: boolean | string;\n resizable?: boolean | string;\n scrollbars?: boolean | string;\n /** Close popup window after time in seconds, by default it is -1. To enable this feature set value greater than 0 */\n closePopupWindowAfterInSeconds?: number;\n\n [k: string]: boolean | string | number | undefined;\n}\n\nexport class PopupUtils {\n /**\n * Populates a map of window features with a placement centered in front of\n * the current window. If no explicit width is given, a default value is\n * binned into [800, 720, 600, 480, 360] based on the current window's width.\n */\n static center({ ...features }: PopupWindowFeatures): PopupWindowFeatures {\n if (features.width == null)\n features.width = [800, 720, 600, 480].find(width => width <= window.outerWidth / 1.618) ?? 360;\n features.left ??= Math.max(0, Math.round(window.screenX + (window.outerWidth - features.width) / 2));\n if (features.height != null)\n features.top ??= Math.max(0, Math.round(window.screenY + (window.outerHeight - features.height) / 2));\n return features;\n }\n\n static serialize(features: PopupWindowFeatures): string {\n return Object.entries(features)\n .filter(([, value]) => value != null)\n .map(([key, value]) => `${key}=${typeof value !== \"boolean\" ? value as string : value ? \"yes\" : \"no\"}`)\n .join(\",\");\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Event } from \"./Event\";\nimport { Logger } from \"./Logger\";\n\n/**\n * @internal\n */\nexport class Timer extends Event<[void]> {\n protected readonly _logger = new Logger(`Timer('${this._name}')`);\n private _timerHandle: ReturnType | null = null;\n private _expiration = 0;\n\n // get the time\n public static getEpochTime(): number {\n return Math.floor(Date.now() / 1000);\n }\n\n public init(durationInSeconds: number): void {\n const logger = this._logger.create(\"init\");\n durationInSeconds = Math.max(Math.floor(durationInSeconds), 1);\n const expiration = Timer.getEpochTime() + durationInSeconds;\n if (this.expiration === expiration && this._timerHandle) {\n // no need to reinitialize to same expiration, so bail out\n logger.debug(\"skipping since already initialized for expiration at\", this.expiration);\n return;\n }\n\n this.cancel();\n\n logger.debug(\"using duration\", durationInSeconds);\n this._expiration = expiration;\n\n // we're using a fairly short timer and then checking the expiration in the\n // callback to handle scenarios where the browser device sleeps, and then\n // the timers end up getting delayed.\n const timerDurationInSeconds = Math.min(durationInSeconds, 5);\n this._timerHandle = setInterval(this._callback, timerDurationInSeconds * 1000);\n }\n\n public get expiration(): number {\n return this._expiration;\n }\n\n public cancel(): void {\n this._logger.create(\"cancel\");\n if (this._timerHandle) {\n clearInterval(this._timerHandle);\n this._timerHandle = null;\n }\n }\n\n protected _callback = (): void => {\n const diff = this._expiration - Timer.getEpochTime();\n this._logger.debug(\"timer completes in\", diff);\n\n if (this._expiration <= Timer.getEpochTime()) {\n this.cancel();\n void super.raise();\n }\n };\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\n/**\n * @internal\n */\nexport class UrlUtils {\n public static readParams(url: string, responseMode: \"query\" | \"fragment\" = \"query\"): URLSearchParams {\n if (!url) throw new TypeError(\"Invalid URL\");\n // the base URL is irrelevant, it's just here to support relative url arguments\n const parsedUrl = new URL(url, \"http://127.0.0.1\");\n const params = parsedUrl[responseMode === \"fragment\" ? \"hash\" : \"search\"];\n return new URLSearchParams(params.slice(1));\n }\n}\n\n/**\n * @internal\n */\nexport const URL_STATE_DELIMITER = \";\";", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger } from \"../utils\";\n\n/**\n * Error class thrown in case of an authentication error.\n *\n * @public\n * @see https://openid.net/specs/openid-connect-core-1_0.html#AuthError\n */\nexport class ErrorResponse extends Error {\n /** Marker to detect class: \"ErrorResponse\" */\n public readonly name: string = \"ErrorResponse\";\n\n /** An error code string that can be used to classify the types of errors that occur and to respond to errors. */\n public readonly error: string | null;\n /** additional information that can help a developer identify the cause of the error.*/\n public readonly error_description: string | null;\n /**\n * URI identifying a human-readable web page with information about the error, used to provide the client\n developer with additional information about the error.\n */\n public readonly error_uri: string | null;\n\n /** custom state data set during the initial signin request */\n public state?: unknown;\n\n public readonly session_state: string | null;\n\n public url_state?: string;\n\n public constructor(\n args: {\n error?: string | null; error_description?: string | null; error_uri?: string | null;\n userState?: unknown; session_state?: string | null; url_state?: string;\n },\n /** The x-www-form-urlencoded request body sent to the authority server */\n public readonly form?: URLSearchParams,\n ) {\n super(args.error_description || args.error || \"\");\n\n if (!args.error) {\n Logger.error(\"ErrorResponse\", \"No error passed\");\n throw new Error(\"No error passed\");\n }\n\n this.error = args.error;\n this.error_description = args.error_description ?? null;\n this.error_uri = args.error_uri ?? null;\n\n this.state = args.userState;\n this.session_state = args.session_state ?? null;\n this.url_state = args.url_state;\n }\n}\n", "// Copyright (C) 2021 AuthTS Contributors\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\n/**\n * Error class thrown in case of network timeouts (e.g IFrame time out).\n *\n * @public\n */\nexport class ErrorTimeout extends Error {\n /** Marker to detect class: \"ErrorTimeout\" */\n public readonly name: string = \"ErrorTimeout\";\n\n public constructor(message?: string) {\n super(message);\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger, Timer } from \"./utils\";\nimport type { User } from \"./User\";\n\n/**\n * @public\n */\nexport type AccessTokenCallback = (...ev: unknown[]) => (Promise | void);\n\n/**\n * @public\n */\nexport class AccessTokenEvents {\n protected readonly _logger = new Logger(\"AccessTokenEvents\");\n\n private readonly _expiringTimer = new Timer(\"Access token expiring\");\n private readonly _expiredTimer = new Timer(\"Access token expired\");\n private readonly _expiringNotificationTimeInSeconds: number;\n\n public constructor(args: { expiringNotificationTimeInSeconds: number }) {\n this._expiringNotificationTimeInSeconds = args.expiringNotificationTimeInSeconds;\n }\n\n public load(container: User): void {\n const logger = this._logger.create(\"load\");\n // only register events if there's an access token and it has an expiration\n if (container.access_token && container.expires_in !== undefined) {\n const duration = container.expires_in;\n logger.debug(\"access token present, remaining duration:\", duration);\n\n if (duration > 0) {\n // only register expiring if we still have time\n let expiring = duration - this._expiringNotificationTimeInSeconds;\n if (expiring <= 0) {\n expiring = 1;\n }\n\n logger.debug(\"registering expiring timer, raising in\", expiring, \"seconds\");\n this._expiringTimer.init(expiring);\n }\n else {\n logger.debug(\"canceling existing expiring timer because we're past expiration.\");\n this._expiringTimer.cancel();\n }\n\n // if it's negative, it will still fire\n const expired = duration + 1;\n logger.debug(\"registering expired timer, raising in\", expired, \"seconds\");\n this._expiredTimer.init(expired);\n }\n else {\n this._expiringTimer.cancel();\n this._expiredTimer.cancel();\n }\n }\n\n public unload(): void {\n this._logger.debug(\"unload: canceling existing access token timers\");\n this._expiringTimer.cancel();\n this._expiredTimer.cancel();\n }\n\n /**\n * Add callback: Raised prior to the access token expiring.\n */\n public addAccessTokenExpiring(cb: AccessTokenCallback): () => void {\n return this._expiringTimer.addHandler(cb);\n }\n /**\n * Remove callback: Raised prior to the access token expiring.\n */\n public removeAccessTokenExpiring(cb: AccessTokenCallback): void {\n this._expiringTimer.removeHandler(cb);\n }\n\n /**\n * Add callback: Raised after the access token has expired.\n */\n public addAccessTokenExpired(cb: AccessTokenCallback): () => void {\n return this._expiredTimer.addHandler(cb);\n }\n /**\n * Remove callback: Raised after the access token has expired.\n */\n public removeAccessTokenExpired(cb: AccessTokenCallback): void {\n this._expiredTimer.removeHandler(cb);\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger } from \"./utils\";\n\n/**\n * @internal\n */\nexport class CheckSessionIFrame {\n private readonly _logger = new Logger(\"CheckSessionIFrame\");\n private _frame_origin: string;\n private _frame: HTMLIFrameElement;\n private _timer: ReturnType | null = null;\n private _session_state: string | null = null;\n\n public constructor(\n private _callback: () => Promise,\n private _client_id: string,\n url: string,\n private _intervalInSeconds: number,\n private _stopOnError: boolean,\n ) {\n const parsedUrl = new URL(url);\n this._frame_origin = parsedUrl.origin;\n\n this._frame = window.document.createElement(\"iframe\");\n\n // shotgun approach\n this._frame.style.visibility = \"hidden\";\n this._frame.style.position = \"fixed\";\n this._frame.style.left = \"-1000px\";\n this._frame.style.top = \"0\";\n this._frame.width = \"0\";\n this._frame.height = \"0\";\n this._frame.src = parsedUrl.href;\n }\n\n public load(): Promise {\n return new Promise((resolve) => {\n this._frame.onload = () => {\n resolve();\n };\n\n window.document.body.appendChild(this._frame);\n window.addEventListener(\"message\", this._message, false);\n });\n }\n\n private _message = (e: MessageEvent): void => {\n if (e.origin === this._frame_origin &&\n e.source === this._frame.contentWindow\n ) {\n if (e.data === \"error\") {\n this._logger.error(\"error message from check session op iframe\");\n if (this._stopOnError) {\n this.stop();\n }\n }\n else if (e.data === \"changed\") {\n this._logger.debug(\"changed message from check session op iframe\");\n this.stop();\n void this._callback();\n }\n else {\n this._logger.debug(e.data + \" message from check session op iframe\");\n }\n }\n };\n\n public start(session_state: string): void {\n if (this._session_state === session_state) {\n return;\n }\n\n this._logger.create(\"start\");\n\n this.stop();\n\n this._session_state = session_state;\n\n const send = () => {\n if (!this._frame.contentWindow || !this._session_state) {\n return;\n }\n\n this._frame.contentWindow.postMessage(this._client_id + \" \" + this._session_state, this._frame_origin);\n };\n\n // trigger now\n send();\n\n // and setup timer\n this._timer = setInterval(send, this._intervalInSeconds * 1000);\n }\n\n public stop(): void {\n this._logger.create(\"stop\");\n this._session_state = null;\n\n if (this._timer) {\n\n clearInterval(this._timer);\n this._timer = null;\n }\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger } from \"./utils\";\n\n/**\n * @public\n */\nexport class InMemoryWebStorage implements Storage {\n private readonly _logger = new Logger(\"InMemoryWebStorage\");\n private _data: Record = {};\n\n public clear(): void {\n this._logger.create(\"clear\");\n this._data = {};\n }\n\n public getItem(key: string): string {\n this._logger.create(`getItem('${key}')`);\n return this._data[key];\n }\n\n public setItem(key: string, value: string): void {\n this._logger.create(`setItem('${key}')`);\n this._data[key] = value;\n }\n\n public removeItem(key: string): void {\n this._logger.create(`removeItem('${key}')`);\n delete this._data[key];\n }\n\n public get length(): number {\n return Object.getOwnPropertyNames(this._data).length;\n }\n\n public key(index: number): string {\n return Object.getOwnPropertyNames(this._data)[index];\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { ErrorResponse, ErrorTimeout } from \"./errors\";\nimport type { ExtraHeader } from \"./OidcClientSettings\";\nimport { Logger } from \"./utils\";\n\n/**\n * @internal\n */\nexport type JwtHandler = (text: string) => Promise>;\n\n/**\n * @internal\n */\nexport interface GetJsonOpts {\n token?: string;\n credentials?: RequestCredentials;\n}\n\n/**\n * @internal\n */\nexport interface PostFormOpts {\n body: URLSearchParams;\n basicAuth?: string;\n timeoutInSeconds?: number;\n initCredentials?: \"same-origin\" | \"include\" | \"omit\";\n}\n\n/**\n * @internal\n */\nexport class JsonService {\n private readonly _logger = new Logger(\"JsonService\");\n\n private _contentTypes: string[] = [];\n\n public constructor(\n additionalContentTypes: string[] = [],\n private _jwtHandler: JwtHandler | null = null,\n private _extraHeaders: Record = {},\n ) {\n this._contentTypes.push(...additionalContentTypes, \"application/json\");\n if (_jwtHandler) {\n this._contentTypes.push(\"application/jwt\");\n }\n }\n\n protected async fetchWithTimeout(input: RequestInfo, init: RequestInit & { timeoutInSeconds?: number } = {}) {\n const { timeoutInSeconds, ...initFetch } = init;\n if (!timeoutInSeconds) {\n return await fetch(input, initFetch);\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutInSeconds * 1000);\n\n try {\n const response = await fetch(input, {\n ...init,\n signal: controller.signal,\n });\n return response;\n }\n catch (err) {\n if (err instanceof DOMException && err.name === \"AbortError\") {\n throw new ErrorTimeout(\"Network timed out\");\n }\n throw err;\n }\n finally {\n clearTimeout(timeoutId);\n }\n }\n\n public async getJson(url: string, {\n token,\n credentials,\n }: GetJsonOpts = {}): Promise> {\n const logger = this._logger.create(\"getJson\");\n const headers: HeadersInit = {\n \"Accept\": this._contentTypes.join(\", \"),\n };\n if (token) {\n logger.debug(\"token passed, setting Authorization header\");\n headers[\"Authorization\"] = \"Bearer \" + token;\n }\n\n this.appendExtraHeaders(headers);\n\n let response: Response;\n try {\n logger.debug(\"url:\", url);\n response = await this.fetchWithTimeout(url, { method: \"GET\", headers, credentials });\n }\n catch (err) {\n logger.error(\"Network Error\");\n throw err;\n }\n\n logger.debug(\"HTTP response received, status\", response.status);\n const contentType = response.headers.get(\"Content-Type\");\n if (contentType && !this._contentTypes.find(item => contentType.startsWith(item))) {\n logger.throw(new Error(`Invalid response Content-Type: ${(contentType ?? \"undefined\")}, from URL: ${url}`));\n }\n if (response.ok && this._jwtHandler && contentType?.startsWith(\"application/jwt\")) {\n return await this._jwtHandler(await response.text());\n }\n let json: Record;\n try {\n json = await response.json();\n }\n catch (err) {\n logger.error(\"Error parsing JSON response\", err);\n if (response.ok) throw err;\n throw new Error(`${response.statusText} (${response.status})`);\n }\n if (!response.ok) {\n logger.error(\"Error from server:\", json);\n if (json.error) {\n throw new ErrorResponse(json);\n }\n throw new Error(`${response.statusText} (${response.status}): ${JSON.stringify(json)}`);\n }\n return json;\n }\n\n public async postForm(url: string, {\n body,\n basicAuth,\n timeoutInSeconds,\n initCredentials,\n }: PostFormOpts): Promise> {\n const logger = this._logger.create(\"postForm\");\n const headers: HeadersInit = {\n \"Accept\": this._contentTypes.join(\", \"),\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n if (basicAuth !== undefined) {\n headers[\"Authorization\"] = \"Basic \" + basicAuth;\n }\n\n this.appendExtraHeaders(headers);\n\n let response: Response;\n try {\n logger.debug(\"url:\", url);\n response = await this.fetchWithTimeout(url, { method: \"POST\", headers, body, timeoutInSeconds, credentials: initCredentials });\n }\n catch (err) {\n logger.error(\"Network error\");\n throw err;\n }\n\n logger.debug(\"HTTP response received, status\", response.status);\n const contentType = response.headers.get(\"Content-Type\");\n if (contentType && !this._contentTypes.find(item => contentType.startsWith(item))) {\n throw new Error(`Invalid response Content-Type: ${(contentType ?? \"undefined\")}, from URL: ${url}`);\n }\n\n const responseText = await response.text();\n\n let json: Record = {};\n if (responseText) {\n try {\n json = JSON.parse(responseText);\n }\n catch (err) {\n logger.error(\"Error parsing JSON response\", err);\n if (response.ok) throw err;\n throw new Error(`${response.statusText} (${response.status})`);\n }\n }\n\n if (!response.ok) {\n logger.error(\"Error from server:\", json);\n if (json.error) {\n throw new ErrorResponse(json, body);\n }\n throw new Error(`${response.statusText} (${response.status}): ${JSON.stringify(json)}`);\n }\n\n return json;\n }\n\n private appendExtraHeaders(\n headers: Record,\n ): void {\n const logger = this._logger.create(\"appendExtraHeaders\");\n const customKeys = Object.keys(this._extraHeaders);\n const protectedHeaders = [\n \"authorization\",\n \"accept\",\n \"content-type\",\n ];\n if (customKeys.length === 0) {\n return;\n }\n customKeys.forEach((headerName) => {\n if (protectedHeaders.includes(headerName.toLocaleLowerCase())) {\n logger.warn(\"Protected header could not be overridden\", headerName, protectedHeaders);\n return;\n }\n const content = (typeof this._extraHeaders[headerName] === \"function\") ?\n (this._extraHeaders[headerName] as ()=>string)() :\n this._extraHeaders[headerName];\n if (content && content !== \"\") {\n headers[headerName] = content as string;\n }\n });\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger } from \"./utils\";\nimport { JsonService } from \"./JsonService\";\nimport type { OidcClientSettingsStore, SigningKey } from \"./OidcClientSettings\";\nimport type { OidcMetadata } from \"./OidcMetadata\";\n\n/**\n * @public\n * @see https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata\n */\nexport class MetadataService {\n private readonly _logger = new Logger(\"MetadataService\");\n private readonly _jsonService;\n\n // cache\n private _metadataUrl: string;\n private _signingKeys: SigningKey[] | null = null;\n private _metadata: Partial | null = null;\n private _fetchRequestCredentials: RequestCredentials | undefined;\n\n public constructor(private readonly _settings: OidcClientSettingsStore) {\n this._metadataUrl = this._settings.metadataUrl;\n this._jsonService = new JsonService(\n [\"application/jwk-set+json\"],\n null,\n this._settings.extraHeaders,\n );\n if (this._settings.signingKeys) {\n this._logger.debug(\"using signingKeys from settings\");\n this._signingKeys = this._settings.signingKeys;\n }\n\n if (this._settings.metadata) {\n this._logger.debug(\"using metadata from settings\");\n this._metadata = this._settings.metadata;\n }\n\n if (this._settings.fetchRequestCredentials) {\n this._logger.debug(\"using fetchRequestCredentials from settings\");\n this._fetchRequestCredentials = this._settings.fetchRequestCredentials;\n }\n }\n\n public resetSigningKeys(): void {\n this._signingKeys = null;\n }\n\n public async getMetadata(): Promise> {\n const logger = this._logger.create(\"getMetadata\");\n if (this._metadata) {\n logger.debug(\"using cached values\");\n return this._metadata;\n }\n\n if (!this._metadataUrl) {\n logger.throw(new Error(\"No authority or metadataUrl configured on settings\"));\n throw null;\n }\n\n logger.debug(\"getting metadata from\", this._metadataUrl);\n const metadata = await this._jsonService.getJson(this._metadataUrl, { credentials: this._fetchRequestCredentials });\n\n logger.debug(\"merging remote JSON with seed metadata\");\n this._metadata = Object.assign({}, this._settings.metadataSeed, metadata);\n return this._metadata;\n }\n\n public getIssuer(): Promise {\n return this._getMetadataProperty(\"issuer\") as Promise;\n }\n\n public getAuthorizationEndpoint(): Promise {\n return this._getMetadataProperty(\"authorization_endpoint\") as Promise;\n }\n\n public getUserInfoEndpoint(): Promise {\n return this._getMetadataProperty(\"userinfo_endpoint\") as Promise;\n }\n\n public getTokenEndpoint(optional: false): Promise;\n public getTokenEndpoint(optional?: true): Promise;\n public getTokenEndpoint(optional = true): Promise {\n return this._getMetadataProperty(\"token_endpoint\", optional) as Promise;\n }\n\n public getCheckSessionIframe(): Promise {\n return this._getMetadataProperty(\"check_session_iframe\", true) as Promise;\n }\n\n public getEndSessionEndpoint(): Promise {\n return this._getMetadataProperty(\"end_session_endpoint\", true) as Promise;\n }\n\n public getRevocationEndpoint(optional: false): Promise;\n public getRevocationEndpoint(optional?: true): Promise;\n public getRevocationEndpoint(optional = true): Promise {\n return this._getMetadataProperty(\"revocation_endpoint\", optional) as Promise;\n }\n\n public getKeysEndpoint(optional: false): Promise;\n public getKeysEndpoint(optional?: true): Promise;\n public getKeysEndpoint(optional = true): Promise {\n return this._getMetadataProperty(\"jwks_uri\", optional) as Promise;\n }\n\n protected async _getMetadataProperty(name: keyof OidcMetadata, optional=false): Promise {\n const logger = this._logger.create(`_getMetadataProperty('${name}')`);\n\n const metadata = await this.getMetadata();\n logger.debug(\"resolved\");\n\n if (metadata[name] === undefined) {\n if (optional === true) {\n logger.warn(\"Metadata does not contain optional property\");\n return undefined;\n }\n\n logger.throw(new Error(\"Metadata does not contain property \" + name));\n }\n\n return metadata[name];\n }\n\n public async getSigningKeys(): Promise {\n const logger = this._logger.create(\"getSigningKeys\");\n if (this._signingKeys) {\n logger.debug(\"returning signingKeys from cache\");\n return this._signingKeys;\n }\n\n const jwks_uri = await this.getKeysEndpoint(false);\n logger.debug(\"got jwks_uri\", jwks_uri);\n\n const keySet = await this._jsonService.getJson(jwks_uri);\n logger.debug(\"got key set\", keySet);\n\n if (!Array.isArray(keySet.keys)) {\n logger.throw(new Error(\"Missing keys on keyset\"));\n throw null; // https://github.com/microsoft/TypeScript/issues/46972\n }\n\n this._signingKeys = keySet.keys;\n return this._signingKeys;\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger } from \"./utils\";\nimport type { StateStore } from \"./StateStore\";\nimport type { AsyncStorage } from \"./AsyncStorage\";\n\n/**\n * @public\n */\nexport class WebStorageStateStore implements StateStore {\n private readonly _logger = new Logger(\"WebStorageStateStore\");\n\n private readonly _store: AsyncStorage | Storage;\n private readonly _prefix: string;\n\n public constructor({\n prefix = \"oidc.\",\n store = localStorage,\n }: { prefix?: string; store?: AsyncStorage | Storage } = {}) {\n this._store = store;\n this._prefix = prefix;\n }\n\n public async set(key: string, value: string): Promise {\n this._logger.create(`set('${key}')`);\n\n key = this._prefix + key;\n await this._store.setItem(key, value);\n }\n\n public async get(key: string): Promise {\n this._logger.create(`get('${key}')`);\n\n key = this._prefix + key;\n const item = await this._store.getItem(key);\n return item;\n }\n\n public async remove(key: string): Promise {\n this._logger.create(`remove('${key}')`);\n\n key = this._prefix + key;\n const item = await this._store.getItem(key);\n await this._store.removeItem(key);\n return item;\n }\n\n public async getAllKeys(): Promise {\n this._logger.create(\"getAllKeys\");\n const len = await this._store.length;\n\n const keys = [];\n for (let index = 0; index < len; index++) {\n const key = await this._store.key(index);\n if (key && key.indexOf(this._prefix) === 0) {\n keys.push(key.substr(this._prefix.length));\n }\n }\n return keys;\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { WebStorageStateStore } from \"./WebStorageStateStore\";\nimport type { OidcMetadata } from \"./OidcMetadata\";\nimport type { StateStore } from \"./StateStore\";\nimport { InMemoryWebStorage } from \"./InMemoryWebStorage\";\n\nconst DefaultResponseType = \"code\";\nconst DefaultScope = \"openid\";\nconst DefaultClientAuthentication = \"client_secret_post\";\nconst DefaultStaleStateAgeInSeconds = 60 * 15;\n\n/**\n * @public\n */\nexport type SigningKey = Record;\n\n/**\n * @public\n */\nexport type ExtraHeader = string | (() => string);\n\n/**\n * The settings used to configure the {@link OidcClient}.\n *\n * @public\n */\nexport interface OidcClientSettings {\n /** The URL of the OIDC/OAuth2 provider */\n authority: string;\n metadataUrl?: string;\n /** Provide metadata when authority server does not allow CORS on the metadata endpoint */\n metadata?: Partial;\n /** Can be used to seed or add additional values to the results of the discovery request */\n metadataSeed?: Partial;\n /** Provide signingKeys when authority server does not allow CORS on the jwks uri */\n signingKeys?: SigningKey[];\n\n /** Your client application's identifier as registered with the OIDC/OAuth2 */\n client_id: string;\n client_secret?: string;\n /** The type of response desired from the OIDC/OAuth2 provider (default: \"code\") */\n response_type?: string;\n /** The scope being requested from the OIDC/OAuth2 provider (default: \"openid\") */\n scope?: string;\n /** The redirect URI of your client application to receive a response from the OIDC/OAuth2 provider */\n redirect_uri: string;\n /** The OIDC/OAuth2 post-logout redirect URI */\n post_logout_redirect_uri?: string;\n\n /**\n * Client authentication method that is used to authenticate when using the token endpoint (default: \"client_secret_post\")\n * - \"client_secret_basic\": using the HTTP Basic authentication scheme\n * - \"client_secret_post\": including the client credentials in the request body\n *\n * See https://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication\n */\n client_authentication?: \"client_secret_basic\" | \"client_secret_post\";\n\n /** optional protocol param */\n prompt?: string;\n /** optional protocol param */\n display?: string;\n /** optional protocol param */\n max_age?: number;\n /** optional protocol param */\n ui_locales?: string;\n /** optional protocol param */\n acr_values?: string;\n /** optional protocol param */\n resource?: string | string[];\n\n /**\n * Optional protocol param\n * The response mode used by the authority server is defined by the response_type unless explicitly specified:\n * - Response mode for the OAuth 2.0 response type \"code\" is the \"query\" encoding\n * - Response mode for the OAuth 2.0 response type \"token\" is the \"fragment\" encoding\n *\n * @see https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html#ResponseModes\n */\n response_mode?: \"query\" | \"fragment\";\n\n /**\n * Should optional OIDC protocol claims be removed from profile or specify the ones to be removed (default: true)\n * When true, the following claims are removed by default: [\"nbf\", \"jti\", \"auth_time\", \"nonce\", \"acr\", \"amr\", \"azp\", \"at_hash\"]\n * When specifying claims, the following claims are not allowed: [\"sub\", \"iss\", \"aud\", \"exp\", \"iat\"]\n */\n filterProtocolClaims?: boolean | string[];\n /** Flag to control if additional identity data is loaded from the user info endpoint in order to populate the user's profile (default: false) */\n loadUserInfo?: boolean;\n /** Number (in seconds) indicating the age of state entries in storage for authorize requests that are considered abandoned and thus can be cleaned up (default: 900) */\n staleStateAgeInSeconds?: number;\n\n /**\n * Indicates how objects returned from the user info endpoint as claims (e.g. `address`) are merged into the claims from the\n * id token as a single object. (default: `{ array: \"replace\" }`)\n * - array: \"replace\": natives (string, int, float) and arrays are replaced, objects are merged as distinct objects\n * - array: \"merge\": natives (string, int, float) are replaced, arrays and objects are merged as distinct objects\n */\n mergeClaimsStrategy?: { array: \"replace\" | \"merge\" };\n\n /**\n * Storage object used to persist interaction state (default: window.localStorage, InMemoryWebStorage iff no window).\n * E.g. `stateStore: new WebStorageStateStore({ store: window.localStorage })`\n */\n stateStore?: StateStore;\n\n /**\n * An object containing additional query string parameters to be including in the authorization request.\n * E.g, when using Azure AD to obtain an access token an additional resource parameter is required. extraQueryParams: `{resource:\"some_identifier\"}`\n */\n extraQueryParams?: Record;\n\n extraTokenParams?: Record;\n\n /**\n * An object containing additional header to be including in request.\n */\n extraHeaders?: Record;\n\n /**\n * Will check the content type header of the response of the revocation endpoint to match these passed values (default: [])\n */\n revokeTokenAdditionalContentTypes?: string[];\n /**\n * Will disable PKCE validation, changing to true will not append to sign in request code_challenge and code_challenge_method. (default: false)\n */\n disablePKCE?: boolean;\n /**\n * Sets the credentials for fetch requests. (default: \"same-origin\")\n * Use this if you need to send cookies to the OIDC/OAuth2 provider or if you are using a proxy that requires cookies\n */\n fetchRequestCredentials?: RequestCredentials;\n\n /**\n * Only scopes in this list will be passed in the token refresh request.\n */\n refreshTokenAllowedScope?: string | undefined;\n}\n\n/**\n * The settings with defaults applied of the {@link OidcClient}.\n *\n * @public\n * @see {@link OidcClientSettings}\n */\nexport class OidcClientSettingsStore {\n // metadata\n public readonly authority: string;\n public readonly metadataUrl: string;\n public readonly metadata: Partial | undefined;\n public readonly metadataSeed: Partial | undefined;\n public readonly signingKeys: SigningKey[] | undefined;\n\n // client config\n public readonly client_id: string;\n public readonly client_secret: string | undefined;\n public readonly response_type: string;\n public readonly scope: string;\n public readonly redirect_uri: string;\n public readonly post_logout_redirect_uri: string | undefined;\n public readonly client_authentication: \"client_secret_basic\" | \"client_secret_post\";\n\n // optional protocol params\n public readonly prompt: string | undefined;\n public readonly display: string | undefined;\n public readonly max_age: number | undefined;\n public readonly ui_locales: string | undefined;\n public readonly acr_values: string | undefined;\n public readonly resource: string | string[] | undefined;\n public readonly response_mode: \"query\" | \"fragment\" | undefined;\n\n // behavior flags\n public readonly filterProtocolClaims: boolean | string[];\n public readonly loadUserInfo: boolean;\n public readonly staleStateAgeInSeconds: number;\n public readonly mergeClaimsStrategy: { array: \"replace\" | \"merge\" };\n\n public readonly stateStore: StateStore;\n\n // extra\n public readonly extraQueryParams: Record;\n public readonly extraTokenParams: Record;\n public readonly extraHeaders: Record;\n\n public readonly revokeTokenAdditionalContentTypes?: string[];\n public readonly fetchRequestCredentials: RequestCredentials;\n public readonly refreshTokenAllowedScope: string | undefined;\n public readonly disablePKCE: boolean;\n\n public constructor({\n // metadata related\n authority, metadataUrl, metadata, signingKeys, metadataSeed,\n // client related\n client_id, client_secret, response_type = DefaultResponseType, scope = DefaultScope,\n redirect_uri, post_logout_redirect_uri,\n client_authentication = DefaultClientAuthentication,\n // optional protocol\n prompt, display, max_age, ui_locales, acr_values, resource, response_mode,\n // behavior flags\n filterProtocolClaims = true,\n loadUserInfo = false,\n staleStateAgeInSeconds = DefaultStaleStateAgeInSeconds,\n mergeClaimsStrategy = { array: \"replace\" },\n disablePKCE = false,\n // other behavior\n stateStore,\n revokeTokenAdditionalContentTypes,\n fetchRequestCredentials,\n refreshTokenAllowedScope,\n // extra\n extraQueryParams = {},\n extraTokenParams = {},\n extraHeaders = {},\n }: OidcClientSettings) {\n\n this.authority = authority;\n\n if (metadataUrl) {\n this.metadataUrl = metadataUrl;\n } else {\n this.metadataUrl = authority;\n if (authority) {\n if (!this.metadataUrl.endsWith(\"/\")) {\n this.metadataUrl += \"/\";\n }\n this.metadataUrl += \".well-known/openid-configuration\";\n }\n }\n\n this.metadata = metadata;\n this.metadataSeed = metadataSeed;\n this.signingKeys = signingKeys;\n\n this.client_id = client_id;\n this.client_secret = client_secret;\n this.response_type = response_type;\n this.scope = scope;\n this.redirect_uri = redirect_uri;\n this.post_logout_redirect_uri = post_logout_redirect_uri;\n this.client_authentication = client_authentication;\n\n this.prompt = prompt;\n this.display = display;\n this.max_age = max_age;\n this.ui_locales = ui_locales;\n this.acr_values = acr_values;\n this.resource = resource;\n this.response_mode = response_mode;\n\n this.filterProtocolClaims = filterProtocolClaims ?? true;\n this.loadUserInfo = !!loadUserInfo;\n this.staleStateAgeInSeconds = staleStateAgeInSeconds;\n this.mergeClaimsStrategy = mergeClaimsStrategy;\n this.disablePKCE = !!disablePKCE;\n this.revokeTokenAdditionalContentTypes = revokeTokenAdditionalContentTypes;\n\n this.fetchRequestCredentials = fetchRequestCredentials ? fetchRequestCredentials : \"same-origin\";\n\n if (stateStore) {\n this.stateStore = stateStore;\n }\n else {\n const store = typeof window !== \"undefined\" ? window.localStorage : new InMemoryWebStorage();\n this.stateStore = new WebStorageStateStore({ store });\n }\n\n this.refreshTokenAllowedScope = refreshTokenAllowedScope;\n\n this.extraQueryParams = extraQueryParams;\n this.extraTokenParams = extraTokenParams;\n this.extraHeaders = extraHeaders;\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger, JwtUtils } from \"./utils\";\nimport { JsonService } from \"./JsonService\";\nimport type { MetadataService } from \"./MetadataService\";\nimport type { JwtClaims } from \"./Claims\";\nimport type { OidcClientSettingsStore } from \"./OidcClientSettings\";\n\n/**\n * @internal\n */\nexport class UserInfoService {\n protected readonly _logger = new Logger(\"UserInfoService\");\n private readonly _jsonService: JsonService;\n\n public constructor(private readonly _settings: OidcClientSettingsStore,\n private readonly _metadataService: MetadataService,\n ) {\n this._jsonService = new JsonService(\n undefined,\n this._getClaimsFromJwt,\n this._settings.extraHeaders,\n );\n }\n\n public async getClaims(token: string): Promise {\n const logger = this._logger.create(\"getClaims\");\n if (!token) {\n this._logger.throw(new Error(\"No token passed\"));\n }\n\n const url = await this._metadataService.getUserInfoEndpoint();\n logger.debug(\"got userinfo url\", url);\n\n const claims = await this._jsonService.getJson(url, {\n token,\n credentials: this._settings.fetchRequestCredentials,\n });\n logger.debug(\"got claims\", claims);\n\n return claims;\n }\n\n protected _getClaimsFromJwt = async (responseText: string): Promise => {\n const logger = this._logger.create(\"_getClaimsFromJwt\");\n try {\n const payload = JwtUtils.decode(responseText);\n logger.debug(\"JWT decoding successful\");\n\n return payload;\n } catch (err) {\n logger.error(\"Error parsing JWT response\");\n throw err;\n }\n };\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { CryptoUtils, Logger } from \"./utils\";\nimport { JsonService } from \"./JsonService\";\nimport type { MetadataService } from \"./MetadataService\";\nimport type { OidcClientSettingsStore } from \"./OidcClientSettings\";\n\n/**\n * @internal\n */\nexport interface ExchangeCodeArgs {\n client_id?: string;\n client_secret?: string;\n redirect_uri?: string;\n\n grant_type?: string;\n code: string;\n code_verifier?: string;\n}\n\n/**\n * @internal\n */\nexport interface ExchangeCredentialsArgs {\n client_id?: string;\n client_secret?: string;\n\n grant_type?: string;\n scope?: string;\n\n username: string;\n password: string;\n}\n\n/**\n * @internal\n */\nexport interface ExchangeRefreshTokenArgs {\n client_id?: string;\n client_secret?: string;\n redirect_uri?: string;\n\n grant_type?: string;\n refresh_token: string;\n scope?: string;\n resource?: string | string[];\n\n timeoutInSeconds?: number;\n}\n\n/**\n * @internal\n */\nexport interface RevokeArgs {\n token: string;\n token_type_hint?: \"access_token\" | \"refresh_token\";\n}\n\n/**\n * @internal\n */\nexport class TokenClient {\n private readonly _logger = new Logger(\"TokenClient\");\n private readonly _jsonService;\n\n public constructor(\n private readonly _settings: OidcClientSettingsStore,\n private readonly _metadataService: MetadataService,\n ) {\n this._jsonService = new JsonService(\n this._settings.revokeTokenAdditionalContentTypes,\n null,\n this._settings.extraHeaders,\n );\n }\n\n /**\n * Exchange code.\n *\n * @see https://www.rfc-editor.org/rfc/rfc6749#section-4.1.3\n */\n public async exchangeCode({\n grant_type = \"authorization_code\",\n redirect_uri = this._settings.redirect_uri,\n client_id = this._settings.client_id,\n client_secret = this._settings.client_secret,\n ...args\n }: ExchangeCodeArgs): Promise> {\n const logger = this._logger.create(\"exchangeCode\");\n if (!client_id) {\n logger.throw(new Error(\"A client_id is required\"));\n }\n if (!redirect_uri) {\n logger.throw(new Error(\"A redirect_uri is required\"));\n }\n if (!args.code) {\n logger.throw(new Error(\"A code is required\"));\n }\n\n const params = new URLSearchParams({ grant_type, redirect_uri });\n for (const [key, value] of Object.entries(args)) {\n if (value != null) {\n params.set(key, value);\n }\n }\n let basicAuth: string | undefined;\n switch (this._settings.client_authentication) {\n case \"client_secret_basic\":\n if (!client_secret) {\n logger.throw(new Error(\"A client_secret is required\"));\n throw null; // https://github.com/microsoft/TypeScript/issues/46972\n }\n basicAuth = CryptoUtils.generateBasicAuth(client_id, client_secret);\n break;\n case \"client_secret_post\":\n params.append(\"client_id\", client_id);\n if (client_secret) {\n params.append(\"client_secret\", client_secret);\n }\n break;\n }\n\n const url = await this._metadataService.getTokenEndpoint(false);\n logger.debug(\"got token endpoint\");\n\n const response = await this._jsonService.postForm(url, { body: params, basicAuth, initCredentials: this._settings.fetchRequestCredentials });\n logger.debug(\"got response\");\n\n return response;\n }\n\n /**\n * Exchange credentials.\n *\n * @see https://www.rfc-editor.org/rfc/rfc6749#section-4.3.2\n */\n public async exchangeCredentials({\n grant_type = \"password\",\n client_id = this._settings.client_id,\n client_secret = this._settings.client_secret,\n scope = this._settings.scope,\n ...args\n }: ExchangeCredentialsArgs): Promise> {\n const logger = this._logger.create(\"exchangeCredentials\");\n\n if (!client_id) {\n logger.throw(new Error(\"A client_id is required\"));\n }\n\n const params = new URLSearchParams({ grant_type, scope });\n for (const [key, value] of Object.entries(args)) {\n if (value != null) {\n params.set(key, value);\n }\n }\n\n let basicAuth: string | undefined;\n switch (this._settings.client_authentication) {\n case \"client_secret_basic\":\n if (!client_secret) {\n logger.throw(new Error(\"A client_secret is required\"));\n throw null; // https://github.com/microsoft/TypeScript/issues/46972\n }\n basicAuth = CryptoUtils.generateBasicAuth(client_id, client_secret);\n break;\n case \"client_secret_post\":\n params.append(\"client_id\", client_id);\n if (client_secret) {\n params.append(\"client_secret\", client_secret);\n }\n break;\n }\n\n const url = await this._metadataService.getTokenEndpoint(false);\n logger.debug(\"got token endpoint\");\n\n const response = await this._jsonService.postForm(url, { body: params, basicAuth, initCredentials: this._settings.fetchRequestCredentials });\n logger.debug(\"got response\");\n\n return response;\n }\n\n /**\n * Exchange a refresh token.\n *\n * @see https://www.rfc-editor.org/rfc/rfc6749#section-6\n */\n public async exchangeRefreshToken({\n grant_type = \"refresh_token\",\n client_id = this._settings.client_id,\n client_secret = this._settings.client_secret,\n timeoutInSeconds,\n ...args\n }: ExchangeRefreshTokenArgs): Promise> {\n const logger = this._logger.create(\"exchangeRefreshToken\");\n if (!client_id) {\n logger.throw(new Error(\"A client_id is required\"));\n }\n if (!args.refresh_token) {\n logger.throw(new Error(\"A refresh_token is required\"));\n }\n\n const params = new URLSearchParams({ grant_type });\n for (const [key, value] of Object.entries(args)) {\n if (Array.isArray(value)) {\n value.forEach(param => params.append(key, param));\n }\n else if (value != null) {\n params.set(key, value);\n }\n }\n let basicAuth: string | undefined;\n switch (this._settings.client_authentication) {\n case \"client_secret_basic\":\n if (!client_secret) {\n logger.throw(new Error(\"A client_secret is required\"));\n throw null; // https://github.com/microsoft/TypeScript/issues/46972\n }\n basicAuth = CryptoUtils.generateBasicAuth(client_id, client_secret);\n break;\n case \"client_secret_post\":\n params.append(\"client_id\", client_id);\n if (client_secret) {\n params.append(\"client_secret\", client_secret);\n }\n break;\n }\n\n const url = await this._metadataService.getTokenEndpoint(false);\n logger.debug(\"got token endpoint\");\n\n const response = await this._jsonService.postForm(url, { body: params, basicAuth, timeoutInSeconds, initCredentials: this._settings.fetchRequestCredentials });\n logger.debug(\"got response\");\n\n return response;\n }\n\n /**\n * Revoke an access or refresh token.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc7009#section-2.1\n */\n public async revoke(args: RevokeArgs): Promise {\n const logger = this._logger.create(\"revoke\");\n if (!args.token) {\n logger.throw(new Error(\"A token is required\"));\n }\n\n const url = await this._metadataService.getRevocationEndpoint(false);\n\n logger.debug(`got revocation endpoint, revoking ${args.token_type_hint ?? \"default token type\"}`);\n\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(args)) {\n if (value != null) {\n params.set(key, value);\n }\n }\n params.set(\"client_id\", this._settings.client_id);\n if (this._settings.client_secret) {\n params.set(\"client_secret\", this._settings.client_secret);\n }\n\n await this._jsonService.postForm(url, { body: params });\n logger.debug(\"got response\");\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger, JwtUtils } from \"./utils\";\nimport { ErrorResponse } from \"./errors\";\nimport type { MetadataService } from \"./MetadataService\";\nimport { UserInfoService } from \"./UserInfoService\";\nimport { TokenClient } from \"./TokenClient\";\nimport type { OidcClientSettingsStore } from \"./OidcClientSettings\";\nimport type { SigninState } from \"./SigninState\";\nimport type { SigninResponse } from \"./SigninResponse\";\nimport type { State } from \"./State\";\nimport type { SignoutResponse } from \"./SignoutResponse\";\nimport type { UserProfile } from \"./User\";\nimport type { RefreshState } from \"./RefreshState\";\nimport type { IdTokenClaims } from \"./Claims\";\nimport type { ClaimsService } from \"./ClaimsService\";\n\n/**\n * @internal\n */\nexport class ResponseValidator {\n protected readonly _logger = new Logger(\"ResponseValidator\");\n protected readonly _userInfoService = new UserInfoService(this._settings, this._metadataService);\n protected readonly _tokenClient = new TokenClient(this._settings, this._metadataService);\n\n public constructor(\n protected readonly _settings: OidcClientSettingsStore,\n protected readonly _metadataService: MetadataService,\n protected readonly _claimsService: ClaimsService,\n ) {}\n\n public async validateSigninResponse(response: SigninResponse, state: SigninState): Promise {\n const logger = this._logger.create(\"validateSigninResponse\");\n\n this._processSigninState(response, state);\n logger.debug(\"state processed\");\n\n await this._processCode(response, state);\n logger.debug(\"code processed\");\n\n if (response.isOpenId) {\n this._validateIdTokenAttributes(response);\n }\n logger.debug(\"tokens validated\");\n\n await this._processClaims(response, state?.skipUserInfo, response.isOpenId);\n logger.debug(\"claims processed\");\n }\n\n public async validateCredentialsResponse(response: SigninResponse, skipUserInfo: boolean): Promise {\n const logger = this._logger.create(\"validateCredentialsResponse\");\n\n if (response.isOpenId && !!response.id_token) {\n this._validateIdTokenAttributes(response);\n }\n logger.debug(\"tokens validated\");\n\n await this._processClaims(response, skipUserInfo, response.isOpenId);\n logger.debug(\"claims processed\");\n }\n\n public async validateRefreshResponse(response: SigninResponse, state: RefreshState): Promise {\n const logger = this._logger.create(\"validateRefreshResponse\");\n\n response.userState = state.data;\n // if there's no session_state on the response, copy over session_state from original request\n response.session_state ??= state.session_state;\n // if there's no scope on the response, then assume all scopes granted (per-spec) and copy over scopes from original request\n response.scope ??= state.scope;\n\n // OpenID Connect Core 1.0 says that id_token is optional in refresh response:\n // https://openid.net/specs/openid-connect-core-1_0.html#RefreshTokenResponse\n if (response.isOpenId && !!response.id_token) {\n this._validateIdTokenAttributes(response, state.id_token);\n logger.debug(\"ID Token validated\");\n }\n\n if (!response.id_token) {\n // if there's no id_token on the response, copy over id_token from original request\n response.id_token = state.id_token;\n // and decoded part too\n response.profile = state.profile;\n }\n\n const hasIdToken = response.isOpenId && !!response.id_token;\n await this._processClaims(response, false, hasIdToken);\n logger.debug(\"claims processed\");\n }\n\n public validateSignoutResponse(response: SignoutResponse, state: State): void {\n const logger = this._logger.create(\"validateSignoutResponse\");\n if (state.id !== response.state) {\n logger.throw(new Error(\"State does not match\"));\n }\n\n // now that we know the state matches, take the stored data\n // and set it into the response so callers can get their state\n // this is important for both success & error outcomes\n logger.debug(\"state validated\");\n response.userState = state.data;\n\n if (response.error) {\n logger.warn(\"Response was error\", response.error);\n throw new ErrorResponse(response);\n }\n }\n\n protected _processSigninState(response: SigninResponse, state: SigninState): void {\n const logger = this._logger.create(\"_processSigninState\");\n if (state.id !== response.state) {\n logger.throw(new Error(\"State does not match\"));\n }\n\n if (!state.client_id) {\n logger.throw(new Error(\"No client_id on state\"));\n }\n\n if (!state.authority) {\n logger.throw(new Error(\"No authority on state\"));\n }\n\n // ensure we're using the correct authority\n if (this._settings.authority !== state.authority) {\n logger.throw(new Error(\"authority mismatch on settings vs. signin state\"));\n }\n if (this._settings.client_id && this._settings.client_id !== state.client_id) {\n logger.throw(new Error(\"client_id mismatch on settings vs. signin state\"));\n }\n\n // now that we know the state matches, take the stored data\n // and set it into the response so callers can get their state\n // this is important for both success & error outcomes\n logger.debug(\"state validated\");\n response.userState = state.data;\n response.url_state = state.url_state;\n // if there's no scope on the response, then assume all scopes granted (per-spec) and copy over scopes from original request\n response.scope ??= state.scope;\n\n if (response.error) {\n logger.warn(\"Response was error\", response.error);\n throw new ErrorResponse(response);\n }\n\n if (state.code_verifier && !response.code) {\n logger.throw(new Error(\"Expected code in response\"));\n }\n\n }\n\n protected async _processClaims(response: SigninResponse, skipUserInfo = false, validateSub = true): Promise {\n const logger = this._logger.create(\"_processClaims\");\n response.profile = this._claimsService.filterProtocolClaims(response.profile);\n\n if (skipUserInfo || !this._settings.loadUserInfo || !response.access_token) {\n logger.debug(\"not loading user info\");\n return;\n }\n\n logger.debug(\"loading user info\");\n const claims = await this._userInfoService.getClaims(response.access_token);\n logger.debug(\"user info claims received from user info endpoint\");\n\n if (validateSub && claims.sub !== response.profile.sub) {\n logger.throw(new Error(\"subject from UserInfo response does not match subject in ID Token\"));\n }\n\n response.profile = this._claimsService.mergeClaims(response.profile, this._claimsService.filterProtocolClaims(claims as IdTokenClaims));\n logger.debug(\"user info claims received, updated profile:\", response.profile);\n }\n\n protected async _processCode(response: SigninResponse, state: SigninState): Promise {\n const logger = this._logger.create(\"_processCode\");\n if (response.code) {\n logger.debug(\"Validating code\");\n const tokenResponse = await this._tokenClient.exchangeCode({\n client_id: state.client_id,\n client_secret: state.client_secret,\n code: response.code,\n redirect_uri: state.redirect_uri,\n code_verifier: state.code_verifier,\n ...state.extraTokenParams,\n });\n Object.assign(response, tokenResponse);\n } else {\n logger.debug(\"No code to process\");\n }\n }\n\n protected _validateIdTokenAttributes(response: SigninResponse, existingToken?: string): void {\n const logger = this._logger.create(\"_validateIdTokenAttributes\");\n\n logger.debug(\"decoding ID Token JWT\");\n const incoming = JwtUtils.decode(response.id_token ?? \"\");\n\n if (!incoming.sub) {\n logger.throw(new Error(\"ID Token is missing a subject claim\"));\n }\n\n if (existingToken) {\n const existing = JwtUtils.decode(existingToken);\n if (incoming.sub !== existing.sub) {\n logger.throw(new Error(\"sub in id_token does not match current sub\"));\n }\n if (incoming.auth_time && incoming.auth_time !== existing.auth_time) {\n logger.throw(new Error(\"auth_time in id_token does not match original auth_time\"));\n }\n if (incoming.azp && incoming.azp !== existing.azp) {\n logger.throw(new Error(\"azp in id_token does not match original azp\"));\n }\n if (!incoming.azp && existing.azp) {\n logger.throw(new Error(\"azp not in id_token, but present in original id_token\"));\n }\n }\n\n response.profile = incoming as UserProfile;\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger, CryptoUtils, Timer } from \"./utils\";\nimport type { StateStore } from \"./StateStore\";\n\n/**\n * @public\n */\nexport class State {\n public readonly id: string;\n public readonly created: number;\n public readonly request_type: string | undefined;\n public readonly url_state: string | undefined;\n\n /** custom \"state\", which can be used by a caller to have \"data\" round tripped */\n public readonly data?: unknown;\n\n public constructor(args: {\n id?: string;\n data?: unknown;\n created?: number;\n request_type?: string;\n url_state?: string;\n }) {\n this.id = args.id || CryptoUtils.generateUUIDv4();\n this.data = args.data;\n\n if (args.created && args.created > 0) {\n this.created = args.created;\n }\n else {\n this.created = Timer.getEpochTime();\n }\n this.request_type = args.request_type;\n this.url_state = args.url_state;\n }\n\n public toStorageString(): string {\n new Logger(\"State\").create(\"toStorageString\");\n return JSON.stringify({\n id: this.id,\n data: this.data,\n created: this.created,\n request_type: this.request_type,\n url_state: this.url_state,\n });\n }\n\n public static fromStorageString(storageString: string): Promise {\n Logger.createStatic(\"State\", \"fromStorageString\");\n return Promise.resolve(new State(JSON.parse(storageString)));\n }\n\n public static async clearStaleState(storage: StateStore, age: number): Promise {\n const logger = Logger.createStatic(\"State\", \"clearStaleState\");\n const cutoff = Timer.getEpochTime() - age;\n\n const keys = await storage.getAllKeys();\n logger.debug(\"got keys\", keys);\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const item = await storage.get(key);\n let remove = false;\n\n if (item) {\n try {\n const state = await State.fromStorageString(item);\n\n logger.debug(\"got item from key:\", key, state.created);\n if (state.created <= cutoff) {\n remove = true;\n }\n }\n catch (err) {\n logger.error(\"Error parsing state for key:\", key, err);\n remove = true;\n }\n }\n else {\n logger.debug(\"no item in storage for key:\", key);\n remove = true;\n }\n\n if (remove) {\n logger.debug(\"removed item for key:\", key);\n void storage.remove(key);\n }\n }\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger, CryptoUtils } from \"./utils\";\nimport { State } from \"./State\";\n\n/** @public */\nexport interface SigninStateArgs {\n id?: string;\n data?: unknown;\n created?: number;\n request_type?: string;\n\n code_verifier?: string;\n code_challenge?: string;\n authority: string;\n client_id: string;\n redirect_uri: string;\n scope: string;\n client_secret?: string;\n extraTokenParams?: Record;\n response_mode?: \"query\" | \"fragment\";\n skipUserInfo?: boolean;\n url_state?: string;\n}\n\n/** @public */\nexport type SigninStateCreateArgs = Omit & {\n code_verifier?: string | boolean;\n};\n\n/**\n * @public\n */\nexport class SigninState extends State {\n // isCode\n /** The same code_verifier that was used to obtain the authorization_code via PKCE. */\n public readonly code_verifier: string | undefined;\n /** Used to secure authorization code grants via Proof Key for Code Exchange (PKCE). */\n public readonly code_challenge: string | undefined;\n\n // to ensure state still matches settings\n /** @see {@link OidcClientSettings.authority} */\n public readonly authority: string;\n /** @see {@link OidcClientSettings.client_id} */\n public readonly client_id: string;\n /** @see {@link OidcClientSettings.redirect_uri} */\n public readonly redirect_uri: string;\n /** @see {@link OidcClientSettings.scope} */\n public readonly scope: string;\n /** @see {@link OidcClientSettings.client_secret} */\n public readonly client_secret: string | undefined;\n /** @see {@link OidcClientSettings.extraTokenParams} */\n public readonly extraTokenParams: Record | undefined;\n /** @see {@link OidcClientSettings.response_mode} */\n public readonly response_mode: \"query\" | \"fragment\" | undefined;\n\n public readonly skipUserInfo: boolean | undefined;\n\n private constructor(args: SigninStateArgs) {\n super(args);\n\n this.code_verifier = args.code_verifier;\n this.code_challenge = args.code_challenge;\n this.authority = args.authority;\n this.client_id = args.client_id;\n this.redirect_uri = args.redirect_uri;\n this.scope = args.scope;\n this.client_secret = args.client_secret;\n this.extraTokenParams = args.extraTokenParams;\n\n this.response_mode = args.response_mode;\n this.skipUserInfo = args.skipUserInfo;\n }\n\n public static async create(args: SigninStateCreateArgs): Promise {\n const code_verifier = args.code_verifier === true ? CryptoUtils.generateCodeVerifier() : (args.code_verifier || undefined);\n const code_challenge = code_verifier ? (await CryptoUtils.generateCodeChallenge(code_verifier)) : undefined;\n\n return new SigninState({\n ...args,\n code_verifier,\n code_challenge,\n });\n }\n\n public toStorageString(): string {\n new Logger(\"SigninState\").create(\"toStorageString\");\n return JSON.stringify({\n id: this.id,\n data: this.data,\n created: this.created,\n request_type: this.request_type,\n url_state: this.url_state,\n\n code_verifier: this.code_verifier,\n authority: this.authority,\n client_id: this.client_id,\n redirect_uri: this.redirect_uri,\n scope: this.scope,\n client_secret: this.client_secret,\n extraTokenParams : this.extraTokenParams,\n response_mode: this.response_mode,\n skipUserInfo: this.skipUserInfo,\n });\n }\n\n public static fromStorageString(storageString: string): Promise {\n Logger.createStatic(\"SigninState\", \"fromStorageString\");\n const data = JSON.parse(storageString);\n return SigninState.create(data);\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger, URL_STATE_DELIMITER } from \"./utils\";\nimport { SigninState } from \"./SigninState\";\n\n/**\n * @public\n * @see https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest\n */\nexport interface SigninRequestCreateArgs {\n // mandatory\n url: string;\n authority: string;\n client_id: string;\n redirect_uri: string;\n response_type: string;\n scope: string;\n\n // optional\n response_mode?: \"query\" | \"fragment\";\n nonce?: string;\n display?: string;\n prompt?: string;\n max_age?: number;\n ui_locales?: string;\n id_token_hint?: string;\n login_hint?: string;\n acr_values?: string;\n\n // other\n resource?: string | string[];\n request?: string;\n request_uri?: string;\n request_type?: string;\n extraQueryParams?: Record;\n\n // special\n extraTokenParams?: Record;\n client_secret?: string;\n skipUserInfo?: boolean;\n disablePKCE?: boolean;\n /** custom \"state\", which can be used by a caller to have \"data\" round tripped */\n state_data?: unknown;\n url_state?: string;\n}\n\n/**\n * @public\n */\nexport class SigninRequest {\n private static readonly _logger = new Logger(\"SigninRequest\");\n\n public readonly url: string;\n public readonly state: SigninState;\n\n private constructor(args: {\n url: string;\n state: SigninState;\n }) {\n this.url = args.url;\n this.state = args.state;\n }\n\n public static async create({\n // mandatory\n url, authority, client_id, redirect_uri, response_type, scope,\n // optional\n state_data, response_mode, request_type, client_secret, nonce, url_state,\n resource,\n skipUserInfo,\n extraQueryParams,\n extraTokenParams,\n disablePKCE,\n ...optionalParams\n }: SigninRequestCreateArgs): Promise {\n if (!url) {\n this._logger.error(\"create: No url passed\");\n throw new Error(\"url\");\n }\n if (!client_id) {\n this._logger.error(\"create: No client_id passed\");\n throw new Error(\"client_id\");\n }\n if (!redirect_uri) {\n this._logger.error(\"create: No redirect_uri passed\");\n throw new Error(\"redirect_uri\");\n }\n if (!response_type) {\n this._logger.error(\"create: No response_type passed\");\n throw new Error(\"response_type\");\n }\n if (!scope) {\n this._logger.error(\"create: No scope passed\");\n throw new Error(\"scope\");\n }\n if (!authority) {\n this._logger.error(\"create: No authority passed\");\n throw new Error(\"authority\");\n }\n\n const state = await SigninState.create({\n data: state_data,\n request_type,\n url_state,\n code_verifier: !disablePKCE,\n client_id, authority, redirect_uri,\n response_mode,\n client_secret, scope, extraTokenParams,\n skipUserInfo,\n });\n\n const parsedUrl = new URL(url);\n parsedUrl.searchParams.append(\"client_id\", client_id);\n parsedUrl.searchParams.append(\"redirect_uri\", redirect_uri);\n parsedUrl.searchParams.append(\"response_type\", response_type);\n parsedUrl.searchParams.append(\"scope\", scope);\n if (nonce) {\n parsedUrl.searchParams.append(\"nonce\", nonce);\n }\n\n let stateParam = state.id;\n if (url_state) {\n stateParam = `${stateParam}${URL_STATE_DELIMITER}${url_state}`;\n }\n parsedUrl.searchParams.append(\"state\", stateParam);\n if (state.code_challenge) {\n parsedUrl.searchParams.append(\"code_challenge\", state.code_challenge);\n parsedUrl.searchParams.append(\"code_challenge_method\", \"S256\");\n }\n\n if (resource) {\n // https://datatracker.ietf.org/doc/html/rfc8707\n const resources = Array.isArray(resource) ? resource : [resource];\n resources\n .forEach(r => parsedUrl.searchParams.append(\"resource\", r));\n }\n\n for (const [key, value] of Object.entries({ response_mode, ...optionalParams, ...extraQueryParams })) {\n if (value != null) {\n parsedUrl.searchParams.append(key, value.toString());\n }\n }\n\n return new SigninRequest({\n url: parsedUrl.href,\n state,\n });\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Timer, URL_STATE_DELIMITER } from \"./utils\";\nimport type { UserProfile } from \"./User\";\n\nconst OidcScope = \"openid\";\n\n/**\n * @public\n * @see https://openid.net/specs/openid-connect-core-1_0.html#AuthResponse\n * @see https://openid.net/specs/openid-connect-core-1_0.html#AuthError\n */\nexport class SigninResponse {\n // props present in the initial callback response regardless of success\n public readonly state: string | null;\n /** @see {@link User.session_state} */\n public session_state: string | null;\n\n // error props\n /** @see {@link ErrorResponse.error} */\n public readonly error: string | null;\n /** @see {@link ErrorResponse.error_description} */\n public readonly error_description: string | null;\n /** @see {@link ErrorResponse.error_uri} */\n public readonly error_uri: string | null;\n\n // success props\n public readonly code: string | null;\n\n // props set after validation\n /** @see {@link User.id_token} */\n public id_token?: string;\n /** @see {@link User.access_token} */\n public access_token = \"\";\n /** @see {@link User.token_type} */\n public token_type = \"\";\n /** @see {@link User.refresh_token} */\n public refresh_token?: string;\n /** @see {@link User.scope} */\n public scope?: string;\n /** @see {@link User.expires_at} */\n public expires_at?: number;\n\n /** custom state data set during the initial signin request */\n public userState: unknown;\n public url_state?: string;\n\n /** @see {@link User.profile} */\n public profile: UserProfile = {} as UserProfile;\n\n public constructor(params: URLSearchParams) {\n this.state = params.get(\"state\");\n this.session_state = params.get(\"session_state\");\n if (this.state) {\n const splitState = decodeURIComponent(this.state).split(URL_STATE_DELIMITER);\n this.state = splitState[0];\n if (splitState.length > 1) {\n this.url_state = splitState.slice(1).join(URL_STATE_DELIMITER);\n }\n }\n\n this.error = params.get(\"error\");\n this.error_description = params.get(\"error_description\");\n this.error_uri = params.get(\"error_uri\");\n\n this.code = params.get(\"code\");\n }\n\n public get expires_in(): number | undefined {\n if (this.expires_at === undefined) {\n return undefined;\n }\n return this.expires_at - Timer.getEpochTime();\n }\n public set expires_in(value: number | undefined) {\n // spec expects a number, but normalize here just in case\n if (typeof value === \"string\") value = Number(value);\n if (value !== undefined && value >= 0) {\n this.expires_at = Math.floor(value) + Timer.getEpochTime();\n }\n }\n\n public get isOpenId(): boolean {\n return this.scope?.split(\" \").includes(OidcScope) || !!this.id_token;\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger } from \"./utils\";\nimport { State } from \"./State\";\n\n/**\n * @public\n * @see https://openid.net/specs/openid-connect-rpinitiated-1_0.html#RPLogout\n */\nexport interface SignoutRequestArgs {\n // mandatory\n url: string;\n\n // optional\n id_token_hint?: string;\n client_id?: string;\n post_logout_redirect_uri?: string;\n extraQueryParams?: Record;\n\n // special\n request_type?: string;\n /** custom \"state\", which can be used by a caller to have \"data\" round tripped */\n state_data?: unknown;\n}\n\n/**\n * @public\n */\nexport class SignoutRequest {\n private readonly _logger = new Logger(\"SignoutRequest\");\n\n public readonly url: string;\n public readonly state?: State;\n\n public constructor({\n url,\n state_data, id_token_hint, post_logout_redirect_uri, extraQueryParams, request_type, client_id,\n }: SignoutRequestArgs) {\n if (!url) {\n this._logger.error(\"ctor: No url passed\");\n throw new Error(\"url\");\n }\n\n const parsedUrl = new URL(url);\n if (id_token_hint) {\n parsedUrl.searchParams.append(\"id_token_hint\", id_token_hint);\n }\n if (client_id) {\n parsedUrl.searchParams.append(\"client_id\", client_id);\n }\n\n if (post_logout_redirect_uri) {\n parsedUrl.searchParams.append(\"post_logout_redirect_uri\", post_logout_redirect_uri);\n\n if (state_data) {\n this.state = new State({ data: state_data, request_type });\n\n parsedUrl.searchParams.append(\"state\", this.state.id);\n }\n }\n\n for (const [key, value] of Object.entries({ ...extraQueryParams })) {\n if (value != null) {\n parsedUrl.searchParams.append(key, value.toString());\n }\n }\n\n this.url = parsedUrl.href;\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\n/**\n * @public\n * @see https://openid.net/specs/openid-connect-core-1_0.html#AuthError\n */\nexport class SignoutResponse {\n public readonly state: string | null;\n\n // error props\n /** @see {@link ErrorResponse.error} */\n public error: string | null;\n /** @see {@link ErrorResponse.error_description} */\n public error_description: string | null;\n /** @see {@link ErrorResponse.error_uri} */\n public error_uri: string | null;\n\n /** custom state data set during the initial signin request */\n public userState: unknown;\n\n public constructor(params: URLSearchParams) {\n this.state = params.get(\"state\");\n\n this.error = params.get(\"error\");\n this.error_description = params.get(\"error_description\");\n this.error_uri = params.get(\"error_uri\");\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport type { JwtClaims } from \"./Claims\";\nimport type { OidcClientSettingsStore } from \"./OidcClientSettings\";\nimport type { UserProfile } from \"./User\";\nimport { Logger } from \"./utils\";\n\n/**\n * Protocol claims that could be removed by default from profile.\n * Derived from the following sets of claims:\n * - {@link https://datatracker.ietf.org/doc/html/rfc7519.html#section-4.1}\n * - {@link https://openid.net/specs/openid-connect-core-1_0.html#IDToken}\n * - {@link https://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken}\n *\n * @internal\n */\nconst DefaultProtocolClaims = [\n \"nbf\",\n \"jti\",\n \"auth_time\",\n \"nonce\",\n \"acr\",\n \"amr\",\n \"azp\",\n \"at_hash\", // https://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken\n] as const;\n\n/**\n * Protocol claims that should never be removed from profile.\n * \"sub\" is needed internally and others should remain required as per the OIDC specs.\n *\n * @internal\n */\nconst InternalRequiredProtocolClaims = [\"sub\", \"iss\", \"aud\", \"exp\", \"iat\"];\n\n/**\n * @internal\n */\nexport class ClaimsService {\n protected readonly _logger = new Logger(\"ClaimsService\");\n public constructor(\n protected readonly _settings: OidcClientSettingsStore,\n ) {}\n\n public filterProtocolClaims(claims: UserProfile): UserProfile {\n const result = { ...claims };\n\n if (this._settings.filterProtocolClaims) {\n let protocolClaims;\n if (Array.isArray(this._settings.filterProtocolClaims)) {\n protocolClaims = this._settings.filterProtocolClaims;\n } else {\n protocolClaims = DefaultProtocolClaims;\n }\n\n for (const claim of protocolClaims) {\n if (!InternalRequiredProtocolClaims.includes(claim)) {\n delete result[claim];\n }\n }\n }\n\n return result;\n }\n\n public mergeClaims(claims1: JwtClaims, claims2: JwtClaims): UserProfile;\n public mergeClaims(claims1: UserProfile, claims2: JwtClaims): UserProfile {\n const result = { ...claims1 };\n for (const [claim, values] of Object.entries(claims2)) {\n if (result[claim] !== values) {\n if (Array.isArray(result[claim]) || Array.isArray(values)) {\n if (this._settings.mergeClaimsStrategy.array == \"replace\") {\n result[claim] = values;\n } else {\n const mergedValues = Array.isArray(result[claim]) ? result[claim] as unknown[] : [result[claim]];\n for (const value of Array.isArray(values) ? values : [values]) {\n if (!mergedValues.includes(value)) {\n mergedValues.push(value);\n }\n }\n result[claim] = mergedValues;\n }\n } else if (typeof result[claim] === \"object\" && typeof values === \"object\") {\n result[claim] = this.mergeClaims(result[claim] as JwtClaims, values as JwtClaims);\n } else {\n result[claim] = values;\n }\n }\n }\n\n return result;\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger, UrlUtils } from \"./utils\";\nimport { ErrorResponse } from \"./errors\";\nimport { type OidcClientSettings, OidcClientSettingsStore } from \"./OidcClientSettings\";\nimport { ResponseValidator } from \"./ResponseValidator\";\nimport { MetadataService } from \"./MetadataService\";\nimport type { RefreshState } from \"./RefreshState\";\nimport { SigninRequest, type SigninRequestCreateArgs } from \"./SigninRequest\";\nimport { SigninResponse } from \"./SigninResponse\";\nimport { SignoutRequest, type SignoutRequestArgs } from \"./SignoutRequest\";\nimport { SignoutResponse } from \"./SignoutResponse\";\nimport { SigninState } from \"./SigninState\";\nimport { State } from \"./State\";\nimport { TokenClient } from \"./TokenClient\";\nimport { ClaimsService } from \"./ClaimsService\";\n\n/**\n * @public\n */\nexport interface CreateSigninRequestArgs\n extends Omit {\n redirect_uri?: string;\n response_type?: string;\n scope?: string;\n\n /** custom \"state\", which can be used by a caller to have \"data\" round tripped */\n state?: unknown;\n}\n\n/**\n * @public\n */\nexport interface UseRefreshTokenArgs {\n redirect_uri?: string;\n resource?: string | string[];\n extraTokenParams?: Record;\n timeoutInSeconds?: number;\n\n state: RefreshState;\n}\n\n/**\n * @public\n */\nexport type CreateSignoutRequestArgs = Omit & {\n /** custom \"state\", which can be used by a caller to have \"data\" round tripped */\n state?: unknown;\n};\n\n/**\n * @public\n */\nexport type ProcessResourceOwnerPasswordCredentialsArgs = {\n username: string;\n password: string;\n skipUserInfo?: boolean;\n extraTokenParams?: Record;\n};\n\n/**\n * Provides the raw OIDC/OAuth2 protocol support for the authorization endpoint and the end session endpoint in the\n * authorization server. It provides a bare-bones protocol implementation and is used by the UserManager class.\n * Only use this class if you simply want protocol support without the additional management features of the\n * UserManager class.\n *\n * @public\n */\nexport class OidcClient {\n public readonly settings: OidcClientSettingsStore;\n protected readonly _logger = new Logger(\"OidcClient\");\n\n public readonly metadataService: MetadataService;\n protected readonly _claimsService: ClaimsService;\n protected readonly _validator: ResponseValidator;\n protected readonly _tokenClient: TokenClient;\n\n public constructor(settings: OidcClientSettings);\n public constructor(settings: OidcClientSettingsStore, metadataService: MetadataService);\n public constructor(settings: OidcClientSettings | OidcClientSettingsStore, metadataService?: MetadataService) {\n this.settings = settings instanceof OidcClientSettingsStore ? settings : new OidcClientSettingsStore(settings);\n\n this.metadataService = metadataService ?? new MetadataService(this.settings);\n this._claimsService = new ClaimsService(this.settings);\n this._validator = new ResponseValidator(this.settings, this.metadataService, this._claimsService);\n this._tokenClient = new TokenClient(this.settings, this.metadataService);\n }\n\n public async createSigninRequest({\n state,\n request,\n request_uri,\n request_type,\n id_token_hint,\n login_hint,\n skipUserInfo,\n nonce,\n url_state,\n response_type = this.settings.response_type,\n scope = this.settings.scope,\n redirect_uri = this.settings.redirect_uri,\n prompt = this.settings.prompt,\n display = this.settings.display,\n max_age = this.settings.max_age,\n ui_locales = this.settings.ui_locales,\n acr_values = this.settings.acr_values,\n resource = this.settings.resource,\n response_mode = this.settings.response_mode,\n extraQueryParams = this.settings.extraQueryParams,\n extraTokenParams = this.settings.extraTokenParams,\n }: CreateSigninRequestArgs): Promise {\n const logger = this._logger.create(\"createSigninRequest\");\n\n if (response_type !== \"code\") {\n throw new Error(\"Only the Authorization Code flow (with PKCE) is supported\");\n }\n\n const url = await this.metadataService.getAuthorizationEndpoint();\n logger.debug(\"Received authorization endpoint\", url);\n\n const signinRequest = await SigninRequest.create({\n url,\n authority: this.settings.authority,\n client_id: this.settings.client_id,\n redirect_uri,\n response_type,\n scope,\n state_data: state,\n url_state,\n prompt, display, max_age, ui_locales, id_token_hint, login_hint, acr_values,\n resource, request, request_uri, extraQueryParams, extraTokenParams, request_type, response_mode,\n client_secret: this.settings.client_secret,\n skipUserInfo,\n nonce,\n disablePKCE: this.settings.disablePKCE,\n });\n\n // house cleaning\n await this.clearStaleState();\n\n const signinState = signinRequest.state;\n await this.settings.stateStore.set(signinState.id, signinState.toStorageString());\n return signinRequest;\n }\n\n public async readSigninResponseState(url: string, removeState = false): Promise<{ state: SigninState; response: SigninResponse }> {\n const logger = this._logger.create(\"readSigninResponseState\");\n\n const response = new SigninResponse(UrlUtils.readParams(url, this.settings.response_mode));\n if (!response.state) {\n logger.throw(new Error(\"No state in response\"));\n // need to throw within this function's body for type narrowing to work\n throw null; // https://github.com/microsoft/TypeScript/issues/46972\n }\n\n const storedStateString = await this.settings.stateStore[removeState ? \"remove\" : \"get\"](response.state);\n if (!storedStateString) {\n logger.throw(new Error(\"No matching state found in storage\"));\n throw null; // https://github.com/microsoft/TypeScript/issues/46972\n }\n\n const state = await SigninState.fromStorageString(storedStateString);\n return { state, response };\n }\n\n public async processSigninResponse(url: string): Promise {\n const logger = this._logger.create(\"processSigninResponse\");\n\n const { state, response } = await this.readSigninResponseState(url, true);\n logger.debug(\"received state from storage; validating response\");\n await this._validator.validateSigninResponse(response, state);\n return response;\n }\n\n public async processResourceOwnerPasswordCredentials({\n username,\n password,\n skipUserInfo = false,\n extraTokenParams = {},\n }: ProcessResourceOwnerPasswordCredentialsArgs): Promise {\n const tokenResponse: Record = await this._tokenClient.exchangeCredentials({ username, password, ...extraTokenParams });\n const signinResponse: SigninResponse = new SigninResponse(new URLSearchParams());\n Object.assign(signinResponse, tokenResponse);\n await this._validator.validateCredentialsResponse(signinResponse, skipUserInfo);\n return signinResponse;\n }\n\n public async useRefreshToken({\n state,\n redirect_uri,\n resource,\n timeoutInSeconds,\n extraTokenParams,\n }: UseRefreshTokenArgs): Promise {\n const logger = this._logger.create(\"useRefreshToken\");\n\n // https://github.com/authts/oidc-client-ts/issues/695\n // In some cases (e.g. AzureAD), not all granted scopes are allowed on token refresh requests.\n // Therefore, we filter all granted scopes by a list of allowable scopes.\n let scope;\n if (this.settings.refreshTokenAllowedScope === undefined) {\n scope = state.scope;\n } else {\n const allowableScopes = this.settings.refreshTokenAllowedScope.split(\" \");\n const providedScopes = state.scope?.split(\" \") || [];\n\n scope = providedScopes.filter(s => allowableScopes.includes(s)).join(\" \");\n }\n\n const result = await this._tokenClient.exchangeRefreshToken({\n refresh_token: state.refresh_token,\n // provide the (possible filtered) scope list\n scope,\n redirect_uri,\n resource,\n timeoutInSeconds,\n ...extraTokenParams,\n });\n const response = new SigninResponse(new URLSearchParams());\n Object.assign(response, result);\n logger.debug(\"validating response\", response);\n await this._validator.validateRefreshResponse(response, {\n ...state,\n // override the scope in the state handed over to the validator\n // so it can set the granted scope to the requested scope in case none is included in the response\n scope,\n });\n return response;\n }\n\n public async createSignoutRequest({\n state,\n id_token_hint,\n client_id,\n request_type,\n post_logout_redirect_uri = this.settings.post_logout_redirect_uri,\n extraQueryParams = this.settings.extraQueryParams,\n }: CreateSignoutRequestArgs = {}): Promise {\n const logger = this._logger.create(\"createSignoutRequest\");\n\n const url = await this.metadataService.getEndSessionEndpoint();\n if (!url) {\n logger.throw(new Error(\"No end session endpoint\"));\n throw null; // https://github.com/microsoft/TypeScript/issues/46972\n }\n\n logger.debug(\"Received end session endpoint\", url);\n\n // specify the client identifier when post_logout_redirect_uri is used but id_token_hint is not\n if (!client_id && post_logout_redirect_uri && !id_token_hint) {\n client_id = this.settings.client_id;\n }\n\n const request = new SignoutRequest({\n url,\n id_token_hint,\n client_id,\n post_logout_redirect_uri,\n state_data: state,\n extraQueryParams,\n request_type,\n });\n\n // house cleaning\n await this.clearStaleState();\n\n const signoutState = request.state;\n if (signoutState) {\n logger.debug(\"Signout request has state to persist\");\n await this.settings.stateStore.set(signoutState.id, signoutState.toStorageString());\n }\n\n return request;\n }\n\n public async readSignoutResponseState(url: string, removeState = false): Promise<{ state: State | undefined; response: SignoutResponse }> {\n const logger = this._logger.create(\"readSignoutResponseState\");\n\n const response = new SignoutResponse(UrlUtils.readParams(url, this.settings.response_mode));\n if (!response.state) {\n logger.debug(\"No state in response\");\n\n if (response.error) {\n logger.warn(\"Response was error:\", response.error);\n throw new ErrorResponse(response);\n }\n\n return { state: undefined, response };\n }\n\n const storedStateString = await this.settings.stateStore[removeState ? \"remove\" : \"get\"](response.state);\n if (!storedStateString) {\n logger.throw(new Error(\"No matching state found in storage\"));\n throw null; // https://github.com/microsoft/TypeScript/issues/46972\n }\n\n const state = await State.fromStorageString(storedStateString);\n return { state, response };\n }\n\n public async processSignoutResponse(url: string): Promise {\n const logger = this._logger.create(\"processSignoutResponse\");\n\n const { state, response } = await this.readSignoutResponseState(url, true);\n if (state) {\n logger.debug(\"Received state from storage; validating response\");\n this._validator.validateSignoutResponse(response, state);\n } else {\n logger.debug(\"No state from storage; skipping response validation\");\n }\n\n return response;\n }\n\n public clearStaleState(): Promise {\n this._logger.create(\"clearStaleState\");\n return State.clearStaleState(this.settings.stateStore, this.settings.staleStateAgeInSeconds);\n }\n\n public async revokeToken(token: string, type?: \"access_token\" | \"refresh_token\"): Promise {\n this._logger.create(\"revokeToken\");\n return await this._tokenClient.revoke({\n token,\n token_type_hint: type,\n });\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger } from \"./utils\";\nimport { CheckSessionIFrame } from \"./CheckSessionIFrame\";\nimport type { UserManager } from \"./UserManager\";\nimport type { User } from \"./User\";\n\n/**\n * @public\n */\nexport class SessionMonitor {\n private readonly _logger = new Logger(\"SessionMonitor\");\n\n private _sub: string | undefined;\n private _checkSessionIFrame?: CheckSessionIFrame;\n\n public constructor(private readonly _userManager: UserManager) {\n if (!_userManager) {\n this._logger.throw(new Error(\"No user manager passed\"));\n }\n\n this._userManager.events.addUserLoaded(this._start);\n this._userManager.events.addUserUnloaded(this._stop);\n\n this._init().catch((err: unknown) => {\n // catch to suppress errors since we're in a ctor\n this._logger.error(err);\n });\n }\n\n protected async _init(): Promise {\n this._logger.create(\"_init\");\n const user = await this._userManager.getUser();\n // doing this manually here since calling getUser\n // doesn't trigger load event.\n if (user) {\n void this._start(user);\n }\n else if (this._userManager.settings.monitorAnonymousSession) {\n const session = await this._userManager.querySessionStatus();\n if (session) {\n const tmpUser = {\n session_state: session.session_state,\n profile: session.sub ? {\n sub: session.sub,\n } : null,\n };\n void this._start(tmpUser);\n }\n }\n }\n\n protected _start = async (\n user: User | {\n session_state: string;\n profile: { sub: string } | null;\n },\n ): Promise => {\n const session_state = user.session_state;\n if (!session_state) {\n return;\n }\n const logger = this._logger.create(\"_start\");\n\n if (user.profile) {\n this._sub = user.profile.sub;\n logger.debug(\"session_state\", session_state, \", sub\", this._sub);\n }\n else {\n this._sub = undefined;\n logger.debug(\"session_state\", session_state, \", anonymous user\");\n }\n\n if (this._checkSessionIFrame) {\n this._checkSessionIFrame.start(session_state);\n return;\n }\n\n try {\n const url = await this._userManager.metadataService.getCheckSessionIframe();\n if (url) {\n logger.debug(\"initializing check session iframe\");\n\n const client_id = this._userManager.settings.client_id;\n const intervalInSeconds = this._userManager.settings.checkSessionIntervalInSeconds;\n const stopOnError = this._userManager.settings.stopCheckSessionOnError;\n\n const checkSessionIFrame = new CheckSessionIFrame(this._callback, client_id, url, intervalInSeconds, stopOnError);\n await checkSessionIFrame.load();\n this._checkSessionIFrame = checkSessionIFrame;\n checkSessionIFrame.start(session_state);\n }\n else {\n logger.warn(\"no check session iframe found in the metadata\");\n }\n }\n catch (err) {\n // catch to suppress errors since we're in non-promise callback\n logger.error(\"Error from getCheckSessionIframe:\", err instanceof Error ? err.message : err);\n }\n };\n\n protected _stop = (): void => {\n const logger = this._logger.create(\"_stop\");\n this._sub = undefined;\n\n if (this._checkSessionIFrame) {\n this._checkSessionIFrame.stop();\n }\n\n if (this._userManager.settings.monitorAnonymousSession) {\n // using a timer to delay re-initialization to avoid race conditions during signout\n // TODO rewrite to use promise correctly\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n const timerHandle = setInterval(async () => {\n clearInterval(timerHandle);\n\n try {\n const session = await this._userManager.querySessionStatus();\n if (session) {\n const tmpUser = {\n session_state: session.session_state,\n profile: session.sub ? {\n sub: session.sub,\n } : null,\n };\n void this._start(tmpUser);\n }\n }\n catch (err) {\n // catch to suppress errors since we're in a callback\n logger.error(\"error from querySessionStatus\", err instanceof Error ? err.message : err);\n }\n }, 1000);\n }\n };\n\n protected _callback = async (): Promise => {\n const logger = this._logger.create(\"_callback\");\n try {\n const session = await this._userManager.querySessionStatus();\n let raiseEvent = true;\n\n if (session && this._checkSessionIFrame) {\n if (session.sub === this._sub) {\n raiseEvent = false;\n this._checkSessionIFrame.start(session.session_state);\n\n logger.debug(\"same sub still logged in at OP, session state has changed, restarting check session iframe; session_state\", session.session_state);\n await this._userManager.events._raiseUserSessionChanged();\n }\n else {\n logger.debug(\"different subject signed into OP\", session.sub);\n }\n }\n else {\n logger.debug(\"subject no longer signed into OP\");\n }\n\n if (raiseEvent) {\n if (this._sub) {\n await this._userManager.events._raiseUserSignedOut();\n }\n else {\n await this._userManager.events._raiseUserSignedIn();\n }\n } else {\n logger.debug(\"no change in session detected, no event to raise\");\n }\n }\n catch (err) {\n if (this._sub) {\n logger.debug(\"Error calling queryCurrentSigninSession; raising signed out event\", err);\n await this._userManager.events._raiseUserSignedOut();\n }\n }\n };\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger, Timer } from \"./utils\";\nimport type { IdTokenClaims } from \"./Claims\";\n\n/**\n * Holds claims represented by a combination of the `id_token` and the user info endpoint.\n *\n * @public\n */\nexport type UserProfile = IdTokenClaims;\n\n/**\n * @public\n */\nexport class User {\n /**\n * A JSON Web Token (JWT). Only provided if `openid` scope was requested.\n * The application can access the data decoded by using the `profile` property.\n */\n public id_token?: string;\n\n /** The session state value returned from the OIDC provider. */\n public session_state: string | null;\n\n /**\n * The requested access token returned from the OIDC provider. The application can use this token to\n * authenticate itself to the secured resource.\n */\n public access_token: string;\n\n /**\n * An OAuth 2.0 refresh token. The app can use this token to acquire additional access tokens after the\n * current access token expires. Refresh tokens are long-lived and can be used to maintain access to resources\n * for extended periods of time.\n */\n public refresh_token?: string;\n\n /** Typically \"Bearer\" */\n public token_type: string;\n\n /** The scopes that the requested access token is valid for. */\n public scope?: string;\n\n /** The claims represented by a combination of the `id_token` and the user info endpoint. */\n public profile: UserProfile;\n\n /** The expires at returned from the OIDC provider. */\n public expires_at?: number;\n\n /** custom state data set during the initial signin request */\n public readonly state: unknown;\n public readonly url_state?: string;\n\n public constructor(args: {\n id_token?: string;\n session_state?: string | null;\n access_token: string;\n refresh_token?: string;\n token_type: string;\n scope?: string;\n profile: UserProfile;\n expires_at?: number;\n userState?: unknown;\n url_state?: string;\n }) {\n this.id_token = args.id_token;\n this.session_state = args.session_state ?? null;\n this.access_token = args.access_token;\n this.refresh_token = args.refresh_token;\n\n this.token_type = args.token_type;\n this.scope = args.scope;\n this.profile = args.profile;\n this.expires_at = args.expires_at;\n this.state = args.userState;\n this.url_state = args.url_state;\n }\n\n /** Computed number of seconds the access token has remaining. */\n public get expires_in(): number | undefined {\n if (this.expires_at === undefined) {\n return undefined;\n }\n return this.expires_at - Timer.getEpochTime();\n }\n\n public set expires_in(value: number | undefined) {\n if (value !== undefined) {\n this.expires_at = Math.floor(value) + Timer.getEpochTime();\n }\n }\n\n /** Computed value indicating if the access token is expired. */\n public get expired(): boolean | undefined {\n const expires_in = this.expires_in;\n if (expires_in === undefined) {\n return undefined;\n }\n return expires_in <= 0;\n }\n\n /** Array representing the parsed values from the `scope`. */\n public get scopes(): string[] {\n return this.scope?.split(\" \") ?? [];\n }\n\n public toStorageString(): string {\n new Logger(\"User\").create(\"toStorageString\");\n return JSON.stringify({\n id_token: this.id_token,\n session_state: this.session_state,\n access_token: this.access_token,\n refresh_token: this.refresh_token,\n token_type: this.token_type,\n scope: this.scope,\n profile: this.profile,\n expires_at: this.expires_at,\n });\n }\n\n public static fromStorageString(storageString: string): User {\n Logger.createStatic(\"User\", \"fromStorageString\");\n return new User(JSON.parse(storageString));\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Event, Logger, UrlUtils } from \"../utils\";\nimport type { IWindow, NavigateParams, NavigateResponse } from \"./IWindow\";\n\nconst messageSource = \"oidc-client\";\n\ninterface MessageData {\n source: string;\n url: string;\n keepOpen: boolean;\n}\n\n/**\n * Window implementation which resolves via communication from a child window\n * via the `Window.postMessage()` interface.\n *\n * @internal\n */\nexport abstract class AbstractChildWindow implements IWindow {\n protected abstract readonly _logger: Logger;\n protected readonly _abort = new Event<[reason: Error]>(\"Window navigation aborted\");\n protected readonly _disposeHandlers = new Set<() => void>();\n\n protected _window: WindowProxy | null = null;\n\n public async navigate(params: NavigateParams): Promise {\n const logger = this._logger.create(\"navigate\");\n if (!this._window) {\n throw new Error(\"Attempted to navigate on a disposed window\");\n }\n\n logger.debug(\"setting URL in window\");\n this._window.location.replace(params.url);\n\n const { url, keepOpen } = await new Promise((resolve, reject) => {\n const listener = (e: MessageEvent) => {\n const data: MessageData | undefined = e.data;\n const origin = params.scriptOrigin ?? window.location.origin;\n if (e.origin !== origin || data?.source !== messageSource) {\n // silently discard events not intended for us\n return;\n }\n try {\n const state = UrlUtils.readParams(data.url, params.response_mode).get(\"state\");\n if (!state) {\n logger.warn(\"no state found in response url\");\n }\n if (e.source !== this._window && state !== params.state) {\n // MessageEvent source is a relatively modern feature, we can't rely on it\n // so we also inspect the payload for a matching state key as an alternative\n return;\n }\n }\n catch (err) {\n this._dispose();\n reject(new Error(\"Invalid response from window\"));\n }\n resolve(data);\n };\n window.addEventListener(\"message\", listener, false);\n this._disposeHandlers.add(() => window.removeEventListener(\"message\", listener, false));\n this._disposeHandlers.add(this._abort.addHandler((reason) => {\n this._dispose();\n reject(reason);\n }));\n });\n logger.debug(\"got response from window\");\n this._dispose();\n\n if (!keepOpen) {\n this.close();\n }\n\n return { url };\n }\n\n public abstract close(): void;\n\n private _dispose(): void {\n this._logger.create(\"_dispose\");\n\n for (const dispose of this._disposeHandlers) {\n dispose();\n }\n this._disposeHandlers.clear();\n }\n\n protected static _notifyParent(parent: Window, url: string, keepOpen = false, targetOrigin = window.location.origin): void {\n parent.postMessage({\n source: messageSource,\n url,\n keepOpen,\n } as MessageData, targetOrigin);\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { type OidcClientSettings, OidcClientSettingsStore } from \"./OidcClientSettings\";\nimport type { PopupWindowFeatures } from \"./utils/PopupUtils\";\nimport { WebStorageStateStore } from \"./WebStorageStateStore\";\nimport { InMemoryWebStorage } from \"./InMemoryWebStorage\";\n\nexport const DefaultPopupWindowFeatures: PopupWindowFeatures = {\n location: false,\n toolbar: false,\n height: 640,\n closePopupWindowAfterInSeconds: -1,\n};\nexport const DefaultPopupTarget = \"_blank\";\nconst DefaultAccessTokenExpiringNotificationTimeInSeconds = 60;\nconst DefaultCheckSessionIntervalInSeconds = 2;\nexport const DefaultSilentRequestTimeoutInSeconds = 10;\n\n/**\n * The settings used to configure the {@link UserManager}.\n *\n * @public\n */\nexport interface UserManagerSettings extends OidcClientSettings {\n /** The URL for the page containing the call to signinPopupCallback to handle the callback from the OIDC/OAuth2 */\n popup_redirect_uri?: string;\n popup_post_logout_redirect_uri?: string;\n /**\n * The features parameter to window.open for the popup signin window. By default, the popup is\n * placed centered in front of the window opener.\n * (default: \\{ location: false, menubar: false, height: 640, closePopupWindowAfterInSeconds: -1 \\})\n */\n popupWindowFeatures?: PopupWindowFeatures;\n /** The target parameter to window.open for the popup signin window (default: \"_blank\") */\n popupWindowTarget?: string;\n /** The methods window.location method used to redirect (default: \"assign\") */\n redirectMethod?: \"replace\" | \"assign\";\n /** The methods target window being redirected (default: \"self\") */\n redirectTarget?: \"top\" | \"self\";\n\n /** The target to pass while calling postMessage inside iframe for callback (default: window.location.origin) */\n iframeNotifyParentOrigin?: string;\n\n /** The script origin to check during 'message' callback execution while performing silent auth via iframe (default: window.location.origin) */\n iframeScriptOrigin?: string;\n\n /** The URL for the page containing the code handling the silent renew */\n silent_redirect_uri?: string;\n /** Number of seconds to wait for the silent renew to return before assuming it has failed or timed out (default: 10) */\n silentRequestTimeoutInSeconds?: number;\n /** Flag to indicate if there should be an automatic attempt to renew the access token prior to its expiration. The automatic renew attempt starts 1 minute before the access token expires (default: true) */\n automaticSilentRenew?: boolean;\n /** Flag to validate user.profile.sub in silent renew calls (default: true) */\n validateSubOnSilentRenew?: boolean;\n /** Flag to control if id_token is included as id_token_hint in silent renew calls (default: false) */\n includeIdTokenInSilentRenew?: boolean;\n\n /** Will raise events for when user has performed a signout at the OP (default: false) */\n monitorSession?: boolean;\n monitorAnonymousSession?: boolean;\n /** Interval in seconds to check the user's session (default: 2) */\n checkSessionIntervalInSeconds?: number;\n query_status_response_type?: string;\n stopCheckSessionOnError?: boolean;\n\n /**\n * The `token_type_hint`s to pass to the authority server by default (default: [\"access_token\", \"refresh_token\"])\n *\n * Token types will be revoked in the same order as they are given here.\n */\n revokeTokenTypes?: (\"access_token\" | \"refresh_token\")[];\n /** Will invoke the revocation endpoint on signout if there is an access token for the user (default: false) */\n revokeTokensOnSignout?: boolean;\n /** Flag to control if id_token is included as id_token_hint in silent signout calls (default: false) */\n includeIdTokenInSilentSignout?: boolean;\n\n /** The number of seconds before an access token is to expire to raise the accessTokenExpiring event (default: 60) */\n accessTokenExpiringNotificationTimeInSeconds?: number;\n\n /**\n * Storage object used to persist User for currently authenticated user (default: window.sessionStorage, InMemoryWebStorage iff no window).\n * E.g. `userStore: new WebStorageStateStore({ store: window.localStorage })`\n */\n userStore?: WebStorageStateStore;\n}\n\n/**\n * The settings with defaults applied of the {@link UserManager}.\n * @see {@link UserManagerSettings}\n *\n * @public\n */\nexport class UserManagerSettingsStore extends OidcClientSettingsStore {\n public readonly popup_redirect_uri: string;\n public readonly popup_post_logout_redirect_uri: string | undefined;\n public readonly popupWindowFeatures: PopupWindowFeatures;\n public readonly popupWindowTarget: string;\n public readonly redirectMethod: \"replace\" | \"assign\";\n public readonly redirectTarget: \"top\" | \"self\";\n\n public readonly iframeNotifyParentOrigin: string | undefined;\n public readonly iframeScriptOrigin: string | undefined;\n\n public readonly silent_redirect_uri: string;\n public readonly silentRequestTimeoutInSeconds: number;\n public readonly automaticSilentRenew: boolean;\n public readonly validateSubOnSilentRenew: boolean;\n public readonly includeIdTokenInSilentRenew: boolean;\n\n public readonly monitorSession: boolean;\n public readonly monitorAnonymousSession: boolean;\n public readonly checkSessionIntervalInSeconds: number;\n public readonly query_status_response_type: string;\n public readonly stopCheckSessionOnError: boolean;\n\n public readonly revokeTokenTypes: (\"access_token\" | \"refresh_token\")[];\n public readonly revokeTokensOnSignout: boolean;\n public readonly includeIdTokenInSilentSignout: boolean;\n\n public readonly accessTokenExpiringNotificationTimeInSeconds: number;\n\n public readonly userStore: WebStorageStateStore;\n\n public constructor(args: UserManagerSettings) {\n const {\n popup_redirect_uri = args.redirect_uri,\n popup_post_logout_redirect_uri = args.post_logout_redirect_uri,\n popupWindowFeatures = DefaultPopupWindowFeatures,\n popupWindowTarget = DefaultPopupTarget,\n redirectMethod = \"assign\",\n redirectTarget = \"self\",\n\n iframeNotifyParentOrigin = args.iframeNotifyParentOrigin,\n iframeScriptOrigin = args.iframeScriptOrigin,\n\n silent_redirect_uri = args.redirect_uri,\n silentRequestTimeoutInSeconds = DefaultSilentRequestTimeoutInSeconds,\n automaticSilentRenew = true,\n validateSubOnSilentRenew = true,\n includeIdTokenInSilentRenew = false,\n\n monitorSession = false,\n monitorAnonymousSession = false,\n checkSessionIntervalInSeconds = DefaultCheckSessionIntervalInSeconds,\n query_status_response_type = \"code\",\n stopCheckSessionOnError = true,\n\n revokeTokenTypes = [\"access_token\", \"refresh_token\"],\n revokeTokensOnSignout = false,\n includeIdTokenInSilentSignout = false,\n\n accessTokenExpiringNotificationTimeInSeconds = DefaultAccessTokenExpiringNotificationTimeInSeconds,\n\n userStore,\n } = args;\n\n super(args);\n\n this.popup_redirect_uri = popup_redirect_uri;\n this.popup_post_logout_redirect_uri = popup_post_logout_redirect_uri;\n this.popupWindowFeatures = popupWindowFeatures;\n this.popupWindowTarget = popupWindowTarget;\n this.redirectMethod = redirectMethod;\n this.redirectTarget = redirectTarget;\n\n this.iframeNotifyParentOrigin = iframeNotifyParentOrigin;\n this.iframeScriptOrigin = iframeScriptOrigin;\n\n this.silent_redirect_uri = silent_redirect_uri;\n this.silentRequestTimeoutInSeconds = silentRequestTimeoutInSeconds;\n this.automaticSilentRenew = automaticSilentRenew;\n this.validateSubOnSilentRenew = validateSubOnSilentRenew;\n this.includeIdTokenInSilentRenew = includeIdTokenInSilentRenew;\n\n this.monitorSession = monitorSession;\n this.monitorAnonymousSession = monitorAnonymousSession;\n this.checkSessionIntervalInSeconds = checkSessionIntervalInSeconds;\n this.stopCheckSessionOnError = stopCheckSessionOnError;\n this.query_status_response_type = query_status_response_type;\n\n this.revokeTokenTypes = revokeTokenTypes;\n this.revokeTokensOnSignout = revokeTokensOnSignout;\n this.includeIdTokenInSilentSignout = includeIdTokenInSilentSignout;\n\n this.accessTokenExpiringNotificationTimeInSeconds = accessTokenExpiringNotificationTimeInSeconds;\n\n if (userStore) {\n this.userStore = userStore;\n }\n else {\n const store = typeof window !== \"undefined\" ? window.sessionStorage : new InMemoryWebStorage();\n this.userStore = new WebStorageStateStore({ store });\n }\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger } from \"../utils\";\nimport { ErrorTimeout } from \"../errors\";\nimport type { NavigateParams, NavigateResponse } from \"./IWindow\";\nimport { AbstractChildWindow } from \"./AbstractChildWindow\";\nimport { DefaultSilentRequestTimeoutInSeconds } from \"../UserManagerSettings\";\n\n/**\n * @public\n */\nexport interface IFrameWindowParams {\n silentRequestTimeoutInSeconds?: number;\n}\n\n/**\n * @internal\n */\nexport class IFrameWindow extends AbstractChildWindow {\n protected readonly _logger = new Logger(\"IFrameWindow\");\n private _frame: HTMLIFrameElement | null;\n private _timeoutInSeconds: number;\n\n public constructor({\n silentRequestTimeoutInSeconds = DefaultSilentRequestTimeoutInSeconds,\n }: IFrameWindowParams) {\n super();\n this._timeoutInSeconds = silentRequestTimeoutInSeconds;\n\n this._frame = IFrameWindow.createHiddenIframe();\n this._window = this._frame.contentWindow;\n }\n\n private static createHiddenIframe(): HTMLIFrameElement {\n const iframe = window.document.createElement(\"iframe\");\n\n // shotgun approach\n iframe.style.visibility = \"hidden\";\n iframe.style.position = \"fixed\";\n iframe.style.left = \"-1000px\";\n iframe.style.top = \"0\";\n iframe.width = \"0\";\n iframe.height = \"0\";\n\n window.document.body.appendChild(iframe);\n return iframe;\n }\n\n public async navigate(params: NavigateParams): Promise {\n this._logger.debug(\"navigate: Using timeout of:\", this._timeoutInSeconds);\n const timer = setTimeout(() => void this._abort.raise(new ErrorTimeout(\"IFrame timed out without a response\")), this._timeoutInSeconds * 1000);\n this._disposeHandlers.add(() => clearTimeout(timer));\n\n return await super.navigate(params);\n }\n\n public close(): void {\n if (this._frame) {\n if (this._frame.parentNode) {\n this._frame.addEventListener(\"load\", (ev) => {\n const frame = ev.target as HTMLIFrameElement;\n frame.parentNode?.removeChild(frame);\n void this._abort.raise(new Error(\"IFrame removed from DOM\"));\n }, true);\n this._frame.contentWindow?.location.replace(\"about:blank\");\n }\n this._frame = null;\n }\n this._window = null;\n }\n\n public static notifyParent(url: string, targetOrigin?: string): void {\n return super._notifyParent(window.parent, url, false, targetOrigin);\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger } from \"../utils\";\nimport type { UserManagerSettingsStore } from \"../UserManagerSettings\";\nimport { IFrameWindow, type IFrameWindowParams } from \"./IFrameWindow\";\nimport type { INavigator } from \"./INavigator\";\n\n/**\n * @internal\n */\nexport class IFrameNavigator implements INavigator {\n private readonly _logger = new Logger(\"IFrameNavigator\");\n\n constructor(private _settings: UserManagerSettingsStore) {}\n\n public async prepare({\n silentRequestTimeoutInSeconds = this._settings.silentRequestTimeoutInSeconds,\n }: IFrameWindowParams): Promise {\n return new IFrameWindow({ silentRequestTimeoutInSeconds });\n }\n\n public async callback(url: string): Promise {\n this._logger.create(\"callback\");\n IFrameWindow.notifyParent(url, this._settings.iframeNotifyParentOrigin);\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger, PopupUtils, type PopupWindowFeatures } from \"../utils\";\nimport { DefaultPopupWindowFeatures, DefaultPopupTarget } from \"../UserManagerSettings\";\nimport { AbstractChildWindow } from \"./AbstractChildWindow\";\nimport type { NavigateParams, NavigateResponse } from \"./IWindow\";\n\nconst checkForPopupClosedInterval = 500;\nconst second = 1000;\n\n/**\n * @public\n */\nexport interface PopupWindowParams {\n popupWindowFeatures?: PopupWindowFeatures;\n popupWindowTarget?: string;\n}\n\n/**\n * @internal\n */\nexport class PopupWindow extends AbstractChildWindow {\n protected readonly _logger = new Logger(\"PopupWindow\");\n\n protected _window: WindowProxy | null;\n\n public constructor({\n popupWindowTarget = DefaultPopupTarget,\n popupWindowFeatures = {},\n }: PopupWindowParams) {\n super();\n const centeredPopup = PopupUtils.center({ ...DefaultPopupWindowFeatures, ...popupWindowFeatures });\n this._window = window.open(undefined, popupWindowTarget, PopupUtils.serialize(centeredPopup));\n if (popupWindowFeatures.closePopupWindowAfterInSeconds && popupWindowFeatures.closePopupWindowAfterInSeconds > 0) {\n setTimeout(() => {\n if (!this._window || typeof this._window.closed !== \"boolean\" || this._window.closed) {\n void this._abort.raise(new Error(\"Popup blocked by user\"));\n return;\n }\n\n this.close();\n }, popupWindowFeatures.closePopupWindowAfterInSeconds * second);\n }\n }\n\n public async navigate(params: NavigateParams): Promise {\n this._window?.focus();\n\n const popupClosedInterval = setInterval(() => {\n if (!this._window || this._window.closed) {\n void this._abort.raise(new Error(\"Popup closed by user\"));\n }\n }, checkForPopupClosedInterval);\n this._disposeHandlers.add(() => clearInterval(popupClosedInterval));\n\n return await super.navigate(params);\n }\n\n public close(): void {\n if (this._window) {\n if (!this._window.closed) {\n this._window.close();\n void this._abort.raise(new Error(\"Popup closed\"));\n }\n }\n this._window = null;\n }\n\n public static notifyOpener(url: string, keepOpen: boolean): void {\n if (!window.opener) {\n throw new Error(\"No window.opener. Can't complete notification.\");\n }\n return super._notifyParent(window.opener, url, keepOpen);\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger } from \"../utils\";\nimport { PopupWindow, type PopupWindowParams } from \"./PopupWindow\";\nimport type { INavigator } from \"./INavigator\";\nimport type { UserManagerSettingsStore } from \"../UserManagerSettings\";\n\n/**\n * @internal\n */\nexport class PopupNavigator implements INavigator {\n private readonly _logger = new Logger(\"PopupNavigator\");\n\n constructor(private _settings: UserManagerSettingsStore) {}\n\n public async prepare({\n popupWindowFeatures = this._settings.popupWindowFeatures,\n popupWindowTarget = this._settings.popupWindowTarget,\n }: PopupWindowParams): Promise {\n return new PopupWindow({ popupWindowFeatures, popupWindowTarget });\n }\n\n public async callback(url: string, { keepOpen = false }): Promise {\n this._logger.create(\"callback\");\n\n PopupWindow.notifyOpener(url, keepOpen);\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger } from \"../utils\";\nimport type { UserManagerSettingsStore } from \"../UserManagerSettings\";\nimport type { INavigator } from \"./INavigator\";\nimport type { IWindow } from \"./IWindow\";\n\n/**\n * @public\n */\nexport interface RedirectParams {\n redirectMethod?: \"replace\" | \"assign\";\n redirectTarget?: \"top\" | \"self\";\n}\n\n/**\n * @internal\n */\nexport class RedirectNavigator implements INavigator {\n private readonly _logger = new Logger(\"RedirectNavigator\");\n\n constructor(private _settings: UserManagerSettingsStore) {}\n\n public async prepare({\n redirectMethod = this._settings.redirectMethod,\n redirectTarget = this._settings.redirectTarget,\n }: RedirectParams): Promise {\n this._logger.create(\"prepare\");\n let targetWindow = window.self as Window;\n\n if (redirectTarget === \"top\") {\n targetWindow = window.top ?? window.self;\n }\n \n const redirect = targetWindow.location[redirectMethod].bind(targetWindow.location) as (url: string) => never;\n let abort: (reason: Error) => void;\n return {\n navigate: async (params): Promise => {\n this._logger.create(\"navigate\");\n // We use a promise that never resolves to block the caller\n const promise = new Promise((resolve, reject) => {\n abort = reject;\n });\n redirect(params.url);\n return await (promise as Promise);\n },\n close: () => {\n this._logger.create(\"close\");\n abort?.(new Error(\"Redirect aborted\"));\n targetWindow.stop();\n },\n };\n }\n\n public async callback(): Promise {\n return;\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger, Event } from \"./utils\";\nimport { AccessTokenEvents } from \"./AccessTokenEvents\";\nimport type { UserManagerSettingsStore } from \"./UserManagerSettings\";\nimport type { User } from \"./User\";\n\n/**\n * @public\n */\nexport type UserLoadedCallback = (user: User) => Promise | void;\n/**\n * @public\n */\nexport type UserUnloadedCallback = () => Promise | void;\n/**\n * @public\n */\nexport type SilentRenewErrorCallback = (error: Error) => Promise | void;\n/**\n * @public\n */\nexport type UserSignedInCallback = () => Promise | void;\n/**\n * @public\n */\nexport type UserSignedOutCallback = () => Promise | void;\n/**\n * @public\n */\nexport type UserSessionChangedCallback = () => Promise | void;\n\n/**\n * @public\n */\nexport class UserManagerEvents extends AccessTokenEvents {\n protected readonly _logger = new Logger(\"UserManagerEvents\");\n\n private readonly _userLoaded = new Event<[User]>(\"User loaded\");\n private readonly _userUnloaded = new Event<[]>(\"User unloaded\");\n private readonly _silentRenewError = new Event<[Error]>(\"Silent renew error\");\n private readonly _userSignedIn = new Event<[]>(\"User signed in\");\n private readonly _userSignedOut = new Event<[]>(\"User signed out\");\n private readonly _userSessionChanged = new Event<[]>(\"User session changed\");\n\n public constructor(settings: UserManagerSettingsStore) {\n super({ expiringNotificationTimeInSeconds: settings.accessTokenExpiringNotificationTimeInSeconds });\n }\n\n public async load(user: User, raiseEvent=true): Promise {\n super.load(user);\n if (raiseEvent) {\n await this._userLoaded.raise(user);\n }\n }\n public async unload(): Promise {\n super.unload();\n await this._userUnloaded.raise();\n }\n\n /**\n * Add callback: Raised when a user session has been established (or re-established).\n */\n public addUserLoaded(cb: UserLoadedCallback): () => void {\n return this._userLoaded.addHandler(cb);\n }\n /**\n * Remove callback: Raised when a user session has been established (or re-established).\n */\n public removeUserLoaded(cb: UserLoadedCallback): void {\n return this._userLoaded.removeHandler(cb);\n }\n\n /**\n * Add callback: Raised when a user session has been terminated.\n */\n public addUserUnloaded(cb: UserUnloadedCallback): () => void {\n return this._userUnloaded.addHandler(cb);\n }\n /**\n * Remove callback: Raised when a user session has been terminated.\n */\n public removeUserUnloaded(cb: UserUnloadedCallback): void {\n return this._userUnloaded.removeHandler(cb);\n }\n\n /**\n * Add callback: Raised when the automatic silent renew has failed.\n */\n public addSilentRenewError(cb: SilentRenewErrorCallback): () => void {\n return this._silentRenewError.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the automatic silent renew has failed.\n */\n public removeSilentRenewError(cb: SilentRenewErrorCallback): void {\n return this._silentRenewError.removeHandler(cb);\n }\n /**\n * @internal\n */\n public async _raiseSilentRenewError(e: Error): Promise {\n await this._silentRenewError.raise(e);\n }\n\n /**\n * Add callback: Raised when the user is signed in (when `monitorSession` is set).\n * @see {@link UserManagerSettings.monitorSession}\n */\n public addUserSignedIn(cb: UserSignedInCallback): () => void {\n return this._userSignedIn.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the user is signed in (when `monitorSession` is set).\n */\n public removeUserSignedIn(cb: UserSignedInCallback): void {\n this._userSignedIn.removeHandler(cb);\n }\n /**\n * @internal\n */\n public async _raiseUserSignedIn(): Promise {\n await this._userSignedIn.raise();\n }\n\n /**\n * Add callback: Raised when the user's sign-in status at the OP has changed (when `monitorSession` is set).\n * @see {@link UserManagerSettings.monitorSession}\n */\n public addUserSignedOut(cb: UserSignedOutCallback): () => void {\n return this._userSignedOut.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the user's sign-in status at the OP has changed (when `monitorSession` is set).\n */\n public removeUserSignedOut(cb: UserSignedOutCallback): void {\n this._userSignedOut.removeHandler(cb);\n }\n /**\n * @internal\n */\n public async _raiseUserSignedOut(): Promise {\n await this._userSignedOut.raise();\n }\n\n /**\n * Add callback: Raised when the user session changed (when `monitorSession` is set).\n * @see {@link UserManagerSettings.monitorSession}\n */\n public addUserSessionChanged(cb: UserSessionChangedCallback): () => void {\n return this._userSessionChanged.addHandler(cb);\n }\n /**\n * Remove callback: Raised when the user session changed (when `monitorSession` is set).\n */\n public removeUserSessionChanged(cb: UserSessionChangedCallback): void {\n this._userSessionChanged.removeHandler(cb);\n }\n /**\n * @internal\n */\n public async _raiseUserSessionChanged(): Promise {\n await this._userSessionChanged.raise();\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger, Timer } from \"./utils\";\nimport { ErrorTimeout } from \"./errors\";\nimport type { UserManager } from \"./UserManager\";\nimport type { AccessTokenCallback } from \"./AccessTokenEvents\";\n\n/**\n * @internal\n */\nexport class SilentRenewService {\n protected _logger = new Logger(\"SilentRenewService\");\n private _isStarted = false;\n private readonly _retryTimer = new Timer(\"Retry Silent Renew\");\n\n public constructor(private _userManager: UserManager) {}\n\n public async start(): Promise {\n const logger = this._logger.create(\"start\");\n if (!this._isStarted) {\n this._isStarted = true;\n this._userManager.events.addAccessTokenExpiring(this._tokenExpiring);\n this._retryTimer.addHandler(this._tokenExpiring);\n\n // this will trigger loading of the user so the expiring events can be initialized\n try {\n await this._userManager.getUser();\n // deliberate nop\n }\n catch (err) {\n // catch to suppress errors since we're in a ctor\n logger.error(\"getUser error\", err);\n }\n }\n }\n\n public stop(): void {\n if (this._isStarted) {\n this._retryTimer.cancel();\n this._retryTimer.removeHandler(this._tokenExpiring);\n this._userManager.events.removeAccessTokenExpiring(this._tokenExpiring);\n this._isStarted = false;\n }\n }\n\n protected _tokenExpiring: AccessTokenCallback = async () => {\n const logger = this._logger.create(\"_tokenExpiring\");\n try {\n await this._userManager.signinSilent();\n logger.debug(\"silent token renewal successful\");\n }\n catch (err) {\n if (err instanceof ErrorTimeout) {\n // no response from authority server, e.g. IFrame timeout, ...\n logger.warn(\"ErrorTimeout from signinSilent:\", err, \"retry in 5s\");\n this._retryTimer.init(5);\n return;\n }\n\n logger.error(\"Error from signinSilent:\", err);\n await this._userManager.events._raiseSilentRenewError(err as Error);\n }\n };\n}\n", "// Copyright (C) AuthTS Contributors\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport type { UserProfile } from \"./User\";\n\n/**\n * Fake state store implementation necessary for validating refresh token requests.\n *\n * @public\n */\nexport class RefreshState {\n /** custom \"state\", which can be used by a caller to have \"data\" round tripped */\n public readonly data?: unknown;\n\n public readonly refresh_token: string;\n public readonly id_token?: string;\n public readonly session_state: string | null;\n public readonly scope?: string;\n public readonly profile: UserProfile;\n\n constructor(args: {\n refresh_token: string;\n id_token?: string;\n session_state: string | null;\n scope?: string;\n profile: UserProfile;\n\n state?: unknown;\n }) {\n this.refresh_token = args.refresh_token;\n this.id_token = args.id_token;\n this.session_state = args.session_state;\n this.scope = args.scope;\n this.profile = args.profile;\n\n this.data = args.state;\n\n }\n}\n", "// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.\n\nimport { Logger } from \"./utils\";\nimport { ErrorResponse } from \"./errors\";\nimport { type NavigateResponse, type PopupWindowParams, type IWindow, type IFrameWindowParams, type RedirectParams, RedirectNavigator, PopupNavigator, IFrameNavigator, type INavigator } from \"./navigators\";\nimport { OidcClient, type CreateSigninRequestArgs, type CreateSignoutRequestArgs, type ProcessResourceOwnerPasswordCredentialsArgs, type UseRefreshTokenArgs } from \"./OidcClient\";\nimport { type UserManagerSettings, UserManagerSettingsStore } from \"./UserManagerSettings\";\nimport { User } from \"./User\";\nimport { UserManagerEvents } from \"./UserManagerEvents\";\nimport { SilentRenewService } from \"./SilentRenewService\";\nimport { SessionMonitor } from \"./SessionMonitor\";\nimport type { SessionStatus } from \"./SessionStatus\";\nimport type { SignoutResponse } from \"./SignoutResponse\";\nimport type { MetadataService } from \"./MetadataService\";\nimport { RefreshState } from \"./RefreshState\";\nimport type { SigninResponse } from \"./SigninResponse\";\n\n/**\n * @public\n */\nexport type ExtraSigninRequestArgs = Pick;\n/**\n * @public\n */\nexport type ExtraSignoutRequestArgs = Pick;\n\n/**\n * @public\n */\nexport type RevokeTokensTypes = UserManagerSettings[\"revokeTokenTypes\"];\n\n/**\n * @public\n */\nexport type SigninRedirectArgs = RedirectParams & ExtraSigninRequestArgs;\n\n/**\n * @public\n */\nexport type SigninPopupArgs = PopupWindowParams & ExtraSigninRequestArgs;\n\n/**\n * @public\n */\nexport type SigninSilentArgs = IFrameWindowParams & ExtraSigninRequestArgs;\n\n/**\n * @public\n */\nexport type SigninResourceOwnerCredentialsArgs = ProcessResourceOwnerPasswordCredentialsArgs;\n\n/**\n * @public\n */\nexport type QuerySessionStatusArgs = IFrameWindowParams & ExtraSigninRequestArgs;\n\n/**\n * @public\n */\nexport type SignoutRedirectArgs = RedirectParams & ExtraSignoutRequestArgs;\n\n/**\n * @public\n */\nexport type SignoutPopupArgs = PopupWindowParams & ExtraSignoutRequestArgs;\n\n/**\n * @public\n */\nexport type SignoutSilentArgs = IFrameWindowParams & ExtraSignoutRequestArgs;\n\n/**\n * Provides a higher level API for signing a user in, signing out, managing the user's claims returned from the identity provider,\n * and managing an access token returned from the identity provider (OAuth2/OIDC).\n *\n * @public\n */\nexport class UserManager {\n /** Get the settings used to configure the `UserManager`. */\n public readonly settings: UserManagerSettingsStore;\n protected readonly _logger = new Logger(\"UserManager\");\n\n protected readonly _client: OidcClient;\n protected readonly _redirectNavigator: INavigator;\n protected readonly _popupNavigator: INavigator;\n protected readonly _iframeNavigator: INavigator;\n protected readonly _events: UserManagerEvents;\n protected readonly _silentRenewService: SilentRenewService;\n protected readonly _sessionMonitor: SessionMonitor | null;\n\n public constructor(settings: UserManagerSettings, redirectNavigator?: INavigator, popupNavigator?: INavigator, iframeNavigator?: INavigator) {\n this.settings = new UserManagerSettingsStore(settings);\n\n this._client = new OidcClient(settings);\n\n this._redirectNavigator = redirectNavigator ?? new RedirectNavigator(this.settings);\n this._popupNavigator = popupNavigator ?? new PopupNavigator(this.settings);\n this._iframeNavigator = iframeNavigator ?? new IFrameNavigator(this.settings);\n\n this._events = new UserManagerEvents(this.settings);\n this._silentRenewService = new SilentRenewService(this);\n\n // order is important for the following properties; these services depend upon the events.\n if (this.settings.automaticSilentRenew) {\n this.startSilentRenew();\n }\n\n this._sessionMonitor = null;\n if (this.settings.monitorSession) {\n this._sessionMonitor = new SessionMonitor(this);\n }\n\n }\n\n /**\n * Get object used to register for events raised by the `UserManager`.\n */\n public get events(): UserManagerEvents {\n return this._events;\n }\n\n /**\n * Get object used to access the metadata configuration of the identity provider.\n */\n public get metadataService(): MetadataService {\n return this._client.metadataService;\n }\n\n /**\n * Load the `User` object for the currently authenticated user.\n *\n * @returns A promise\n */\n public async getUser(): Promise {\n const logger = this._logger.create(\"getUser\");\n const user = await this._loadUser();\n if (user) {\n logger.info(\"user loaded\");\n await this._events.load(user, false);\n return user;\n }\n\n logger.info(\"user not found in storage\");\n return null;\n }\n\n /**\n * Remove from any storage the currently authenticated user.\n *\n * @returns A promise\n */\n public async removeUser(): Promise {\n const logger = this._logger.create(\"removeUser\");\n await this.storeUser(null);\n logger.info(\"user removed from storage\");\n await this._events.unload();\n }\n\n /**\n * Trigger a redirect of the current window to the authorization endpoint.\n *\n * @returns A promise\n *\n * @throws `Error` In cases of wrong authentication.\n */\n public async signinRedirect(args: SigninRedirectArgs = {}): Promise {\n this._logger.create(\"signinRedirect\");\n const {\n redirectMethod,\n ...requestArgs\n } = args;\n const handle = await this._redirectNavigator.prepare({ redirectMethod });\n await this._signinStart({\n request_type: \"si:r\",\n ...requestArgs,\n }, handle);\n }\n\n /**\n * Process the response (callback) from the authorization endpoint.\n * It is recommend to use {@link UserManager.signinCallback} instead.\n *\n * @returns A promise containing the authenticated `User`.\n *\n * @see {@link UserManager.signinCallback}\n */\n public async signinRedirectCallback(url = window.location.href): Promise {\n const logger = this._logger.create(\"signinRedirectCallback\");\n const user = await this._signinEnd(url);\n if (user.profile && user.profile.sub) {\n logger.info(\"success, signed in subject\", user.profile.sub);\n }\n else {\n logger.info(\"no subject\");\n }\n\n return user;\n }\n\n /**\n * Trigger the signin with user/password.\n *\n * @returns A promise containing the authenticated `User`.\n * @throws {@link ErrorResponse} In cases of wrong authentication.\n */\n public async signinResourceOwnerCredentials({\n username,\n password,\n skipUserInfo = false,\n }: SigninResourceOwnerCredentialsArgs): Promise {\n const logger = this._logger.create(\"signinResourceOwnerCredential\");\n\n const signinResponse = await this._client.processResourceOwnerPasswordCredentials({ username, password, skipUserInfo, extraTokenParams: this.settings.extraTokenParams });\n logger.debug(\"got signin response\");\n\n const user = await this._buildUser(signinResponse);\n if (user.profile && user.profile.sub) {\n logger.info(\"success, signed in subject\", user.profile.sub);\n } else {\n logger.info(\"no subject\");\n }\n return user;\n }\n\n /**\n * Trigger a request (via a popup window) to the authorization endpoint.\n *\n * @returns A promise containing the authenticated `User`.\n * @throws `Error` In cases of wrong authentication.\n */\n public async signinPopup(args: SigninPopupArgs = {}): Promise {\n const logger = this._logger.create(\"signinPopup\");\n const {\n popupWindowFeatures,\n popupWindowTarget,\n ...requestArgs\n } = args;\n const url = this.settings.popup_redirect_uri;\n if (!url) {\n logger.throw(new Error(\"No popup_redirect_uri configured\"));\n }\n\n const handle = await this._popupNavigator.prepare({ popupWindowFeatures, popupWindowTarget });\n const user = await this._signin({\n request_type: \"si:p\",\n redirect_uri: url,\n display: \"popup\",\n ...requestArgs,\n }, handle);\n if (user) {\n if (user.profile && user.profile.sub) {\n logger.info(\"success, signed in subject\", user.profile.sub);\n }\n else {\n logger.info(\"no subject\");\n }\n }\n\n return user;\n }\n /**\n * Notify the opening window of response (callback) from the authorization endpoint.\n * It is recommend to use {@link UserManager.signinCallback} instead.\n *\n * @returns A promise\n *\n * @see {@link UserManager.signinCallback}\n */\n public async signinPopupCallback(url = window.location.href, keepOpen = false): Promise {\n const logger = this._logger.create(\"signinPopupCallback\");\n await this._popupNavigator.callback(url, { keepOpen });\n logger.info(\"success\");\n }\n\n /**\n * Trigger a silent request (via refresh token or an iframe) to the authorization endpoint.\n *\n * @returns A promise that contains the authenticated `User`.\n */\n public async signinSilent(args: SigninSilentArgs = {}): Promise {\n const logger = this._logger.create(\"signinSilent\");\n const {\n silentRequestTimeoutInSeconds,\n ...requestArgs\n } = args;\n // first determine if we have a refresh token, or need to use iframe\n let user = await this._loadUser();\n if (user?.refresh_token) {\n logger.debug(\"using refresh token\");\n const state = new RefreshState(user as Required);\n return await this._useRefreshToken({\n state,\n redirect_uri: requestArgs.redirect_uri,\n resource: requestArgs.resource,\n extraTokenParams: requestArgs.extraTokenParams,\n timeoutInSeconds: silentRequestTimeoutInSeconds,\n });\n }\n\n const url = this.settings.silent_redirect_uri;\n if (!url) {\n logger.throw(new Error(\"No silent_redirect_uri configured\"));\n }\n\n let verifySub: string | undefined;\n if (user && this.settings.validateSubOnSilentRenew) {\n logger.debug(\"subject prior to silent renew:\", user.profile.sub);\n verifySub = user.profile.sub;\n }\n\n const handle = await this._iframeNavigator.prepare({ silentRequestTimeoutInSeconds });\n user = await this._signin({\n request_type: \"si:s\",\n redirect_uri: url,\n prompt: \"none\",\n id_token_hint: this.settings.includeIdTokenInSilentRenew ? user?.id_token : undefined,\n ...requestArgs,\n }, handle, verifySub);\n if (user) {\n if (user.profile?.sub) {\n logger.info(\"success, signed in subject\", user.profile.sub);\n }\n else {\n logger.info(\"no subject\");\n }\n }\n\n return user;\n }\n\n protected async _useRefreshToken(args: UseRefreshTokenArgs): Promise {\n const response = await this._client.useRefreshToken({\n ...args,\n timeoutInSeconds: this.settings.silentRequestTimeoutInSeconds,\n });\n const user = new User({ ...args.state, ...response });\n\n await this.storeUser(user);\n await this._events.load(user);\n return user;\n }\n\n /**\n *\n * Notify the parent window of response (callback) from the authorization endpoint.\n * It is recommend to use {@link UserManager.signinCallback} instead.\n *\n * @returns A promise\n *\n * @see {@link UserManager.signinCallback}\n */\n public async signinSilentCallback(url = window.location.href): Promise {\n const logger = this._logger.create(\"signinSilentCallback\");\n await this._iframeNavigator.callback(url);\n logger.info(\"success\");\n }\n\n /**\n * Process any response (callback) from the authorization endpoint, by dispatching the request_type\n * and executing one of the following functions:\n * - {@link UserManager.signinRedirectCallback}\n * - {@link UserManager.signinPopupCallback}\n * - {@link UserManager.signinSilentCallback}\n *\n * @throws `Error` If request_type is unknown or signout can not processed.\n */\n public async signinCallback(url = window.location.href): Promise {\n const { state } = await this._client.readSigninResponseState(url);\n switch (state.request_type) {\n case \"si:r\":\n return await this.signinRedirectCallback(url);\n case \"si:p\":\n return await this.signinPopupCallback(url);\n case \"si:s\":\n return await this.signinSilentCallback(url);\n default:\n throw new Error(\"invalid response_type in state\");\n }\n }\n\n /**\n * Process any response (callback) from the end session endpoint, by dispatching the request_type\n * and executing one of the following functions:\n * - {@link UserManager.signoutRedirectCallback}\n * - {@link UserManager.signoutPopupCallback}\n * - {@link UserManager.signoutSilentCallback}\n *\n * @throws `Error` If request_type is unknown or signout can not processed.\n */\n public async signoutCallback(url = window.location.href, keepOpen = false): Promise {\n const { state } = await this._client.readSignoutResponseState(url);\n if (!state) {\n return;\n }\n\n switch (state.request_type) {\n case \"so:r\":\n await this.signoutRedirectCallback(url);\n break;\n case \"so:p\":\n await this.signoutPopupCallback(url, keepOpen);\n break;\n case \"so:s\":\n await this.signoutSilentCallback(url);\n break;\n default:\n throw new Error(\"invalid response_type in state\");\n }\n }\n\n /**\n * Query OP for user's current signin status.\n *\n * @returns A promise object with session_state and subject identifier.\n */\n public async querySessionStatus(args: QuerySessionStatusArgs = {}): Promise {\n const logger = this._logger.create(\"querySessionStatus\");\n const {\n silentRequestTimeoutInSeconds,\n ...requestArgs\n } = args;\n const url = this.settings.silent_redirect_uri;\n if (!url) {\n logger.throw(new Error(\"No silent_redirect_uri configured\"));\n }\n\n const user = await this._loadUser();\n const handle = await this._iframeNavigator.prepare({ silentRequestTimeoutInSeconds });\n const navResponse = await this._signinStart({\n request_type: \"si:s\", // this acts like a signin silent\n redirect_uri: url,\n prompt: \"none\",\n id_token_hint: this.settings.includeIdTokenInSilentRenew ? user?.id_token : undefined,\n response_type: this.settings.query_status_response_type,\n scope: \"openid\",\n skipUserInfo: true,\n ...requestArgs,\n }, handle);\n try {\n const signinResponse = await this._client.processSigninResponse(navResponse.url);\n logger.debug(\"got signin response\");\n\n if (signinResponse.session_state && signinResponse.profile.sub) {\n logger.info(\"success for subject\", signinResponse.profile.sub);\n return {\n session_state: signinResponse.session_state,\n sub: signinResponse.profile.sub,\n };\n }\n\n logger.info(\"success, user not authenticated\");\n return null;\n }\n catch (err) {\n if (this.settings.monitorAnonymousSession && err instanceof ErrorResponse) {\n switch (err.error) {\n case \"login_required\":\n case \"consent_required\":\n case \"interaction_required\":\n case \"account_selection_required\":\n logger.info(\"success for anonymous user\");\n return {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n session_state: err.session_state!,\n };\n }\n }\n throw err;\n }\n }\n\n protected async _signin(args: CreateSigninRequestArgs, handle: IWindow, verifySub?: string): Promise {\n const navResponse = await this._signinStart(args, handle);\n return await this._signinEnd(navResponse.url, verifySub);\n }\n protected async _signinStart(args: CreateSigninRequestArgs, handle: IWindow): Promise {\n const logger = this._logger.create(\"_signinStart\");\n\n try {\n const signinRequest = await this._client.createSigninRequest(args);\n logger.debug(\"got signin request\");\n\n return await handle.navigate({\n url: signinRequest.url,\n state: signinRequest.state.id,\n response_mode: signinRequest.state.response_mode,\n scriptOrigin: this.settings.iframeScriptOrigin,\n });\n }\n catch (err) {\n logger.debug(\"error after preparing navigator, closing navigator window\");\n handle.close();\n throw err;\n }\n }\n protected async _signinEnd(url: string, verifySub?: string): Promise {\n const logger = this._logger.create(\"_signinEnd\");\n const signinResponse = await this._client.processSigninResponse(url);\n logger.debug(\"got signin response\");\n\n const user = await this._buildUser(signinResponse, verifySub);\n return user;\n }\n\n protected async _buildUser(signinResponse: SigninResponse, verifySub?: string) {\n const logger = this._logger.create(\"_buildUser\");\n const user = new User(signinResponse);\n if (verifySub) {\n if (verifySub !== user.profile.sub) {\n logger.debug(\"current user does not match user returned from signin. sub from signin:\", user.profile.sub);\n throw new ErrorResponse({ ...signinResponse, error: \"login_required\" });\n }\n logger.debug(\"current user matches user returned from signin\");\n }\n\n await this.storeUser(user);\n logger.debug(\"user stored\");\n await this._events.load(user);\n\n return user;\n }\n\n /**\n * Trigger a redirect of the current window to the end session endpoint.\n *\n * @returns A promise\n */\n public async signoutRedirect(args: SignoutRedirectArgs = {}): Promise {\n const logger = this._logger.create(\"signoutRedirect\");\n const {\n redirectMethod,\n ...requestArgs\n } = args;\n const handle = await this._redirectNavigator.prepare({ redirectMethod });\n await this._signoutStart({\n request_type: \"so:r\",\n post_logout_redirect_uri: this.settings.post_logout_redirect_uri,\n ...requestArgs,\n }, handle);\n logger.info(\"success\");\n }\n\n /**\n * Process response (callback) from the end session endpoint.\n * It is recommend to use {@link UserManager.signoutCallback} instead.\n *\n * @returns A promise containing signout response\n *\n * @see {@link UserManager.signoutCallback}\n */\n public async signoutRedirectCallback(url = window.location.href): Promise {\n const logger = this._logger.create(\"signoutRedirectCallback\");\n const response = await this._signoutEnd(url);\n logger.info(\"success\");\n return response;\n }\n\n /**\n * Trigger a redirect of a popup window window to the end session endpoint.\n *\n * @returns A promise\n */\n public async signoutPopup(args: SignoutPopupArgs = {}): Promise {\n const logger = this._logger.create(\"signoutPopup\");\n const {\n popupWindowFeatures,\n popupWindowTarget,\n ...requestArgs\n } = args;\n const url = this.settings.popup_post_logout_redirect_uri;\n\n const handle = await this._popupNavigator.prepare({ popupWindowFeatures, popupWindowTarget });\n await this._signout({\n request_type: \"so:p\",\n post_logout_redirect_uri: url,\n // we're putting a dummy entry in here because we\n // need a unique id from the state for notification\n // to the parent window, which is necessary if we\n // plan to return back to the client after signout\n // and so we can close the popup after signout\n state: url == null ? undefined : {},\n ...requestArgs,\n }, handle);\n logger.info(\"success\");\n }\n\n /**\n * Process response (callback) from the end session endpoint from a popup window.\n * It is recommend to use {@link UserManager.signoutCallback} instead.\n *\n * @returns A promise\n *\n * @see {@link UserManager.signoutCallback}\n */\n public async signoutPopupCallback(url = window.location.href, keepOpen = false): Promise {\n const logger = this._logger.create(\"signoutPopupCallback\");\n await this._popupNavigator.callback(url, { keepOpen });\n logger.info(\"success\");\n }\n\n protected async _signout(args: CreateSignoutRequestArgs, handle: IWindow): Promise {\n const navResponse = await this._signoutStart(args, handle);\n return await this._signoutEnd(navResponse.url);\n }\n protected async _signoutStart(args: CreateSignoutRequestArgs = {}, handle: IWindow): Promise {\n const logger = this._logger.create(\"_signoutStart\");\n\n try {\n const user = await this._loadUser();\n logger.debug(\"loaded current user from storage\");\n\n if (this.settings.revokeTokensOnSignout) {\n await this._revokeInternal(user);\n }\n\n const id_token = args.id_token_hint || user && user.id_token;\n if (id_token) {\n logger.debug(\"setting id_token_hint in signout request\");\n args.id_token_hint = id_token;\n }\n\n await this.removeUser();\n logger.debug(\"user removed, creating signout request\");\n\n const signoutRequest = await this._client.createSignoutRequest(args);\n logger.debug(\"got signout request\");\n\n return await handle.navigate({\n url: signoutRequest.url,\n state: signoutRequest.state?.id,\n scriptOrigin: this.settings.iframeScriptOrigin,\n });\n }\n catch (err) {\n logger.debug(\"error after preparing navigator, closing navigator window\");\n handle.close();\n throw err;\n }\n }\n protected async _signoutEnd(url: string): Promise {\n const logger = this._logger.create(\"_signoutEnd\");\n const signoutResponse = await this._client.processSignoutResponse(url);\n logger.debug(\"got signout response\");\n\n return signoutResponse;\n }\n\n /**\n * Trigger a silent request (via an iframe) to the end session endpoint.\n *\n * @returns A promise\n */\n public async signoutSilent(args: SignoutSilentArgs = {}): Promise {\n const logger = this._logger.create(\"signoutSilent\");\n const {\n silentRequestTimeoutInSeconds,\n ...requestArgs\n } = args;\n\n const id_token_hint = this.settings.includeIdTokenInSilentSignout\n ? (await this._loadUser())?.id_token\n : undefined;\n\n const url = this.settings.popup_post_logout_redirect_uri;\n const handle = await this._iframeNavigator.prepare({ silentRequestTimeoutInSeconds });\n await this._signout({\n request_type: \"so:s\",\n post_logout_redirect_uri: url,\n id_token_hint: id_token_hint,\n ...requestArgs,\n }, handle);\n\n logger.info(\"success\");\n }\n\n /**\n * Notify the parent window of response (callback) from the end session endpoint.\n * It is recommend to use {@link UserManager.signoutCallback} instead.\n *\n * @returns A promise\n *\n * @see {@link UserManager.signoutCallback}\n */\n public async signoutSilentCallback(url = window.location.href): Promise {\n const logger = this._logger.create(\"signoutSilentCallback\");\n await this._iframeNavigator.callback(url);\n logger.info(\"success\");\n }\n\n public async revokeTokens(types?: RevokeTokensTypes): Promise {\n const user = await this._loadUser();\n await this._revokeInternal(user, types);\n }\n\n protected async _revokeInternal(user: User | null, types = this.settings.revokeTokenTypes): Promise {\n const logger = this._logger.create(\"_revokeInternal\");\n if (!user) return;\n\n const typesPresent = types.filter(type => typeof user[type] === \"string\");\n\n if (!typesPresent.length) {\n logger.debug(\"no need to revoke due to no token(s)\");\n return;\n }\n\n // don't Promise.all, order matters\n for (const type of typesPresent) {\n await this._client.revokeToken(\n user[type]!, // eslint-disable-line @typescript-eslint/no-non-null-assertion\n type,\n );\n logger.info(`${type} revoked successfully`);\n if (type !== \"access_token\") {\n user[type] = null as never;\n }\n }\n\n await this.storeUser(user);\n logger.debug(\"user stored\");\n await this._events.load(user);\n }\n\n /**\n * Enables silent renew for the `UserManager`.\n */\n public startSilentRenew(): void {\n this._logger.create(\"startSilentRenew\");\n void this._silentRenewService.start();\n }\n\n /**\n * Disables silent renew for the `UserManager`.\n */\n public stopSilentRenew(): void {\n this._silentRenewService.stop();\n }\n\n protected get _userStoreKey(): string {\n return `user:${this.settings.authority}:${this.settings.client_id}`;\n }\n\n protected async _loadUser(): Promise {\n const logger = this._logger.create(\"_loadUser\");\n const storageString = await this.settings.userStore.get(this._userStoreKey);\n if (storageString) {\n logger.debug(\"user storageString loaded\");\n return User.fromStorageString(storageString);\n }\n\n logger.debug(\"no user storageString\");\n return null;\n }\n\n public async storeUser(user: User | null): Promise {\n const logger = this._logger.create(\"storeUser\");\n if (user) {\n logger.debug(\"storing user\");\n const storageString = user.toStorageString();\n await this.settings.userStore.set(this._userStoreKey, storageString);\n }\n else {\n this._logger.debug(\"removing user\");\n await this.settings.userStore.remove(this._userStoreKey);\n }\n }\n\n /**\n * Removes stale state entries in storage for incomplete authorize requests.\n */\n public async clearStaleState(): Promise {\n await this._client.clearStaleState();\n }\n}\n", "{\n \"name\": \"oidc-client-ts\",\n \"version\": \"3.0.1\",\n \"description\": \"OpenID Connect (OIDC) & OAuth2 client library\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/authts/oidc-client-ts.git\"\n },\n \"homepage\": \"https://github.com/authts/oidc-client-ts#readme\",\n \"license\": \"Apache-2.0\",\n \"main\": \"dist/umd/oidc-client-ts.js\",\n \"types\": \"dist/types/oidc-client-ts.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/types/oidc-client-ts.d.ts\",\n \"import\": \"./dist/esm/oidc-client-ts.js\",\n \"require\": \"./dist/umd/oidc-client-ts.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"dist\"\n ],\n \"keywords\": [\n \"authentication\",\n \"oauth2\",\n \"oidc\",\n \"openid\",\n \"OpenID Connect\"\n ],\n \"scripts\": {\n \"build\": \"node scripts/build.js && npm run build-types\",\n \"build-types\": \"tsc -p tsconfig.build.json && api-extractor run\",\n \"clean\": \"git clean -fdX dist lib *.tsbuildinfo\",\n \"prepack\": \"npm run build\",\n \"test\": \"tsc && jest\",\n \"typedoc\": \"typedoc\",\n \"lint\": \"eslint --max-warnings=0 --cache .\",\n \"prepare\": \"husky install\"\n },\n \"dependencies\": {\n \"jwt-decode\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@microsoft/api-extractor\": \"^7.35.0\",\n \"@testing-library/jest-dom\": \"^6.0.0\",\n \"@types/jest\": \"^29.2.3\",\n \"@types/node\": \"^20.8.2\",\n \"@typescript-eslint/eslint-plugin\": \"^6.4.1\",\n \"@typescript-eslint/parser\": \"^6.4.1\",\n \"esbuild\": \"^0.20.0\",\n \"eslint\": \"^8.5.0\",\n \"eslint-plugin-testing-library\": \"^6.0.0\",\n \"http-proxy-middleware\": \"^2.0.1\",\n \"husky\": \"^9.0.6\",\n \"jest\": \"^29.3.1\",\n \"jest-environment-jsdom\": \"^29.3.1\",\n \"jest-mock\": \"^29.3.1\",\n \"lint-staged\": \"^15.0.1\",\n \"ts-jest\": \"^29.0.3\",\n \"typedoc\": \"^0.25.0\",\n \"typescript\": \"~5.3.3\",\n \"yn\": \"^5.0.0\"\n },\n \"engines\": {\n \"node\": \">=18\"\n },\n \"lint-staged\": {\n \"*.{js,jsx,ts,tsx}\": \"eslint --cache --fix\"\n }\n}\n", "// @ts-expect-error avoid enabling resolveJsonModule to keep build process simple\nimport { version } from \"../package.json\";\n\n/**\n * @public\n */\nexport const Version: string = version;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_CERTIFICATE_LIST,\n RCV_CERTIFICATE_LIST,\n REQ_CREATE_CERTIFICATE,\n RCV_CREATE_CERTIFICATE,\n REQ_DELETE_CERTIFICATE,\n RCV_DELETE_CERTIFICATE,\n REQUEST_FAILED,\n REQUEST_BANKID_FAILED,\n} from '../actions/bankid';\nimport { Actions } from '../actions';\nimport { BankIdCertificate } from '../@types/Bankid';\n\nconst emptyList: BankIdCertificate[] = [];\n\ninterface BankidState {\n requestStatus: number;\n responseStatus: number;\n certificates: BankIdCertificate[];\n error: string | null;\n}\n\nexport const initialState: BankidState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n certificates: emptyList,\n error: null,\n};\n\nconst buildErrorMessage = (actionType: REQUEST_BANKID_FAILED['action']) => {\n switch (actionType) {\n case REQ_CERTIFICATE_LIST:\n return 'Bank ID-certifikat kunde inte h\u00E4mtas.';\n case REQ_CREATE_CERTIFICATE:\n return 'Det gick inte att ladda upp certifikatet. S\u00E4kerst\u00E4ll att det \u00E4r i r\u00E4tt format.';\n case REQ_DELETE_CERTIFICATE:\n return 'Det gick inte att ta bort certifikatet.';\n default:\n return 'Ov\u00E4ntat fel intr\u00E4ffade. F\u00F6rs\u00F6k igen.';\n }\n};\n\nexport default (state = initialState, action: Actions): BankidState => {\n switch (action.type) {\n case REQ_CERTIFICATE_LIST:\n return {\n ...state,\n requestStatus: requestStatus.FETCHING_LIST,\n responseStatus: responseStatus.PENDING,\n error: null,\n };\n case RCV_CERTIFICATE_LIST:\n return {\n ...state,\n certificates: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n error: null,\n };\n case REQ_CREATE_CERTIFICATE:\n return {\n ...state,\n requestStatus: requestStatus.CREATING,\n responseStatus: responseStatus.PENDING,\n error: null,\n };\n case RCV_CREATE_CERTIFICATE:\n return {\n ...state,\n certificates: state.certificates.concat([action.response]),\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n error: null,\n };\n case REQ_DELETE_CERTIFICATE:\n return {\n ...state,\n requestStatus: requestStatus.REMOVING,\n responseStatus: responseStatus.PENDING,\n error: null,\n };\n case RCV_DELETE_CERTIFICATE:\n return {\n ...state,\n certificates: state.certificates.filter((x) => x.thumbprint !== action.thumbprint),\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n error: null,\n };\n case REQUEST_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n error: buildErrorMessage(action.action),\n };\n default:\n return state;\n }\n};\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_FINANCIAL_INSTITUTIONS,\n RCV_GET_FINANCIAL_INSTITUTIONS,\n REQ_FAILED,\n} from '../actions/financial-institution';\nimport { Actions } from '../actions';\nimport { FinancialInstitution } from '../@types/FinancialInstitution';\n\ninterface FinancialInstitutionState {\n requestStatus: number;\n responseStatus: number;\n financialInstitution: FinancialInstitution[] | null;\n}\n\nexport const initialState: FinancialInstitutionState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n financialInstitution: null,\n};\n\nconst financialInstitution = (state = initialState, action: Actions): FinancialInstitutionState => {\n switch (action.type) {\n case REQ_GET_FINANCIAL_INSTITUTIONS:\n return { ...state, requestStatus: requestStatus.FETCHING, responseStatus: responseStatus.OK };\n case RCV_GET_FINANCIAL_INSTITUTIONS:\n return {\n ...state,\n financialInstitution: action.response || null,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default financialInstitution;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport { REQ_GET_MANUFACTURERS, RCV_GET_MANUFACTURERS, REQ_FAILED } from '../actions/manufacturers';\nimport { Actions } from '../actions';\n\ninterface ManufacturersState {\n requestStatus: number;\n responseStatus: number;\n manufacturers: string[] | null;\n}\n\nexport const initialState: ManufacturersState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n manufacturers: null,\n};\n\nconst manufacturersReducer = (state = initialState, action: Actions): ManufacturersState => {\n switch (action.type) {\n case REQ_GET_MANUFACTURERS:\n return { ...state, requestStatus: requestStatus.FETCHING, responseStatus: responseStatus.OK };\n case RCV_GET_MANUFACTURERS:\n return {\n ...state,\n manufacturers: action.response || null,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default manufacturersReducer;\n", "import {\n REQ_GET_NOTIFICATION_SETTINGS,\n RCV_GET_NOTIFICATION_SETTINGS,\n ERR_GET_NOTIFICATION_SETTINGS,\n REQ_POST_NOTIFICATION_SETTINGS,\n RCV_POST_NOTIFICATION_SETTINGS,\n ERR_POST_NOTIFICATION_SETTINGS,\n} from '../actions/notification';\nimport { Actions } from '../actions';\nimport { Notification } from '../@types/Notification';\nimport {\n RequestState,\n requestIdle,\n requestInit,\n requestSuccessful,\n requestError,\n} from '../http/request-state';\n\ninterface NotificationState {\n requestStatusGet: RequestState;\n requestStatusCreate: RequestState;\n notification: Notification | null;\n}\n\nexport const initialState: NotificationState = {\n requestStatusGet: requestIdle(),\n requestStatusCreate: requestIdle(),\n notification: null,\n};\n\nconst notification = (state = initialState, action: Actions): NotificationState => {\n switch (action.type) {\n case REQ_GET_NOTIFICATION_SETTINGS:\n return {\n ...state,\n notification: null,\n requestStatusGet: requestInit(),\n };\n case RCV_GET_NOTIFICATION_SETTINGS:\n return {\n ...state,\n notification: action.response,\n requestStatusGet: requestSuccessful(),\n };\n case ERR_GET_NOTIFICATION_SETTINGS:\n return {\n ...state,\n requestStatusGet: requestError(),\n };\n case REQ_POST_NOTIFICATION_SETTINGS:\n return {\n ...state,\n requestStatusCreate: requestInit(),\n };\n case RCV_POST_NOTIFICATION_SETTINGS:\n return {\n ...state,\n notification: action.response,\n requestStatusCreate: requestSuccessful(),\n };\n case ERR_POST_NOTIFICATION_SETTINGS:\n return {\n ...state,\n requestStatusCreate: requestError(),\n };\n default:\n return state;\n }\n};\n\nexport default notification;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_BRANCH,\n RCV_GET_BRANCH,\n REQ_PUT_BRANCH,\n RCV_PUT_BRANCH,\n SET_SELECTED_BRANCH,\n REQ_FAILED,\n REQ_GET_BRANCHES,\n RCV_GET_BRANCHES,\n SET_BRANCH,\n} from '../actions/organisation';\n\nimport { Actions } from '../actions';\nimport { Branch } from '../@types/Branch';\n\nexport interface OrganizationBranch {\n requestStatusList: number;\n responseStatusList: number;\n requestStatus: number;\n responseStatus: number;\n branches: Branch[] | null;\n branch: Branch | null;\n selectedBranch: string | null;\n}\n\nexport const initialState: OrganizationBranch = {\n requestStatusList: requestStatus.WAITING,\n responseStatusList: responseStatus.OK,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n branches: null,\n branch: null,\n selectedBranch: null,\n};\n\nconst organisationBranchReducer = (state = initialState, action: Actions): OrganizationBranch => {\n switch (action.type) {\n case REQ_GET_BRANCHES:\n return {\n ...state,\n branches: null,\n requestStatusList: requestStatus.FETCHING,\n responseStatusList: responseStatus.PENDING,\n };\n case RCV_GET_BRANCHES:\n return {\n ...state,\n branches: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_GET_BRANCH:\n return {\n ...state,\n branch: null,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_GET_BRANCH:\n return {\n ...state,\n branch: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_PUT_BRANCH:\n return {\n ...state,\n requestStatus: requestStatus.UPDATING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_PUT_BRANCH:\n return {\n ...state,\n branch: { ...action.response },\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case SET_BRANCH:\n document.cookie = `selectedBranch=${action.branch.id};path=/`;\n return { ...state, selectedBranch: action.branch.id, branch: action.branch };\n case SET_SELECTED_BRANCH:\n document.cookie = `selectedBranch=${action.branch};path=/`;\n return { ...state, selectedBranch: action.branch };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default organisationBranchReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_CUSTOM_IMAGE_SOURCE,\n RCV_CUSTOM_IMAGE_SOURCE,\n REQ_PUT_CUSTOM_IMAGE_SOURCE,\n RCV_PUT_CUSTOM_IMAGE_SOURCE,\n REQ_DELETE_CUSTOM_IMAGE_SOURCE,\n RCV_DELETE_CUSTOM_IMAGE_SOURCE,\n REQ_FAILED,\n} from '../actions/organisation-custom-image-source';\nimport { Actions } from '../actions';\n\ninterface CustomImageSourceState {\n requestStatus: number;\n responseStatus: number;\n rootUri: string | null;\n branchId: string | null;\n failed?: string | null;\n}\n\nexport const initialState: CustomImageSourceState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n rootUri: null,\n branchId: null,\n};\n\nconst organisationCustomImageSource = (\n state = initialState,\n action: Actions,\n): CustomImageSourceState => {\n switch (action.type) {\n case REQ_CUSTOM_IMAGE_SOURCE:\n return {\n ...state,\n failed: null,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.OK,\n };\n case RCV_CUSTOM_IMAGE_SOURCE:\n return {\n ...state,\n rootUri: action.response?.rootUri || null,\n branchId: action.branchId,\n failed: null,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_PUT_CUSTOM_IMAGE_SOURCE:\n return {\n ...state,\n failed: null,\n requestStatus: requestStatus.UPDATING,\n responseStatus: responseStatus.OK,\n };\n case RCV_PUT_CUSTOM_IMAGE_SOURCE:\n return {\n ...state,\n rootUri: action.response.rootUri || null,\n branchId: action.branchId,\n failed: null,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_DELETE_CUSTOM_IMAGE_SOURCE:\n return {\n ...state,\n failed: null,\n requestStatus: requestStatus.REMOVING,\n responseStatus: responseStatus.OK,\n };\n case RCV_DELETE_CUSTOM_IMAGE_SOURCE:\n return {\n ...state,\n rootUri: null,\n branchId: action.branchId,\n failed: null,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_FAILED:\n return {\n ...state,\n failed: action.type,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default organisationCustomImageSource;\n", "import { Dispatch } from 'redux';\n\nimport { requestCache } from '../utils';\nimport * as http from '../http';\nimport { RootState } from '../reducers';\nimport {\n buildAuthorizedDeleteRequest,\n buildAuthorizedGetRequest,\n buildAuthorizedPutRequest,\n} from '../http/request-templates';\nimport { CustomImageSource } from '../@types/CustomImageSource';\nimport { BaseAction } from '../@types/Action';\n\nexport const REQ_CUSTOM_IMAGE_SOURCE = 'REQ/CUSTOM_IMAGE_SOURCE';\nexport const RCV_CUSTOM_IMAGE_SOURCE = 'RCV/CUSTOM_IMAGE_SOURCE';\ntype REQ_CUSTOM_IMAGE_SOURCE_TYPE = BaseAction;\ntype RCV_CUSTOM_IMAGE_SOURCE_TYPE = BaseAction & {\n response: CustomImageSource;\n branchId: string;\n};\n\nexport const REQ_PUT_CUSTOM_IMAGE_SOURCE = 'REQ/PUT_CUSTOM_IMAGE_SOURCE';\nexport const RCV_PUT_CUSTOM_IMAGE_SOURCE = 'RCV/PUT_CUSTOM_IMAGE_SOURCE';\ntype REQ_PUT_CUSTOM_IMAGE_SOURCE_TYPE = BaseAction;\ntype RCV_PUT_CUSTOM_IMAGE_SOURCE_TYPE = BaseAction & {\n response: CustomImageSource;\n branchId: string;\n};\n\nexport const REQ_DELETE_CUSTOM_IMAGE_SOURCE = 'REQ/DELETE_CUSTOM_IMAGE_SOURCE';\nexport const RCV_DELETE_CUSTOM_IMAGE_SOURCE = 'RCV/DELETE_CUSTOM_IMAGE_SOURCE';\ntype REQ_DELETE_CUSTOM_IMAGE_SOURCE_TYPE = BaseAction;\ntype RCV_DELETE_CUSTOM_IMAGE_SOURCE_TYPE = BaseAction & {\n response: CustomImageSource;\n branchId: string;\n};\n\nexport const REQ_FAILED = 'REQ/CUSTOM_IMAGE_SOURCE_FAILED';\ntype ERR_CUSTOM_IMAGE_SOURCE_TYPE = BaseAction;\n\nexport type CUSTOM_IMAGE_SOURCE_ACTION =\n | REQ_CUSTOM_IMAGE_SOURCE_TYPE\n | RCV_CUSTOM_IMAGE_SOURCE_TYPE\n | REQ_PUT_CUSTOM_IMAGE_SOURCE_TYPE\n | RCV_PUT_CUSTOM_IMAGE_SOURCE_TYPE\n | REQ_DELETE_CUSTOM_IMAGE_SOURCE_TYPE\n | RCV_DELETE_CUSTOM_IMAGE_SOURCE_TYPE\n | ERR_CUSTOM_IMAGE_SOURCE_TYPE;\n\nexport const getCustomImageSource = () => async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n if (!auth.token || requestCache.isPending(REQ_CUSTOM_IMAGE_SOURCE)) {\n return;\n }\n\n requestCache.isPending(REQ_CUSTOM_IMAGE_SOURCE, true);\n\n try {\n dispatch({ type: REQ_CUSTOM_IMAGE_SOURCE });\n const response = await http.json(\n `/api/organisation/branches/${organisationBranch.selectedBranch}/customImageSource`,\n buildAuthorizedGetRequest(auth.token),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_CUSTOM_IMAGE_SOURCE,\n response: response.response,\n branchId: organisationBranch.selectedBranch,\n });\n } catch (e) {\n dispatch({ type: REQ_FAILED, action: REQ_CUSTOM_IMAGE_SOURCE });\n }\n requestCache.isPending(REQ_CUSTOM_IMAGE_SOURCE, false);\n};\n\nexport const putCustomImageSource =\n (rootUri: string) => async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n if (!auth.token || requestCache.isPending(REQ_PUT_CUSTOM_IMAGE_SOURCE)) {\n return;\n }\n\n const body = {\n rootUri,\n };\n\n requestCache.isPending(REQ_PUT_CUSTOM_IMAGE_SOURCE, true);\n\n try {\n dispatch({ type: REQ_PUT_CUSTOM_IMAGE_SOURCE });\n const response = await http.json(\n `/api/organisation/branches/${organisationBranch.selectedBranch}/customImageSource`,\n buildAuthorizedPutRequest(auth.token, body),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_PUT_CUSTOM_IMAGE_SOURCE,\n response: response.response,\n branchId: organisationBranch.selectedBranch,\n });\n } catch (e) {\n dispatch({ type: REQ_FAILED, action: REQ_PUT_CUSTOM_IMAGE_SOURCE });\n }\n requestCache.isPending(REQ_PUT_CUSTOM_IMAGE_SOURCE, false);\n };\n\nexport const deleteCustomImageSource =\n () => async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n if (!auth.token || requestCache.isPending(REQ_DELETE_CUSTOM_IMAGE_SOURCE)) {\n return;\n }\n\n requestCache.isPending(REQ_DELETE_CUSTOM_IMAGE_SOURCE, true);\n\n try {\n dispatch({ type: REQ_DELETE_CUSTOM_IMAGE_SOURCE });\n const response = await http.json(\n `/api/organisation/branches/${organisationBranch.selectedBranch}/customImageSource`,\n buildAuthorizedDeleteRequest(auth.token),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_DELETE_CUSTOM_IMAGE_SOURCE,\n response: response.response,\n branchId: organisationBranch.selectedBranch,\n });\n } catch (e) {\n dispatch({ type: REQ_FAILED, action: REQ_DELETE_CUSTOM_IMAGE_SOURCE });\n }\n requestCache.isPending(REQ_DELETE_CUSTOM_IMAGE_SOURCE, false);\n };\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_OPENING_HOURS,\n RCV_GET_OPENING_HOURS,\n REQ_SET_OPENING_HOURS,\n RCV_SET_OPENING_HOURS,\n REQ_FAILED,\n} from '../actions/opening-hours';\nimport { Actions } from '../actions';\n\nimport { RCV_GET_BRANCH } from '../actions/organisation';\nimport { OpeningHours } from '../@types/OpeningHours';\n\ninterface OrganisationOpeningHoursState {\n requestStatus: number;\n responseStatus: number;\n openingHours: OpeningHours | null;\n branchId: string | null;\n}\n\nexport const initialState: OrganisationOpeningHoursState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n openingHours: null,\n branchId: null,\n};\n\nconst organisationOpeningHoursReducer = (\n state = initialState,\n action: Actions,\n): OrganisationOpeningHoursState => {\n switch (action.type) {\n case RCV_GET_BRANCH:\n return { ...initialState };\n case REQ_GET_OPENING_HOURS:\n return { ...state, requestStatus: requestStatus.FETCHING, responseStatus: responseStatus.OK };\n case RCV_GET_OPENING_HOURS:\n let oh = null;\n if (action.successful) {\n if (action.response) {\n oh = action.response;\n }\n }\n return {\n ...state,\n openingHours: oh,\n branchId: action.branchId,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_SET_OPENING_HOURS:\n return { ...state, requestStatus: requestStatus.UPDATING, responseStatus: responseStatus.OK };\n case RCV_SET_OPENING_HOURS:\n return {\n ...state,\n openingHours: action.openingHours,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default organisationOpeningHoursReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_RESELLER_PACKAGE,\n RCV_GET_RESELLER_PACKAGE,\n REQ_PUT_RESELLER_PACKAGE,\n RCV_PUT_RESELLER_PACKAGE,\n REQ_FAILED,\n} from '../actions/organisation-reseller-package';\nimport { Actions } from '../actions';\nimport { ResellerPackage } from '../@types/ResellerPackage';\n\ninterface OrganizationResellerPackageState {\n requestStatus: number;\n responseStatus: number;\n resellerPackage: ResellerPackage | null;\n resellerPackages?: ResellerPackage[] | null;\n failed?: boolean | null | string;\n branchId: string | null;\n}\n\nexport const initialState: OrganizationResellerPackageState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n resellerPackage: null,\n branchId: null,\n};\n\nconst organisationResellerPackage = (\n state = initialState,\n action: Actions,\n): OrganizationResellerPackageState => {\n switch (action.type) {\n case REQ_GET_RESELLER_PACKAGE:\n return {\n ...state,\n failed: null,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.OK,\n };\n case RCV_GET_RESELLER_PACKAGE:\n const res = action.response;\n const resellerPackage = !!res && res.length ? res : null;\n return {\n ...state,\n resellerPackages: resellerPackage,\n branchId: action.branchId,\n failed: null,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_PUT_RESELLER_PACKAGE:\n return {\n ...state,\n failed: null,\n requestStatus: requestStatus.UPDATING,\n responseStatus: responseStatus.OK,\n };\n case RCV_PUT_RESELLER_PACKAGE:\n const res1 = action.response;\n const resellerPackage1 = !!res1 && res1.length ? res1 : null;\n return {\n ...state,\n resellerPackages: resellerPackage1,\n branchId: action.branchId,\n failed: null,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_FAILED:\n return {\n ...state,\n failed: action.type,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default organisationResellerPackage;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_SERVICES,\n RCV_GET_SERVICES,\n REQ_POST_SERVICE,\n RCV_POST_SERVICE,\n REQ_PUT_SERVICE,\n RCV_PUT_SERVICE,\n REQ_DELETE_SERVICE,\n RCV_DELETE_SERVICE,\n REQ_FAILED,\n} from '../actions/service';\nimport { Service } from '../@types/Service';\nimport { Actions } from '../actions';\n\ninterface ServiceState {\n requestStatus: number;\n responseStatus: number;\n services: Service[] | null;\n branchId: string | null;\n}\n\nexport const initialState: ServiceState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n services: null,\n branchId: null,\n};\n\nlet services;\nlet index;\nconst organisationServiceReducer = (state = initialState, action: Actions): ServiceState => {\n switch (action.type) {\n case REQ_GET_SERVICES:\n return { ...state, requestStatus: requestStatus.FETCHING, responseStatus: responseStatus.OK };\n case RCV_GET_SERVICES:\n return {\n ...state,\n services: action.response,\n branchId: action.branchId,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_POST_SERVICE:\n return { ...state, requestStatus: requestStatus.CREATING, responseStatus: responseStatus.OK };\n case RCV_POST_SERVICE:\n services = (state.services || []).slice();\n services.push(action.response);\n return {\n ...state,\n services,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_PUT_SERVICE:\n return { ...state, requestStatus: requestStatus.UPDATING, responseStatus: responseStatus.OK };\n case RCV_PUT_SERVICE:\n services = state.services?.slice() || [];\n for (const i in services) {\n if (services[i].id === action.response.id) {\n services[i] = { ...action.response };\n }\n }\n return {\n ...state,\n services,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_DELETE_SERVICE:\n return { ...state, requestStatus: requestStatus.REMOVING, responseStatus: responseStatus.OK };\n case RCV_DELETE_SERVICE:\n services = state.services?.slice() || [];\n index = services.findIndex((service) => service.id === action.response.id);\n if (index > -1) {\n services.splice(index, 1);\n }\n return {\n ...state,\n services,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default organisationServiceReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_USER,\n RCV_GET_USER,\n REQ_PUT_USER,\n RCV_PUT_USER,\n REQ_GET_USERS,\n RCV_GET_USERS,\n SET_CLEAR_USERS,\n REQ_FAILED,\n} from '../actions/organisation';\nimport { Actions } from '../actions';\nimport { User } from '../@types/User';\n\ninterface OrganizationUser {\n requestStatus: number;\n responseStatus: number;\n users: User[] | null;\n user: User | null;\n branchId: string | null;\n}\n\nexport const initialState: OrganizationUser = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n users: null,\n user: null,\n branchId: null,\n};\n\nconst organisationUserReducer = (state = initialState, action: Actions): OrganizationUser => {\n switch (action.type) {\n case REQ_GET_USER:\n return {\n ...state,\n user: null,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.OK,\n };\n case RCV_GET_USER:\n let user = null;\n if (action.response) {\n const telephone = action.response.telephone ? action.response.telephone : '';\n user = { ...action.response, telephone };\n }\n return {\n ...state,\n user,\n branchId: action.branchId,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_PUT_USER:\n return { ...state, requestStatus: requestStatus.UPDATING, responseStatus: responseStatus.OK };\n case RCV_PUT_USER:\n return {\n ...state,\n user: action.response,\n branchId: action.branchId,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_GET_USERS:\n return {\n ...state,\n users: null,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.OK,\n };\n case RCV_GET_USERS:\n return {\n ...state,\n users: action.response,\n branchId: action.branchId,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case SET_CLEAR_USERS:\n return {\n ...state,\n users: null,\n user: null,\n branchId: null,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default organisationUserReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_DEFAULT_CONTACT_OPTION,\n RCV_GET_DEFAULT_CONTACT_OPTION,\n REQ_PUT_DEFAULT_CONTACT_OPTION,\n RCV_PUT_DEFAULT_CONTACT_OPTION,\n REQ_DELETE_DEFAULT_CONTACT_OPTION,\n RCV_DELETE_DEFAULT_CONTACT_OPTION,\n REQ_FAILED,\n} from '../actions/default-contact-options';\nimport { Actions } from '../actions';\nimport { DefaultContactOption } from '../@types/DefaultContactOption';\n\ninterface DefaultContactOptionsState {\n requestStatus: number;\n responseStatus: number;\n defaultContactOption: DefaultContactOption | null;\n branchId: string | null;\n}\n\nexport const initialState: DefaultContactOptionsState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n defaultContactOption: null,\n branchId: null,\n};\n\nconst defaultContactOption = (\n state = initialState,\n action: Actions,\n): DefaultContactOptionsState => {\n switch (action.type) {\n case REQ_GET_DEFAULT_CONTACT_OPTION:\n return {\n ...state,\n defaultContactOption: null,\n branchId: null,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.OK,\n };\n case RCV_GET_DEFAULT_CONTACT_OPTION:\n return {\n ...state,\n defaultContactOption: action.response,\n branchId: action.branchId,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_PUT_DEFAULT_CONTACT_OPTION:\n return { ...state, requestStatus: requestStatus.UPDATING, responseStatus: responseStatus.OK };\n case RCV_PUT_DEFAULT_CONTACT_OPTION:\n return {\n ...state,\n defaultContactOption: action.response,\n branchId: action.branchId,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_DELETE_DEFAULT_CONTACT_OPTION:\n return { ...state, requestStatus: requestStatus.REMOVING, responseStatus: responseStatus.OK };\n case RCV_DELETE_DEFAULT_CONTACT_OPTION:\n return {\n ...state,\n defaultContactOption: null,\n branchId: action.branchId,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default defaultContactOption;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_PROFILE,\n RCV_PROFILE,\n REQ_PROFILE_POST,\n RCV_PROFILE_POST,\n REQ_FAILED,\n} from '../actions/profile';\nimport { Actions } from '../actions';\nimport { Profile } from '../@types/Profile';\n\ninterface ProfileState {\n requestStatus: number;\n responseStatus: number;\n profile: Profile | null;\n}\n\nexport const initialState: ProfileState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n profile: null,\n};\n\nconst profileReducer = (state = initialState, action: Actions): ProfileState => {\n switch (action.type) {\n case REQ_PROFILE:\n return {\n ...state,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_PROFILE:\n return {\n ...state,\n profile: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_PROFILE_POST:\n return {\n ...state,\n requestStatus: requestStatus.CREATING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_PROFILE_POST:\n return {\n ...state,\n profile: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default profileReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_RESELLER_PACKAGES_I3,\n RCV_GET_RESELLER_PACKAGES_I3,\n REQ_CLEAR_RESELLER_PACKAGE,\n REQ_FAILED,\n} from '../actions/reseller-package';\nimport { Actions } from '../actions';\nimport { ResellerPackage } from '../@types/ResellerPackage';\n\ninterface ResellerPackageState {\n requestStatus: number;\n responseStatus: number;\n resellerPackages: ResellerPackage[] | null;\n}\n\nexport const initialState: ResellerPackageState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n resellerPackages: null,\n};\n\n// Probably not used anymore\n\nconst resellerPackage = (state = initialState, action: Actions): ResellerPackageState => {\n switch (action.type) {\n case REQ_GET_RESELLER_PACKAGES_I3:\n return {\n ...state,\n resellerPackages: null,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.OK,\n };\n case RCV_GET_RESELLER_PACKAGES_I3:\n return {\n ...state,\n resellerPackages: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_CLEAR_RESELLER_PACKAGE:\n return { ...initialState };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default resellerPackage;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_USER_INFORMATION,\n RCV_USER_INFORMATION,\n REQ_USER_INFORMATION_BATCH,\n RCV_USER_INFORMATION_BATCH,\n RCV_CONNECTED_USERS,\n SET_CLEAR_USER_INFORMATIONS,\n REQ_FAILED,\n} from '../actions/user';\nimport { Actions } from '../actions';\nimport { UserInformationModel } from '../@types/User';\n\nexport type UsersInformationsObjectType = { [key: string]: UserInformationModel | undefined };\n\ninterface UserState {\n requestStatus: number;\n responseStatus: number;\n userInformations: UsersInformationsObjectType;\n users: { [key: string]: UserInformationModel[] | undefined };\n}\n\nexport const initialState: UserState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n userInformations: {},\n users: {},\n};\n\nconst userReducer = (state = initialState, action: Actions): UserState => {\n switch (action.type) {\n case REQ_USER_INFORMATION:\n return {\n ...state,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_USER_INFORMATION:\n return {\n ...state,\n userInformations: {\n ...(state.userInformations || {}),\n [action.response.id]: action.response,\n },\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_USER_INFORMATION_BATCH:\n return {\n ...state,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_USER_INFORMATION_BATCH:\n let usersInfo = state.userInformations ? { ...state.userInformations } : {};\n if (!Object.keys(usersInfo).length) {\n usersInfo = action.response;\n } else {\n Object.keys(action.response).forEach((x) => {\n const id = action.response?.[x]?.id;\n if (id) {\n usersInfo[id] = action.response[x];\n }\n });\n }\n return {\n ...state,\n userInformations: usersInfo,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case RCV_CONNECTED_USERS:\n return { ...state, users: { ...state.users, [action.branchId]: action.response } };\n case SET_CLEAR_USER_INFORMATIONS:\n return {\n ...state,\n userInformations: { ...{} },\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default userReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_VEHICLES_OPTIONS,\n RCV_GET_VEHICLES_OPTIONS,\n REQ_FAILED,\n} from '../actions/vehicles-options';\nimport { Actions } from '../actions';\nimport { VehiclesOptions } from '../@types/VehiclesOptinos';\nimport { ElasticSearchResponse } from '../@types/ElasticSearchResponse';\n\ninterface VehiclesOptionsState {\n requestStatus: number;\n responseStatus: number;\n vehiclesOptions: ElasticSearchResponse | null;\n}\n\nexport const initialState: VehiclesOptionsState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n vehiclesOptions: null,\n};\n\nconst vehiclesOptionsReducer = (state = initialState, action: Actions): VehiclesOptionsState => {\n switch (action.type) {\n case REQ_GET_VEHICLES_OPTIONS:\n return {\n ...state,\n vehiclesOptions: null,\n requestStatus: requestStatus.FETCHING_LIST,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_GET_VEHICLES_OPTIONS:\n return {\n ...state,\n vehiclesOptions: { ...action.response },\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default vehiclesOptionsReducer;\n", "import { Dispatch } from 'redux';\nimport { BaseAction } from '../@types/Action';\nimport { buildAuthorizedGetRequest } from '../http/request-templates';\nimport { RootState } from '../reducers';\nimport { requestCache } from '../utils';\nimport * as http from '../http';\nimport { ElasticSearchResponse } from '../@types/ElasticSearchResponse';\nimport { VehiclesOptions } from '../@types/VehiclesOptinos';\n\nexport const REQ_GET_VEHICLES_OPTIONS = 'REQ/GET_VEHICLES_OPTIONS';\nexport const RCV_GET_VEHICLES_OPTIONS = 'RCV/GET_VEHICLES_OPTIONS';\nexport const REQ_FAILED = 'REQ/GET_VEHICLES_OPTIONS_FAILED';\ntype REQ_GET_VEHICLES_OPTIONS_TYPE = BaseAction;\ntype RCV_GET_VEHICLES_OPTIONS_TYPE = BaseAction & {\n response: ElasticSearchResponse;\n};\ntype ERR_VEHICLES_OPTIONS_TYPE = BaseAction;\n\nexport type VEHICLES_OPTIONS_ACTION =\n | REQ_GET_VEHICLES_OPTIONS_TYPE\n | RCV_GET_VEHICLES_OPTIONS_TYPE\n | ERR_VEHICLES_OPTIONS_TYPE;\n\nexport const getVehiclesOptions =\n (encodedQuery?: string) => async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth } = getState();\n\n if (!auth.token || requestCache.isPending(REQ_GET_VEHICLES_OPTIONS)) {\n return;\n }\n requestCache.isPending(REQ_GET_VEHICLES_OPTIONS, true);\n\n try {\n dispatch({ type: REQ_GET_VEHICLES_OPTIONS });\n const response = await http.json>(\n `/api/i3/vehicles-options/${encodedQuery ? `?filter=${encodedQuery}` : ''}`,\n buildAuthorizedGetRequest(auth.token),\n );\n\n http.validateResponse(response);\n dispatch({\n type: RCV_GET_VEHICLES_OPTIONS,\n response: response.response,\n });\n } catch (e) {\n dispatch({ type: REQ_FAILED, action: REQ_GET_VEHICLES_OPTIONS });\n }\n\n requestCache.isPending(REQ_GET_VEHICLES_OPTIONS, false);\n };\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport { REQ_WXR_STATISTICS, RCV_WXR_STATISTICS, REQ_WXR_STATISTICS_FAILED } from '../actions/wxr';\nimport { Actions } from '../actions';\nimport { AdsActionStatsDto } from '../@types/WXR';\n\ninterface WxrState {\n requestStatus: number;\n responseStatus: number;\n statistics: AdsActionStatsDto[] | null;\n}\n\nexport const initialState: WxrState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n statistics: null,\n};\n\nconst wxrReducer = (state = initialState, action: Actions): WxrState => {\n switch (action.type) {\n case REQ_WXR_STATISTICS:\n return {\n ...state,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_WXR_STATISTICS:\n return {\n ...state,\n statistics: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_WXR_STATISTICS_FAILED:\n return {\n ...state,\n statistics: null,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default wxrReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_PDF_TEMPLATE,\n RCV_GET_PDF_TEMPLATE,\n REQ_GET_PDF_GENERATED,\n RCV_GET_PDF_GENERATED,\n REQ_FAILED,\n} from '../actions/pdf-template';\nimport { Actions } from '../actions';\nimport { CustomPdfTemplate } from '../@types/PdfTemplate';\nimport { format } from 'date-fns';\n\ninterface PdfTemplateState {\n requestStatus: number;\n responseStatus: number;\n templates: CustomPdfTemplate[] | null;\n}\n\nexport const initialState: PdfTemplateState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n templates: null,\n};\n\nconst pdfTemplate = (state = initialState, action: Actions): PdfTemplateState => {\n switch (action.type) {\n case REQ_GET_PDF_TEMPLATE:\n return {\n ...state,\n templates: null,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.OK,\n };\n case RCV_GET_PDF_TEMPLATE:\n return {\n ...state,\n templates: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_GET_PDF_GENERATED:\n return { ...state, requestStatus: requestStatus.CREATING, responseStatus: responseStatus.OK };\n case RCV_GET_PDF_GENERATED:\n const saveAs = !window ? null : require('file-saver').saveAs;\n if (saveAs) {\n saveAs(action.blob, `${action.regnr}_${format(new Date(), 'yyyy-MM-dd_HH-mm')}.pdf`);\n }\n return { ...state, requestStatus: requestStatus.WAITING, responseStatus: responseStatus.OK };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default pdfTemplate;\n", "import { Dispatch } from 'redux';\nimport { BaseAction } from '../@types/Action';\n\nimport { buildAuthorizedGetRequest } from '../http/request-templates';\nimport { requestCache } from '../utils';\n\nimport * as http from '../http';\nimport { RootState } from '../reducers';\nimport { CustomPdfTemplate } from '../@types/PdfTemplate';\n\nexport const REQ_GET_PDF_TEMPLATE = 'REQ/GET_PDF_TEMPLATE';\nexport const RCV_GET_PDF_TEMPLATE = 'RCV/GET_PDF_TEMPLATE';\ntype REQ_GET_PDF_TEMPLATE_TYPE = BaseAction;\ntype RCV_GET_PDF_TEMPLATE_TYPE = BaseAction & {\n response: CustomPdfTemplate[];\n};\n\nexport const REQ_GET_PDF_GENERATED = 'REQ/GET_PDF_GENERATED';\nexport const RCV_GET_PDF_GENERATED = 'RCV/GET_PDF_GENERATED';\ntype REQ_GET_PDF_GENERATED_TYPE = BaseAction;\ntype RCV_GET_PDF_GENERATED_TYPE = BaseAction & {\n blob: Blob;\n id: string;\n regnr: string;\n};\n\nexport const REQ_FAILED = 'REQ/PDF_FAILED';\ntype REQ_PDF_TEMPLATE_FAILED_TYPE = BaseAction;\n\nexport type PDF_TEMPLATE_ACTION =\n | REQ_GET_PDF_TEMPLATE_TYPE\n | RCV_GET_PDF_TEMPLATE_TYPE\n | REQ_GET_PDF_GENERATED_TYPE\n | RCV_GET_PDF_GENERATED_TYPE\n | REQ_PDF_TEMPLATE_FAILED_TYPE;\n\nexport const getPDFTemplate = () => async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n\n if (!auth.token || requestCache.isPending(REQ_GET_PDF_TEMPLATE)) {\n return;\n }\n requestCache.isPending(REQ_GET_PDF_TEMPLATE, true);\n\n try {\n dispatch({ type: REQ_GET_PDF_TEMPLATE });\n\n const response = await http.json(\n `/api/pdf/template/${organisationBranch.selectedBranch}`,\n buildAuthorizedGetRequest(auth.token),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_GET_PDF_TEMPLATE,\n response: response.response,\n branch: organisationBranch.selectedBranch,\n });\n } catch (e) {\n dispatch({ type: REQ_FAILED, action: REQ_GET_PDF_TEMPLATE });\n }\n requestCache.isPending(REQ_GET_PDF_TEMPLATE, false);\n};\n\nexport const generatePDF =\n (id: string, templateId: string, regnr: string, content: string) =>\n async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n\n if (!auth.token || requestCache.isPending(REQ_GET_PDF_GENERATED)) {\n return;\n }\n requestCache.isPending(REQ_GET_PDF_GENERATED, true);\n\n try {\n dispatch({ type: REQ_GET_PDF_GENERATED });\n\n const response = await http.raw(\n `/api/pdf/template/${organisationBranch.selectedBranch}/${id}?id=${templateId}&content=${content}`,\n buildAuthorizedGetRequest(auth.token),\n );\n\n if (response.status !== 200 || !window) {\n throw new Error(`Error: ${response.status}`);\n }\n const blob = await response.blob();\n\n dispatch({\n type: RCV_GET_PDF_GENERATED,\n blob,\n id,\n regnr,\n });\n } catch (e) {\n dispatch({ type: REQ_FAILED, action: REQ_GET_PDF_GENERATED });\n }\n requestCache.isPending(REQ_GET_PDF_GENERATED, false);\n };\n", "import { requestStatus, responseStatus } from '../shared/statuses';\nimport { Clone } from '../helpers';\nimport { Document } from '../@types/Document';\n\nimport {\n REQ_GET_DOCUMENTS,\n RCV_GET_DOCUMENTS,\n REQ_POST_DOCUMENT,\n RCV_POST_DOCUMENT,\n REQ_UPDATE_DOCUMENT,\n RCV_UPDATE_DOCUMENT,\n REQ_UPDATE_DOCUMENT_SORT_ORDER,\n RCV_UPDATE_DOCUMENT_SORT_ORDER,\n REQ_DELETE_DOCUMENT,\n RCV_DELETE_DOCUMENT,\n SET_CLEAR_DOCUMENTS,\n REQ_FAILED,\n} from '../actions/document';\nimport { Actions } from '../actions';\n\ninterface DocumentState {\n requestStatus: number;\n responseStatus: number;\n documents: Document[] | null;\n}\n\nexport const initialState: DocumentState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n documents: null,\n};\n\nlet documents: Document[] | null = null;\nlet index = -1;\nconst document = (state = initialState, action: Actions): DocumentState => {\n switch (action.type) {\n case REQ_GET_DOCUMENTS:\n return {\n ...state,\n documents: null,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_GET_DOCUMENTS:\n documents =\n action.response && action.response && action.response.length ? action.response : [];\n return {\n ...state,\n documents,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_POST_DOCUMENT:\n return {\n ...state,\n requestStatus: requestStatus.CREATING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_POST_DOCUMENT:\n documents = Clone(state.documents);\n if (action.response && action.response) {\n if (!documents) {\n documents = [action.response];\n } else {\n documents.push(action.response);\n }\n }\n return {\n ...state,\n documents,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_UPDATE_DOCUMENT:\n return {\n ...state,\n requestStatus: requestStatus.UPDATING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_UPDATE_DOCUMENT:\n documents = Clone(state.documents) as Document[];\n index = documents.findIndex((x) => x.id === action.response.id);\n documents[index] = action.response;\n return {\n ...state,\n documents,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_UPDATE_DOCUMENT_SORT_ORDER:\n return {\n ...state,\n requestStatus: requestStatus.UPDATING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_UPDATE_DOCUMENT_SORT_ORDER:\n return {\n ...state,\n documents: Clone(action.documents),\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_DELETE_DOCUMENT:\n return {\n ...state,\n requestStatus: requestStatus.REMOVING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_DELETE_DOCUMENT:\n documents = Clone(state.documents) as Document[];\n if (action.docId && documents && documents.length) {\n index = documents.findIndex((x) => x.id === action.docId);\n if (index !== -1) {\n documents.splice(index, 1);\n }\n }\n return {\n ...state,\n documents,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case SET_CLEAR_DOCUMENTS:\n return { ...state, documents: null };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default document;\n", "import { Dispatch } from 'redux';\n\nimport { requestCache } from '../utils';\nimport * as http from '../http';\nimport { RootState } from '../reducers';\nimport { BaseAction } from '../@types/Action';\nimport {\n buildAuthorizedDeleteRequest,\n buildAuthorizedFormPostRequest,\n buildAuthorizedGetRequest,\n buildAuthorizedPutRequest,\n} from '../http/request-templates';\nimport { Document } from '../@types/Document';\nimport * as settings from '../helpers/settings';\n\nexport const REQ_GET_DOCUMENTS = 'REQ/GET_DOCUMENTS';\nexport const RCV_GET_DOCUMENTS = 'RCV/GET_DOCUMENTS';\ntype REQ_GET_DOCUMENTS_TYPE = BaseAction;\ntype RCV_MODEL_SERIES_LIST_TYPE = BaseAction & {\n response: Document[];\n};\n\nexport const REQ_POST_DOCUMENT = 'REQ/POST_DOCUMENT';\nexport const RCV_POST_DOCUMENT = 'RCV/POST_DOCUMENT';\ntype REQ_POST_DOCUMENT_TYPE = BaseAction;\ntype RCV_POST_DOCUMENT_TYPE = BaseAction & {\n response: Document;\n};\n\nexport const REQ_UPDATE_DOCUMENT = 'REQ/UPDATE_DOCUMENT';\nexport const RCV_UPDATE_DOCUMENT = 'RCV/UPDATE_DOCUMENT';\ntype REQ_UPDATE_DOCUMENT_TYPE = BaseAction;\ntype RCV_UPDATE_DOCUMENT_TYPE = BaseAction & {\n response: Document;\n};\n\nexport const REQ_UPDATE_DOCUMENT_SORT_ORDER = 'REQ/UPDATE_DOCUMENT_SORT_ORDER';\nexport const RCV_UPDATE_DOCUMENT_SORT_ORDER = 'RCV/UPDATE_DOCUMENT_SORT_ORDER';\ntype REQ_UPDATE_DOCUMENT_SORT_ORDER_TYPE = BaseAction;\ntype RCV_UPDATE_DOCUMENT_SORT_ORDER_TYPE = BaseAction & {\n response: Document[];\n documents: Document[];\n};\n\nexport const REQ_DELETE_DOCUMENT = 'REQ/DELETE_DOCUMENT';\nexport const RCV_DELETE_DOCUMENT = 'RCV/DELETE_DOCUMENT';\ntype REQ_DELETE_DOCUMENT_TYPE = BaseAction;\ntype RCV_DELETE_DOCUMENT_TYPE = BaseAction & {\n response: Document;\n docId: string;\n};\n\nexport const SET_CLEAR_DOCUMENTS = 'SET/CLEAR_DOCUMENTS';\ntype SET_CLEAR_DOCUMENTS_TYPE = BaseAction;\n\nexport const REQ_FAILED = 'REQ/DOCUMENT_FAILED';\ntype REQ_DOCUMENT_FAILED_TYPE = BaseAction;\n\nexport type DOCUMENT_ACTION =\n | REQ_GET_DOCUMENTS_TYPE\n | RCV_MODEL_SERIES_LIST_TYPE\n | REQ_POST_DOCUMENT_TYPE\n | RCV_POST_DOCUMENT_TYPE\n | REQ_UPDATE_DOCUMENT_TYPE\n | RCV_UPDATE_DOCUMENT_TYPE\n | REQ_UPDATE_DOCUMENT_SORT_ORDER_TYPE\n | RCV_UPDATE_DOCUMENT_SORT_ORDER_TYPE\n | REQ_DELETE_DOCUMENT_TYPE\n | RCV_DELETE_DOCUMENT_TYPE\n | SET_CLEAR_DOCUMENTS_TYPE\n | REQ_DOCUMENT_FAILED_TYPE;\n\nexport const getDocuments =\n (waykeId: string) => async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n if (\n !auth.token ||\n !organisationBranch.selectedBranch ||\n requestCache.isPending(REQ_GET_DOCUMENTS)\n ) {\n return;\n }\n\n requestCache.isPending(REQ_GET_DOCUMENTS, true);\n\n try {\n dispatch({ type: REQ_GET_DOCUMENTS });\n const response = await http.json(\n `${settings.get('documentServiceUri')}/document/${\n organisationBranch.selectedBranch\n }/${waykeId}`,\n buildAuthorizedGetRequest(auth.token),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_GET_DOCUMENTS,\n response: response.response,\n });\n } catch (e) {\n dispatch({ type: REQ_FAILED, action: REQ_GET_DOCUMENTS });\n }\n requestCache.isPending(REQ_GET_DOCUMENTS, false);\n };\n\nexport const postDocument =\n (document: File, waykeId: string) => async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n if (\n !auth.token ||\n !organisationBranch.selectedBranch ||\n requestCache.isPending(REQ_POST_DOCUMENT)\n )\n return;\n\n const formData = new FormData();\n formData.append('File', document);\n\n requestCache.isPending(REQ_POST_DOCUMENT, true);\n try {\n dispatch({ type: REQ_POST_DOCUMENT });\n const response = await http.json(\n `${settings.get('documentServiceUri')}/document/${\n organisationBranch.selectedBranch\n }/${waykeId}`,\n buildAuthorizedFormPostRequest(auth.token, formData),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_POST_DOCUMENT,\n response: response.response,\n });\n } catch (e) {\n dispatch({ type: REQ_FAILED, action: REQ_POST_DOCUMENT });\n }\n requestCache.isPending(REQ_POST_DOCUMENT, false);\n };\n\nexport const updateDocument =\n (document: Document, waykeId: string) =>\n async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n if (\n !auth.token ||\n !organisationBranch.selectedBranch ||\n requestCache.isPending(REQ_UPDATE_DOCUMENT)\n )\n return;\n\n const body = {\n name: document.name,\n category: document.category,\n };\n\n requestCache.isPending(REQ_UPDATE_DOCUMENT, true);\n\n try {\n dispatch({ type: REQ_UPDATE_DOCUMENT });\n const response = await http.json(\n `${settings.get('documentServiceUri')}/document/${\n organisationBranch.selectedBranch\n }/${waykeId}/${document.id}`,\n buildAuthorizedPutRequest(auth.token, body),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_UPDATE_DOCUMENT,\n response: response.response,\n });\n } catch (e) {\n dispatch({ type: REQ_FAILED, action: REQ_UPDATE_DOCUMENT });\n }\n requestCache.isPending(REQ_UPDATE_DOCUMENT, false);\n };\n\nexport const updateDocumentSortOrder =\n (documents: Document[], waykeId: string) =>\n async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n if (\n !auth.token ||\n !organisationBranch.selectedBranch ||\n requestCache.isPending(REQ_UPDATE_DOCUMENT_SORT_ORDER)\n )\n return;\n\n const body = documents.map((x, i) => ({\n id: x.id,\n sortOrder: i + 1,\n }));\n\n requestCache.isPending(REQ_UPDATE_DOCUMENT_SORT_ORDER, true);\n\n try {\n dispatch({ type: REQ_UPDATE_DOCUMENT_SORT_ORDER });\n const response = await http.json(\n `${settings.get('documentServiceUri')}/document/${\n organisationBranch.selectedBranch\n }/${waykeId}/order`,\n buildAuthorizedPutRequest(auth.token, body),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_UPDATE_DOCUMENT_SORT_ORDER,\n response: response.response,\n documents,\n });\n } catch (e) {\n dispatch({ type: REQ_FAILED, action: REQ_UPDATE_DOCUMENT_SORT_ORDER });\n }\n requestCache.isPending(REQ_UPDATE_DOCUMENT_SORT_ORDER, false);\n };\n\nexport const deleteDocument =\n (docId: string, waykeId: string) => async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n if (\n !auth.token ||\n !organisationBranch.selectedBranch ||\n requestCache.isPending(REQ_DELETE_DOCUMENT)\n ) {\n return;\n }\n\n requestCache.isPending(REQ_DELETE_DOCUMENT, true);\n\n try {\n dispatch({ type: REQ_DELETE_DOCUMENT });\n const response = await http.json(\n `${settings.get('documentServiceUri')}/document/${\n organisationBranch.selectedBranch\n }/${waykeId}/${docId}`,\n buildAuthorizedDeleteRequest(auth.token),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_DELETE_DOCUMENT,\n response: response.response,\n docId,\n });\n } catch (e) {\n dispatch({ type: REQ_FAILED, action: REQ_DELETE_DOCUMENT });\n }\n requestCache.isPending(REQ_DELETE_DOCUMENT, false);\n };\n\nexport const clearDocuments = () => (dispatch: Dispatch) => dispatch({ type: SET_CLEAR_DOCUMENTS });\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_DECLARATION_TEMPLATE,\n RCV_GET_DECLARATION_TEMPLATE,\n REQ_GET_DECLARATION,\n RCV_GET_DECLARATION,\n REQ_FAILED,\n} from '../actions/declaration';\nimport { Actions } from '../actions';\nimport { format } from 'date-fns';\n\ninterface DeclarationState {\n requestStatus: number;\n responseStatus: number;\n declarationTemplate: string | null;\n}\n\nexport const initialState: DeclarationState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n declarationTemplate: null,\n};\n\nconst declarationReducer = (state = initialState, action: Actions): DeclarationState => {\n switch (action.type) {\n case REQ_GET_DECLARATION_TEMPLATE:\n return {\n ...state,\n declarationTemplate: null,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_GET_DECLARATION_TEMPLATE:\n return {\n ...state,\n declarationTemplate: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_GET_DECLARATION:\n return { ...state, requestStatus: requestStatus.CREATING, responseStatus: responseStatus.OK };\n case RCV_GET_DECLARATION:\n const saveAs = !window ? null : require('file-saver').saveAs;\n if (saveAs) {\n saveAs(\n action.blob,\n `Varudeklaration_${action.regnr}_${format(new Date(), 'yyyy-MM-dd_HH-mm')}.pdf`,\n );\n }\n return { ...state, requestStatus: requestStatus.WAITING, responseStatus: responseStatus.OK };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default declarationReducer;\n", "import { Dispatch } from 'redux';\nimport { BaseAction } from '../@types/Action';\n\nimport { buildAuthorizedGetRequest } from '../http/request-templates';\nimport { requestCache } from '../utils';\n\nimport * as http from '../http';\nimport { RootState } from '../reducers';\n\nexport const REQ_GET_DECLARATION_TEMPLATE = 'REQ/GET_DECLARATION_TEMPLATE';\nexport const RCV_GET_DECLARATION_TEMPLATE = 'RCV/GET_DECLARATION_TEMPLATE';\ntype REQ_GET_DECLARATION_TEMPLATE_TYPE = BaseAction;\ntype RCV_GET_DECLARATION_TEMPLATE_TYPE = BaseAction & {\n response: string;\n};\n\nexport const REQ_GET_DECLARATION = 'REQ/GET_DECLARATION';\nexport const RCV_GET_DECLARATION = 'RCV/GET_DECLARATION';\ntype REQ_GET_DECLARATION_TYPE = BaseAction;\ntype RCV_GET_DECLARATION_TYPE = BaseAction & {\n blob: Blob;\n id: string;\n regnr: string;\n};\n\nexport const REQ_FAILED = 'DECLARATION/REQ_FAILED';\ntype REQ_DECLARATION_FAILED_TYPE = BaseAction;\n\nexport type DECLARATION_ACTION =\n | REQ_GET_DECLARATION_TEMPLATE_TYPE\n | RCV_GET_DECLARATION_TEMPLATE_TYPE\n | REQ_GET_DECLARATION_TYPE\n | RCV_GET_DECLARATION_TYPE\n | REQ_DECLARATION_FAILED_TYPE;\n\nexport const generateDeclaration =\n (id: string, templateId: string, regnr: string) =>\n async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n\n if (!auth.token || requestCache.isPending(REQ_GET_DECLARATION)) {\n return;\n }\n requestCache.isPending(REQ_GET_DECLARATION, true);\n\n try {\n dispatch({ type: REQ_GET_DECLARATION });\n\n const response = await http.raw(\n `/api/pdf/declaration/${organisationBranch.selectedBranch}/${id}?id=${templateId}`,\n buildAuthorizedGetRequest(auth.token),\n );\n\n if (response.status !== 200 || !window) {\n throw new Error(`Error: ${response.status}`);\n }\n const blob = await response.blob();\n\n dispatch({\n type: RCV_GET_DECLARATION,\n blob,\n id,\n regnr,\n });\n } catch (e) {\n dispatch({ type: REQ_FAILED, action: REQ_GET_DECLARATION });\n }\n requestCache.isPending(REQ_GET_DECLARATION, false);\n };\n\nexport const getDeclarationTemplate =\n () => async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n\n if (!auth.token || requestCache.isPending(REQ_GET_DECLARATION_TEMPLATE)) {\n return;\n }\n requestCache.isPending(REQ_GET_DECLARATION_TEMPLATE, true);\n\n try {\n dispatch({ type: REQ_GET_DECLARATION_TEMPLATE });\n\n const response = await http.json(\n `/api/pdf/declaration/${organisationBranch.selectedBranch}`,\n buildAuthorizedGetRequest(auth.token),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_GET_DECLARATION_TEMPLATE,\n response: response.response,\n });\n } catch (e) {\n dispatch({ type: REQ_FAILED, action: REQ_GET_DECLARATION_TEMPLATE });\n }\n requestCache.isPending(REQ_GET_DECLARATION_TEMPLATE, false);\n };\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_ADVERTISEMENT_MEDIA,\n RCV_GET_ADVERTISEMENT_MEDIA,\n SET_CLEAR_ADVERTISEMENT_MEDIA,\n REQ_FAILED,\n} from '../actions/advertisement-media';\n\nimport { Actions } from '../actions';\nimport { AdvertisementMedia } from '../@types/AdvertisementMedia';\n\ninterface AdvertisementMediaState {\n requestStatus: number;\n responseStatus: number;\n media: AdvertisementMedia[];\n mediaAdId: string | null;\n}\n\nexport const initialState: AdvertisementMediaState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n media: [],\n mediaAdId: null,\n};\n\nconst advertisementMediaReducer = (\n state = { ...initialState },\n action: Actions,\n): AdvertisementMediaState => {\n switch (action.type) {\n // Get\n case REQ_GET_ADVERTISEMENT_MEDIA:\n return {\n ...state,\n media: [],\n mediaAdId: null,\n requestStatus: requestStatus.FETCHING_LIST,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_GET_ADVERTISEMENT_MEDIA:\n return {\n ...state,\n media: action.response,\n mediaAdId: action.adId,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n\n case SET_CLEAR_ADVERTISEMENT_MEDIA:\n return { ...initialState };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default advertisementMediaReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_ADVERTISEMENTS_THUMBNAILS,\n RCV_GET_ADVERTISEMENTS_THUMBNAILS,\n} from '../actions/advertisement-media';\nimport { Actions } from '../actions';\n\nexport type ThubmnailsObjectType = { [key: string]: string | undefined };\n\ninterface AdvertisementsMediaState {\n requestStatus: number;\n responseStatus: number;\n thumbnails: ThubmnailsObjectType | null;\n}\n\nexport const initialState: AdvertisementsMediaState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n thumbnails: null,\n};\n\nlet thumbnails: ThubmnailsObjectType;\n\nconst advertisementsMediaReducer = (\n state = { ...initialState },\n action: Actions,\n): AdvertisementsMediaState => {\n switch (action.type) {\n case REQ_GET_ADVERTISEMENTS_THUMBNAILS:\n return {\n ...state,\n requestStatus: requestStatus.FETCHING_LIST,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_GET_ADVERTISEMENTS_THUMBNAILS:\n thumbnails = { ...(state.thumbnails || {}) };\n if (thumbnails) {\n const resultExist = action.response && action.response.length;\n action.waykeIds.map((x) => {\n const item = resultExist\n ? action.response.find((y) => y.waykeId === x && y.mediaType === 'Image')\n : null;\n if (item && item.url) {\n thumbnails[x] = item.url;\n } else {\n thumbnails[x] = '/images/placeholders/placeholder_product_card.jpg';\n }\n });\n }\n return {\n ...state,\n thumbnails,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n default:\n return state;\n }\n};\n\nexport default advertisementsMediaReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\nimport { Clone } from '../helpers';\nimport { format, getHours, subHours } from 'date-fns';\nimport {\n REQ_GET_ADVERTISEMENT_METADATA_BATCH,\n RCV_GET_ADVERTISEMENT_METADATA_BATCH,\n REQ_FAILED,\n} from '../actions/advertisement-metadata';\n\nimport { RCV_AD_BOOST_MULTIPLE } from '../actions/ad-boost';\nimport { Actions } from '../actions';\nimport { PublishedVehicle } from '../@types/AdvertisementMetadata';\n\ninterface AdvertisementMetadataState {\n requestStatus: number;\n responseStatus: number;\n metadata: { [key: string]: PublishedVehicle | undefined } | null;\n branchId: string | null;\n}\n\nconst initialState: AdvertisementMetadataState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n metadata: null,\n branchId: null,\n};\n\nlet metadata: { [key: string]: PublishedVehicle | undefined } | undefined;\nexport const advertisementMetadata = (\n state = Clone(initialState) as AdvertisementMetadataState,\n action: Actions,\n): AdvertisementMetadataState => {\n switch (action.type) {\n case REQ_GET_ADVERTISEMENT_METADATA_BATCH:\n return {\n ...state,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_GET_ADVERTISEMENT_METADATA_BATCH:\n if (\n state.metadata &&\n Object.keys(state.metadata).length &&\n state.branchId === action.branchId\n ) {\n metadata = { ...state.metadata };\n } else {\n metadata = {};\n }\n if (action.response && action.response.length) {\n action.response.forEach((x) => {\n if (!metadata) {\n metadata = {};\n }\n metadata[x.id] = x;\n });\n }\n return {\n ...state,\n metadata,\n branchId: action.branchId,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case RCV_AD_BOOST_MULTIPLE:\n metadata = { ...state.metadata };\n\n action.model.forEach((item) => {\n if (!metadata) {\n metadata = {};\n }\n\n const metadataItem = metadata?.[item.id];\n\n const date = subHours(new Date(), getHours(new Date()) - new Date().getUTCHours());\n const utcDate = `${format(date, 'yyyy-MM-dd')}T${format(date, 'HH:mm:ss')}Z`;\n if (metadataItem) {\n metadata[item.id] = {\n ...metadataItem,\n itemSort: utcDate,\n };\n }\n });\n\n return { ...state, metadata };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default advertisementMetadata;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_LEASING_PROMOS,\n RCV_GET_LEASING_PROMOS,\n REQ_UPDATE_LEASING_PROMOS,\n RCV_UPDATE_LEASING_PROMOS,\n SET_SELECT_LEASING_PROMO,\n SET_LEASING_PROMOS_SORTED,\n CLEAR_LEASING_PROMOS_SORTED,\n REQ_FAILED,\n} from '../actions/leasing-promos';\nimport { Actions } from '../actions';\nimport { LeasingPromo } from '../@types/LeasingPromo';\n\ninterface LeasingPromosState {\n requestStatus: number;\n responseStatus: number;\n leasingPromos: LeasingPromo[];\n leasingPromosSorted: LeasingPromo[] | null;\n selected: LeasingPromo | null;\n branchId: string | null;\n}\n\nexport const initialState: LeasingPromosState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n leasingPromos: [],\n leasingPromosSorted: [],\n selected: null,\n branchId: null,\n};\n\nconst newLeasingPromo: LeasingPromo = {\n appliesTo: {\n id: '00000000-0000-0000-0000-000000000000',\n manufacturers: null,\n models: null,\n minMileage: null,\n maxMileage: null,\n minLeasingMonthlyPayment: null,\n maxLeasingMonthlyPayment: null,\n },\n mileagePerYear: '',\n periodMonths: '',\n image: null,\n title: '',\n description: null,\n linkUrl: '',\n linkName: '',\n insuranceIncluded: false,\n serviceIncluded: false,\n winterTiresIncluded: false,\n isBusinessLeasing: false,\n};\n\nlet selected;\nconst leasingPromosReducer = (state = initialState, action: Actions): LeasingPromosState => {\n switch (action.type) {\n case REQ_GET_LEASING_PROMOS:\n return {\n ...state,\n leasingPromos: [],\n selected: null,\n leasingPromosSorted: null,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.OK,\n };\n case RCV_GET_LEASING_PROMOS:\n return {\n ...state,\n leasingPromos: action.response,\n branchId: action.branchId,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_UPDATE_LEASING_PROMOS:\n return { ...state, requestStatus: requestStatus.UPDATING, responseStatus: responseStatus.OK };\n case RCV_UPDATE_LEASING_PROMOS:\n return {\n ...state,\n leasingPromos: action.response,\n leasingPromosSorted: null,\n selected: null,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case SET_SELECT_LEASING_PROMO:\n if (action.id === '00000000-0000-0000-0000-000000000000') {\n selected = { ...newLeasingPromo };\n } else {\n selected = state.leasingPromos.find((x) => x.appliesTo.id === action.id) || null;\n }\n return {\n ...state,\n selected,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case SET_LEASING_PROMOS_SORTED:\n return { ...state, leasingPromosSorted: action.leasingPromos };\n case CLEAR_LEASING_PROMOS_SORTED:\n return { ...state, leasingPromosSorted: null };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default leasingPromosReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport { REQ_MODEL_SERIES_LIST, RCV_MODEL_SERIES_LIST, REQ_FAILED } from '../actions/model-series';\nimport { Actions } from '../actions';\nimport { ModelSeries } from '../@types/ModelSeries';\n\ninterface ModelSertiesState {\n requestStatus: number;\n responseStatus: number;\n modelSeries: ModelSeries[] | null;\n}\n\nexport const initialState: ModelSertiesState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n modelSeries: null,\n};\n\nconst modelSeriesReducer = (state = initialState, action: Actions): ModelSertiesState => {\n switch (action.type) {\n case REQ_MODEL_SERIES_LIST:\n return {\n ...state,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_MODEL_SERIES_LIST:\n return {\n ...state,\n modelSeries: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default modelSeriesReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_MEDIA_UPLOAD,\n RCV_MEDIA_UPLOAD,\n REQ_CLEAR_NAMESPACE,\n REQ_FAILED,\n} from '../actions/media-upload';\nimport { MediaObject } from '../@types/MediaUpload';\nimport { Actions } from '../actions';\n\ninterface MediaUploadState {\n requestStatus: number;\n responseStatus: number;\n media: { [key: string]: MediaObject | undefined } | null;\n}\n\nexport const initialState: MediaUploadState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n media: null,\n};\n\nlet media: { [key: string]: MediaObject | undefined } | null;\n\nconst mediaUploadReducer = (state = initialState, action: Actions): MediaUploadState => {\n switch (action.type) {\n case REQ_MEDIA_UPLOAD:\n media = { ...state.media };\n media[action.namespace] = action.mediaObject;\n return {\n ...state,\n media,\n requestStatus: requestStatus.CREATING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_MEDIA_UPLOAD:\n media = { ...state.media };\n media[action.namespace] = action.mediaObject;\n return {\n ...state,\n media,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_CLEAR_NAMESPACE:\n media = { ...state.media };\n if (media && Object.keys(media).length > 1) {\n delete media[action.namespace];\n } else {\n media = null;\n }\n return { ...state, media };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default mediaUploadReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_FINANCIAL_OPTIONS,\n RCV_GET_FINANCIAL_OPTIONS,\n REQ_UPDATE_FINANCIAL_OPTIONS,\n RCV_UPDATE_FINANCIAL_OPTIONS,\n SET_SELECT_FINANCIAL_OPTIONS,\n SET_FINANCIAL_OPTIONS_SORTED,\n CLEAR_FINANCIAL_OPTIONS_SORTED,\n REQ_FAILED,\n DEFAULT_ITEM_SPECIFICATION,\n} from '../actions/financial-options';\nimport { FinancialOption } from '../@types/FinancialOptions';\nimport { Actions } from '../actions';\n\ninterface FinancialOptionsState {\n requestStatus: number;\n responseStatus: number;\n financialOptions: FinancialOption[];\n financialOptionsSorted: FinancialOption[] | null;\n selected: FinancialOption | null;\n branchId: string | null;\n}\n\nexport const initialState: FinancialOptionsState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n financialOptions: [],\n financialOptionsSorted: [],\n selected: null,\n branchId: null,\n};\n\nconst newFinancialOption: FinancialOption = {\n id: '00000000-0000-0000-0000-000000000000',\n interest: 0,\n effectiveInterestRate: 0,\n residualValueMaxPercentage: 0,\n setupFee: 0,\n administrationFee: 0,\n financialInstitution: '',\n financialInstitutionImageUrl: '',\n financialInstitutionCtaUrl: '',\n financialInstitutionCtaName: '',\n externalId: '',\n itemSpecification: { ...DEFAULT_ITEM_SPECIFICATION },\n};\n\nlet selected;\n\nconst financialOptionsReducer = (state = initialState, action: Actions): FinancialOptionsState => {\n switch (action.type) {\n case REQ_GET_FINANCIAL_OPTIONS:\n return {\n ...state,\n financialOptions: [],\n selected: null,\n financialOptionsSorted: null,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.OK,\n };\n case RCV_GET_FINANCIAL_OPTIONS:\n return {\n ...state,\n financialOptions: action.response,\n branchId: action.branchId,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_UPDATE_FINANCIAL_OPTIONS:\n return { ...state, requestStatus: requestStatus.UPDATING, responseStatus: responseStatus.OK };\n case RCV_UPDATE_FINANCIAL_OPTIONS:\n return {\n ...state,\n financialOptions: action.response,\n financialOptionsSorted: null,\n selected: null,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case SET_SELECT_FINANCIAL_OPTIONS:\n if (action.id === newFinancialOption.id) {\n selected = {\n ...newFinancialOption,\n itemSpecification: {\n ...newFinancialOption.itemSpecification,\n },\n };\n } else {\n selected = state.financialOptions.find((x) => x.id === action.id) || null;\n }\n return {\n ...state,\n selected,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case SET_FINANCIAL_OPTIONS_SORTED:\n return { ...state, financialOptionsSorted: action.financialOptions };\n case CLEAR_FINANCIAL_OPTIONS_SORTED:\n return { ...state, financialOptionsSorted: null };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default financialOptionsReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_INSURANCES,\n RCV_GET_INSURANCES,\n REQ_UPDATE_INSURANCES,\n RCV_UPDATE_INSURANCES,\n SET_SELECT_INSURANCE,\n SET_INSURANCES_SORTED,\n CLEAR_INSURANCES_SORTED,\n REQ_FAILED,\n} from '../actions/insurances';\nimport { Actions } from '../actions';\nimport { Insurance } from '../@types/Insurance';\n\ninterface InsuranceState {\n requestStatus: number;\n responseStatus: number;\n insurances: Insurance[];\n insurancesSorted: Insurance[] | null;\n selected: Insurance | null;\n branchId: string | null;\n}\n\nexport const initialState: InsuranceState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n insurances: [],\n insurancesSorted: [],\n selected: null,\n branchId: null,\n};\n\nconst newInsurance: Insurance = {\n id: '00000000-0000-0000-0000-000000000000',\n ctaName: null,\n ctaType: null,\n ctaUrl: null,\n dealerType: '',\n externalId: '',\n institute: '',\n identifier: '',\n organizationNumber: '',\n salesDescription: '',\n itemSpecification: {\n manufacturers: [],\n minMileage: null,\n maxMileage: null,\n minPrice: null,\n maxPrice: null,\n minLeasingMonthlyPayment: null,\n maxLeasingMonthlyPayment: null,\n minModelYear: null,\n maxModelYear: null,\n requireManufacturerPackaging: false,\n },\n};\n\nlet selected: Insurance | null;\nlet insurances: Insurance[];\nconst insurancesReducer = (state = initialState, action: Actions): InsuranceState => {\n switch (action.type) {\n case REQ_GET_INSURANCES:\n return {\n ...state,\n insurances: [],\n selected: null,\n insurancesSorted: null,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.OK,\n };\n case RCV_GET_INSURANCES:\n if (action.response && action.response.length) {\n insurances = action.response.map((x) => {\n if (!x.itemSpecification) {\n x.itemSpecification = { ...newInsurance.itemSpecification };\n }\n return x;\n });\n } else {\n insurances = [];\n }\n\n return {\n ...state,\n insurances,\n branchId: action.branchId,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_UPDATE_INSURANCES:\n return { ...state, requestStatus: requestStatus.UPDATING, responseStatus: responseStatus.OK };\n case RCV_UPDATE_INSURANCES:\n return {\n ...state,\n insurances: action.response,\n insurancesSorted: null,\n selected: null,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case SET_SELECT_INSURANCE:\n if (action.id === newInsurance.id) {\n selected = { ...newInsurance };\n } else {\n selected = state.insurances.find((x) => x.id === action.id) || null;\n }\n return {\n ...state,\n selected,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case SET_INSURANCES_SORTED:\n return { ...state, insurancesSorted: action.insurances };\n case CLEAR_INSURANCES_SORTED:\n return { ...state, insurancesSorted: null };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default insurancesReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_PUBLISHED_VEHICLES,\n RCV_GET_PUBLISHED_VEHICLES,\n REQ_FAILED,\n} from '../actions/vehicle-search';\nimport { Actions } from '../actions';\nimport { ElasticSearchResponse } from '../@types/ElasticSearchResponse';\nimport { VehicleMain } from '../@types/VehicleMain';\n\ninterface VehicleSearchState {\n requestStatus: number;\n responseStatus: number;\n list: ElasticSearchResponse | null;\n}\n\nconst initialState: VehicleSearchState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n list: null,\n};\n\nconst vehicleSearchReducer = (state = initialState, action: Actions): VehicleSearchState => {\n switch (action.type) {\n case REQ_GET_PUBLISHED_VEHICLES:\n return {\n ...state,\n list: null,\n requestStatus: requestStatus.FETCHING_LIST,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_GET_PUBLISHED_VEHICLES:\n return {\n ...state,\n list: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default vehicleSearchReducer;\n", "import { Actions } from '../actions';\nimport { REQ_TOGGLE_NAVIGATION, REQ_CLOSE_NAVIGATION } from '../actions/event';\n\ninterface EventState {\n navigationIsOpen: boolean;\n}\n\nexport const initialState: EventState = {\n navigationIsOpen: true,\n};\n\nconst eventReducer = (state = initialState, action: Actions): EventState => {\n switch (action.type) {\n case REQ_TOGGLE_NAVIGATION:\n return { ...state, navigationIsOpen: !state.navigationIsOpen };\n case REQ_CLOSE_NAVIGATION:\n return { ...state, navigationIsOpen: false };\n default:\n return state;\n }\n};\n\nexport default eventReducer;\n", "import { BaseAction } from '../@types/Action';\nimport { Dispatch } from 'redux';\n\nexport const REQ_TOGGLE_NAVIGATION = 'REQ/TOGGLE_NAVIGATION';\ntype REQ_TOGGLE_NAVIGATION_TYPE = BaseAction;\n\nexport const REQ_CLOSE_NAVIGATION = 'REQ/CLOSE_NAVIGATION';\ntype REQ_CLOSE_NAVIGATION_TYPE = BaseAction;\n\nexport type EVENT_ACTION = REQ_TOGGLE_NAVIGATION_TYPE | REQ_CLOSE_NAVIGATION_TYPE;\n\nexport const toggleNavigation = () => (dispatch: Dispatch) =>\n dispatch({ type: REQ_TOGGLE_NAVIGATION });\n\nexport const closeNavigation = () => (dispatch: Dispatch) =>\n dispatch({ type: REQ_CLOSE_NAVIGATION });\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_SOCIAL_BOOST_SINGLE,\n RCV_SOCIAL_BOOST_SINGLE,\n REQ_SOCIAL_BOOST_SINGLE_SILENT,\n RCV_SOCIAL_BOOST_SINGLE_SILENT,\n REQ_SOCIAL_BOOST_MULTIPLE,\n RCV_SOCIAL_BOOST_MULTIPLE,\n REQ_SOCIAL_BOOST_HISTORY,\n RCV_SOCIAL_BOOST_HISTORY,\n REQ_SOCIAL_BOOST_INSIGHTS,\n RCV_SOCIAL_BOOST_INSIGHTS,\n REQ_SOCIAL_BOOST_STAGE,\n REQ_SOCIAL_BOOST_CLEAR_STAGED,\n REQ_FAILED,\n} from '../actions/social-boost';\n\nimport { RCV_GET_BRANCH } from '../actions/organisation';\nimport { Actions } from '../actions';\nimport { Insight, SocialBoostHistory, SocialBoostItem } from '../@types/SocialBoost';\n\nexport interface PendingInsight {\n pending: boolean;\n}\n\ninterface FailedInsight {\n failed: boolean;\n}\n\nconst EmptyHistoryList: SocialBoostHistory[] = [];\nconst EmptyStagedList: SocialBoostItem[] = [];\n\nexport type InsightsObject = { [key: string]: Insight | undefined | null };\n\ninterface SocialBoostState {\n requestStatus: number;\n responseStatus: number;\n history: SocialBoostHistory[];\n insights: InsightsObject | null;\n pendingInsights: { [key: string]: PendingInsight | undefined };\n failedInsights: { [key: string]: FailedInsight | undefined };\n staged: SocialBoostItem[];\n branchId: string | null;\n}\n\nexport const initialState: SocialBoostState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n history: EmptyHistoryList,\n insights: null,\n pendingInsights: {},\n failedInsights: {},\n staged: EmptyStagedList,\n branchId: null,\n};\n\nconst newInsight = (): Insight => ({\n reach: 0,\n impressions: 0,\n clicks: 0,\n status: 'ACTIVE',\n daysRemaining: 7,\n appPurchases: 0,\n sitePurchases: 0,\n});\n\nlet insights: InsightsObject | null = null;\nlet pendingInsights: {\n [key: string]: PendingInsight | undefined;\n} = {};\nlet failedInsights: {\n [key: string]: FailedInsight | undefined;\n} = {};\nlet staged = null;\nlet index = null;\n\nconst socialBoostReducer = (state = initialState, action: Actions): SocialBoostState => {\n switch (action.type) {\n case REQ_SOCIAL_BOOST_SINGLE:\n return {\n ...state,\n requestStatus: requestStatus.CREATING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_SOCIAL_BOOST_SINGLE:\n insights = { ...state.insights };\n insights[action.model.id] = newInsight();\n\n return {\n ...state,\n insights,\n staged: [],\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n\n case REQ_SOCIAL_BOOST_SINGLE_SILENT:\n return { ...state };\n case RCV_SOCIAL_BOOST_SINGLE_SILENT:\n staged = (state.staged || []).slice();\n insights = { ...state.insights };\n insights[action.model.id] = newInsight();\n\n index = staged.findIndex((s) => s.id === action.model.id);\n if (index > -1) {\n staged.splice(index, 1);\n }\n\n return { ...state, insights, staged };\n case REQ_SOCIAL_BOOST_MULTIPLE:\n return {\n ...state,\n requestStatus: requestStatus.CREATING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_SOCIAL_BOOST_MULTIPLE:\n return {\n ...state,\n insights,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_SOCIAL_BOOST_HISTORY:\n return {\n ...state,\n history: EmptyHistoryList,\n requestStatus: requestStatus.FETCHING_LIST,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_SOCIAL_BOOST_HISTORY:\n return {\n ...state,\n history: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_SOCIAL_BOOST_INSIGHTS:\n const obj: { [key: string]: Insight | null | undefined } = {};\n const objPendingInsights: { [key: string]: PendingInsight | undefined } = {};\n action.model.forEach((key) => {\n obj[key] = null;\n objPendingInsights[key] = {\n pending: true,\n };\n });\n insights = { ...state.insights, ...obj };\n pendingInsights = { ...state.pendingInsights, ...objPendingInsights };\n return {\n ...state,\n insights,\n pendingInsights,\n requestStatus: requestStatus.FETCHING_LIST,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_SOCIAL_BOOST_INSIGHTS:\n insights = action.response;\n pendingInsights = { ...state.pendingInsights };\n action.model.forEach((key) => {\n delete pendingInsights[key];\n delete failedInsights[key];\n });\n return {\n ...state,\n insights: { ...state.insights, ...insights },\n failedInsights,\n pendingInsights,\n branchId: action.branchId,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_SOCIAL_BOOST_STAGE:\n staged = state.staged.slice();\n index = staged.findIndex((x) => x.id === action.item.id);\n if (index === -1) {\n staged.push(action.item);\n } else {\n staged.splice(index, 1);\n }\n return { ...state, staged };\n case REQ_SOCIAL_BOOST_CLEAR_STAGED:\n return { ...state, staged: EmptyStagedList };\n case RCV_GET_BRANCH:\n return { ...initialState };\n case REQ_FAILED:\n pendingInsights = { ...state.pendingInsights };\n failedInsights = { ...state.failedInsights };\n if (action.action === REQ_SOCIAL_BOOST_INSIGHTS) {\n action.model.forEach((key) => {\n delete pendingInsights[key];\n failedInsights[key] = {\n failed: true,\n };\n });\n }\n\n return {\n ...state,\n failedInsights,\n pendingInsights,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default socialBoostReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_SOCIAL_BOOST_SETTINGS,\n RCV_SOCIAL_BOOST_SETTINGS,\n REQ_FAILED,\n} from '../actions/social-boost-settings';\n\nimport { RCV_GET_BRANCH } from '../actions/organisation';\nimport { Actions } from '../actions';\n\ninterface SocialBoostSettingsState {\n requestStatus: number;\n responseStatus: number;\n cost: number | null;\n branchId: string | null;\n}\n\nexport const initialState: SocialBoostSettingsState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n cost: null,\n branchId: null,\n};\n\nconst socialBoostSettingsReducer = (\n state = initialState,\n action: Actions,\n): SocialBoostSettingsState => {\n switch (action.type) {\n case REQ_SOCIAL_BOOST_SETTINGS:\n return {\n ...state,\n cost: null,\n branchId: null,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_SOCIAL_BOOST_SETTINGS:\n return {\n ...state,\n cost: action.response.cost,\n branchId: action.branchId,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case RCV_GET_BRANCH:\n return { ...initialState };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default socialBoostSettingsReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_LEADS,\n RCV_GET_LEADS,\n REQ_ADD_COMMENT_LEAD,\n RCV_ADD_COMMENT_LEAD,\n REQ_ADD_VIEW_INFO_LEAD,\n RCV_ADD_VIEW_INFO_LEAD,\n REQ_REMOVE_LEAD,\n RCV_REMOVE_LEAD,\n REQ_UNREAD_LEAD_COUNT,\n RCV_UNREAD_LEAD_COUNT,\n REQ_CLEAR_LEADS,\n REQ_FAILED,\n} from '../actions/leads';\nimport { Actions } from '../actions';\nimport { Lead } from '../@types/Lead';\n\nconst EmptyList: Lead[] = [];\n\ninterface LeadState {\n requestStatus: number;\n responseStatus: number;\n leads: Lead[];\n branchId: string | null;\n unread: number;\n}\n\nexport const initialState: LeadState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n leads: EmptyList,\n branchId: null,\n unread: 0,\n};\n\nlet leads;\nlet index = -1;\nlet unread;\nconst leadsReducer = (state = initialState, action: Actions): LeadState => {\n switch (action.type) {\n case REQ_GET_LEADS:\n return {\n ...state,\n leads: EmptyList,\n branchId: null,\n requestStatus: requestStatus.FETCHING_LIST,\n responseStatus: responseStatus.OK,\n };\n case RCV_GET_LEADS:\n return {\n ...state,\n leads: action.response,\n branchId: action.branchId,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_ADD_COMMENT_LEAD:\n case REQ_ADD_VIEW_INFO_LEAD:\n return { ...state, requestStatus: requestStatus.UPDATING, responseStatus: responseStatus.OK };\n case RCV_ADD_COMMENT_LEAD:\n case RCV_ADD_VIEW_INFO_LEAD:\n leads = state.leads.slice();\n unread = state.unread;\n index = leads.findIndex((x) => x.id === action.response.id);\n if (index > -1) {\n if (!leads[index].viewInfo && !!action.response.viewInfo && unread > 0) {\n unread--;\n }\n\n leads[index] = { ...action.response };\n leads[index].comments = leads[index].comments.slice();\n }\n return {\n ...state,\n unread,\n leads,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_REMOVE_LEAD:\n return { ...state, requestStatus: requestStatus.REMOVING, responseStatus: responseStatus.OK };\n case RCV_REMOVE_LEAD:\n leads = state.leads.slice();\n index = leads.findIndex((x) => x.id === action.response);\n if (index > -1) {\n leads.splice(index, 1);\n }\n return {\n ...state,\n leads,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_UNREAD_LEAD_COUNT:\n return { ...state };\n case RCV_UNREAD_LEAD_COUNT:\n return { ...state, unread: action.response.count };\n case REQ_CLEAR_LEADS:\n return { ...initialState };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default leadsReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_WIP_VEHICLE,\n RCV_GET_WIP_VEHICLE,\n REQ_RATE_WIP,\n RCV_RATE_WIP,\n REQ_CLEAR_WIP,\n REQ_FAILED,\n} from '../actions/wip';\n\nimport { RCV_GET_BRANCH } from '../actions/organisation';\nimport { Actions } from '../actions';\nimport { PredictVehicleRespons } from '../@types/WIP';\n\ninterface WipState {\n requestStatus: number;\n responseStatus: number;\n vehicle: PredictVehicleRespons | null;\n unauthorized: boolean;\n notFound: boolean;\n error: boolean;\n}\n\nexport const initialState: WipState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.PENDING,\n vehicle: null,\n unauthorized: false,\n notFound: false,\n error: false,\n};\n\nconst wipReducer = (state = initialState, action: Actions): WipState => {\n switch (action.type) {\n case REQ_GET_WIP_VEHICLE:\n return {\n ...state,\n vehicle: action.shouldClear ? null : state.vehicle,\n unauthorized: false,\n notFound: false,\n error: false,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_GET_WIP_VEHICLE:\n return {\n ...state,\n vehicle: action.response,\n unauthorized: false,\n notFound: false,\n error: false,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_RATE_WIP:\n return {\n ...state,\n requestStatus: requestStatus.UPDATING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_RATE_WIP:\n return { ...state, requestStatus: requestStatus.WAITING, responseStatus: responseStatus.OK };\n case RCV_GET_BRANCH:\n case REQ_CLEAR_WIP:\n return { ...initialState };\n case REQ_FAILED:\n const { statusCode } = action;\n return {\n ...state,\n unauthorized: statusCode === 401,\n notFound: statusCode === 404,\n error: statusCode === undefined || statusCode === 500,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default wipReducer;\n", "import { Dispatch } from 'redux';\nimport { BaseAction } from '../@types/Action';\n\nimport { buildAuthorizedGetRequest, buildAuthorizedPutRequest } from '../http/request-templates';\nimport { requestCache } from '../utils';\n\nimport * as http from '../http';\nimport { RootState } from '../reducers';\nimport { PredictVehicleRespons, RateVehicle } from '../@types/WIP';\n\nexport const REQ_GET_WIP_VEHICLE = 'REQ/GET_WIP_VEHICLE';\nexport const RCV_GET_WIP_VEHICLE = 'RCV/GET_WIP_VEHICLE';\ntype REQ_GET_WIP_VEHICLE_TYPE = BaseAction & {\n shouldClear: boolean;\n};\ntype RCV_GET_WIP_VEHICLE_TYPE = BaseAction & {\n response: PredictVehicleRespons;\n branch: string;\n};\n\nexport const REQ_RATE_WIP = 'REQ/RATE_WIP';\nexport const RCV_RATE_WIP = 'RCV/RATE_WIP';\ntype REQ_RATE_WIP_TYPE = BaseAction;\ntype RCV_RATE_WIP_TYPE = BaseAction & {\n response: any;\n};\n\nexport const REQ_CLEAR_WIP = 'REQ/CLEAR_WIP';\ntype REQ_CLEAR_WIP_TYPE = BaseAction;\n\nexport const REQ_FAILED = 'REQ/WIP_FAILED';\ntype REQ_WIP_FAILED_TYPE = BaseAction & {\n statusCode?: number;\n};\n\nexport type WIP_ACTION =\n | REQ_GET_WIP_VEHICLE_TYPE\n | RCV_GET_WIP_VEHICLE_TYPE\n | REQ_RATE_WIP_TYPE\n | RCV_RATE_WIP_TYPE\n | REQ_CLEAR_WIP_TYPE\n | REQ_WIP_FAILED_TYPE;\n\nexport const getVehicle =\n (\n regNo: string,\n km: number,\n marketCount: number,\n equipmentLevel: string | null = null,\n shouldNotClear: boolean = false,\n ) =>\n async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n if (!auth.token || requestCache.isPending(REQ_GET_WIP_VEHICLE)) {\n return;\n }\n\n requestCache.isPending(REQ_GET_WIP_VEHICLE, true);\n try {\n dispatch({ type: REQ_GET_WIP_VEHICLE, shouldClear: !shouldNotClear });\n const response = await http.json(\n `/api/wip/${\n organisationBranch.selectedBranch\n }/vehicle?regNo=${regNo}&km=${km}&marketCount=${marketCount}&equipmentLevel=${\n equipmentLevel ? equipmentLevel : ''\n }`,\n buildAuthorizedGetRequest(auth.token),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_GET_WIP_VEHICLE,\n response: response.response,\n branch: organisationBranch.selectedBranch,\n });\n } catch (e) {\n const statusCode = (e as { statusCode?: number })?.statusCode as number | undefined;\n dispatch({ type: REQ_FAILED, action: REQ_GET_WIP_VEHICLE, statusCode });\n }\n requestCache.isPending(REQ_GET_WIP_VEHICLE, false);\n };\n\nexport const rate =\n (model: RateVehicle) => async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n if (!auth.token || requestCache.isPending(REQ_RATE_WIP)) {\n return;\n }\n\n requestCache.isPending(REQ_RATE_WIP, true);\n\n try {\n dispatch({ type: REQ_RATE_WIP });\n\n const response = await http.json(\n `/api/wip/${organisationBranch.selectedBranch}/rate`,\n buildAuthorizedPutRequest(auth.token, model),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_RATE_WIP,\n response: response.response,\n branch: organisationBranch.selectedBranch,\n });\n } catch (e) {\n const statusCode = (e as { statusCode?: number })?.statusCode as number | undefined;\n dispatch({ type: REQ_FAILED, action: REQ_RATE_WIP, statusCode });\n }\n requestCache.isPending(REQ_RATE_WIP, false);\n };\n\nexport const clear = () => (dispatch: Dispatch) => dispatch({ type: REQ_CLEAR_WIP });\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_AD_BOOST_MULTIPLE,\n RCV_AD_BOOST_MULTIPLE,\n REQ_AD_BOOST_HISTORY,\n RCV_AD_BOOST_HISTORY,\n REQ_AD_BOOST_STAGE,\n REQ_AD_BOOST_CLEAR_STAGED,\n REQ_FAILED,\n} from '../actions/ad-boost';\n\nimport { RCV_GET_BRANCH } from '../actions/organisation';\nimport { Actions } from '../actions';\nimport { AdBoostHistory, AdBoostPayload } from '../@types/AdBoost';\n\nconst EmptyHistoryList: AdBoostHistory[] = [];\nconst EmptyStagedList: AdBoostPayload[] = [];\n\ninterface AdBoostState {\n requestStatus: number;\n responseStatus: number;\n history: AdBoostHistory[];\n staged: AdBoostPayload[];\n}\n\nexport const initialState: AdBoostState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n history: EmptyHistoryList,\n staged: EmptyStagedList,\n};\n\nlet staged;\nlet index;\nconst adBoostReducer = (state = { ...initialState }, action: Actions): AdBoostState => {\n switch (action.type) {\n case REQ_AD_BOOST_MULTIPLE:\n return {\n ...state,\n requestStatus: requestStatus.CREATING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_AD_BOOST_MULTIPLE:\n return {\n ...state,\n staged: [],\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_AD_BOOST_HISTORY:\n return {\n ...state,\n history: EmptyHistoryList,\n requestStatus: requestStatus.FETCHING_LIST,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_AD_BOOST_HISTORY:\n return {\n ...state,\n history: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_AD_BOOST_STAGE:\n staged = state.staged.slice();\n index = staged.findIndex((x) => x.id === action.item.id);\n if (index === -1) {\n staged.push(action.item);\n } else {\n staged.splice(index, 1);\n }\n return { ...state, staged };\n case REQ_AD_BOOST_CLEAR_STAGED:\n return { ...state, staged: EmptyStagedList };\n\n case RCV_GET_BRANCH:\n return { ...initialState };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default adBoostReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport { REQ_VIMEO_THUMBNAIL, RCV_VIMEO_THUMBNAIL, REQ_FAILED } from '../actions/vimeo';\nimport { Actions } from '../actions';\n\ninterface VimeoState {\n requestStatus: number;\n responseStatus: number;\n thumbnails: { [key: string]: string | undefined };\n}\n\nexport const initialState: VimeoState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n thumbnails: {},\n};\n\nlet thumbnails = null;\nconst vimeoReducer = (state = initialState, action: Actions): VimeoState => {\n switch (action.type) {\n case REQ_VIMEO_THUMBNAIL:\n thumbnails = { ...state.thumbnails };\n thumbnails[action.id] = '';\n return {\n ...state,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_VIMEO_THUMBNAIL:\n thumbnails = { ...state.thumbnails };\n thumbnails[action.id] = action.response.thumbnail_url;\n return {\n ...state,\n thumbnails,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default vimeoReducer;\n", "import { Dispatch } from 'redux';\nimport { BaseAction } from '../@types/Action';\nimport { RootState } from '../reducers';\nimport { requestCache } from '../utils';\nimport * as http from '../http';\nimport { buildAuthorizedGetRequest } from '../http/request-templates';\nimport { Vimeo } from '../@types/Vimeo';\n\nexport const REQ_VIMEO_THUMBNAIL = 'REQ/VIMEO_THUMBNAIL';\nexport const RCV_VIMEO_THUMBNAIL = 'RCV/VIMEO_THUMBNAIL';\nexport const REQ_FAILED = 'REQ/FAILED_VIMEO';\n\ntype REQ_VIMEO_THUMBNAIL_TYPE = BaseAction & {\n id: string;\n};\ntype RCV_VIMEO_THUMBNAIL_TYPE = BaseAction & {\n response: Vimeo;\n id: string;\n};\ntype ERR_VIMEO_THUMBNAIL_TYPE = BaseAction;\n\nexport type VIMEO_ACTION =\n | REQ_VIMEO_THUMBNAIL_TYPE\n | RCV_VIMEO_THUMBNAIL_TYPE\n | ERR_VIMEO_THUMBNAIL_TYPE;\n\nexport const getThumbnail =\n (id: string) => async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth } = getState();\n\n if (!auth.token || requestCache.isPending(`${REQ_VIMEO_THUMBNAIL}/${id}`)) {\n return;\n }\n\n requestCache.isPending(`${REQ_VIMEO_THUMBNAIL}/${id}`, true);\n\n try {\n dispatch({ type: REQ_VIMEO_THUMBNAIL, id });\n const response = await http.json(\n `/api/vimeo/thumbnail/${id}`,\n buildAuthorizedGetRequest(auth.token),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_VIMEO_THUMBNAIL,\n response: response.response,\n id,\n });\n } catch (e) {\n dispatch({ type: REQ_FAILED, action: REQ_VIMEO_THUMBNAIL });\n }\n\n requestCache.isPending(`${REQ_VIMEO_THUMBNAIL}/${id}`, false);\n };\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_ORDERS,\n RCV_GET_ORDERS,\n RCV_GET_ORDER_COUNT,\n REQ_GET_ORDER,\n RCV_GET_ORDER,\n REQ_UPDATE_ORDER_STATUS,\n RCV_UPDATE_ORDER_STATUS,\n REQ_FAILED,\n} from '../actions/order';\nimport { Actions } from '../actions';\nimport { Order } from '../@types/Order';\n\nexport interface OrderStateCounts {\n Accepted: number;\n Created: number;\n Rejected: number;\n}\nexport interface OrderState {\n requestStatus: number;\n responseStatus: number;\n limit: number;\n skip: number;\n statuses: string[];\n orders: Order[];\n order: Order | null;\n counts: OrderStateCounts;\n}\n\nexport const initialState: OrderState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n limit: 0,\n skip: 0,\n statuses: [],\n orders: [],\n order: null,\n counts: {\n Accepted: 0,\n Created: 0,\n Rejected: 0,\n },\n};\n\nlet orders: Order[] = [];\nlet limit = 0;\nlet skip = 0;\nlet statuses = [];\n\nconst orderReducer = (state = initialState, action: Actions): OrderState => {\n switch (action.type) {\n case REQ_GET_ORDERS:\n if (action.statuses === state.statuses && action.skip > state.skip) {\n orders = state.orders;\n } else {\n orders = [];\n }\n\n limit = action.limit;\n skip = action.skip;\n statuses = action.statuses;\n\n return {\n ...state,\n orders,\n limit,\n skip,\n statuses,\n requestStatus: requestStatus.FETCHING_LIST,\n responseStatus: responseStatus.OK,\n };\n case RCV_GET_ORDERS:\n if (\n JSON.stringify(action.statuses).localeCompare(JSON.stringify(state.statuses)) === 0 &&\n action.skip === state.skip\n ) {\n orders = [...state.orders, ...action.response];\n } else {\n orders = action.response;\n }\n return {\n ...state,\n orders,\n limit: action.limit,\n skip: action.skip,\n statuses: action.statuses,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case RCV_GET_ORDER_COUNT:\n return {\n ...state,\n counts: { ...state.counts, [action.orderStatus]: action.response.length },\n };\n case REQ_GET_ORDER:\n return {\n ...state,\n order: null,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.OK,\n };\n case RCV_GET_ORDER:\n return {\n ...state,\n order: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_UPDATE_ORDER_STATUS:\n return { ...state, requestStatus: requestStatus.UPDATING, responseStatus: responseStatus.OK };\n case RCV_UPDATE_ORDER_STATUS:\n return {\n ...state,\n order: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default orderReducer;\n", "import { OrderLog } from '../@types/OrderLog';\nimport { Actions } from '../actions';\nimport { REQ_GET_ORDER_LOGS, RCV_GET_ORDER_LOGS, ERR_GET_ORDER_LOGS } from '../actions/order-logs';\n\ninterface OrderLogsState {\n id: string;\n logs: OrderLog[];\n pending: boolean;\n error: boolean;\n}\n\nexport const initialState: OrderLogsState = {\n id: '',\n logs: [],\n pending: false,\n error: false,\n};\n\nconst orderLogsReducer = (state = initialState, action: Actions): OrderLogsState => {\n switch (action.type) {\n case REQ_GET_ORDER_LOGS:\n return { ...state, id: action.id, logs: [], pending: true, error: false };\n case RCV_GET_ORDER_LOGS:\n return { ...state, logs: action.logs, pending: false };\n case ERR_GET_ORDER_LOGS:\n return { ...state, error: true, pending: false };\n default:\n return state;\n }\n};\n\nexport default orderLogsReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nexport const PICKUP = 'Pickup';\n\nimport {\n REQ_GET_ECOM_ORDER_SETTING,\n RCV_GET_ECOM_ORDER_SETTING,\n REQ_UPDATE_ECOM_ORDER_SETTING,\n RCV_UPDATE_ECOM_ORDER_SETTING,\n REQ_CREATE_ECOM_ORDER_SETTING,\n RCV_CREATE_ECOM_ORDER_SETTING,\n REQ_FAILED,\n} from '../actions/ecom-setting';\nimport { Actions } from '../actions';\nimport { EcomSetting } from '../@types/EcomSetting';\n\ninterface EcomSettingState {\n requestStatus: number;\n responseStatus: number;\n setting: EcomSetting | null;\n}\n\nexport const initialState: EcomSettingState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n setting: null,\n};\n\nconst ecomSettingReducer = (state = initialState, action: Actions): EcomSettingState => {\n switch (action.type) {\n case REQ_GET_ECOM_ORDER_SETTING:\n return {\n ...state,\n setting: null,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.OK,\n };\n case RCV_GET_ECOM_ORDER_SETTING:\n return {\n ...state,\n setting: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_UPDATE_ECOM_ORDER_SETTING:\n return { ...state, requestStatus: requestStatus.UPDATING, responseStatus: responseStatus.OK };\n case RCV_UPDATE_ECOM_ORDER_SETTING:\n return {\n ...state,\n setting: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_CREATE_ECOM_ORDER_SETTING:\n return { ...state, requestStatus: requestStatus.CREATING, responseStatus: responseStatus.OK };\n case RCV_CREATE_ECOM_ORDER_SETTING:\n return {\n ...state,\n setting: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default ecomSettingReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_BRANCH_PERMISSIONS,\n RCV_GET_BRANCH_PERMISSIONS,\n ERR_GET_BRANCH_PERMISSIONS,\n} from '../actions/permissions';\nimport { Actions } from '../actions';\nimport { PermissionTypes, PermissionMessage } from '../@types/Permission';\n\ninterface PermissionsState {\n requestStatus: number;\n responseStatus: number;\n permissions: PermissionTypes[] | null;\n disabledFeatureMessages: PermissionMessage | null;\n branchId: string | null;\n}\n\nconst initialState: PermissionsState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n permissions: null,\n disabledFeatureMessages: null,\n branchId: null,\n};\n\nconst permissionsReducer = (state = initialState, action: Actions): PermissionsState => {\n switch (action.type) {\n case REQ_GET_BRANCH_PERMISSIONS:\n return {\n ...state,\n permissions: null,\n disabledFeatureMessages: null,\n branchId: null,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.PENDING,\n };\n\n case RCV_GET_BRANCH_PERMISSIONS:\n return {\n ...state,\n permissions: action.response ? action.response.permissions : null,\n disabledFeatureMessages: action.response ? action.response.messages : null,\n branchId: action.branchId,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n\n case ERR_GET_BRANCH_PERMISSIONS:\n return {\n ...state,\n permissions: null,\n disabledFeatureMessages: null,\n branchId: null,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n\n default:\n return state;\n }\n};\n\nexport default permissionsReducer;\n", "import { Dispatch } from 'redux';\nimport { BaseAction } from '../@types/Action';\nimport { Permission } from '../@types/Permission';\nimport { RootState } from '../reducers';\nimport { requestCache } from '../utils';\nimport * as http from '../http';\nimport { buildAuthorizedGetRequest } from '../http/request-templates';\n\nexport const REQ_GET_BRANCH_PERMISSIONS = 'REQ_GET_BRANCH_PERMISSIONS';\nexport const RCV_GET_BRANCH_PERMISSIONS = 'RCV_GET_BRANCH_PERMISSIONS';\nexport const ERR_GET_BRANCH_PERMISSIONS = 'ERR_GET_BRANCH_PERMISSIONS';\n\ntype REQ_GET_BRANCH_PERMISSIONS_TYPE = BaseAction;\ntype RCV_GET_BRANCH_PERMISSIONS_TYPE = BaseAction & {\n response: Permission;\n branchId: string;\n};\ntype ERR_GET_BRANCH_PERMISSIONS_TYPE = BaseAction;\n\nexport type PERMISSION_ACTION =\n | REQ_GET_BRANCH_PERMISSIONS_TYPE\n | RCV_GET_BRANCH_PERMISSIONS_TYPE\n | ERR_GET_BRANCH_PERMISSIONS_TYPE;\n\nexport const getPermissions = () => async (dispatch: Dispatch, getState: () => RootState) => {\n const { auth, organisationBranch } = getState();\n if (!auth.token || requestCache.isPending(REQ_GET_BRANCH_PERMISSIONS)) return;\n\n requestCache.isPending(REQ_GET_BRANCH_PERMISSIONS, true);\n\n try {\n dispatch({ type: REQ_GET_BRANCH_PERMISSIONS });\n const response = await http.json(\n `/api/permissions/${organisationBranch.selectedBranch}`,\n buildAuthorizedGetRequest(auth.token),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_GET_BRANCH_PERMISSIONS,\n response: response.response,\n branchId: organisationBranch.selectedBranch,\n });\n } catch (e) {\n dispatch({ type: ERR_GET_BRANCH_PERMISSIONS });\n }\n\n requestCache.isPending(REQ_GET_BRANCH_PERMISSIONS, false);\n};\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_BRANCH_CREDENTIALS,\n RCV_GET_BRANCH_CREDENTIALS,\n REQ_UPDATE_BRANCH_CREDENTIALS,\n RCV_UPDATE_BRANCH_CREDENTIALS,\n REQ_UPDATE_BLOCKET_SETTING_ACTIVE,\n RCV_UPDATE_BLOCKET_SETTING_ACTIVE,\n REQ_FAILED,\n REQ_GET_BRANCH_CREDENTIALS_STATUS,\n RCV_GET_BRANCH_CREDENTIALS_STATUS,\n} from '../actions/credentials';\nimport { Actions } from '../actions';\nimport { BlocketSettings, BlocketStatus } from '../@types/Credentials';\n\ninterface CredentialsState {\n requestStatus: number;\n responseStatus: number;\n requestStatusStatus: number;\n responseStatusStatus: number;\n credentials: BlocketSettings | null;\n status: BlocketStatus | null;\n}\n\nconst initialState: CredentialsState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n requestStatusStatus: requestStatus.WAITING,\n responseStatusStatus: responseStatus.OK,\n credentials: null,\n status: null,\n};\n\nconst credentialsReducer = (state = initialState, action: Actions): CredentialsState => {\n switch (action.type) {\n case REQ_GET_BRANCH_CREDENTIALS:\n return {\n ...state,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_GET_BRANCH_CREDENTIALS:\n return {\n ...state,\n credentials: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case REQ_GET_BRANCH_CREDENTIALS_STATUS:\n return {\n ...state,\n requestStatusStatus: requestStatus.FETCHING,\n responseStatusStatus: responseStatus.PENDING,\n };\n case RCV_GET_BRANCH_CREDENTIALS_STATUS:\n return {\n ...state,\n status: action.response,\n requestStatusStatus: requestStatus.WAITING,\n responseStatusStatus: responseStatus.OK,\n };\n case REQ_UPDATE_BRANCH_CREDENTIALS:\n return {\n ...state,\n requestStatus: requestStatus.UPDATING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_UPDATE_BRANCH_CREDENTIALS:\n return { ...state, requestStatus: requestStatus.WAITING, responseStatus: responseStatus.OK };\n case REQ_UPDATE_BLOCKET_SETTING_ACTIVE:\n return {\n ...state,\n requestStatusStatus: requestStatus.UPDATING,\n responseStatusStatus: responseStatus.PENDING,\n };\n case RCV_UPDATE_BLOCKET_SETTING_ACTIVE:\n if (!state.credentials) {\n return state;\n }\n return {\n ...state,\n status: {\n ...state.status,\n is_active: action.is_active,\n },\n requestStatusStatus: requestStatus.WAITING,\n responseStatusStatus: responseStatus.OK,\n };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default credentialsReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport { REQ_GET_FACETS, RCV_GET_FACETS, ERR_GET_FACETS } from '../actions/facets';\nimport { Actions } from '../actions';\nimport { Facet } from '../@types/ElasticSearchResponse';\n\ninterface FacetsState {\n requestStatus: number;\n responseStatus: number;\n collection: Facet[];\n fetched: boolean;\n}\n\nconst initialState: FacetsState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n collection: [],\n fetched: false,\n};\n\nconst facetsReducer = (state = initialState, action: Actions): FacetsState => {\n switch (action.type) {\n case REQ_GET_FACETS:\n return {\n ...state,\n requestStatus: requestStatus.FETCHING_LIST,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_GET_FACETS:\n return {\n ...state,\n fetched: true,\n collection: action.response.facets,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case ERR_GET_FACETS:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default facetsReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_EXPORT_FACETS,\n RCV_GET_EXPORT_FACETS,\n ERR_GET_EXPORT_FACETS,\n} from '../actions/export-facets';\nimport { Actions } from '../actions';\nimport { Facet } from '../@types/ElasticSearchResponse';\n\ninterface ExportFacetsState {\n requestStatus: number;\n responseStatus: number;\n list: Facet[] | null;\n}\n\nconst initialState: ExportFacetsState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n list: null,\n};\n\nconst reducer = (state = initialState, action: Actions): ExportFacetsState => {\n switch (action.type) {\n case REQ_GET_EXPORT_FACETS:\n return {\n ...state,\n list: null,\n requestStatus: requestStatus.FETCHING_LIST,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_GET_EXPORT_FACETS:\n return {\n ...state,\n list: action.response.facets,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case ERR_GET_EXPORT_FACETS:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default reducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_BRANCH_FACETS,\n RCV_GET_BRANCH_FACETS,\n ERR_GET_BRANCH_FACETS,\n} from '../actions/branch-facets';\nimport { Actions } from '../actions';\nimport { Facet } from '../@types/ElasticSearchResponse';\n\ninterface BranchFacetsState {\n requestStatus: number;\n responseStatus: number;\n collection: Facet[];\n fetched?: boolean;\n branchName?: string;\n}\n\nconst initialState: BranchFacetsState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n collection: [],\n};\n\nexport default (state = initialState, action: Actions): BranchFacetsState => {\n switch (action.type) {\n case REQ_GET_BRANCH_FACETS:\n return {\n ...state,\n fetched: false,\n branchName: action.branchName,\n requestStatus: requestStatus.FETCHING_LIST,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_GET_BRANCH_FACETS:\n return {\n ...state,\n fetched: true,\n collection: action.response.facets,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case ERR_GET_BRANCH_FACETS:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_GET_BRANCH_EXPORT_FACETS,\n RCV_GET_BRANCH_EXPORT_FACETS,\n ERR_GET_BRANCH_EXPORT_FACETS,\n} from '../actions/branch-export-facets';\nimport { Actions } from '../actions';\nimport { Facet } from '../@types/ElasticSearchResponse';\n\ninterface BranchExportFacetsState {\n requestStatus: number;\n responseStatus: number;\n list: Facet[] | null;\n}\n\nconst initialState: BranchExportFacetsState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n list: null,\n};\n\nexport default (state = initialState, action: Actions): BranchExportFacetsState => {\n switch (action.type) {\n case REQ_GET_BRANCH_EXPORT_FACETS:\n return {\n ...state,\n list: null,\n requestStatus: requestStatus.FETCHING_LIST,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_GET_BRANCH_EXPORT_FACETS:\n return {\n ...state,\n list: action.response.facets,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n case ERR_GET_BRANCH_EXPORT_FACETS:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n", "import {\n EXPORT_FILTER_SHOW_FILTER_INPUT_VISIBILITY,\n EXPORT_FILTER_EDIT_FILTER,\n} from '../actions/export-filter';\n\nimport { RCV_UPDATE_BRANCH_CREDENTIALS, REQ_GET_BRANCH_CREDENTIALS } from '../actions/credentials';\nimport { Actions } from '../actions';\nimport { BlocketFilter } from '../@types/Credentials';\n\ninterface ExportFilterState {\n editFilter: BlocketFilter | null;\n shouldShowFilterInput: boolean;\n shouldRefreshFilterList: boolean;\n}\n\nconst initialState: ExportFilterState = {\n editFilter: null,\n shouldShowFilterInput: false,\n shouldRefreshFilterList: false,\n};\n\nconst exportFilterReducer = (state = initialState, action: Actions): ExportFilterState => {\n switch (action.type) {\n case EXPORT_FILTER_SHOW_FILTER_INPUT_VISIBILITY:\n return { ...state, shouldShowFilterInput: action.visibility, editFilter: null };\n\n case EXPORT_FILTER_EDIT_FILTER:\n return { ...state, shouldShowFilterInput: true, editFilter: action.filter };\n\n case RCV_UPDATE_BRANCH_CREDENTIALS:\n return {\n ...state,\n shouldShowFilterInput: false,\n shouldRefreshFilterList: true,\n editFilter: null,\n };\n\n case REQ_GET_BRANCH_CREDENTIALS:\n return { ...state, shouldRefreshFilterList: false };\n\n default:\n return state;\n }\n};\n\nexport default exportFilterReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport { REQ_GET_SYSTEMCLIENTS, RCV_GET_SYSTEMCLIENTS } from '../actions/system-clients';\nimport { Actions } from '../actions';\nimport { SystemClient } from '../@types/SystemClient';\n\nconst emptyList: SystemClient[] = [];\nexport const initialState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n list: emptyList,\n};\n\nexport default (state = initialState, action: Actions) => {\n switch (action.type) {\n case REQ_GET_SYSTEMCLIENTS:\n return {\n ...state,\n list: emptyList,\n requestStatus: requestStatus.FETCHING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_GET_SYSTEMCLIENTS:\n return {\n ...state,\n list: action.response,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n };\n default:\n return state;\n }\n};\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport {\n REQ_FETCH_PAYMENT_OPTIONS,\n RCV_FETCH_PAYMENT_OPTIONS,\n REQ_UPDATE_PAYMENT_OPTIONS,\n RCV_UPDATE_PAYMENT_OPTIONS,\n REQ_REMOVE_PAYMENT_OPTIONS,\n RCV_REMOVE_PAYMENT_OPTIONS,\n REQ_FAILED,\n} from '../actions/payment-options';\nimport { PaymentOption } from '../@types/PaymentOption';\nimport { Actions } from '../actions';\n\ninterface PaymentOptionState {\n requestStatus: number;\n responseStatus: number;\n list: PaymentOption[];\n}\n\nconst emptyList: PaymentOption[] = [];\nexport const initialState: PaymentOptionState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n list: emptyList,\n};\n\nconst paymentOptionsReducer = (state = initialState, action: Actions): PaymentOptionState => {\n switch (action.type) {\n case REQ_FETCH_PAYMENT_OPTIONS:\n return {\n ...state,\n requestStatus: requestStatus.FETCHING_LIST,\n responseStatus: responseStatus.PENDING,\n list: emptyList,\n };\n case RCV_FETCH_PAYMENT_OPTIONS:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n list: action.response,\n };\n case REQ_UPDATE_PAYMENT_OPTIONS:\n return {\n ...state,\n requestStatus: requestStatus.UPDATING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_UPDATE_PAYMENT_OPTIONS:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n list: action.response,\n };\n case REQ_REMOVE_PAYMENT_OPTIONS:\n return {\n ...state,\n requestStatus: requestStatus.REMOVING,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_REMOVE_PAYMENT_OPTIONS:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n list: emptyList,\n };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\nexport default paymentOptionsReducer;\n", "import { requestStatus, responseStatus } from '../shared/statuses';\n\nimport { REQ_FETCH_BRANDINGS, RCV_FETCH_BRANDINGS, REQ_FAILED } from '../actions/brandings';\nimport { Actions } from '../actions';\nimport { Branding } from '../@types/Branding';\n\nconst emptyList: Branding[] = [];\n\ninterface BrandingState {\n requestStatus: number;\n responseStatus: number;\n list: Branding[];\n}\n\nexport const initialState: BrandingState = {\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n list: emptyList,\n};\n\nconst brandingsReducer = (state = initialState, action: Actions): BrandingState => {\n switch (action.type) {\n case REQ_FETCH_BRANDINGS:\n return {\n ...state,\n requestStatus: requestStatus.FETCHING_LIST,\n responseStatus: responseStatus.PENDING,\n };\n case RCV_FETCH_BRANDINGS:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.OK,\n list: action.response,\n };\n case REQ_FAILED:\n return {\n ...state,\n requestStatus: requestStatus.WAITING,\n responseStatus: responseStatus.FAILED,\n };\n default:\n return state;\n }\n};\n\nexport default brandingsReducer;\n", "import {\n REQ_CUSTOM_VIDEO_SOURCE,\n RCV_CUSTOM_VIDEO_SOURCE,\n ERR_CUSTOM_VIDEO_SOURCE,\n REQ_PUT_CUSTOM_VIDEO_SOURCE,\n RCV_PUT_CUSTOM_VIDEO_SOURCE,\n ERR_PUT_CUSTOM_VIDEO_SOURCE,\n REQ_DELETE_CUSTOM_VIDEO_SOURCE,\n RCV_DELETE_CUSTOM_VIDEO_SOURCE,\n ERR_DELETE_CUSTOM_VIDEO_SOURCE,\n} from '../actions/custom-video-source';\nimport { Actions } from '../actions';\nimport {\n requestError,\n requestIdle,\n requestInit,\n RequestState,\n requestSuccessful,\n} from '../http/request-state';\n\ninterface CustomVideoSourceState {\n requestGet: RequestState;\n requestUpdate: RequestState;\n requestRemove: RequestState;\n rootUri: string | null;\n branchId: string | null;\n}\n\nexport const initialState: CustomVideoSourceState = {\n requestGet: requestIdle(),\n requestUpdate: requestIdle(),\n requestRemove: requestIdle(),\n rootUri: null,\n branchId: null,\n};\n\nconst customVideoSource = (state = initialState, action: Actions): CustomVideoSourceState => {\n switch (action.type) {\n case REQ_CUSTOM_VIDEO_SOURCE:\n return {\n ...state,\n branchId: action.branchId,\n requestGet: requestInit(),\n };\n case RCV_CUSTOM_VIDEO_SOURCE:\n if (state.branchId !== action.branchId) {\n return state;\n }\n return {\n ...state,\n rootUri: action.response?.rootUri,\n branchId: action.branchId,\n requestGet: requestSuccessful(),\n };\n case ERR_CUSTOM_VIDEO_SOURCE:\n if (state.branchId !== action.branchId) {\n return state;\n }\n return {\n ...state,\n requestGet: requestError(),\n };\n case REQ_PUT_CUSTOM_VIDEO_SOURCE:\n return {\n ...state,\n branchId: action.branchId,\n requestUpdate: requestInit(),\n };\n case RCV_PUT_CUSTOM_VIDEO_SOURCE:\n if (state.branchId !== action.branchId) {\n return state;\n }\n return {\n ...state,\n rootUri: action.response.rootUri || null,\n branchId: action.branchId,\n requestUpdate: requestSuccessful(),\n };\n case ERR_PUT_CUSTOM_VIDEO_SOURCE:\n if (state.branchId !== action.branchId) {\n return state;\n }\n return {\n ...state,\n requestUpdate: requestError(),\n };\n case REQ_DELETE_CUSTOM_VIDEO_SOURCE:\n return {\n ...state,\n branchId: action.branchId,\n requestRemove: requestInit(),\n };\n case RCV_DELETE_CUSTOM_VIDEO_SOURCE:\n if (state.branchId !== action.branchId) {\n return state;\n }\n return {\n ...state,\n rootUri: null,\n requestRemove: requestSuccessful(),\n };\n case ERR_DELETE_CUSTOM_VIDEO_SOURCE:\n if (state.branchId !== action.branchId) {\n return state;\n }\n return {\n ...state,\n requestRemove: requestError(),\n };\n default:\n return state;\n }\n};\n\nexport default customVideoSource;\n", "import {\n REQ_GET_IMPORT_VIDEO,\n RCV_GET_IMPORT_VIDEO,\n ERR_GET_IMPORT_VIDEO,\n REQ_GET_RENDER_VIDEO,\n RCV_GET_RENDER_VIDEO,\n ERR_GET_RENDER_VIDEO,\n} from '../actions/import-media-video';\nimport { Actions } from '../actions';\nimport {\n RequestState,\n requestIdle,\n requestInit,\n requestSuccessful,\n requestError,\n} from '../http/request-state';\n\ninterface ImportMediaVideoState {\n requestStatusGetImportVideo: RequestState;\n requestStatusGetRenderVideo: RequestState;\n videoUrls: string[] | null;\n testVideosUrls: string[] | null;\n branchId: string | null;\n}\n\nexport const initialState: ImportMediaVideoState = {\n requestStatusGetImportVideo: requestIdle(),\n requestStatusGetRenderVideo: requestIdle(),\n videoUrls: null,\n testVideosUrls: null,\n branchId: null,\n};\n\nconst importMediaReducer = (state = initialState, action: Actions): ImportMediaVideoState => {\n switch (action.type) {\n case REQ_GET_IMPORT_VIDEO:\n return {\n ...state,\n requestStatusGetImportVideo: requestInit(),\n };\n case RCV_GET_IMPORT_VIDEO:\n return {\n ...state,\n videoUrls: action.response,\n branchId: action.branchId,\n requestStatusGetImportVideo: requestSuccessful(),\n };\n case ERR_GET_IMPORT_VIDEO:\n return {\n ...state,\n requestStatusGetImportVideo: requestError(),\n };\n case REQ_GET_RENDER_VIDEO:\n return {\n ...state,\n requestStatusGetRenderVideo: requestInit(),\n };\n case RCV_GET_RENDER_VIDEO:\n return {\n ...state,\n testVideosUrls: action.response,\n branchId: action.branchId,\n requestStatusGetRenderVideo: requestSuccessful(),\n };\n case ERR_GET_RENDER_VIDEO:\n return {\n ...state,\n requestStatusGetImportVideo: requestError(),\n };\n default:\n return state;\n }\n};\n\nexport default importMediaReducer;\n", "import {\n REQ_CUSTOM_IMAGE_SOURCE,\n RCV_CUSTOM_IMAGE_SOURCE,\n ERR_CUSTOM_IMAGE_SOURCE,\n REQ_PUT_CUSTOM_IMAGE_SOURCE,\n RCV_PUT_CUSTOM_IMAGE_SOURCE,\n ERR_PUT_CUSTOM_IMAGE_SOURCE,\n REQ_DELETE_CUSTOM_IMAGE_SOURCE,\n RCV_DELETE_CUSTOM_IMAGE_SOURCE,\n ERR_DELETE_CUSTOM_IMAGE_SOURCE,\n} from '../actions/custom-image-source';\nimport { Actions } from '../actions';\nimport {\n requestError,\n requestIdle,\n requestInit,\n RequestState,\n requestSuccessful,\n} from '../http/request-state';\n\ninterface CustomImageSourceState {\n requestGet: RequestState;\n requestUpdate: RequestState;\n requestRemove: RequestState;\n rootUri: string | null;\n branchId: string | null;\n}\n\nexport const initialState: CustomImageSourceState = {\n requestGet: requestIdle(),\n requestUpdate: requestIdle(),\n requestRemove: requestIdle(),\n rootUri: null,\n branchId: null,\n};\n\nconst customImageSource = (state = initialState, action: Actions): CustomImageSourceState => {\n switch (action.type) {\n case REQ_CUSTOM_IMAGE_SOURCE:\n return {\n ...state,\n branchId: action.branchId,\n requestGet: requestInit(),\n };\n case RCV_CUSTOM_IMAGE_SOURCE:\n if (state.branchId !== action.branchId) {\n return state;\n }\n return {\n ...state,\n rootUri: action.response?.rootUri,\n branchId: action.branchId,\n requestGet: requestSuccessful(),\n };\n case ERR_CUSTOM_IMAGE_SOURCE:\n if (state.branchId !== action.branchId) {\n return state;\n }\n return {\n ...state,\n requestGet: requestError(),\n };\n case REQ_PUT_CUSTOM_IMAGE_SOURCE:\n return {\n ...state,\n branchId: action.branchId,\n requestUpdate: requestInit(),\n };\n case RCV_PUT_CUSTOM_IMAGE_SOURCE:\n if (state.branchId !== action.branchId) {\n return state;\n }\n return {\n ...state,\n rootUri: action.response.rootUri || null,\n branchId: action.branchId,\n requestUpdate: requestSuccessful(),\n };\n case ERR_PUT_CUSTOM_IMAGE_SOURCE:\n if (state.branchId !== action.branchId) {\n return state;\n }\n return {\n ...state,\n requestUpdate: requestError(),\n };\n case REQ_DELETE_CUSTOM_IMAGE_SOURCE:\n return {\n ...state,\n branchId: action.branchId,\n requestRemove: requestInit(),\n };\n case RCV_DELETE_CUSTOM_IMAGE_SOURCE:\n if (state.branchId !== action.branchId) {\n return state;\n }\n return {\n ...state,\n rootUri: null,\n requestRemove: requestSuccessful(),\n };\n case ERR_DELETE_CUSTOM_IMAGE_SOURCE:\n if (state.branchId !== action.branchId) {\n return state;\n }\n return {\n ...state,\n requestRemove: requestError(),\n };\n default:\n return state;\n }\n};\n\nexport default customImageSource;\n", "import {\n REQ_GET_IMPORT_IMAGE,\n RCV_GET_IMPORT_IMAGE,\n ERR_GET_IMPORT_IMAGE,\n REQ_GET_RENDER_IMAGE,\n RCV_GET_RENDER_IMAGE,\n ERR_GET_RENDER_IMAGE,\n} from '../actions/import-media-image';\nimport { Actions } from '../actions';\nimport {\n RequestState,\n requestIdle,\n requestInit,\n requestSuccessful,\n requestError,\n} from '../http/request-state';\n\ninterface ImportMediaImageState {\n requestStatusGetImportImage: RequestState;\n requestStatusGetRenderImage: RequestState;\n imageUrls: string[] | null;\n testImagesUrls: string[] | null;\n branchId: string | null;\n}\n\nexport const initialState: ImportMediaImageState = {\n requestStatusGetImportImage: requestIdle(),\n requestStatusGetRenderImage: requestIdle(),\n imageUrls: null,\n testImagesUrls: null,\n branchId: null,\n};\n\nconst importMediaReducer = (state = initialState, action: Actions): ImportMediaImageState => {\n switch (action.type) {\n case REQ_GET_IMPORT_IMAGE:\n return {\n ...state,\n requestStatusGetImportImage: requestInit(),\n };\n case RCV_GET_IMPORT_IMAGE:\n return {\n ...state,\n imageUrls: action.response,\n branchId: action.branchId,\n requestStatusGetImportImage: requestSuccessful(),\n };\n case ERR_GET_IMPORT_IMAGE:\n return {\n ...state,\n requestStatusGetImportImage: requestError(),\n };\n case REQ_GET_RENDER_IMAGE:\n return {\n ...state,\n requestStatusGetRenderImage: requestInit(),\n };\n case RCV_GET_RENDER_IMAGE:\n return {\n ...state,\n testImagesUrls: action.response,\n branchId: action.branchId,\n requestStatusGetRenderImage: requestSuccessful(),\n };\n case ERR_GET_RENDER_IMAGE:\n return {\n ...state,\n requestStatusGetRenderImage: requestError(),\n };\n default:\n return state;\n }\n};\n\nexport default importMediaReducer;\n", "import React, { useEffect, useState } from 'react';\nimport { bindActionCreators } from 'redux';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { signOut, signIn } from '../../actions/auth';\nimport { getBranches, getBranch, setBranch } from '../../actions/organisation';\n\nimport App from './';\nimport { RootState } from '../../reducers';\nimport { Branch } from '../../@types/Branch';\nimport { SpinnerOverlay } from '../spinner';\nimport useScrollToTop from '../../hooks/useScrollToTop';\nimport Imbox from './imbox';\nimport { useNavigate } from 'react-router-dom';\n\nconst regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst getSelectedBranchFromPath = () => {\n const possibleGuid = window.location.pathname.substr(1, 36);\n return regexGuid.test(possibleGuid) ? possibleGuid : undefined;\n};\n\nconst selectedBranchCookieName = 'selectedBranch=';\nconst getSelectedBranchFromCookie = () => {\n const match = decodeURIComponent(document.cookie)\n .split(';')\n .map((x) => x.trim())\n .find((x) => x.startsWith(selectedBranchCookieName));\n return match ? match.substr(selectedBranchCookieName.length) : undefined;\n};\n\ninterface PreAppProps {\n children: React.ReactNode;\n}\n\nconst PreApp = ({ children }: PreAppProps) => {\n const dispatch = useDispatch();\n const navigate = useNavigate();\n\n const token = useSelector((s) => s.auth.token);\n const branches = useSelector((s) => s.organisationBranch.branches);\n const branch = useSelector((s) => s.organisationBranch.branch);\n const selectedBranch = useSelector(\n (s) => s.organisationBranch.selectedBranch,\n );\n\n const actions = bindActionCreators(\n {\n getBranches,\n getBranch,\n setBranch,\n signOut,\n signIn,\n },\n dispatch,\n );\n\n const [noBranches, setNoBranches] = useState(false);\n const [initBranch, setInitBranch] = useState(false);\n\n useScrollToTop();\n\n useEffect(() => {\n actions.signIn(navigate);\n }, []);\n\n useEffect(() => {\n if (!!token) {\n actions.getBranches();\n }\n }, [!!token]);\n\n useEffect(() => {\n if (!initBranch && branch) {\n setInitBranch(true);\n actions.setBranch(branch);\n }\n }, [branch]);\n\n useEffect(() => {\n if (branches?.length && !branch) {\n const match = selectedBranch || getSelectedBranchFromPath() || getSelectedBranchFromCookie();\n const branch = branches.find((x) => x.id === match) || branches[0];\n\n actions.getBranch(branch.id);\n }\n }, [branches?.length]);\n\n useEffect(() => {\n if (branches && !branches.length) {\n setNoBranches(true);\n }\n }, [branches]);\n\n if (noBranches) {\n return (\n \n
\n \n \n \n \n Det finns inga anl\u00E4ggningar kopplade till detta kontot.\n \n
\n
\n \n
\n \n );\n }\n\n return (\n <>\n {token && initBranch ? (\n {children}\n ) : (\n \n )}\n \n \n );\n};\n\nexport default PreApp;\n", "import React, { useCallback, useEffect, useRef } from 'react';\nimport { bindActionCreators } from 'redux';\nimport { useDispatch, useSelector } from 'react-redux';\nimport jwt_decode from 'jwt-decode';\nimport { useLocation, useNavigate } from 'react-router-dom';\n\nimport { clearUserInformations } from '../../actions/user';\nimport { getCreatedOrderCount, getOrders } from '../../actions/order';\nimport { clearUsers, getUser } from '../../actions/organisation';\nimport { getProfile } from '../../actions/profile';\nimport { toggleNavigation } from '../../actions/event';\nimport { getSetting as getEcomSettings } from '../../actions/ecom-setting';\nimport { hasPermissionToAccessEcom, hasPermissionToWebsite } from '../../selectors/permissions';\nimport { getPermissions } from '../../actions/permissions';\nimport { requestStatus, responseStatus } from '../../shared/statuses';\nimport { getUnreadCount as getUnreadLeadCount, clear as clearLeads } from '../../actions/leads';\n\nimport Header from './header';\nimport Navigation from './navigation';\nimport InformationBar from './information-bar';\nimport { SpinnerOverlay } from '../spinner';\nimport { Alert } from '../alert';\nimport GlobalProviders from './GlobalProviders';\nimport { PortalElement, PortalNamespace } from '../../styled-components/components/Portal';\nimport { RootState } from '../../reducers';\nimport { Branch } from '../../@types/Branch';\nimport GoogleTagManager from './GoogleTagManager';\nimport Snackbar from '../Snackbar';\nimport DealerV2Check from './DealerV2Check';\n\nconst dissallowedPathOrganization = [\n '/statistics',\n '/advertisements',\n '/conversation',\n '/assignments',\n '/dealer',\n '/orders',\n '/promos',\n '/settings',\n '/profile',\n '/centralStorage',\n '/wxr',\n];\n\nconst dissallowedPathCentralStorage = [\n '/conversation',\n '/assignments',\n '/dealer',\n '/promos',\n '/profile',\n '/users',\n '/wxr',\n];\n\nconst dissallowedPathWithGuidCentralStorage = ['/accessories'];\n\nconst dissallowedPathRegular = ['/packaging', '/centralStorage'];\n\nconst isNotValidPath = (path: string, dissallowedPaths: string[]) => {\n if (path === '/') {\n return false;\n }\n return dissallowedPaths.some((x) => x.startsWith(path));\n};\n\ninterface AppProps {\n token: string;\n children: React.ReactNode;\n}\n\nconst pollTime = 4 * 60 * 1000;\nlet interval: NodeJS.Timer;\n\nconst App = ({ token, children }: AppProps) => {\n const dispatch = useDispatch();\n const location = useLocation();\n const navigate = useNavigate();\n const path = location.pathname;\n\n const selectedBranch = useSelector(\n (s) => s.organisationBranch.selectedBranch,\n );\n const branch = useSelector((s) => s.organisationBranch.branch);\n const navigationIsOpen = useSelector((s) => s.event.navigationIsOpen);\n\n const hasPermissionsRequestFailure = useSelector(\n (s) => s.permissions.responseStatus === responseStatus.FAILED,\n );\n const isPermissionsPending = useSelector(\n (s) => s.permissions.requestStatus === requestStatus.FETCHING,\n );\n const hasFetchedPermissions = useSelector((s) => !!s.permissions.permissions);\n const permissionsBranchId = useSelector((s) => s.permissions.branchId);\n\n const hasEcomPermission = useSelector(hasPermissionToAccessEcom);\n const hasWebsitePermission = useSelector(hasPermissionToWebsite);\n\n const actions = bindActionCreators(\n {\n getProfile,\n getCreatedOrderCount,\n clearUsers,\n clearUserInformations,\n toggleNavigation,\n getUnreadLeadCount,\n getEcomSettings,\n clearLeads,\n getPermissions,\n getOrders,\n getUser,\n },\n dispatch,\n );\n\n const tokenRef = useRef(token);\n tokenRef.current = token;\n\n const hasEcomPermissionRef = useRef(hasEcomPermission);\n hasEcomPermissionRef.current = hasEcomPermission;\n\n const startInterval = useCallback(() => {\n clearInterval(interval);\n interval = setInterval(() => {\n if (tokenRef.current) {\n actions.getUnreadLeadCount();\n }\n }, pollTime);\n }, []);\n\n useEffect(() => {\n if (branch) {\n if (document.body.clientWidth < 900) {\n actions.toggleNavigation();\n }\n }\n return () => {\n clearTimeout(interval);\n };\n }, []);\n\n useEffect(() => {\n if (!branch) {\n actions.clearUsers();\n actions.clearUserInformations();\n actions.clearLeads();\n } else {\n actions.getProfile();\n actions.getPermissions();\n actions.getEcomSettings();\n actions.getUnreadLeadCount();\n\n const email = token ? jwt_decode<{ email?: string }>(token)?.email : undefined;\n if (email) {\n actions.getUser(email);\n }\n clearInterval(interval);\n const pathGuid = path.substr(1, 36);\n const pathRest = path.substr(37);\n\n if (branch.isParent && isNotValidPath(path, dissallowedPathOrganization)) {\n navigate('/');\n } else if (\n branch.isCentralStorage &&\n (isNotValidPath(path, dissallowedPathCentralStorage) ||\n isNotValidPath(pathRest, dissallowedPathWithGuidCentralStorage))\n ) {\n navigate('/');\n return;\n } else {\n if (isNotValidPath(path, dissallowedPathRegular)) {\n navigate('/');\n }\n actions.getUnreadLeadCount();\n startInterval();\n }\n\n const routeGuidSupport = [\n '/website',\n '/faq',\n '/news',\n '/accessories',\n '/users',\n '/assignments',\n '/conversations',\n '/items',\n ];\n const prevPath = `/${pathGuid}`;\n if (path.startsWith('/orders/')) {\n navigate('/orders');\n } else if (\n branch.id !== pathGuid &&\n routeGuidSupport.find((x) => path.startsWith(`${prevPath}${x}`))\n ) {\n const extensionList = [\n { from: '/website/forms/', to: '/website/forms' },\n { from: '/website/campaigns/', to: '/website/campaigns' },\n { from: '/website/page/', to: '/website' },\n { from: '/accessories', to: '/accessories' },\n { from: '/assignments', to: '/assignments' },\n ];\n const extensionMatch = extensionList.find((ext) =>\n path.startsWith(`${prevPath}${ext.from}`),\n );\n if (extensionMatch) {\n navigate(`/${branch.id}${extensionMatch.to}`, { replace: true });\n } else {\n navigate(`/${branch.id}${pathRest}`, { replace: true });\n }\n }\n }\n }, [branch?.id]);\n\n useEffect(() => {\n if (permissionsBranchId) {\n if (hasEcomPermission && !path.startsWith('/orders/')) {\n actions.getCreatedOrderCount();\n }\n }\n }, [permissionsBranchId]);\n\n const shouldShowSpinner = !token || isPermissionsPending || !hasFetchedPermissions;\n\n if (shouldShowSpinner) {\n return ;\n }\n\n if (hasPermissionsRequestFailure) {\n return (\n
\n
\n
\n
\n \n
\n
\n
\n
\n );\n }\n\n const pathIsConversation = path.includes('/conversations') || path.includes('/message');\n\n if (!selectedBranch) {\n return null;\n }\n\n return (\n <>\n \n \n \n \n \n \n
\n
{children}
\n
\n
\n \n \n \n \n \n \n );\n};\n\nexport default App;\n", "import React from 'react';\nimport { useDispatch } from 'react-redux';\nimport { bindActionCreators } from 'redux';\n\nimport { toggleNavigation as _toggleNavigation } from '../../actions/event';\n\nconst Header = () => {\n const dispatch = useDispatch();\n const toggleNavigation = bindActionCreators(_toggleNavigation, dispatch);\n\n return (\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n );\n};\n\nexport default Header;\n", "import React, { useEffect } from 'react';\nimport { bindActionCreators } from 'redux';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\n\nimport { closeNavigation } from '../../actions/event';\nimport { getOrderCountForCreated } from '../../selectors/order';\nimport { ecomIsEnabled as ecomIsEnabledSelector } from '../../selectors/ecom-setting';\nimport { hasPermissionToAccessEcom } from '../../selectors/permissions';\nimport { getSelectedBranch } from '../../utils/reselectors';\nimport { selectBranch } from '../../actions/organisation';\nimport { clearAnalyticsNamespace } from '../../actions/analytics';\nimport { signOut } from '../../actions/auth';\nimport NavItem from './NavItem';\nimport WebsiteNavigation from './WebsiteNavigation';\nimport { RootState } from '../../reducers';\nimport useAssignmentsNotificationCount from '../../data/useAssignmentsNotificationCount';\nimport useUnreadConversationCount from '../../data/useUnreadConversationCount';\n\nconst isActive = (path: string, name: string) => path === name;\nconst isOpen = (path: string, name: string) => path.includes(name);\n\nconst isActiveStartsWith = (path: string, name: string) => path.startsWith(name);\n\nconst regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst getSelectedBranchFromPath = () => {\n const possibleGuid = window.location.pathname.substr(1, 35);\n return regexGuid.test(possibleGuid) ? possibleGuid : undefined;\n};\n\nconst Navigation = () => {\n const dispatch = useDispatch();\n const location = useLocation();\n const path = location.pathname;\n const unreadLeadCount = useSelector((s) => s.leads.unread);\n const selectedBranch = useSelector(\n (s) => s.organisationBranch.selectedBranch,\n );\n const branch = useSelector(getSelectedBranch);\n const newlyCreatedOrderCount = useSelector(getOrderCountForCreated);\n const ecomIsEnabled = useSelector(ecomIsEnabledSelector);\n const hasEcomPermission = useSelector(hasPermissionToAccessEcom);\n const actions = bindActionCreators(\n {\n selectBranch,\n clearAnalyticsNamespace,\n signOut,\n closeNavigation,\n },\n dispatch,\n );\n\n const newAssignmentsCount = useAssignmentsNotificationCount();\n const [unreadMessagesCount] = useUnreadConversationCount();\n\n useEffect(() => {\n if (!!selectedBranch && selectedBranch.localeCompare(getSelectedBranchFromPath() || '') !== 0) {\n actions.selectBranch(selectedBranch);\n }\n }, [selectedBranch]);\n\n if (!branch) {\n return null;\n }\n\n return (\n
\n
    \n \n {!branch?.isParent && (\n \n )}\n \n {branch?.isParent && (\n \n )}\n {!branch?.isCentralStorage && !branch?.isParent && (\n \n )}\n {!branch?.isCentralStorage && !branch?.isParent && (\n \n )}\n {!branch?.isCentralStorage && !branch?.isParent && (\n 0 ? newAssignmentsCount : 0}\n actions={actions}\n />\n )}\n {!branch?.isParent && ecomIsEnabled && hasEcomPermission && (\n 0 ? newlyCreatedOrderCount : 0\n }\n actions={actions}\n />\n )}\n {branch?.isCentralStorage && (\n \n )}\n {!branch?.isCentralStorage && !branch?.isParent && (\n \n )}\n {!branch?.isCentralStorage && !branch?.isParent && (\n \n )}\n {!branch?.isCentralStorage && (\n \n )}\n
\n {!branch?.isCentralStorage && (\n
    \n {!branch?.isParent && (\n \n )}\n {!branch?.isParent && (\n \n )}\n \n
\n )}\n \n
    \n \n \n
\n
    \n {!branch?.isParent && (\n \n )}\n {!branch?.isParent && (\n \n )}\n \n
\n
    \n \n {!branch?.isParent && !branch?.isCentralStorage && (\n \n )}\n \n
\n
\n );\n};\n\nexport default Navigation;\n", "import React, { useCallback } from 'react';\nimport { Link } from 'react-router-dom';\n\ninterface NotificationProps {\n count: number;\n icon: string;\n maxCount?: number;\n}\n\nconst Notification = ({ count, icon, maxCount }: NotificationProps) => {\n const badge = count && count > (maxCount || 0) ? `${maxCount}+` : count || null;\n return (\n \n \n \n );\n};\n\ninterface NavItemProps {\n depricated?: boolean;\n to?: string;\n title: string;\n icon: string;\n notifications?: number;\n externalLink?: boolean;\n active?: boolean;\n beta?: boolean;\n onClick?: () => void;\n actions: {\n closeNavigation: () => void;\n };\n maxNotificationCount?: number;\n}\n\nconst NavItem = ({\n depricated,\n to,\n title,\n icon,\n notifications,\n externalLink,\n active,\n beta,\n actions,\n maxNotificationCount,\n onClick,\n}: NavItemProps) => {\n const _customClick = useCallback(() => {\n if (onClick) {\n onClick();\n }\n actions.closeNavigation();\n }, [onClick]);\n\n if (externalLink) {\n return (\n
  • \n \n {notifications !== null && notifications !== undefined ? (\n \n ) : (\n \n \n \n )}\n \n {title}\n \n \n {beta &&
    Beta
    }\n
  • \n );\n } else if (!externalLink) {\n if (to) {\n return (\n
  • \n \n {notifications !== null && notifications !== undefined ? (\n \n ) : (\n \n \n \n )}\n \n {title}\n \n \n {beta &&
    Beta
    }\n
  • \n );\n }\n return (\n
  • \n \n {beta &&
    Beta
    }\n
  • \n );\n }\n return null;\n};\n\nexport default NavItem;\n", "import React, { useEffect } from 'react';\nimport useForm from '../../hooks/useForm';\nimport useSite from '../../hooks/useSite';\n\nimport NavItem from './NavItem';\n\nconst isActiveStartsWith = (path: string, name: string) => path.startsWith(name);\n\ninterface WebsiteNavigationProps {\n selectedBranch: string | null;\n path: string;\n actions: {\n closeNavigation: () => void;\n };\n}\n\nconst WebsiteNavigation = ({ selectedBranch, path, actions }: WebsiteNavigationProps) => {\n const { site, permission, getSite } = useSite();\n const { unhandledSubmissions, getUnhandledSubmissions } = useForm();\n useEffect(() => {\n if (permission) {\n getSite();\n getUnhandledSubmissions();\n }\n }, [permission]);\n\n if (!permission || !site) {\n return (\n
      \n \n
    \n );\n }\n\n return (\n
      \n \n \n \n \n \n \n
    \n );\n};\n\nexport default WebsiteNavigation;\n", "import { useCallback } from 'react';\nimport { useQuery } from 'react-query';\nimport { useSelector } from 'react-redux';\n\nimport { Assignment } from '../@types/Assignment';\nimport { ElasticSearchResponse } from '../@types/ElasticSearchResponse';\nimport { IApiResponse } from '../http';\nimport { buildAuthorizedGetRequest } from '../http/request-templates';\nimport useHttp from '../http/useHttp';\nimport { RootState } from '../reducers';\nimport { hasPermissionToAccessAssignment } from '../selectors/permissions';\nimport useAuth from '../state/Auth/useAuth';\nimport { ASSIGNMENTS_NOTIFICATION_QUERY } from './QueryKeys';\n\nconst queryfilter = encodeURIComponent('assignmentStatus=Published&recipientStatus=Pending&hits=0');\n\nconst useAssignmentsNotificationCount = (): number | undefined => {\n const { token, branchId } = useAuth();\n const { httpJson } = useHttp();\n const hasPermission = useSelector((s) => hasPermissionToAccessAssignment(s));\n\n const get = useCallback(\n async () =>\n httpJson>>(\n `/api/${branchId}/assignments?filter=${queryfilter}`,\n buildAuthorizedGetRequest(token),\n ),\n [token, branchId],\n );\n\n const { data } = useQuery>>(\n [ASSIGNMENTS_NOTIFICATION_QUERY, branchId],\n get,\n {\n retry: false,\n enabled: hasPermission,\n refetchInterval: 100 * 1000,\n refetchOnWindowFocus: false,\n },\n );\n\n const count = hasPermission ? data?.response.documentList.numberOfHits : undefined;\n\n return count;\n};\n\nexport default useAssignmentsNotificationCount;\n", "import { useQuery } from 'react-query';\n\nimport { RequestStateQuery } from '../@types/RequestStateQuery';\nimport { IApiResponse } from '../http';\nimport { buildAuthorizedGetRequest } from '../http/request-templates';\nimport useHttp from '../http/useHttp';\nimport useAuth from '../state/Auth/useAuth';\nimport { CONVERSATIONS_UNREAD_QUERY } from './QueryKeys';\n\nexport interface UnreadMessageCountResponse {\n unreadMessages: number;\n}\n\nconst useUnreadConversationCount = (skip?: boolean): [number | undefined, RequestStateQuery] => {\n const { token, branchId } = useAuth();\n const { httpJson } = useHttp();\n\n const { data, isLoading, isSuccess, isError } = useQuery<\n IApiResponse\n >(\n [CONVERSATIONS_UNREAD_QUERY, branchId],\n async () =>\n httpJson>(\n `/api/conversations/unread?id=${branchId}`,\n buildAuthorizedGetRequest(token),\n ),\n {\n refetchInterval: 60 * 1000,\n enabled: !!branchId && !skip,\n },\n );\n return [data?.response.unreadMessages, { isLoading, isSuccess, isError }];\n};\n\nexport default useUnreadConversationCount;\n", "import React, { useEffect, useRef, useState } from 'react';\nimport { bindActionCreators } from 'redux';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { getAnalytics, getAnalyticsForBranchBatch } from '../../actions/analytics';\nimport { toggleNavigation } from '../../actions/event';\n\nimport BranchList from './branch-list';\nimport Statistic from './statistic';\nimport ProfileImage from './profile-image';\nimport { RootState } from '../../reducers';\nimport { Branch } from '../../@types/Branch';\n\nlet hasFetched = false;\nlet timeout: NodeJS.Timeout;\nconst InformationBar = () => {\n const dispatch = useDispatch();\n const branches = useSelector((s) => s.organisationBranch.branches);\n const selectedBranch = useSelector(\n (s) => s.organisationBranch.selectedBranch,\n );\n\n const actions = bindActionCreators(\n {\n getAnalytics,\n getAnalyticsForBranchBatch,\n toggleNavigation,\n },\n dispatch,\n );\n\n const [isOpen, setIsOpen] = useState(false);\n const [markupVisible, setMarkupVisible] = useState(false);\n const didMount = useRef(false);\n\n useEffect(() => {\n if (selectedBranch) {\n actions.getAnalytics(selectedBranch);\n }\n return () => {\n if (timeout) clearTimeout(timeout);\n };\n }, []);\n\n const toggleDropdown = () => {\n if (timeout) clearTimeout(timeout);\n\n if (!isOpen) {\n if (!hasFetched && branches) {\n actions.getAnalyticsForBranchBatch(\n branches.filter((x) => x.id !== selectedBranch).map((x) => x.id),\n );\n hasFetched = true;\n }\n setMarkupVisible(true);\n } else {\n timeout = setTimeout(() => setMarkupVisible(false), 400);\n }\n setIsOpen(!isOpen);\n };\n\n useEffect(() => {\n if (didMount && didMount.current) {\n toggleDropdown();\n } else {\n didMount.current = true;\n }\n }, [selectedBranch]);\n\n return (\n
    \n {(isOpen || markupVisible) && (\n
    \n \n
    \n )}\n
    \n \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n );\n};\n\nexport default InformationBar;\n", "import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { getAnalytics } from '../../actions/analytics';\nimport { selectBranch, getBranch } from '../../actions/organisation';\nimport { getAnalyticsBranches } from '../../selectors/analytics';\n\nimport BranchItem from './branch-item';\nimport { RootState } from '../../reducers';\nimport { Branch } from '../../@types/Branch';\n\nconst BranchList = () => {\n const dispatch = useDispatch();\n const analytics = useSelector(getAnalyticsBranches);\n const branches = useSelector((s) => s.organisationBranch.branches);\n const selectedBranch = useSelector(\n (s) => s.organisationBranch.selectedBranch,\n );\n\n const actions = bindActionCreators(\n {\n getBranch,\n getAnalytics,\n selectBranch,\n },\n dispatch,\n );\n\n if (!selectedBranch || !branches?.length) return null;\n\n const onBranchChange = (id: string) => {\n actions.getBranch(id);\n actions.getAnalytics(id);\n actions.selectBranch(id);\n };\n\n return (\n
    \n
    \n
    Dina anl\u00E4ggningar
    \n
    Exponeringar idag
    \n
    Visningar idag
    \n
    Visat intresse idag
    \n
    Konverteringar idag
    \n
    \n
    \n {branches.map((branch) => (\n onBranchChange(branch.id)}\n active={branch.id === selectedBranch}\n analytics={analytics && analytics[branch.id]}\n />\n ))}\n
    \n );\n};\n\nexport default BranchList;\n", "import { createSelector } from 'reselect';\nimport { AnalyticsToday } from '../@types/Analytics';\nimport { RootState } from '../reducers';\n\nexport const getAnalyticsBranches = createSelector(\n (state: RootState) => state.analytics.analytics,\n (analytics) => {\n if (!analytics) return null;\n\n let a: { [key: string]: AnalyticsToday | undefined } | undefined;\n Object.keys(analytics).forEach((key) => {\n if (!a) {\n a = {};\n }\n a[key] = analytics[key]?.counts.today;\n });\n return a;\n },\n);\n\nexport const getCurrentAnalyticsBranch = createSelector(\n getAnalyticsBranches,\n (state: RootState) => state.organisationBranch.selectedBranch,\n (analytics, selectedBranch) => {\n const a = analytics ? Object.keys(analytics).find((key) => key === selectedBranch) : null;\n return a ? analytics?.[a] || null : null;\n },\n);\n", "import React from 'react';\nimport { AnalyticsToday } from '../../@types/Analytics';\nimport { Branch } from '../../@types/Branch';\n\ninterface BranchItemProps {\n branch: Branch;\n active: boolean;\n analytics?: AnalyticsToday | null;\n onClick: () => void;\n}\n\nconst BranchItem = ({ analytics, active, branch, onClick }: BranchItemProps) => (\n \n
    \n {branch.name}\n
    \n
    \n \n {analytics ? analytics.exposures : '-'}\n
    \n
    \n \n {analytics ? analytics.views : '-'}\n
    \n
    \n \n {analytics ? analytics.microConversions : '-'}\n
    \n
    \n \n {analytics ? analytics.conversions : '-'}\n
    \n
    \n {active ? (\n ''\n ) : (\n
    \n G\u00E5 till anl\u00E4ggning\n \n
    \n )}\n
    \n \n);\n\nexport default BranchItem;\n", "import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { responseStatus } from '../../shared/statuses';\n\nimport { getCurrentAnalyticsBranch } from '../../selectors/analytics';\nimport { RootState } from '../../reducers';\nimport { Branch } from '../../@types/Branch';\n\nconst Statistic = () => {\n const analytics = useSelector(getCurrentAnalyticsBranch);\n const failed = useSelector(\n (s) => s.analytics.responseStatus === responseStatus.FAILED,\n );\n const branch = useSelector((s) => s.organisationBranch.branch);\n const selectedBranch = useSelector(\n (s) => s.organisationBranch.selectedBranch,\n );\n\n if (!selectedBranch || !branch) {\n return null;\n }\n\n let failedMarkup;\n let analyticsMarkup;\n\n if (failed) {\n failedMarkup = (\n
    \n
    Vi kan inte h\u00E4mta statistik just nu...
    \n
    \n );\n } else if (analytics) {\n const { exposures, views, microConversions, conversions } = analytics;\n analyticsMarkup = (\n
    \n \n {exposures} Exponeringar idag\n \n \n {views} Annonsbes\u00F6k idag\n \n \n {microConversions} Visat intresse\n idag\n \n \n {conversions} Handlarkontakter\n idag\n \n
    \n );\n } else {\n analyticsMarkup = (\n
    \n Laddar...\n
    \n );\n }\n\n return (\n
    \n
    \n \n \n {branch.name}\n \n \n \n \n
    \n {failed ? failedMarkup : analyticsMarkup}\n
    \n );\n};\n\nexport default Statistic;\n", "import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { urls } from '../../helpers';\nimport { getProfileImageUrl } from '../../selectors/profile';\n\nconst ProfileImage = () => {\n const profileImageUrl = useSelector(getProfileImageUrl);\n return (\n
    \n
    \n \n
    \n
    \n );\n};\n\nexport default ProfileImage;\n", "import { createSelector } from 'reselect';\nimport { RootState } from '../reducers';\n\nconst getProfile = createSelector(\n (state: RootState) => state.profile.profile,\n (profile) => {\n if (!profile) return null;\n\n return profile;\n },\n);\n\nexport const getProfileImageUrl = createSelector(getProfile, (profile) =>\n !!profile && !!profile.imageUrl ? profile.imageUrl : null,\n);\n", "import React from 'react';\n\nimport PageProvider from '../../state/Page/PageProvider';\nimport SiteProvider from '../../state/Site/SiteProvider';\nimport ContactProvider from '../../state/Contact/ContactProvider';\nimport MediaProvider from '../../state/Media/MediaProvider';\nimport UnsavedChangesProvider from '../../state/UnsavedChanges/UnsavedChangesProvider';\nimport FontProvider from '../../state/Fonts/FontProvider';\nimport FormProvider from '../../state/Form/FormProvider';\nimport FormSubmissionProvider from '../../state/FormSubmission/FormSubmissionProvider';\nimport CampaignProvider from '../../state/Campaign/CampaignProvider';\nimport AuthProvider from '../../state/Auth/AuthProvider';\nimport UsersProvider from '../../state/Users/UsersProvider';\nimport DocumentProvider from '../../state/Document/DocumentProvider';\nimport SocialBoostProvider from '../../state/SocialBoost/SocialBoostProvider';\nimport RenewAdProvider from '../../state/RenewAd/RenewAdProvider';\nimport SnackbarProvider from '../../state/Snackbar/SnackbarProvider';\n\ninterface GlobalProviders {\n rawToken: string;\n selectedBranch: string;\n hasWebsitePermission: boolean;\n children: React.ReactNode;\n}\n\nconst GlobalProviders = ({\n rawToken,\n selectedBranch,\n hasWebsitePermission,\n children,\n}: GlobalProviders) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {children}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default GlobalProviders;\n", "import React, { useReducer, useMemo, useCallback } from 'react';\nimport * as http from '../../http';\nimport { PageContext, PageContextProps } from './PageContext';\nimport pageReducer, {\n pageReducerInitialState,\n REQ_GET_PAGES,\n RCV_GET_PAGES,\n ERR_GET_PAGES,\n REQ_CREATE_PAGE,\n RCV_CREATE_PAGE,\n ERR_CREATE_PAGE,\n REQ_UPDATE_PAGE,\n RCV_UPDATE_PAGE,\n ERR_UPDATE_PAGE_RESET,\n ERR_UPDATE_PAGE,\n REQ_REMOVE_PAGE,\n RCV_REMOVE_PAGE,\n ERR_REMOVE_PAGE,\n ERR_REMOVE_PAGE_RESET,\n REQ_CREATE_BRANCH_PAGE,\n RCV_CREATE_BRANCH_PAGE,\n ERR_CREATE_BRANCH_PAGE,\n REQ_GET_PAGE_LINKS,\n RCV_GET_PAGE_LINKS,\n ERR_GET_PAGE_LINKS,\n REQ_PUBLISH_PAGE,\n RCV_PUBLISH_PAGE,\n ERR_PUBLISH_PAGE,\n ERR_PUBLISH_PAGE_RESET,\n REQ_SCHEDULE_PAGE,\n RCV_SCHEDULE_PAGE,\n ERR_SCHEDULE_PAGE,\n REQ_UNPUBLISH_PAGE,\n RCV_UNPUBLISH_PAGE,\n ERR_UNPUBLISH_PAGE,\n ERR_UNPUBLISH_PAGE_RESET,\n SET_PAGE_STATUS,\n REQ_CLEAR_LOCAL_PAGE,\n REQ_GET_PAGE_PREVIEW,\n RCV_GET_PAGE_PREVIEW,\n ERR_GET_PAGE_PREVIEW,\n SET_CLEAR_PAGE_PREVIEW,\n REQ_GET_PAGE_COMPLETE,\n RCV_GET_PAGE_COMPLETE,\n ERR_GET_PAGE_COMPLETE,\n CLEAR_WARNING_PUBLISH_BROKEN_LINKS,\n ERROR_DOCUMENT_UPDATE_EXCEPTION_NEWER_EXIST,\n ERR_SCHEDULE_PAGE_RESET,\n} from './PageReducer';\nimport {\n Page,\n CreatePage,\n CreatePageOut,\n PageStructure,\n PageStatus,\n PageCompleteIn,\n PageIn,\n PageOut,\n PublishPageResponse,\n} from './PageModel';\nimport {\n buildAuthorizedDeleteRequest,\n buildAuthorizedGetRequest,\n buildAuthorizedPostRequest,\n buildAuthorizedPutRequest,\n} from '../../http/request-templates';\nimport { ModuleTypes } from './ModuleModels';\nimport { formatProperties } from './utils';\nimport * as settings from '../../helpers/settings';\n\ninterface PageProviderProps {\n token: string;\n branchId: string;\n children: React.ReactNode;\n}\n\nconst PageProvider = ({ token, branchId, children }: PageProviderProps) => {\n const [pageState, dispatch] = useReducer(pageReducer, pageReducerInitialState);\n\n const getPageComplete = useCallback(\n async (id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n if (!id) {\n throw new Error('Missing id');\n }\n try {\n dispatch({ type: REQ_GET_PAGE_COMPLETE });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/pages/${branchId}/${id}/complete`,\n buildAuthorizedGetRequest(token),\n );\n dispatch({ type: RCV_GET_PAGE_COMPLETE, pageComplete: response });\n } catch (e) {\n dispatch({ type: ERR_GET_PAGE_COMPLETE });\n }\n },\n [token, branchId],\n );\n\n const reloadPageComplete = useCallback(() => {\n if (pageState.pageComplete?.page.id) {\n getPageComplete(pageState.pageComplete.page.id);\n }\n }, [pageState.pageComplete?.page.id, token, branchId]);\n\n const publishPage = useCallback(\n async (id: string, version: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n if (!id) {\n throw new Error('Missing id');\n }\n try {\n dispatch({ type: REQ_PUBLISH_PAGE, id });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/pages/${branchId}/${id}/publish`,\n buildAuthorizedPostRequest(token, { version }),\n );\n dispatch({\n type: RCV_PUBLISH_PAGE,\n page: response.page,\n broken_links: response.broken_links,\n id,\n });\n } catch (e) {\n dispatch({ type: ERR_PUBLISH_PAGE, id, error: e as http.RequestError });\n }\n },\n [token, branchId],\n );\n\n const schedulePage = useCallback(\n async (\n id: string,\n publish_date: string | undefined | null,\n unpublish_date: string | undefined | null,\n ) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n if (!id) {\n throw new Error('Missing id');\n }\n try {\n dispatch({ type: REQ_SCHEDULE_PAGE, id });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/pages/${branchId}/${id}/schedule?${\n publish_date ? `publish_date=${publish_date}&` : ''\n }${unpublish_date ? `unpublish_date=${unpublish_date}` : ''}`,\n buildAuthorizedPostRequest(token),\n );\n dispatch({\n type: RCV_SCHEDULE_PAGE,\n page: response,\n id,\n });\n } catch (e) {\n dispatch({ type: ERR_SCHEDULE_PAGE, id, error: e as http.RequestError });\n }\n },\n [token, branchId],\n );\n\n const unpublishPage = useCallback(\n async (id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n if (!id) {\n throw new Error('Missing id');\n }\n try {\n dispatch({ type: REQ_UNPUBLISH_PAGE });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/pages/${branchId}/${id}/unpublish`,\n buildAuthorizedPostRequest(token),\n );\n dispatch({ type: RCV_UNPUBLISH_PAGE, page: response, id });\n } catch (e) {\n dispatch({ type: ERR_UNPUBLISH_PAGE, error: e as http.RequestError });\n }\n },\n [token, branchId],\n );\n\n const resetErrorUnpublish = useCallback(() => dispatch({ type: ERR_UNPUBLISH_PAGE_RESET }), []);\n\n const resetErrorPublish = useCallback(() => dispatch({ type: ERR_PUBLISH_PAGE_RESET }), []);\n\n const resetErrorSchedule = useCallback(() => dispatch({ type: ERR_SCHEDULE_PAGE_RESET }), []);\n\n const getPages = useCallback(async () => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_GET_PAGES });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/pages/${branchId}`,\n buildAuthorizedGetRequest(token),\n );\n dispatch({ type: RCV_GET_PAGES, pages: response });\n } catch (e) {\n dispatch({ type: ERR_GET_PAGES });\n }\n }, [token, branchId]);\n\n const getPageLinks = useCallback(async () => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_GET_PAGE_LINKS });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/pages/${branchId}?pagelinks=true`,\n buildAuthorizedGetRequest(token),\n );\n dispatch({ type: RCV_GET_PAGE_LINKS, pages: response });\n } catch (e) {\n dispatch({ type: ERR_GET_PAGE_LINKS });\n }\n }, [token, branchId]);\n\n const createPage = useCallback(\n async (page: CreatePageOut) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_CREATE_PAGE });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/pages/${branchId}`,\n buildAuthorizedPostRequest(token, page),\n );\n dispatch({ type: RCV_CREATE_PAGE, page: response });\n } catch (e) {\n dispatch({ type: ERR_CREATE_PAGE });\n }\n },\n [token, branchId],\n );\n\n const updatePage = useCallback(\n async (id: string, _page: CreatePageOut | PageOut) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n let heading: ModuleTypes | undefined;\n if (_page.heading) {\n heading = formatProperties(_page.heading);\n delete heading.updated;\n delete heading.updated;\n }\n\n if (_page.modules) {\n _page.modules = _page.modules.map(formatProperties);\n }\n\n const page: CreatePageOut | PageOut = {\n ..._page,\n heading,\n };\n\n try {\n dispatch({ type: REQ_UPDATE_PAGE });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/pages/${branchId}/${id}`,\n buildAuthorizedPutRequest(token, page),\n );\n dispatch({ type: RCV_UPDATE_PAGE, id, page: response });\n getPages();\n getPageComplete(id);\n } catch (e) {\n const err = (e as { content?: { detail?: { error?: string } } })?.content?.detail;\n if (err?.error === 'DocumentUpdatedException') {\n const error = err as ERROR_DOCUMENT_UPDATE_EXCEPTION_NEWER_EXIST;\n dispatch({ type: ERR_UPDATE_PAGE, error });\n } else {\n dispatch({ type: ERR_UPDATE_PAGE });\n }\n }\n },\n [token, branchId, getPages],\n );\n\n const removePage = useCallback(\n async (id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_REMOVE_PAGE });\n await http.rawJson(\n `${settings.get('cmsServiceUri')}/pages/${branchId}/${id}`,\n buildAuthorizedDeleteRequest(token),\n );\n dispatch({ type: RCV_REMOVE_PAGE, id });\n } catch (e) {\n dispatch({ type: ERR_REMOVE_PAGE, error: e as http.RequestError });\n }\n },\n [token, branchId],\n );\n\n const resetErrorRemovePage = useCallback(() => dispatch({ type: ERR_REMOVE_PAGE_RESET }), []);\n\n const createBranchPage = useCallback(\n async (branchPageId: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_CREATE_BRANCH_PAGE });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/pages/${branchId}/branch/${branchPageId}`,\n buildAuthorizedPostRequest(token),\n );\n dispatch({ type: RCV_CREATE_BRANCH_PAGE, page: response });\n } catch (e) {\n dispatch({ type: ERR_CREATE_BRANCH_PAGE });\n }\n },\n [token, branchId],\n );\n\n const getPagePreview = useCallback(\n async (id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n if (!id) {\n throw new Error('Missing id');\n }\n try {\n dispatch({ type: REQ_GET_PAGE_PREVIEW });\n const response = await http.rawTextHtml(\n `${settings.get('cmsServiceUri')}/pages/${branchId}/${id}/preview`,\n buildAuthorizedGetRequest(token, 'text/html'),\n );\n dispatch({ type: RCV_GET_PAGE_PREVIEW, pagePreview: response });\n } catch (e) {\n dispatch({ type: ERR_GET_PAGE_PREVIEW });\n }\n },\n [token, branchId],\n );\n\n const setPageStatusLocal = useCallback(\n (status: PageStatus) => dispatch({ type: SET_PAGE_STATUS, status }),\n [],\n );\n\n const resetRequestUpdate = useCallback(() => dispatch({ type: ERR_UPDATE_PAGE_RESET }), []);\n const clearLocalPage = useCallback(() => dispatch({ type: REQ_CLEAR_LOCAL_PAGE }), []);\n const clearPagePreview = useCallback(() => dispatch({ type: SET_CLEAR_PAGE_PREVIEW }), []);\n const clearWarningPublishBrokenLinks = useCallback(\n () => dispatch({ type: CLEAR_WARNING_PUBLISH_BROKEN_LINKS }),\n [],\n );\n\n // Remove children of campaign page & removes contact pages from branch\n const _pageState = useMemo(() => {\n return {\n ...pageState,\n pages: pageState.pages\n ? {\n ...pageState.pages,\n tree:\n pageState.pages?.tree.reduce((prev, curr) => {\n if (['campaigns', 'branch'].includes(curr.type)) {\n prev.push({\n ...curr,\n children:\n curr.type === 'branch'\n ? curr.children.filter((x) => x.type !== 'contact')\n : [],\n } as Page);\n } else {\n prev.push(curr);\n }\n return prev;\n }, [] as Page[]) || [],\n }\n : undefined,\n };\n }, [pageState]);\n\n const value: PageContextProps = useMemo(\n () => ({\n ..._pageState,\n getPageComplete,\n reloadPageComplete,\n getPages,\n createPage,\n updatePage,\n removePage,\n createBranchPage,\n getPageLinks,\n publishPage,\n schedulePage,\n unpublishPage,\n setPageStatusLocal,\n clearLocalPage,\n getPagePreview,\n clearPagePreview,\n resetErrorUnpublish,\n resetErrorPublish,\n resetErrorSchedule,\n clearWarningPublishBrokenLinks,\n resetRequestUpdate,\n resetErrorRemovePage,\n }),\n [pageState, token],\n );\n\n return {children};\n};\n\nexport default PageProvider;\n", "import cloneDeep from 'lodash.clonedeep';\nimport { BaseAction, CMS_PAGE_ERROR } from '../../@types/Action';\nimport { RequestError } from '../../http';\nimport {\n RequestState,\n requestInit,\n requestSuccessful,\n requestError,\n requestIdle,\n} from '../../http/request-state';\nimport { OptionProps } from '../../styled-components/components/InputSelect';\nimport {\n DefaultRequestErrorConverter,\n REQUEST_ERROR_CMS_DEFAULT,\n} from '../../utils/CmsRequestError';\nimport {\n Page,\n PageStructure,\n PageStatus,\n PageComplete,\n PageCompleteIn,\n PageIn,\n BrokenLink,\n PageOut,\n} from './PageModel';\n\nexport type ERROR_DOCUMENT_UPDATE_EXCEPTION_NEWER_EXIST = CMS_PAGE_ERROR<\n 'DocumentUpdatedException',\n PageOut\n>;\nexport type ERROR_DOCUMENT_UPDATE_EXCEPTION_TYPES =\n | ERROR_DOCUMENT_UPDATE_EXCEPTION_NEWER_EXIST\n | undefined;\n\nexport const REQ_GET_PAGES = 'REQ_GET_PAGES';\nexport const RCV_GET_PAGES = 'RCV_GET_PAGES';\nexport const ERR_GET_PAGES = 'ERR_GET_PAGES';\n\ntype ReqGetPages = BaseAction;\ntype RcvGetPages = BaseAction & {\n pages: PageStructure;\n};\ntype ErrGetPages = BaseAction;\n\nexport const REQ_GET_PAGE_COMPLETE = 'REQ_GET_PAGE_COMPLETE';\nexport const RCV_GET_PAGE_COMPLETE = 'RCV_GET_PAGE_COMPLETE';\nexport const ERR_GET_PAGE_COMPLETE = 'ERR_GET_PAGE_COMPLETE';\n\ntype REQ_GET_PAGE_COMPLETE = BaseAction;\ntype RCV_GET_PAGE_COMPLETE = BaseAction & {\n pageComplete: PageCompleteIn;\n};\ntype ERR_GET_PAGE_COMPLETE = BaseAction;\n\nexport const REQ_CREATE_PAGE = 'REQ_CREATE_PAGE';\nexport const RCV_CREATE_PAGE = 'RCV_CREATE_PAGE';\nexport const ERR_CREATE_PAGE = 'ERR_CREATE_PAGE';\n\ntype ReqCreatePage = BaseAction;\ntype RcvCreatePage = BaseAction & {\n page: PageIn;\n};\ntype ErrCreatePage = BaseAction;\n\nexport const REQ_UPDATE_PAGE = 'REQ_UPDATE_PAGE';\nexport const RCV_UPDATE_PAGE = 'RCV_UPDATE_PAGE';\nexport const ERR_UPDATE_PAGE = 'ERR_UPDATE_PAGE';\nexport const ERR_UPDATE_PAGE_RESET = 'ERR_UPDATE_PAGE_RESET';\n\ntype ReqUpdatePage = BaseAction;\ntype RcvUpdatePage = BaseAction & {\n id: string;\n page: PageIn;\n};\ntype ErrUpdatePage = BaseAction & {\n error?: ERROR_DOCUMENT_UPDATE_EXCEPTION_TYPES;\n};\ntype ERR_UPDATE_PAGE_RESET = BaseAction;\n\nexport const REQ_REMOVE_PAGE = 'REQ_REMOVE_PAGE';\nexport const RCV_REMOVE_PAGE = 'RCV_REMOVE_PAGE';\nexport const ERR_REMOVE_PAGE = 'ERR_REMOVE_PAGE';\nexport const ERR_REMOVE_PAGE_RESET = 'ERR_REMOVE_PAGE_RESET';\n\nexport const REQ_CLEAR_LOCAL_PAGE = 'REQ_CLEAR_LOCAL_PAGE';\ntype REQ_CLEAR_LOCAL_PAGE_TYPE = BaseAction;\n\ntype ReqRemovePage = BaseAction;\ntype RcvRemovePage = BaseAction & {\n id: string;\n};\ntype ErrRemovePage = BaseAction & {\n error?: RequestError;\n};\ntype ERR_REMOVE_PAGE_RESET = BaseAction;\n\nexport const REQ_PUBLISH_PAGE = 'REQ_PUBLISH_PAGE';\nexport const RCV_PUBLISH_PAGE = 'RCV_PUBLISH_PAGE';\nexport const ERR_PUBLISH_PAGE = 'ERR_PUBLISH_PAGE';\n\ntype REQ_PUBLISH_PAGE_TYPE = BaseAction & {\n id: string;\n};\ntype RCV_PUBLISH_PAGE_TYPE = BaseAction & {\n id: string;\n page: PageIn;\n broken_links: BrokenLink[];\n};\ntype ERR_PUBLISH_PAGE_TYPE = BaseAction & {\n id: string;\n error?: RequestError;\n};\n\nexport const ERR_PUBLISH_PAGE_RESET = 'ERR_PUBLISH_PAGE_RESET';\ntype ERR_PUBLISH_PAGE_RESET_TYPE = BaseAction;\n\nexport const REQ_SCHEDULE_PAGE = 'REQ_SCHEDULE_PAGE';\nexport const RCV_SCHEDULE_PAGE = 'RCV_SCHEDULE_PAGE';\nexport const ERR_SCHEDULE_PAGE = 'ERR_SCHEDULE_PAGE';\nexport const ERR_SCHEDULE_PAGE_RESET = 'ERR_SCHEDULE_PAGE_RESET';\n\ntype REQ_SCHEDULE_PAGE_TYPE = BaseAction & {\n id: string;\n};\ntype RCV_SCHEDULE_PAGE_TYPE = BaseAction & {\n id: string;\n page: PageIn;\n};\ntype ERR_SCHEDULE_PAGE_TYPE = BaseAction & {\n id: string;\n error?: RequestError;\n};\ntype ERR_SCHEDULE_PAGE_RESET_TYPE = BaseAction;\n\nexport const CLEAR_WARNING_PUBLISH_BROKEN_LINKS = 'CLEAR_WARNING_PUBLISH_BROKEN_LINKS';\ntype CLEAR_WARNING_PUBLISH_BROKEN_LINKS_TYPE = BaseAction<\n typeof CLEAR_WARNING_PUBLISH_BROKEN_LINKS\n>;\n\nexport const REQ_UNPUBLISH_PAGE = 'REQ_UNPUBLISH_PAGE';\nexport const RCV_UNPUBLISH_PAGE = 'RCV_UNPUBLISH_PAGE';\nexport const ERR_UNPUBLISH_PAGE = 'ERR_UNPUBLISH_PAGE';\nexport const ERR_UNPUBLISH_PAGE_RESET = 'ERR_UNPUBLISH_PAGE_RESET';\n\ntype REQ_UNPUBLISH_PAGE_TYPE = BaseAction;\ntype RCV_UNPUBLISH_PAGE_TYPE = BaseAction & {\n id: string;\n page: PageIn;\n};\ntype ERR_UNPUBLISH_PAGE_TYPE = BaseAction & {\n error?: RequestError;\n};\ntype ERR_UNPUBLISH_PAGE_RESET_TYPE = BaseAction;\n\nexport const REQ_CREATE_BRANCH_PAGE = 'REQ_CREATE_BRANCH_PAGE';\nexport const RCV_CREATE_BRANCH_PAGE = 'RCV_CREATE_BRANCH_PAGE';\nexport const ERR_CREATE_BRANCH_PAGE = 'ERR_CREATE_BRANCH_PAGE';\n\ntype REQ_CREATE_BRANCH_PAGE_TYPE = BaseAction;\ntype RCV_CREATE_BRANCH_PAGE_TYPE = BaseAction & {\n page: Page;\n};\ntype ERR_CREATE_BRANCH_PAGE_TYPE = BaseAction;\n\nexport const REQ_GET_PAGE_LINKS = 'REQ_GET_PAGE_LINKS';\nexport const RCV_GET_PAGE_LINKS = 'RCV_GET_PAGE_LINKS';\nexport const ERR_GET_PAGE_LINKS = 'ERR_GET_PAGE_LINKS';\n\ntype REQ_GET_PAGE_LINKS_TYPE = BaseAction;\ntype RCV_GET_PAGE_LINKS_TYPE = BaseAction & {\n pages: PageStructure;\n};\ntype ERR_GET_PAGE_LINKS_TYPE = BaseAction;\n\nexport const SET_PAGE_STATUS = 'SET_PAGE_STATUS';\ntype SET_PAGE_STATUS_TYPE = BaseAction & {\n status: PageStatus;\n};\n\nexport const REQ_GET_PAGE_PREVIEW = 'REQ_GET_PAGE_PREVIEW';\nexport const RCV_GET_PAGE_PREVIEW = 'RCV_GET_PAGE_PREVIEW';\nexport const ERR_GET_PAGE_PREVIEW = 'ERR_GET_PAGE_PREVIEW';\n\ntype REQ_GET_PAGE_PREVIEW_TYPE = BaseAction;\ntype RCV_GET_PAGE_PREVIEW_TYPE = BaseAction & {\n pagePreview?: string | null;\n};\ntype ERR_GET_PAGE_PREVIEW_TYPE = BaseAction;\n\nexport const SET_CLEAR_PAGE_PREVIEW = 'SET_CLEAR_PAGE_PREVIEW';\ntype SET_CLEAR_PAGE_PREVIEW_TYPE = BaseAction;\n\ntype PageAction =\n | ReqGetPages\n | RcvGetPages\n | ErrGetPages\n | REQ_GET_PAGE_COMPLETE\n | RCV_GET_PAGE_COMPLETE\n | ERR_GET_PAGE_COMPLETE\n | REQ_PUBLISH_PAGE_TYPE\n | RCV_PUBLISH_PAGE_TYPE\n | ERR_PUBLISH_PAGE_TYPE\n | ERR_PUBLISH_PAGE_RESET_TYPE\n | REQ_SCHEDULE_PAGE_TYPE\n | RCV_SCHEDULE_PAGE_TYPE\n | ERR_SCHEDULE_PAGE_TYPE\n | ERR_SCHEDULE_PAGE_RESET_TYPE\n | CLEAR_WARNING_PUBLISH_BROKEN_LINKS_TYPE\n | REQ_UNPUBLISH_PAGE_TYPE\n | RCV_UNPUBLISH_PAGE_TYPE\n | ERR_UNPUBLISH_PAGE_TYPE\n | ERR_UNPUBLISH_PAGE_RESET_TYPE\n | ReqCreatePage\n | RcvCreatePage\n | ErrCreatePage\n | ReqUpdatePage\n | RcvUpdatePage\n | ErrUpdatePage\n | ERR_UPDATE_PAGE_RESET\n | ReqRemovePage\n | RcvRemovePage\n | ErrRemovePage\n | ERR_REMOVE_PAGE_RESET\n | REQ_CLEAR_LOCAL_PAGE_TYPE\n | REQ_CREATE_BRANCH_PAGE_TYPE\n | RCV_CREATE_BRANCH_PAGE_TYPE\n | ERR_CREATE_BRANCH_PAGE_TYPE\n | REQ_GET_PAGE_LINKS_TYPE\n | RCV_GET_PAGE_LINKS_TYPE\n | ERR_GET_PAGE_LINKS_TYPE\n | REQ_GET_PAGE_PREVIEW_TYPE\n | RCV_GET_PAGE_PREVIEW_TYPE\n | ERR_GET_PAGE_PREVIEW_TYPE\n | SET_CLEAR_PAGE_PREVIEW_TYPE\n | SET_PAGE_STATUS_TYPE;\n\nconst findPage = (pages: Page[], id: string): Page[] => {\n if (!pages.length) {\n return [];\n }\n const a = pages\n .map((p) => {\n if (p.id === id) {\n return p;\n }\n const m = findPage(p.children, id);\n return m;\n })\n .flat();\n return a;\n};\n\nconst findInPage = (pages: Page[], id: string) => {\n const result = findPage(pages, id);\n return result.flat()?.[0];\n};\n\nconst UpdatePageRecc = (page: Page, id: string, updateValue: Page): Page => {\n return {\n ...(page.id === id ? cloneDeep(updateValue) : page),\n children: page.children.map((p) => UpdatePageRecc(p, id, updateValue)),\n };\n};\n\nconst removePage = (pages: Page[], id: string): boolean => {\n if (!pages.length) {\n return false;\n }\n\n let r = false;\n pages.forEach((p, i) => {\n if (p.id === id) {\n pages.splice(i, 1);\n r = true;\n }\n return removePage(p.children, id);\n });\n\n return r;\n};\n\nconst createInPages = (pages: PageStructure, page: Page) => {\n const _pages = cloneDeep(pages);\n if (page.parent) {\n const match = page.parent\n ? findInPage(_pages.tree, page.parent)\n : findInPage(_pages.tree, page.id);\n if (match) {\n match.children.push({ ...page, children: [] });\n match.children.sort((a, b) => (a.order ?? 9999) - (b.order ?? 9999));\n }\n } else {\n _pages.tree.push({ ...page, children: [] });\n _pages.tree.sort((a, b) => (a.order ?? 9999) - (b.order ?? 9999));\n }\n return _pages;\n};\n\nconst updateInPages = (pages: PageStructure, id: string, page: Page) => {\n const _pages = cloneDeep(pages);\n if (page.type === 'index') {\n _pages.index = {\n ...pages.index,\n ...page,\n };\n } else if (page.type === 'static-search') {\n _pages.search = {\n ...pages.search,\n ...page,\n };\n } else {\n _pages.tree = _pages.tree.map((p) => UpdatePageRecc(p, id, page));\n }\n\n return _pages;\n};\n\nconst removeInPages = (pages: PageStructure, id: string) => {\n const _pages = cloneDeep(pages);\n removePage(_pages.tree, id);\n return _pages;\n};\n\nconst dash = '\u2013';\nconst dashGenerator = (lvl: number) => (lvl > 0 ? `${dash.repeat(lvl)} ` : '');\n\nconst reccursiveOptions = (tree: Page[] | undefined, lvl = 0): OptionProps[] => {\n let arr: OptionProps[] = [];\n if (tree) {\n tree.forEach((x) => {\n if (x) {\n arr.push({\n value: x.id,\n displayName: `${dashGenerator(lvl)}${x.title}`,\n });\n }\n if (x.children) {\n arr = [...arr, ...(reccursiveOptions(x.children, lvl + 1) || [])];\n }\n });\n }\n return arr;\n};\n\ninterface PageState {\n createdPageId?: string;\n pages?: PageStructure;\n pageComplete?: PageComplete;\n pageLinks?: OptionProps[];\n pagePreview?: string;\n currentlyPublishing: string[];\n currentlyScheduling: string[];\n requestGetPages: RequestState;\n requestSchedulePage: RequestState;\n requestPublishPage: RequestState;\n requestUnpublishPage: RequestState;\n requestGetPageComplete: RequestState;\n requestCreate: RequestState;\n requestUpdate: RequestState;\n requestRemove: RequestState;\n requestCreateBranchPage: RequestState;\n requestGetPageLinks: RequestState;\n requestGetPreview: RequestState;\n errorUnpublish?: REQUEST_ERROR_CMS_DEFAULT;\n errorPublish?: REQUEST_ERROR_CMS_DEFAULT;\n errorSchedule?: REQUEST_ERROR_CMS_DEFAULT;\n errorRemovePage?: REQUEST_ERROR_CMS_DEFAULT;\n warningPublishBrokenLinks?: BrokenLink[];\n}\n\nexport const pageReducerInitialState = {\n currentlyPublishing: [],\n currentlyScheduling: [],\n requestGetPages: requestIdle(),\n requestSchedulePage: requestIdle(),\n requestPublishPage: requestIdle(),\n requestUnpublishPage: requestIdle(),\n requestGetPage: requestIdle(),\n requestCreate: requestIdle(),\n requestUpdate: requestIdle(),\n requestRemove: requestIdle(),\n requestCreateBranchPage: requestIdle(),\n requestGetPageLinks: requestIdle(),\n requestGetPreview: requestIdle(),\n requestGetPageComplete: requestIdle(),\n};\n\nconst toPageComplete = (p: PageCompleteIn): PageComplete => {\n const page: PageComplete = {\n ...p,\n page: {\n ...p.page,\n heading: p.page.heading ? [p.page.heading] : [],\n },\n };\n return page;\n};\n\nconst toPage = (p: PageIn): Page => {\n const page: Page = {\n ...p,\n heading: p.heading ? [p.heading] : [],\n };\n return page;\n};\n\nlet index: number | undefined;\nlet page: Page | undefined;\nconst pageReducer = (state: PageState, action: PageAction) => {\n const next = cloneDeep(state);\n switch (action.type) {\n case REQ_GET_PAGES:\n next.requestGetPages = requestInit();\n return next;\n case RCV_GET_PAGES:\n next.requestGetPages = requestSuccessful();\n next.pages = action.pages;\n return next;\n case ERR_GET_PAGES:\n next.requestGetPages = requestError();\n return next;\n\n case REQ_GET_PAGE_COMPLETE:\n next.requestGetPageComplete = requestInit();\n //next.pageComplete = undefined;\n return next;\n case RCV_GET_PAGE_COMPLETE:\n next.requestGetPageComplete = requestSuccessful();\n next.pageComplete = toPageComplete(action.pageComplete);\n return next;\n case ERR_GET_PAGE_COMPLETE:\n next.requestGetPageComplete = requestError();\n return next;\n\n case REQ_CLEAR_LOCAL_PAGE:\n next.requestGetPageComplete = requestIdle();\n next.pageComplete = undefined;\n return next;\n\n case REQ_CREATE_PAGE:\n next.requestCreate = requestInit();\n return next;\n case RCV_CREATE_PAGE:\n next.requestCreate = requestSuccessful();\n page = toPage(action.page);\n next.createdPageId = action.page.id;\n if (next.pages) {\n next.pages = createInPages(next.pages, page);\n }\n return next;\n case ERR_CREATE_PAGE:\n next.requestCreate = requestError();\n return next;\n\n case REQ_UPDATE_PAGE:\n next.requestUpdate = requestInit();\n return next;\n case RCV_UPDATE_PAGE:\n next.requestUpdate = requestSuccessful();\n page = toPage(action.page);\n if (next.pages) {\n next.pages = updateInPages(next.pages, action.id, page);\n }\n\n if (next.pageComplete?.page && next.pageComplete.page.id === action.id) {\n next.pageComplete.page = page;\n }\n\n return next;\n case ERR_UPDATE_PAGE:\n next.requestUpdate = requestError(action.error);\n return next;\n\n case ERR_UPDATE_PAGE_RESET:\n next.requestUpdate = requestIdle();\n return next;\n\n case REQ_REMOVE_PAGE:\n next.requestRemove = requestInit();\n return next;\n case RCV_REMOVE_PAGE:\n next.requestRemove = requestSuccessful();\n if (next.pages) {\n next.pages = removeInPages(next.pages, action.id);\n }\n return next;\n case ERR_REMOVE_PAGE:\n next.requestRemove = requestError();\n next.errorRemovePage = DefaultRequestErrorConverter(action?.error);\n\n return next;\n case ERR_REMOVE_PAGE_RESET:\n next.errorRemovePage = undefined;\n return next;\n\n case REQ_PUBLISH_PAGE:\n next.requestPublishPage = requestInit();\n next.currentlyPublishing.push(action.id);\n next.errorPublish = undefined;\n return next;\n case RCV_PUBLISH_PAGE:\n next.requestPublishPage = requestSuccessful();\n page = toPage(action.page);\n if (next.pageComplete) {\n next.pageComplete.page = page;\n } else {\n next.pageComplete = {\n breadcrumbs: [],\n url: '',\n page,\n published: true,\n };\n }\n if (next.pages) {\n next.pages = updateInPages(next.pages, action.id, page);\n }\n\n if (action.broken_links?.length) {\n next.warningPublishBrokenLinks = action.broken_links;\n }\n\n index = next.currentlyPublishing.indexOf(action.id);\n if (index > -1) {\n next.currentlyPublishing.splice(index, 1);\n }\n\n return next;\n case ERR_PUBLISH_PAGE:\n next.requestPublishPage = requestError();\n index = next.currentlyPublishing.indexOf(action.id);\n if (index > -1) {\n next.currentlyPublishing.splice(index, 1);\n }\n next.errorPublish = DefaultRequestErrorConverter(action?.error);\n return next;\n case ERR_PUBLISH_PAGE_RESET:\n next.errorPublish = undefined;\n return next;\n\n case REQ_SCHEDULE_PAGE:\n next.requestSchedulePage = requestInit();\n next.currentlyScheduling.push(action.id);\n return next;\n case RCV_SCHEDULE_PAGE:\n next.requestSchedulePage = requestSuccessful();\n page = toPage(action.page);\n if (next.pageComplete) {\n next.pageComplete.page = page;\n } else {\n next.pageComplete = {\n breadcrumbs: [],\n url: '',\n page,\n published: true,\n };\n }\n if (next.pages) {\n next.pages = updateInPages(next.pages, action.id, page);\n }\n\n /*\n if (action.broken_links?.length) {\n next.warningPublishBrokenLinks = action.broken_links;\n }\n */\n\n index = next.currentlyScheduling.indexOf(action.id);\n if (index > -1) {\n next.currentlyScheduling.splice(index, 1);\n }\n\n return next;\n case ERR_SCHEDULE_PAGE:\n next.requestSchedulePage = requestError();\n index = next.currentlyScheduling.indexOf(action.id);\n if (index > -1) {\n next.currentlyScheduling.splice(index, 1);\n }\n next.errorSchedule = DefaultRequestErrorConverter(action?.error);\n return next;\n case ERR_SCHEDULE_PAGE_RESET:\n next.errorSchedule = undefined;\n return next;\n\n case CLEAR_WARNING_PUBLISH_BROKEN_LINKS:\n next.warningPublishBrokenLinks = undefined;\n return next;\n\n case REQ_UNPUBLISH_PAGE:\n next.requestUnpublishPage = requestInit();\n next.errorUnpublish = undefined;\n return next;\n case RCV_UNPUBLISH_PAGE:\n next.requestUnpublishPage = requestSuccessful();\n page = toPage(action.page);\n if (next.pageComplete) {\n next.pageComplete.page = page;\n } else {\n next.pageComplete = {\n breadcrumbs: [],\n url: '',\n page,\n published: false,\n };\n }\n if (next.pages) {\n next.pages = updateInPages(next.pages, action.id, page);\n }\n return next;\n case ERR_UNPUBLISH_PAGE:\n next.requestUnpublishPage = requestError();\n next.errorUnpublish = DefaultRequestErrorConverter(action?.error);\n return next;\n case ERR_UNPUBLISH_PAGE_RESET:\n next.errorUnpublish = undefined;\n return next;\n\n case REQ_CREATE_BRANCH_PAGE:\n next.requestCreateBranchPage = requestInit();\n return next;\n case RCV_CREATE_BRANCH_PAGE:\n next.requestCreateBranchPage = requestSuccessful();\n if (next.pages) {\n next.pages.branch_pages.push(action.page);\n index = next.pages.branches_without_pages.findIndex((x) => x.id === action.page.id);\n if (index > -1) {\n next.pages.branches_without_pages.splice(index, 1);\n }\n }\n\n return next;\n case ERR_CREATE_BRANCH_PAGE:\n next.requestCreateBranchPage = requestError();\n return next;\n\n case REQ_GET_PAGE_LINKS:\n next.requestGetPageLinks = requestInit();\n return next;\n case RCV_GET_PAGE_LINKS:\n next.requestGetPageLinks = requestSuccessful();\n next.pageLinks = [\n { displayName: action.pages.index.name, value: action.pages.index.id },\n { displayName: action.pages.search.name, value: action.pages.search.id },\n ...action.pages.branch_pages.map((x) => ({ displayName: x.name, value: x.id })),\n ...reccursiveOptions(action.pages.tree),\n ];\n return next;\n case ERR_GET_PAGE_LINKS:\n next.requestGetPageLinks = requestError();\n return next;\n\n case REQ_GET_PAGE_PREVIEW:\n next.requestGetPreview = requestInit();\n next.pagePreview = undefined;\n return next;\n case RCV_GET_PAGE_PREVIEW:\n next.requestGetPreview = requestSuccessful();\n next.pagePreview = action.pagePreview || undefined;\n return next;\n case ERR_GET_PAGE_PREVIEW:\n next.requestGetPreview = requestError();\n return next;\n\n case SET_CLEAR_PAGE_PREVIEW:\n next.pagePreview = undefined;\n return next;\n\n case SET_PAGE_STATUS:\n if (next.pageComplete) {\n next.pageComplete.page.status = action.status;\n }\n return next;\n\n default:\n throw new Error(`Unsupported action type in pageReducer`);\n }\n};\n\nexport default pageReducer;\n", "import { Link } from '../../@types/Modules';\nimport { ModuleTypes } from './ModuleModels';\n\ninterface FormatOptionalLinkPropertyProps {\n primary_button?: Link;\n secondary_button?: Link;\n link?: Link;\n}\n\nconst FormatOptionalLinkProperty = (\n module: FormatOptionalLinkPropertyProps | undefined,\n key: keyof FormatOptionalLinkPropertyProps,\n) => {\n if (module?.[key] && !module?.[key]?.name && !module?.[key]?.url && !module?.[key]?.page_id) {\n delete module[key];\n } else if (module?.[key]?.page_id) {\n delete module?.[key]?.url;\n } else if (module?.[key]?.url) {\n delete module?.[key]?.page_id;\n }\n};\n\ninterface FormatRequiredLinkPropertyProps {\n link?: Link;\n}\n\nconst FormatRequiredLinkProperty = (\n module: FormatRequiredLinkPropertyProps,\n key: keyof FormatRequiredLinkPropertyProps,\n) => {\n if (module?.[key]?.page_id) {\n delete module?.[key]?.url;\n } else if (module?.[key]?.url) {\n delete module?.[key]?.page_id;\n }\n};\n\nconst FormatRequiredLink = (link: Link) => {\n if (link.page_id) {\n delete link.url;\n } else if (link.url) {\n delete link.page_id;\n }\n};\n\nexport const formatProperties = (module: ModuleTypes) => {\n switch (module.type) {\n case 'hero':\n FormatOptionalLinkProperty(module, 'primary_button');\n FormatOptionalLinkProperty(module, 'secondary_button');\n if (!module.video) {\n delete module.video;\n }\n if (!module.image) {\n delete module.image;\n }\n return module;\n case 'image-and-text':\n FormatOptionalLinkProperty(module, 'link');\n return module;\n case 'call-to-action':\n FormatRequiredLinkProperty(module, 'link');\n return module;\n case 'link-cloud':\n module.links.forEach((link) => {\n FormatRequiredLink(link);\n });\n return module;\n case 'link-gallery':\n module.cards.forEach((card) => {\n FormatRequiredLinkProperty(card, 'link');\n });\n return module;\n case 'link-grid':\n module.items.forEach((item) => {\n FormatRequiredLinkProperty(item, 'link');\n });\n return module;\n default:\n return module;\n }\n};\n", "import React, { useReducer, useMemo, useCallback } from 'react';\nimport * as http from '../../http';\nimport {\n buildAuthorizedDeleteRequest,\n buildAuthorizedGetRequest,\n buildAuthorizedPostRequest,\n buildAuthorizedPutRequest,\n} from '../../http/request-templates';\nimport { SiteContext, SiteContextProps } from './SiteContext';\nimport { FontResponse, Site } from './SiteModel';\nimport siteReducer, {\n RCV_GET_SITE,\n REQ_GET_SITE,\n ERR_GET_SITE,\n siteReducerInitialState,\n REQ_CREATE_SITE,\n RCV_CREATE_SITE,\n ERR_CREATE_SITE,\n REQ_UPDATE_SITE,\n RCV_UPDATE_SITE,\n ERR_UPDATE_SITE,\n REQ_PUBLISH_SITE,\n RCV_PUBLISH_SITE,\n ERR_PUBLISH_SITE,\n REQ_REMOVE_SITE,\n RCV_REMOVE_SITE,\n ERR_REMOVE_SITE,\n REQ_GET_FONTS,\n RCV_GET_FONTS,\n ERR_GET_FONTS,\n ERR_UPDATE_SITE_RESET,\n REQ_UPDATE_HOST,\n RCV_UPDATE_HOST,\n ERR_UPDATE_HOST,\n REQ_REMOVE_HOST,\n RCV_REMOVE_HOST,\n ERR_REMOVE_HOST,\n} from './SiteReducer';\nimport * as settings from '../../helpers/settings';\n\ninterface SiteProviderProps {\n token: string;\n branchId: string;\n permission: boolean;\n children: React.ReactNode;\n}\n\nconst SiteProvider = ({ token, branchId, permission, children }: SiteProviderProps) => {\n const [siteState, dispatch] = useReducer(siteReducer, siteReducerInitialState);\n\n const getSite = useCallback(async () => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_GET_SITE });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/sites/${branchId}`,\n buildAuthorizedGetRequest(token),\n );\n dispatch({ type: RCV_GET_SITE, site: response });\n } catch (e) {\n const requestError = e as http.RequestError;\n if (requestError.statusCode === 404) {\n dispatch({ type: RCV_GET_SITE, site: undefined });\n } else {\n dispatch({ type: ERR_GET_SITE });\n }\n }\n }, [token, branchId]);\n\n const createSite = useCallback(async () => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_CREATE_SITE });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/sites/${branchId}`,\n buildAuthorizedPostRequest(token, {}),\n );\n dispatch({ type: RCV_CREATE_SITE, site: response });\n } catch (e) {\n dispatch({ type: ERR_CREATE_SITE, error: e as http.RequestError });\n }\n }, [token, branchId]);\n\n const removeSite = useCallback(async () => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_REMOVE_SITE });\n await http.rawJson(\n `${settings.get('cmsServiceUri')}/sites/${branchId}`,\n buildAuthorizedDeleteRequest(token),\n );\n\n dispatch({ type: RCV_REMOVE_SITE });\n } catch (e) {\n dispatch({ type: ERR_REMOVE_SITE });\n }\n }, [token, branchId]);\n\n const updateSite = useCallback(\n async (site: Site) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n if (!site) {\n throw new Error('Missing model');\n }\n\n if (!site.favicon) {\n delete site.favicon;\n }\n\n if (!site.header_logo) {\n site.header_logo = null;\n }\n\n if (!site.ecom_logo) {\n site.ecom_logo = null;\n }\n\n if (site?.wip_settings && !site.wip_settings?.logo) {\n site.wip_settings.logo = null;\n }\n\n if (!site.footer.logo) {\n site.footer.logo = null;\n }\n\n if (!site.footer.logo) {\n site.footer.logo = null;\n }\n\n site.footer.navigation.forEach((nav) => {\n if (!nav.page_id) {\n delete nav.page_id;\n }\n if (nav.page_id || !nav.url) {\n delete nav.url;\n }\n });\n\n site.navigation.forEach((nav) => {\n if (!nav.page_id) {\n delete nav.page_id;\n }\n if (nav.page_id || !nav.url) {\n delete nav.url;\n }\n });\n\n if (site.footer.integrity_policy?.link) {\n if (!site.footer.integrity_policy.link.page_id) {\n delete site.footer.integrity_policy.link.page_id;\n }\n if (site.footer.integrity_policy.link.page_id || !site.footer.integrity_policy.link.url) {\n delete site.footer.integrity_policy.link.url;\n }\n }\n\n if (site.footer.cookie_policy?.link) {\n if (!site.footer.cookie_policy.link.page_id) {\n delete site.footer.cookie_policy.link.page_id;\n }\n if (site.footer.cookie_policy.link.page_id || !site.footer.cookie_policy.link.url) {\n delete site.footer.cookie_policy.link.url;\n }\n }\n\n try {\n dispatch({ type: REQ_UPDATE_SITE });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/sites/${branchId}`,\n buildAuthorizedPutRequest(token, site),\n );\n dispatch({ type: RCV_UPDATE_SITE, site: response });\n } catch (e) {\n dispatch({ type: ERR_UPDATE_SITE, error: e as http.RequestError });\n }\n },\n [token, branchId],\n );\n\n const resetErrorUpdate = useCallback(() => dispatch({ type: ERR_UPDATE_SITE_RESET }), []);\n\n const publishSite = useCallback(async () => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_PUBLISH_SITE });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/sites/${branchId}/publish`,\n buildAuthorizedPostRequest(token),\n );\n dispatch({ type: RCV_PUBLISH_SITE, site: response });\n } catch (e) {\n dispatch({ type: ERR_PUBLISH_SITE });\n }\n }, [token, branchId]);\n\n const getFonts = useCallback(async () => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_GET_FONTS });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/fonts/${branchId}/all`,\n buildAuthorizedGetRequest(token),\n );\n dispatch({ type: RCV_GET_FONTS, fonts: response });\n } catch (e) {\n dispatch({ type: ERR_GET_FONTS });\n }\n }, [token, branchId]);\n\n const updateHost = useCallback(\n async (host: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n try {\n dispatch({ type: REQ_UPDATE_HOST });\n await http.rawJson(\n `${settings.get('cmsServiceUri')}/sites/${branchId}/host`,\n buildAuthorizedPutRequest(token, { host }),\n );\n dispatch({ type: RCV_UPDATE_HOST, host });\n } catch (e) {\n dispatch({ type: ERR_UPDATE_HOST });\n }\n },\n [token],\n );\n\n const removeHost = useCallback(async () => {\n if (!token) {\n throw new Error('Missing token');\n }\n try {\n dispatch({ type: REQ_REMOVE_HOST });\n await http.rawJson(\n `${settings.get('cmsServiceUri')}/sites/${branchId}/host`,\n buildAuthorizedDeleteRequest(token),\n );\n dispatch({ type: RCV_REMOVE_HOST });\n } catch (e) {\n dispatch({ type: ERR_REMOVE_HOST });\n }\n }, [token]);\n\n const value: SiteContextProps = useMemo(\n () => ({\n ...siteState,\n permission,\n getSite,\n createSite,\n updateSite,\n publishSite,\n removeSite,\n getFonts,\n resetErrorUpdate,\n updateHost,\n removeHost,\n }),\n [siteState, token],\n );\n\n return {children};\n};\n\nexport default SiteProvider;\n", "import cloneDeep from 'lodash.clonedeep';\nimport { BaseAction } from '../../@types/Action';\nimport { RequestError } from '../../http';\nimport {\n RequestState,\n requestInit,\n requestSuccessful,\n requestError,\n requestIdle,\n} from '../../http/request-state';\nimport { OptOption } from '../../styled-components/components/InputSelect/InputOptSelect';\nimport { DefaultRequestErrorConverter } from '../../utils/CmsRequestError';\nimport { FontResponse, REQUEST_ERROR_UPDATE_SITE_SETTINGS, Site } from './SiteModel';\n\nexport const REQ_GET_SITE = 'REQ_GET_SITE';\nexport const RCV_GET_SITE = 'RCV_GET_SITE';\nexport const ERR_GET_SITE = 'ERR_GET_SITE';\n\ntype REQ_GET_SITE_TYPE = BaseAction;\ntype RCV_GET_SITE_TYPE = BaseAction & {\n site?: Site;\n};\ntype ERR_GET_SITE_TYPE = BaseAction;\n\nexport const REQ_CREATE_SITE = 'REQ_CREATE_SITE';\nexport const RCV_CREATE_SITE = 'RCV_CREATE_SITE';\nexport const ERR_CREATE_SITE = 'ERR_CREATE_SITE';\n\ntype REQ_CREATE_SITE_TYPE = BaseAction;\ntype RCV_CREATE_SITE_TYPE = BaseAction & {\n site: Site;\n};\ntype ERR_CREATE_SITE_TYPE = BaseAction & {\n error?: RequestError;\n};\n\nexport const REQ_UPDATE_SITE = 'REQ_UPDATE_SITE';\nexport const RCV_UPDATE_SITE = 'RCV_UPDATE_SITE';\nexport const ERR_UPDATE_SITE = 'ERR_UPDATE_SITE';\nexport const ERR_UPDATE_SITE_RESET = 'ERR_UPDATE_SITE_RESET';\n\ntype REQ_UPDATE_SITE_TYPE = BaseAction;\ntype RCV_UPDATE_SITE_TYPE = BaseAction & {\n site: Site;\n};\ntype ERR_UPDATE_SITE_TYPE = BaseAction & {\n error?: RequestError;\n};\ntype ERR_UPDATE_SITE_RESET_TYPE = BaseAction & {\n error?: RequestError;\n};\n\nexport const REQ_PUBLISH_SITE = 'REQ_PUBLISH_SITE';\nexport const RCV_PUBLISH_SITE = 'RCV_PUBLISH_SITE';\nexport const ERR_PUBLISH_SITE = 'ERR_PUBLISH_SITE';\n\ntype REQ_PUBLISH_SITE_TYPE = BaseAction;\ntype RCV_PUBLISH_SITE_TYPE = BaseAction & {\n site: Site;\n};\ntype ERR_PUBLISH_SITE_TYPE = BaseAction;\n\nexport const REQ_REMOVE_SITE = 'REQ_REMOVE_SITE';\nexport const RCV_REMOVE_SITE = 'RCV_REMOVE_SITE';\nexport const ERR_REMOVE_SITE = 'ERR_REMOVE_SITE';\n\ntype REQ_REMOVE_SITE_TYPE = BaseAction;\ntype RCV_REMOVE_SITE_TYPE = BaseAction;\ntype ERR_REMOVE_SITE_TYPE = BaseAction;\n\nexport const REQ_GET_FONTS = 'REQ_GET_FONTS';\nexport const RCV_GET_FONTS = 'RCV_GET_FONTS';\nexport const ERR_GET_FONTS = 'ERR_GET_FONTS';\n\ntype REQ_GET_FONTS_TYPE = BaseAction;\ntype RCV_GET_FONTS_TYPE = BaseAction & {\n fonts?: FontResponse;\n};\ntype ERR_GET_FONTS_TYPE = BaseAction;\n\nexport const REQ_UPDATE_HOST = 'REQ_UPDATE_HOST';\nexport const RCV_UPDATE_HOST = 'RCV_UPDATE_HOST';\nexport const ERR_UPDATE_HOST = 'ERR_UPDATE_HOST';\n\ntype REQ_UPDATE_HOST_TYPE = BaseAction;\ntype RCV_UPDATE_HOST_TYPE = BaseAction & {\n host: string;\n};\ntype ERR_UPDATE_HOST_TYPE = BaseAction;\n\nexport const REQ_REMOVE_HOST = 'REQ_REMOVE_HOST';\nexport const RCV_REMOVE_HOST = 'RCV_REMOVE_HOST';\nexport const ERR_REMOVE_HOST = 'ERR_REMOVE_HOST';\n\ntype REQ_REMOVE_HOST_TYPE = BaseAction;\ntype RCV_REMOVE_HOST_TYPE = BaseAction;\ntype ERR_REMOVE_HOST_TYPE = BaseAction;\n\ntype SiteAction =\n | REQ_GET_SITE_TYPE\n | RCV_GET_SITE_TYPE\n | ERR_GET_SITE_TYPE\n | REQ_CREATE_SITE_TYPE\n | RCV_CREATE_SITE_TYPE\n | ERR_CREATE_SITE_TYPE\n | REQ_UPDATE_SITE_TYPE\n | RCV_UPDATE_SITE_TYPE\n | ERR_UPDATE_SITE_TYPE\n | ERR_UPDATE_SITE_RESET_TYPE\n | REQ_PUBLISH_SITE_TYPE\n | RCV_PUBLISH_SITE_TYPE\n | ERR_PUBLISH_SITE_TYPE\n | REQ_REMOVE_SITE_TYPE\n | RCV_REMOVE_SITE_TYPE\n | ERR_REMOVE_SITE_TYPE\n | REQ_GET_FONTS_TYPE\n | RCV_GET_FONTS_TYPE\n | ERR_GET_FONTS_TYPE\n | REQ_UPDATE_HOST_TYPE\n | RCV_UPDATE_HOST_TYPE\n | ERR_UPDATE_HOST_TYPE\n | REQ_REMOVE_HOST_TYPE\n | RCV_REMOVE_HOST_TYPE\n | ERR_REMOVE_HOST_TYPE;\n\ninterface SiteState {\n site?: Site;\n fonts?: OptOption[];\n requestGet: RequestState;\n requestCreate: RequestState;\n requestUpdate: RequestState;\n requestPublish: RequestState;\n requestRemove: RequestState;\n requestGetFonts: RequestState;\n requestUpdateHost: RequestState;\n requestRemoveHost: RequestState;\n errorCreate?: any;\n errorUpdate?: REQUEST_ERROR_UPDATE_SITE_SETTINGS;\n}\n\nexport const siteReducerInitialState: SiteState = {\n requestGet: requestIdle(),\n requestCreate: requestIdle(),\n requestUpdate: requestIdle(),\n requestPublish: requestIdle(),\n requestRemove: requestIdle(),\n requestGetFonts: requestIdle(),\n requestUpdateHost: requestIdle(),\n requestRemoveHost: requestIdle(),\n};\n\nconst siteReducer = (state: SiteState, action: SiteAction) => {\n const next = cloneDeep(state);\n switch (action.type) {\n case REQ_GET_SITE:\n next.requestGet = requestInit();\n return next;\n case RCV_GET_SITE:\n next.requestGet = requestSuccessful();\n next.site = action.site;\n return next;\n case ERR_GET_SITE:\n next.requestGet = requestError();\n return next;\n\n case REQ_CREATE_SITE:\n next.requestCreate = requestInit();\n return next;\n case RCV_CREATE_SITE:\n next.requestCreate = requestSuccessful();\n next.site = action.site;\n return next;\n case ERR_CREATE_SITE:\n next.requestCreate = requestError();\n next.errorCreate = DefaultRequestErrorConverter(action?.error);\n return next;\n\n case REQ_UPDATE_SITE:\n next.requestUpdate = requestInit();\n return next;\n case RCV_UPDATE_SITE:\n next.requestUpdate = requestSuccessful();\n next.site = action.site;\n return next;\n case ERR_UPDATE_SITE:\n next.requestUpdate = requestError();\n next.errorUpdate = DefaultRequestErrorConverter(action?.error);\n return next;\n case ERR_UPDATE_SITE_RESET:\n next.errorUpdate = undefined;\n return next;\n\n case REQ_PUBLISH_SITE:\n next.requestPublish = requestInit();\n return next;\n case RCV_PUBLISH_SITE:\n next.requestPublish = requestSuccessful();\n return next;\n case ERR_PUBLISH_SITE:\n next.requestPublish = requestError();\n return next;\n\n case REQ_REMOVE_SITE:\n next.requestRemove = requestInit();\n return next;\n case RCV_REMOVE_SITE:\n next.requestRemove = requestSuccessful();\n return next;\n case ERR_REMOVE_SITE:\n next.requestRemove = requestError();\n return next;\n\n case REQ_GET_FONTS:\n next.requestGetFonts = requestInit();\n return next;\n case RCV_GET_FONTS:\n next.requestGetFonts = requestSuccessful();\n\n next.fonts = [\n {\n displayName: 'Utvalda Regular',\n options: action?.fonts?.regular?.map((value) => ({ value })),\n },\n {\n displayName: 'Utvalda Bold',\n options: action?.fonts?.bold?.map((value) => ({ value })),\n },\n {\n displayName: 'Alla fonter',\n options:\n action?.fonts?.all?.map((value) => ({ value })) ||\n (action?.fonts as unknown as string[]).map((value) => ({ value })),\n },\n ];\n return next;\n case ERR_GET_FONTS:\n next.requestGetFonts = requestError();\n return next;\n\n case REQ_UPDATE_HOST:\n next.requestUpdateHost = requestInit();\n return next;\n case RCV_UPDATE_HOST:\n next.requestUpdateHost = requestSuccessful();\n if (next.site) {\n next.site.host = action.host;\n }\n return next;\n case ERR_UPDATE_HOST:\n next.requestUpdateHost = requestError();\n return next;\n\n case REQ_REMOVE_HOST:\n next.requestRemoveHost = requestInit();\n return next;\n case RCV_REMOVE_HOST:\n next.requestRemoveHost = requestSuccessful();\n if (next.site) {\n next.site.host = undefined;\n }\n return next;\n case ERR_REMOVE_HOST:\n next.requestRemoveHost = requestError();\n return next;\n\n default:\n throw new Error(`Unsupported action type`);\n }\n};\n\nexport default siteReducer;\n", "import React, { useReducer, useMemo, useCallback } from 'react';\n\nimport {\n buildAuthorizedDeleteRequest,\n buildAuthorizedGetRequest,\n buildAuthorizedPostRequest,\n buildAuthorizedPutRequest,\n} from '../../http/request-templates';\nimport useHttp from '../../http/useHttp';\nimport { ContactContext, ContactContextProps } from './ContactContext';\nimport { Contact, ContactFilters, CreateContact } from './ContactModel';\nimport contactReducer, {\n REQ_GET_CONTACTS,\n RCV_GET_CONTACTS,\n ERR_GET_CONTACTS,\n REQ_GET_CONTACT_FILTERS,\n RCV_GET_CONTACT_FILTERS,\n ERR_GET_CONTACT_FILTERS,\n REQ_CREATE_CONTACT,\n RCV_CREATE_CONTACT,\n ERR_CREATE_CONTACT,\n REQ_UPDATE_CONTACT,\n RCV_UPDATE_CONTACT,\n ERR_UPDATE_CONTACT,\n REQ_REMOVE_CONTACT,\n RCV_REMOVE_CONTACT,\n ERR_REMOVE_CONTACT,\n REQ_UPDATE_CONTACT_SORT_ORDER,\n RCV_UPDATE_CONTACT_SORT_ORDER,\n ERR_UPDATE_CONTACT_SORT_ORDER,\n contactReducerInitialState,\n} from './ContactReducer';\nimport * as settings from '../../helpers/settings';\n\ninterface ContactProviderProps {\n token: string;\n branchId: string;\n children: React.ReactNode;\n}\n\nconst ContactProvider = ({ token, branchId, children }: ContactProviderProps) => {\n const { httpJson } = useHttp();\n const [contactState, dispatch] = useReducer(contactReducer, contactReducerInitialState);\n\n const getContacts = useCallback(async () => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_GET_CONTACTS });\n const response = await httpJson(\n `${settings.get('cmsServiceUri')}/contacts/${branchId}`,\n buildAuthorizedGetRequest(token),\n );\n // http.validateResponse(response);\n dispatch({ type: RCV_GET_CONTACTS, contacts: response });\n } catch (e) {\n dispatch({ type: ERR_GET_CONTACTS });\n }\n }, [token, branchId]);\n\n const getContactFilters = useCallback(async () => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_GET_CONTACT_FILTERS });\n const response = await httpJson(\n `${settings.get('cmsServiceUri')}/contacts/${branchId}/filters`,\n buildAuthorizedGetRequest(token),\n );\n // http.validateResponse(response);\n dispatch({ type: RCV_GET_CONTACT_FILTERS, contactFilters: response });\n } catch (e) {\n dispatch({ type: ERR_GET_CONTACT_FILTERS });\n }\n }, [token, branchId]);\n\n const createContact = useCallback(\n async (contact: CreateContact) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n if (!contact.image) {\n delete contact.image;\n }\n\n try {\n dispatch({ type: REQ_CREATE_CONTACT });\n const response = await httpJson(\n `${settings.get('cmsServiceUri')}/contacts/${branchId}`,\n buildAuthorizedPostRequest(token, contact),\n );\n // http.validateResponse(response);\n dispatch({ type: RCV_CREATE_CONTACT, contact: response });\n } catch (e) {\n dispatch({ type: ERR_CREATE_CONTACT });\n }\n },\n [token, branchId],\n );\n\n const updateContact = useCallback(\n async (contact: CreateContact, id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n if (!contact.image) {\n delete contact.image;\n }\n\n try {\n dispatch({ type: REQ_UPDATE_CONTACT });\n const response = await httpJson(\n `${settings.get('cmsServiceUri')}/contacts/${branchId}/${id}`,\n buildAuthorizedPutRequest(token, contact),\n );\n // http.validateResponse(response);\n dispatch({ type: RCV_UPDATE_CONTACT, contact: response });\n } catch (e) {\n dispatch({ type: ERR_UPDATE_CONTACT });\n }\n },\n [token, branchId],\n );\n\n const updateSortOrder = useCallback(\n async (sort_order: { [key: string]: number | undefined }) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n try {\n dispatch({ type: REQ_UPDATE_CONTACT_SORT_ORDER });\n await httpJson(`${settings.get('cmsServiceUri')}/contacts/${branchId}/sort_order`, {\n ...buildAuthorizedPutRequest(token, { sort_order }),\n snackbarOptions: {\n onError: <>Ett fel uppstod och det gick inte att uppdatera sorteringsordningen.,\n },\n });\n // http.validateResponse(response);\n dispatch({ type: RCV_UPDATE_CONTACT_SORT_ORDER, sort_order });\n } catch (e) {\n dispatch({ type: ERR_UPDATE_CONTACT_SORT_ORDER });\n }\n },\n [token, branchId],\n );\n\n const removeContact = useCallback(\n async (id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n try {\n dispatch({ type: REQ_REMOVE_CONTACT });\n await httpJson(\n `${settings.get('cmsServiceUri')}/contacts/${branchId}/${id}`,\n buildAuthorizedDeleteRequest(token),\n );\n dispatch({ type: RCV_REMOVE_CONTACT, id });\n } catch (e) {\n dispatch({ type: ERR_REMOVE_CONTACT });\n }\n },\n [token, branchId],\n );\n\n const value: ContactContextProps = useMemo(\n () => ({\n ...contactState,\n branchId,\n getContacts,\n getContactFilters,\n createContact,\n updateContact,\n removeContact,\n updateSortOrder,\n }),\n [contactState, token],\n );\n\n return {children};\n};\n\nexport default ContactProvider;\n", "import cloneDeep from 'lodash.clonedeep';\nimport { BaseAction } from '../../@types/Action';\nimport {\n RequestState,\n requestInit,\n requestSuccessful,\n requestError,\n requestIdle,\n} from '../../http/request-state';\nimport { Contact, ContactFilters } from './ContactModel';\n\nexport const REQ_GET_CONTACTS = 'REQ_GET_CONTACTS';\nexport const RCV_GET_CONTACTS = 'RCV_GET_CONTACTS';\nexport const ERR_GET_CONTACTS = 'ERR_GET_CONTACTS';\n\ntype REQ_GET_CONTACTS_TYPE = BaseAction;\ntype RCV_GET_CONTACTS_TYPE = BaseAction & {\n contacts: Contact[];\n};\ntype ERR_GET_CONTACTS_TYPE = BaseAction;\n\nexport const REQ_GET_CONTACT_FILTERS = 'REQ_GET_CONTACT_FILTERS';\nexport const RCV_GET_CONTACT_FILTERS = 'RCV_GET_CONTACT_FILTERS';\nexport const ERR_GET_CONTACT_FILTERS = 'ERR_GET_CONTACT_FILTERS';\n\ntype REQ_GET_CONTACT_FILTERS_TYPE = BaseAction;\ntype RCV_GET_CONTACT_FILTERS_TYPE = BaseAction & {\n contactFilters: ContactFilters;\n};\ntype ERR_GET_CONTACT_FILTERS_TYPE = BaseAction;\n\nexport const REQ_CREATE_CONTACT = 'REQ_CREATE_CONTACT';\nexport const RCV_CREATE_CONTACT = 'RCV_CREATE_CONTACT';\nexport const ERR_CREATE_CONTACT = 'ERR_CREATE_CONTACT';\n\ntype REQ_CREATE_CONTACT_TYPE = BaseAction;\ntype RCV_CREATE_CONTACT_TYPE = BaseAction & {\n contact: Contact;\n};\ntype ERR_CREATE_CONTACT_TYPE = BaseAction;\n\nexport const REQ_UPDATE_CONTACT = 'REQ_UPDATE_CONTACT';\nexport const RCV_UPDATE_CONTACT = 'RCV_UPDATE_CONTACT';\nexport const ERR_UPDATE_CONTACT = 'ERR_UPDATE_CONTACT';\n\ntype REQ_UPDATE_CONTACT_TYPE = BaseAction;\ntype RCV_UPDATE_CONTACT_TYPE = BaseAction & {\n contact: Contact;\n};\ntype ERR_UPDATE_CONTACT_TYPE = BaseAction;\n\nexport const REQ_REMOVE_CONTACT = 'REQ_REMOVE_CONTACT';\nexport const RCV_REMOVE_CONTACT = 'RCV_REMOVE_CONTACT';\nexport const ERR_REMOVE_CONTACT = 'ERR_REMOVE_CONTACT';\n\ntype REQ_REMOVE_CONTACT_TYPE = BaseAction;\ntype RCV_REMOVE_CONTACT_TYPE = BaseAction & {\n id: string;\n};\ntype ERR_REMOVE_CONTACT_TYPE = BaseAction;\n\nexport const REQ_UPDATE_CONTACT_SORT_ORDER = 'REQ_UPDATE_CONTACT_SORT_ORDER';\nexport const RCV_UPDATE_CONTACT_SORT_ORDER = 'RCV_UPDATE_CONTACT_SORT_ORDER';\nexport const ERR_UPDATE_CONTACT_SORT_ORDER = 'ERR_UPDATE_CONTACT_SORT_ORDER';\n\ntype REQ_UPDATE_CONTACT_SORT_ORDER_TYPE = BaseAction;\ntype RCV_UPDATE_CONTACT_SORT_ORDER_TYPE = BaseAction & {\n sort_order: { [key: string]: number | undefined };\n};\ntype ERR_UPDATE_CONTACT_SORT_ORDER_TYPE = BaseAction;\n\ntype ContactAction =\n | REQ_GET_CONTACTS_TYPE\n | RCV_GET_CONTACTS_TYPE\n | ERR_GET_CONTACTS_TYPE\n | REQ_GET_CONTACT_FILTERS_TYPE\n | RCV_GET_CONTACT_FILTERS_TYPE\n | ERR_GET_CONTACT_FILTERS_TYPE\n | REQ_CREATE_CONTACT_TYPE\n | RCV_CREATE_CONTACT_TYPE\n | ERR_CREATE_CONTACT_TYPE\n | REQ_UPDATE_CONTACT_TYPE\n | RCV_UPDATE_CONTACT_TYPE\n | ERR_UPDATE_CONTACT_TYPE\n | REQ_REMOVE_CONTACT_TYPE\n | RCV_REMOVE_CONTACT_TYPE\n | ERR_REMOVE_CONTACT_TYPE\n | REQ_UPDATE_CONTACT_SORT_ORDER_TYPE\n | RCV_UPDATE_CONTACT_SORT_ORDER_TYPE\n | ERR_UPDATE_CONTACT_SORT_ORDER_TYPE;\n\ninterface ContactState {\n contacts?: Contact[];\n contactFilters?: ContactFilters;\n requestGetAll: RequestState;\n requestGetContactFilters: RequestState;\n requestCreate: RequestState;\n requestUpdate: RequestState;\n requestRemove: RequestState;\n requestUpdateSortOrder: RequestState;\n}\n\nexport const contactReducerInitialState: ContactState = {\n requestGetAll: requestIdle(),\n requestGetContactFilters: requestIdle(),\n requestCreate: requestIdle(),\n requestUpdate: requestIdle(),\n requestRemove: requestIdle(),\n requestUpdateSortOrder: requestIdle(),\n};\n\nlet index: number | undefined;\n\nconst contactReducer = (state: ContactState, action: ContactAction) => {\n const next = cloneDeep(state);\n switch (action.type) {\n case REQ_GET_CONTACTS:\n next.requestGetAll = requestInit();\n return next;\n case RCV_GET_CONTACTS:\n next.requestGetAll = requestSuccessful();\n next.contacts = action.contacts;\n return next;\n case ERR_GET_CONTACTS:\n next.requestGetAll = requestError();\n return next;\n\n case REQ_GET_CONTACT_FILTERS:\n next.requestGetContactFilters = requestInit();\n return next;\n case RCV_GET_CONTACT_FILTERS:\n next.requestGetContactFilters = requestSuccessful();\n next.contactFilters = action.contactFilters;\n return next;\n case ERR_GET_CONTACT_FILTERS:\n next.requestGetContactFilters = requestError();\n return next;\n\n case REQ_CREATE_CONTACT:\n next.requestCreate = requestInit();\n return next;\n case RCV_CREATE_CONTACT:\n next.requestCreate = requestSuccessful();\n next.contacts = [...(next.contacts || []), action.contact];\n if (next.contactFilters?.roles) {\n next.contactFilters.roles = [\n ...new Set([...next.contactFilters.roles, ...action.contact.roles]),\n ];\n }\n return next;\n case ERR_CREATE_CONTACT:\n next.requestCreate = requestError();\n return next;\n\n case REQ_UPDATE_CONTACT:\n next.requestUpdate = requestInit();\n return next;\n case RCV_UPDATE_CONTACT:\n next.requestUpdate = requestSuccessful();\n index = next.contacts?.findIndex((x) => x.id === action.contact.id);\n if (next.contacts && index !== undefined && index > -1) {\n next.contacts[index] = action.contact;\n }\n return next;\n case ERR_UPDATE_CONTACT:\n next.requestUpdate = requestError();\n return next;\n\n case REQ_REMOVE_CONTACT:\n next.requestRemove = requestInit();\n return next;\n case RCV_REMOVE_CONTACT:\n next.requestRemove = requestSuccessful();\n index = next.contacts?.findIndex((x) => x.id === action.id);\n if (next.contacts && index !== undefined && index > -1) {\n next.contacts.splice(index, 1);\n }\n return next;\n case ERR_REMOVE_CONTACT:\n next.requestRemove = requestError();\n return next;\n\n case REQ_UPDATE_CONTACT_SORT_ORDER:\n next.requestUpdateSortOrder = requestInit();\n return next;\n case RCV_UPDATE_CONTACT_SORT_ORDER:\n next.requestUpdateSortOrder = requestSuccessful();\n if (next.contacts) {\n Object.keys(action.sort_order).forEach((key) => {\n const i = next.contacts?.findIndex((y) => y.id === key);\n const order = action.sort_order[key];\n if (i !== undefined && i > -1 && next.contacts?.[i] && order !== undefined) {\n next.contacts[i].sort_order = order;\n }\n });\n next.contacts.sort((a, b) => a.sort_order - b.sort_order);\n }\n return next;\n case ERR_UPDATE_CONTACT_SORT_ORDER:\n next.requestUpdateSortOrder = requestError();\n return next;\n\n default:\n throw new Error(`Unsupported action type`);\n }\n};\n\nexport default contactReducer;\n", "import React, { useReducer, useMemo, useCallback } from 'react';\nimport * as http from '../../http';\nimport {\n buildAuthorizedDeleteRequest,\n buildAuthorizedGetRequest,\n buildAuthorizedPostRequest,\n} from '../../http/request-templates';\nimport { MediaContext, MediaContextProps } from './MediaContext';\nimport { Media, MediaUsageItem, UploadMediaResponse } from './MediaModel';\nimport mediaReducer, {\n MEDIA_PURPOSE,\n REQ_MEDIA_UPLOAD,\n RCV_MEDIA_UPLOAD,\n ERR_MEDIA_UPLOAD,\n REQ_GET_CONTENT_MEDIA,\n RCV_GET_CONTENT_MEDIA,\n ERR_GET_CONTENT_MEDIA,\n REQ_REMOVE_MEDIA,\n RCV_REMOVE_MEDIA,\n ERR_REMOVE_MEDIA,\n REQ_GET_MEDIA_SITE_USAGE,\n RCV_GET_MEDIA_SITE_USAGE,\n ERR_GET_MEDIA_SITE_USAGE,\n mediaReducerInitialState,\n} from './MediaReducer';\nimport * as settings from '../../helpers/settings';\n\nlet mediaUsageRequestId = 0;\n\ninterface MediaProviderProps {\n token: string;\n branchId: string;\n children: React.ReactNode;\n}\n\nconst MediaProvider = ({ token, branchId, children }: MediaProviderProps) => {\n const [mediaState, dispatch] = useReducer(mediaReducer, mediaReducerInitialState);\n\n const uploadMediaContent = useCallback(\n async (file: File, purpose: MEDIA_PURPOSE = 'Content') => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n const formData = new FormData();\n formData.append('file', file);\n formData.append('Metadata.Purpose', purpose);\n formData.append('Metadata.BranchId', branchId);\n formData.append('Metadata.SortOrder', String(1));\n\n try {\n dispatch({ type: REQ_MEDIA_UPLOAD });\n const response = await http.json(\n `${settings.get('mediaServiceUri')}/media/v2/image`,\n buildAuthorizedPostRequest(token, formData, null),\n );\n http.validateResponse(response);\n dispatch({ type: RCV_MEDIA_UPLOAD, media: response.response });\n } catch (e) {\n dispatch({ type: ERR_MEDIA_UPLOAD });\n }\n },\n [token, branchId],\n );\n\n const uploadMediaContentPromise = useCallback(\n async (file: File, purpose: MEDIA_PURPOSE = 'Content') => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n const formData = new FormData();\n formData.append('file', file);\n formData.append('Metadata.Purpose', purpose);\n formData.append('Metadata.BranchId', branchId);\n formData.append('Metadata.SortOrder', String(1));\n\n return http.rawJson(\n `${settings.get('mediaServiceUri')}/media/v2/image`,\n buildAuthorizedPostRequest(token, formData, null),\n );\n },\n [token, branchId],\n );\n\n const getContentMedia = useCallback(async () => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n try {\n dispatch({ type: REQ_GET_CONTENT_MEDIA });\n const response = await http.rawJson(\n `${settings.get('mediaServiceUri')}/media/v2/${branchId}/content`,\n buildAuthorizedGetRequest(token),\n );\n\n dispatch({ type: RCV_GET_CONTENT_MEDIA, contentMedia: response });\n } catch (e) {\n dispatch({ type: ERR_GET_CONTENT_MEDIA });\n }\n }, [token, branchId]);\n\n const removeMedia = useCallback(\n async (id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n\n if (!id) {\n throw new Error('Missing media id');\n }\n\n try {\n dispatch({ type: REQ_REMOVE_MEDIA });\n await http.rawJson(\n `${settings.get('mediaServiceUri')}/media/v2/${id}`,\n buildAuthorizedDeleteRequest(token),\n );\n\n dispatch({ type: RCV_REMOVE_MEDIA, id });\n } catch (e) {\n dispatch({ type: ERR_REMOVE_MEDIA });\n }\n },\n [token],\n );\n\n const getMediamediaUsage = useCallback(\n async (url: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n if (!url) {\n throw new Error('Missing media url');\n }\n\n mediaUsageRequestId++;\n const requestId = mediaUsageRequestId;\n try {\n dispatch({ type: REQ_GET_MEDIA_SITE_USAGE, requestId });\n const response = await http.rawJson(\n `${settings.get('mediaServiceUri')}/cms/media/${branchId}/usage?media=${url}`,\n buildAuthorizedGetRequest(token),\n );\n\n dispatch({\n type: RCV_GET_MEDIA_SITE_USAGE,\n usages: response,\n url,\n requestId,\n });\n } catch (e) {\n dispatch({ type: ERR_GET_MEDIA_SITE_USAGE, requestId });\n }\n },\n [token, branchId],\n );\n\n const value: MediaContextProps = useMemo(\n () => ({\n ...mediaState,\n uploadMediaContent,\n uploadMediaContentPromise,\n getContentMedia,\n removeMedia,\n getMediamediaUsage,\n }),\n [mediaState, token],\n );\n\n return {children};\n};\n\nexport default MediaProvider;\n", "import cloneDeep from 'lodash.clonedeep';\nimport { BaseAction } from '../../@types/Action';\nimport {\n RequestState,\n requestInit,\n requestSuccessful,\n requestError,\n requestIdle,\n} from '../../http/request-state';\nimport { Media, MediaUsage, MediaUsageItem, UploadMediaResponse } from './MediaModel';\n\nexport type MEDIA_PURPOSE = 'Content' | 'Avatar';\n\nexport const REQ_MEDIA_UPLOAD = 'REQ_MEDIA_UPLOAD';\nexport const RCV_MEDIA_UPLOAD = 'RCV_MEDIA_UPLOAD';\nexport const ERR_MEDIA_UPLOAD = 'ERR_MEDIA_UPLOAD';\n\ntype REQ_MEDIA_UPLOAD_TYPE = BaseAction;\ntype RCV_MEDIA_UPLOAD_TYPE = BaseAction & {\n media: UploadMediaResponse;\n};\ntype ERR_MEDIA_UPLOAD_TYPE = BaseAction;\n\nexport const REQ_GET_CONTENT_MEDIA = 'REQ_GET_CONTENT_MEDIA';\nexport const RCV_GET_CONTENT_MEDIA = 'RCV_GET_CONTENT_MEDIA';\nexport const ERR_GET_CONTENT_MEDIA = 'ERR_GET_CONTENT_MEDIA';\n\ntype REQ_GET_CONTENT_MEDIA_TYPE = BaseAction;\ntype RCV_GET_CONTENT_MEDIA_TYPE = BaseAction & {\n contentMedia: Media[];\n};\ntype ERR_GET_CONTENT_MEDIA_TYPE = BaseAction;\n\nexport const REQ_REMOVE_MEDIA = 'REQ_REMOVE_MEDIA';\nexport const RCV_REMOVE_MEDIA = 'RCV_REMOVE_MEDIA';\nexport const ERR_REMOVE_MEDIA = 'ERR_REMOVE_MEDIA';\n\ntype REQ_REMOVE_MEDIA_TYPE = BaseAction;\ntype RCV_REMOVE_MEDIA_TYPE = BaseAction & {\n id: string;\n};\ntype ERR_REMOVE_MEDIA_TYPE = BaseAction;\n\nexport const REQ_GET_MEDIA_SITE_USAGE = 'REQ_GET_MEDIA_SITE_USAGE';\nexport const RCV_GET_MEDIA_SITE_USAGE = 'RCV_GET_MEDIA_SITE_USAGE';\nexport const ERR_GET_MEDIA_SITE_USAGE = 'ERR_GET_MEDIA_SITE_USAGE';\n\ntype REQ_GET_MEDIA_SITE_USAGE_TYPE = BaseAction & {\n requestId: number;\n};\ntype RCV_GET_MEDIA_SITE_USAGE_TYPE = BaseAction & {\n usages: MediaUsageItem[];\n url: string;\n requestId: number;\n};\ntype ERR_GET_MEDIA_SITE_USAGE_TYPE = BaseAction & {\n requestId: number;\n};\n\ntype MediaAction =\n | REQ_MEDIA_UPLOAD_TYPE\n | RCV_MEDIA_UPLOAD_TYPE\n | ERR_MEDIA_UPLOAD_TYPE\n | REQ_GET_CONTENT_MEDIA_TYPE\n | RCV_GET_CONTENT_MEDIA_TYPE\n | ERR_GET_CONTENT_MEDIA_TYPE\n | REQ_REMOVE_MEDIA_TYPE\n | RCV_REMOVE_MEDIA_TYPE\n | ERR_REMOVE_MEDIA_TYPE\n | REQ_GET_MEDIA_SITE_USAGE_TYPE\n | RCV_GET_MEDIA_SITE_USAGE_TYPE\n | ERR_GET_MEDIA_SITE_USAGE_TYPE;\n\ninterface MediaState {\n media?: UploadMediaResponse;\n contentMedia?: Media[];\n mediaUsage?: MediaUsage;\n requestUploadMediaContent: RequestState;\n requestGetContentMedia: RequestState;\n requestRemoveMedia: RequestState;\n requestGetMediaUsage: RequestState;\n}\n\nexport const mediaReducerInitialState: MediaState = {\n requestUploadMediaContent: requestIdle(),\n requestGetContentMedia: requestIdle(),\n requestRemoveMedia: requestIdle(),\n requestGetMediaUsage: requestIdle(),\n};\n\nlet mediaUsageRequestId = 0;\n\nconst mediaReducer = (state: MediaState, action: MediaAction) => {\n const next = cloneDeep(state);\n switch (action.type) {\n case REQ_MEDIA_UPLOAD:\n next.requestUploadMediaContent = requestInit();\n return next;\n case RCV_MEDIA_UPLOAD:\n next.requestUploadMediaContent = requestSuccessful();\n // next.contacts = [...(next.contacts || []), action.contact];\n return next;\n case ERR_MEDIA_UPLOAD:\n next.requestUploadMediaContent = requestError();\n return next;\n\n case REQ_GET_CONTENT_MEDIA:\n next.requestGetContentMedia = requestInit();\n return next;\n case RCV_GET_CONTENT_MEDIA:\n next.requestGetContentMedia = requestSuccessful();\n next.contentMedia = action.contentMedia;\n return next;\n case ERR_GET_CONTENT_MEDIA:\n next.requestGetContentMedia = requestError();\n return next;\n\n case REQ_REMOVE_MEDIA:\n next.requestRemoveMedia = requestInit();\n return next;\n case RCV_REMOVE_MEDIA:\n next.contentMedia = next.contentMedia?.filter((x) => x.id !== action.id);\n next.requestRemoveMedia = requestSuccessful();\n return next;\n case ERR_REMOVE_MEDIA:\n next.requestRemoveMedia = requestError();\n return next;\n\n case REQ_GET_MEDIA_SITE_USAGE:\n mediaUsageRequestId = action.requestId;\n next.mediaUsage = undefined;\n next.requestGetMediaUsage = requestInit();\n return next;\n case RCV_GET_MEDIA_SITE_USAGE:\n if (mediaUsageRequestId === action.requestId) {\n next.mediaUsage = {\n url: action.url,\n usages: action.usages,\n };\n next.requestGetMediaUsage = requestSuccessful();\n }\n return next;\n case ERR_GET_MEDIA_SITE_USAGE:\n if (mediaUsageRequestId === action.requestId) {\n next.requestGetMediaUsage = requestError();\n }\n return next;\n\n default:\n throw new Error(`Unsupported action type`);\n }\n};\n\nexport default mediaReducer;\n", "import React, { useMemo, useCallback, useState } from 'react';\nimport { UnsavedChangesContext, UnsavedChangesContextProps } from './UnsavedChangesContext';\n\ninterface UnsavedChangesProviderProps {\n children: React.ReactNode;\n}\n\nconst UnsavedChangesProvider = ({ children }: UnsavedChangesProviderProps) => {\n const [section, _setSection] = useState();\n\n const setSection = useCallback((s: string) => _setSection(s), []);\n const clearSection = useCallback(() => _setSection(undefined), []);\n\n const value: UnsavedChangesContextProps = useMemo(\n () => ({\n section,\n setSection,\n clearSection,\n }),\n [section],\n );\n\n return {children};\n};\n\nexport default UnsavedChangesProvider;\n", "import { createContext } from 'react';\n\nexport interface UnsavedChangesContextProps {\n section?: string;\n setSection: (section: string) => void;\n clearSection: () => void;\n}\n\nexport const UnsavedChangesContext = createContext(\n undefined,\n);\n", "import React, { useReducer, useMemo, useCallback } from 'react';\nimport * as http from '../../http';\nimport {\n buildAuthorizedDeleteRequest,\n buildAuthorizedGetRequest,\n buildAuthorizedFormPostRequest,\n buildAuthorizedPostRequest,\n} from '../../http/request-templates';\nimport { FontContext, FontContextProps } from './FontContext';\nimport { Font, Fonts, FontType } from './FontModel';\nimport fontReducer, {\n REQ_GET_CUSTOM_FONTS,\n RCV_GET_CUSTOM_FONTS,\n ERR_GET_CUSTOM_FONTS,\n REQ_CREATE_CUSTOM_FONTS,\n RCV_CREATE_CUSTOM_FONTS,\n ERR_CREATE_CUSTOM_FONTS,\n REQ_REMOVE_CUSTOM_FONTS,\n RCV_REMOVE_CUSTOM_FONTS,\n REQ_REMOVE_MULTIPLE_FONTS,\n RCV_REMOVE_MULTIPLE_FONTS,\n ERR_REMOVE_MULTIPLE_FONTS,\n fontReducerInitialState,\n ERR_REMOVE_CUSTOM_FONTS,\n SET_REMOVE_CUSTOM_FONT_QUEUE,\n CLEAR_REMOVE_CUSTOM_FONT_QUEUE,\n} from './FontReducer';\nimport * as settings from '../../helpers/settings';\n\ninterface FontProviderProps {\n token: string;\n branchId: string;\n children: React.ReactNode;\n}\n\nconst FontProvider = ({ token, branchId, children }: FontProviderProps) => {\n const [fontState, dispatch] = useReducer(fontReducer, fontReducerInitialState);\n\n const localFonts: Fonts = useMemo(() => {\n return {\n regular:\n fontState.fonts?.regular.filter(\n (f) =>\n !fontState.fontsRemoveQueue.find((x) => x.id === f.name && x.font_type === 'regular'),\n ) || [],\n bold:\n fontState.fonts?.bold.filter(\n (f) => !fontState.fontsRemoveQueue.find((x) => x.id === f.name && x.font_type === 'bold'),\n ) || [],\n };\n }, [fontState.fonts, fontState.fontsRemoveQueue]);\n\n const getFonts = useCallback(async () => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_GET_CUSTOM_FONTS });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/fonts/${branchId}/list`,\n buildAuthorizedGetRequest(token),\n );\n dispatch({ type: RCV_GET_CUSTOM_FONTS, fonts: response });\n } catch (e) {\n const requestError = e as http.RequestError;\n if (requestError.statusCode === 404) {\n dispatch({ type: RCV_GET_CUSTOM_FONTS, fonts: undefined });\n } else {\n dispatch({ type: ERR_GET_CUSTOM_FONTS });\n }\n }\n }, [token]);\n\n const createFont = useCallback(\n async (file: File, fontType: FontType) => {\n if (!token) {\n throw new Error('Missing token');\n }\n try {\n dispatch({ type: REQ_CREATE_CUSTOM_FONTS, fontType });\n\n const formData = new FormData();\n formData.append('file', file);\n\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/fonts/${branchId}/${fontType}/upload`,\n buildAuthorizedFormPostRequest(token, formData),\n );\n dispatch({ type: RCV_CREATE_CUSTOM_FONTS, font: response, fontType });\n } catch (e) {\n dispatch({ type: ERR_CREATE_CUSTOM_FONTS, fontType });\n }\n },\n [token],\n );\n\n const removeFont = useCallback(\n async (id: string, fontType: FontType) => {\n if (!token) {\n throw new Error('Missing token');\n }\n try {\n dispatch({ type: REQ_REMOVE_CUSTOM_FONTS, fontType });\n await http.rawJson(\n `${settings.get('cmsServiceUri')}/fonts/${branchId}/list/${fontType}/${id}`,\n buildAuthorizedDeleteRequest(token),\n );\n dispatch({ type: RCV_REMOVE_CUSTOM_FONTS, id, fontType });\n } catch (e) {\n dispatch({ type: ERR_REMOVE_CUSTOM_FONTS, fontType });\n }\n },\n [token],\n );\n\n const removeFontRemoveQueue = useCallback(async () => {\n if (!token) {\n throw new Error('Missing token');\n }\n try {\n dispatch({ type: REQ_REMOVE_MULTIPLE_FONTS });\n await http.rawJson(\n `${settings.get('cmsServiceUri')}/fonts/${branchId}/remove`,\n buildAuthorizedPostRequest(token, fontState.fontsRemoveQueue),\n );\n dispatch({ type: RCV_REMOVE_MULTIPLE_FONTS });\n } catch (e) {\n dispatch({ type: ERR_REMOVE_MULTIPLE_FONTS });\n }\n }, [token, fontState.fontsRemoveQueue]);\n\n const addFontRemoveToQueue = useCallback(\n (id: string, font_type: FontType) =>\n dispatch({\n type: SET_REMOVE_CUSTOM_FONT_QUEUE,\n id,\n font_type,\n }),\n [],\n );\n\n const clearFontRemoveQueue = useCallback(\n () =>\n dispatch({\n type: CLEAR_REMOVE_CUSTOM_FONT_QUEUE,\n }),\n [],\n );\n\n const value: FontContextProps = useMemo(\n () => ({\n ...fontState,\n localFonts,\n getFonts,\n createFont,\n removeFont,\n addFontRemoveToQueue,\n clearFontRemoveQueue,\n removeFontRemoveQueue,\n }),\n [fontState, token],\n );\n\n return {children};\n};\n\nexport default FontProvider;\n", "import cloneDeep from 'lodash.clonedeep';\nimport { BaseAction } from '../../@types/Action';\nimport {\n RequestState,\n requestInit,\n requestSuccessful,\n requestError,\n requestIdle,\n} from '../../http/request-state';\nimport { Font, Fonts, FontType, RemoveFontQueueItem } from './FontModel';\n\nexport const REQ_GET_CUSTOM_FONTS = 'REQ_GET_CUSTOM_FONTS';\nexport const RCV_GET_CUSTOM_FONTS = 'RCV_GET_CUSTOM_FONTS';\nexport const ERR_GET_CUSTOM_FONTS = 'ERR_GET_CUSTOM_FONTS';\n\ntype REQ_GET_CUSTOM_FONTS_TYPE = BaseAction;\ntype RCV_GET_CUSTOM_FONTS_TYPE = BaseAction & {\n fonts?: Fonts;\n};\ntype ERR_GET_CUSTOM_FONTS_TYPE = BaseAction;\n\nexport const REQ_CREATE_CUSTOM_FONTS = 'REQ_CREATE_CUSTOM_FONTS';\nexport const RCV_CREATE_CUSTOM_FONTS = 'RCV_CREATE_CUSTOM_FONTS';\nexport const ERR_CREATE_CUSTOM_FONTS = 'ERR_CREATE_CUSTOM_FONTS';\n\ntype REQ_CREATE_CUSTOM_FONTS_TYPE = BaseAction & {\n fontType: FontType;\n};\ntype RCV_CREATE_CUSTOM_FONTS_TYPE = BaseAction & {\n font: Font;\n fontType: FontType;\n};\ntype ERR_CREATE_CUSTOM_FONTS_TYPE = BaseAction & {\n fontType: FontType;\n};\n\nexport const REQ_REMOVE_CUSTOM_FONTS = 'REQ_REMOVE_CUSTOM_FONTS';\nexport const RCV_REMOVE_CUSTOM_FONTS = 'RCV_REMOVE_CUSTOM_FONTS';\nexport const ERR_REMOVE_CUSTOM_FONTS = 'ERR_REMOVE_CUSTOM_FONTS';\n\ntype REQ_REMOVE_CUSTOM_FONTS_TYPE = BaseAction & {\n fontType: FontType;\n};\ntype RCV_REMOVE_CUSTOM_FONTS_TYPE = BaseAction & {\n id: string;\n fontType: FontType;\n};\ntype ERR_REMOVE_CUSTOM_FONTS_TYPE = BaseAction & {\n fontType: FontType;\n};\n\nexport const REQ_REMOVE_MULTIPLE_FONTS = 'REQ_REMOVE_MULTIPLE_FONTS';\nexport const RCV_REMOVE_MULTIPLE_FONTS = 'RCV_REMOVE_MULTIPLE_FONTS';\nexport const ERR_REMOVE_MULTIPLE_FONTS = 'ERR_REMOVE_MULTIPLE_FONTS';\n\ntype REQ_REMOVE_MULTIPLE_FONTS_TYPE = BaseAction;\ntype RCV_REMOVE_MULTIPLE_FONTS_TYPE = BaseAction;\ntype ERR_REMOVE_MULTIPLE_FONTS_TYPE = BaseAction;\n\nexport const SET_REMOVE_CUSTOM_FONT_QUEUE = 'SET_REMOVE_CUSTOM_FONT_QUEUE';\ntype SET_REMOVE_CUSTOM_FONT_QUEUE_TYPE = BaseAction & {\n id: string;\n font_type: FontType;\n};\n\nexport const CLEAR_REMOVE_CUSTOM_FONT_QUEUE = 'CLEAR_REMOVE_CUSTOM_FONT_QUEUE';\ntype CLEAR_REMOVE_CUSTOM_FONT_QUEUE_TYPE = BaseAction;\n\ntype FontAction =\n | REQ_GET_CUSTOM_FONTS_TYPE\n | RCV_GET_CUSTOM_FONTS_TYPE\n | ERR_GET_CUSTOM_FONTS_TYPE\n | REQ_CREATE_CUSTOM_FONTS_TYPE\n | RCV_CREATE_CUSTOM_FONTS_TYPE\n | ERR_CREATE_CUSTOM_FONTS_TYPE\n | REQ_REMOVE_CUSTOM_FONTS_TYPE\n | RCV_REMOVE_CUSTOM_FONTS_TYPE\n | ERR_REMOVE_CUSTOM_FONTS_TYPE\n | REQ_REMOVE_MULTIPLE_FONTS_TYPE\n | RCV_REMOVE_MULTIPLE_FONTS_TYPE\n | ERR_REMOVE_MULTIPLE_FONTS_TYPE\n | SET_REMOVE_CUSTOM_FONT_QUEUE_TYPE\n | CLEAR_REMOVE_CUSTOM_FONT_QUEUE_TYPE;\n\ninterface FontState {\n fonts?: Fonts;\n fontsRemoveQueue: RemoveFontQueueItem[];\n requestGet: RequestState;\n requestRemoveMultiple: RequestState;\n requestCreate: {\n regular: RequestState;\n bold: RequestState;\n };\n requestRemove: {\n regular: RequestState;\n bold: RequestState;\n };\n}\n\nexport const fontReducerInitialState: FontState = {\n requestGet: requestIdle(),\n fontsRemoveQueue: [],\n requestRemoveMultiple: requestIdle(),\n requestCreate: { regular: requestIdle(), bold: requestIdle() },\n requestRemove: { regular: requestIdle(), bold: requestIdle() },\n};\n\nconst fontReducer = (state: FontState, action: FontAction) => {\n const next = cloneDeep(state);\n switch (action.type) {\n case REQ_GET_CUSTOM_FONTS:\n next.requestGet = requestInit();\n return next;\n case RCV_GET_CUSTOM_FONTS:\n next.requestGet = requestSuccessful();\n next.fonts = action.fonts;\n return next;\n case ERR_GET_CUSTOM_FONTS:\n next.requestGet = requestError();\n return next;\n\n case REQ_CREATE_CUSTOM_FONTS:\n next.requestCreate[action.fontType] = requestInit();\n return next;\n case RCV_CREATE_CUSTOM_FONTS:\n next.requestCreate[action.fontType] = requestSuccessful();\n if (next.fonts) {\n if (next.fonts[action.fontType].findIndex((x) => x.url === action.font.url) === -1) {\n next.fonts[action.fontType].push(action.font);\n }\n } else {\n next.fonts = {\n regular: [],\n bold: [],\n [action.fontType]: [action.font],\n };\n }\n return next;\n case ERR_CREATE_CUSTOM_FONTS:\n next.requestCreate[action.fontType] = requestError();\n return next;\n\n case REQ_REMOVE_CUSTOM_FONTS:\n next.requestRemove[action.fontType] = requestInit();\n return next;\n case RCV_REMOVE_CUSTOM_FONTS:\n next.requestRemove[action.fontType] = requestSuccessful();\n if (next.fonts) {\n const index = next.fonts[action.fontType].findIndex((x) => x.name === action.id);\n if (index > -1) {\n next.fonts[action.fontType].splice(index, 1);\n }\n }\n return next;\n case ERR_REMOVE_CUSTOM_FONTS:\n next.requestRemove[action.fontType] = requestError();\n return next;\n\n case REQ_REMOVE_MULTIPLE_FONTS:\n next.requestRemoveMultiple = requestInit();\n return next;\n case RCV_REMOVE_MULTIPLE_FONTS:\n next.requestRemoveMultiple = requestSuccessful();\n\n if (next.fonts) {\n next.fontsRemoveQueue.forEach((f) => {\n const index = (next.fonts as Fonts)[f.font_type].findIndex((x) => x.name === f.id);\n if (index > -1) {\n (next.fonts as Fonts)[f.font_type].splice(index, 1);\n }\n });\n }\n\n next.fontsRemoveQueue = [];\n\n return next;\n case ERR_REMOVE_MULTIPLE_FONTS:\n next.requestRemoveMultiple = requestError();\n return next;\n\n case SET_REMOVE_CUSTOM_FONT_QUEUE:\n next.fontsRemoveQueue.push({ id: action.id, font_type: action.font_type });\n return next;\n\n case CLEAR_REMOVE_CUSTOM_FONT_QUEUE:\n next.fontsRemoveQueue = [];\n return next;\n\n default:\n throw new Error(`Unsupported action type`);\n }\n};\n\nexport default fontReducer;\n", "import React, { useReducer, useMemo, useCallback } from 'react';\nimport * as http from '../../http';\nimport {\n buildAuthorizedDeleteRequest,\n buildAuthorizedGetRequest,\n buildAuthorizedPostRequest,\n buildAuthorizedPutRequest,\n} from '../../http/request-templates';\nimport { FormContext, FormContextProps } from './FormContext';\nimport { FormModel, CreateForm, UnhandledSubmissions } from './FormModel';\nimport formReducer, {\n REQ_GET_FORM,\n RCV_GET_FORM,\n ERR_GET_FORM,\n REQ_GET_FORMS,\n RCV_GET_FORMS,\n ERR_GET_FORMS,\n REQ_GET_FORM_PREVIEW,\n RCV_GET_FORM_PREVIEW,\n ERR_GET_FORM_PREVIEW,\n SET_CLEAR_FORM_PREVIEW,\n REQ_CREATE_FORM,\n RCV_CREATE_FORM,\n ERR_CREATE_FORM,\n REQ_UPDATE_FORM,\n RCV_UPDATE_FORM,\n ERR_UPDATE_FORM,\n REQ_REMOVE_FORM,\n RCV_REMOVE_FORM,\n ERR_REMOVE_FORM,\n REQ_GET_UNHANDLED_SUBMISSIONS,\n RCV_GET_UNHANDLED_SUBMISSIONS,\n ERR_GET_UNHANDLED_SUBMISSIONS,\n REQ_DECREMENT_UNHANDLED_SUBMISSIONS,\n REQ_RESET_FORM,\n ERROR_DOCUMENT_UPDATE_EXCEPTION,\n ERR_UPDATE_FORM_RESET,\n formReducerInitialState,\n} from './FormReducer';\nimport * as settings from '../../helpers/settings';\n\ninterface FormProviderProps {\n token: string;\n branchId: string;\n children: React.ReactNode;\n}\n\nconst FormProvider = ({ token, branchId, children }: FormProviderProps) => {\n const [formState, dispatch] = useReducer(formReducer, formReducerInitialState);\n\n const getForm = useCallback(\n async (id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_GET_FORM });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/forms/${branchId}/${id}`,\n buildAuthorizedGetRequest(token),\n );\n // http.validateResponse(response);\n dispatch({ type: RCV_GET_FORM, form: response });\n } catch (e) {\n dispatch({ type: ERR_GET_FORM });\n }\n },\n [token, branchId],\n );\n\n const getForms = useCallback(async () => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_GET_FORMS });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/forms/${branchId}`,\n buildAuthorizedGetRequest(token),\n );\n // http.validateResponse(response);\n dispatch({ type: RCV_GET_FORMS, forms: response });\n } catch (e) {\n dispatch({ type: ERR_GET_FORMS });\n }\n }, [token, branchId]);\n\n const createForm = useCallback(\n async (form: CreateForm) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n try {\n dispatch({ type: REQ_CREATE_FORM });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/forms/${branchId}`,\n buildAuthorizedPostRequest(token, form),\n );\n // http.validateResponse(response);\n dispatch({ type: RCV_CREATE_FORM, form: response });\n } catch (e) {\n dispatch({ type: ERR_CREATE_FORM });\n }\n },\n [token, branchId],\n );\n\n const updateForm = useCallback(\n async (id: string, form: CreateForm) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n try {\n dispatch({ type: REQ_UPDATE_FORM });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/forms/${branchId}/${id}`,\n buildAuthorizedPutRequest(token, form),\n );\n // http.validateResponse(response);\n dispatch({ type: RCV_UPDATE_FORM, form: response });\n } catch (e) {\n const err = (e as { content?: { detail?: { error?: string } } })?.content?.detail;\n if (err?.error === 'DocumentUpdatedException') {\n const error = err as ERROR_DOCUMENT_UPDATE_EXCEPTION;\n dispatch({ type: ERR_UPDATE_FORM, error });\n } else {\n dispatch({ type: ERR_UPDATE_FORM });\n }\n }\n },\n [token, branchId],\n );\n\n const removeForm = useCallback(\n async (id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n try {\n dispatch({ type: REQ_REMOVE_FORM });\n await http.rawJson(\n `${settings.get('cmsServiceUri')}/forms/${branchId}/${id}`,\n buildAuthorizedDeleteRequest(token),\n );\n dispatch({ type: RCV_REMOVE_FORM, id });\n } catch (e) {\n dispatch({ type: ERR_REMOVE_FORM });\n }\n },\n [token, branchId],\n );\n\n const getUnhandledSubmissions = useCallback(\n async (silent?: boolean) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n try {\n dispatch({ type: REQ_GET_UNHANDLED_SUBMISSIONS, silent });\n const result = await http.rawJson(\n `${settings.get('cmsServiceUri')}/forms/${branchId}/submissions/unhandled`,\n buildAuthorizedGetRequest(token),\n );\n dispatch({ type: RCV_GET_UNHANDLED_SUBMISSIONS, unhandledSubmissions: result.count });\n } catch (e) {\n dispatch({ type: ERR_GET_UNHANDLED_SUBMISSIONS });\n }\n },\n [token, branchId],\n );\n\n const getFormPreview = useCallback(\n async (id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n if (!id) {\n throw new Error('Missing id');\n }\n try {\n dispatch({ type: REQ_GET_FORM_PREVIEW });\n const response = await http.rawTextHtml(\n `${settings.get('cmsServiceUri')}/forms/${branchId}/${id}/preview`,\n buildAuthorizedGetRequest(token, 'text/html'),\n );\n dispatch({ type: RCV_GET_FORM_PREVIEW, formPreview: response });\n } catch (e) {\n dispatch({ type: ERR_GET_FORM_PREVIEW });\n }\n },\n [token, branchId],\n );\n\n const decrementUnhandledSubmissions = useCallback(\n () => dispatch({ type: REQ_DECREMENT_UNHANDLED_SUBMISSIONS }),\n [],\n );\n\n const resetRequestUpdate = useCallback(() => dispatch({ type: ERR_UPDATE_FORM_RESET }), []);\n const resetForm = useCallback(() => dispatch({ type: REQ_RESET_FORM }), []);\n const clearFormPreview = useCallback(() => dispatch({ type: SET_CLEAR_FORM_PREVIEW }), []);\n\n const value: FormContextProps = useMemo(\n () => ({\n ...formState,\n branchId,\n getForm,\n getForms,\n createForm,\n updateForm,\n removeForm,\n getUnhandledSubmissions,\n decrementUnhandledSubmissions,\n resetForm,\n getFormPreview,\n clearFormPreview,\n resetRequestUpdate,\n }),\n [formState, token],\n );\n\n return {children};\n};\n\nexport default FormProvider;\n", "import cloneDeep from 'lodash.clonedeep';\nimport { BaseAction, CMS_PAGE_ERROR } from '../../@types/Action';\nimport {\n RequestState,\n requestInit,\n requestSuccessful,\n requestError,\n requestIdle,\n} from '../../http/request-state';\nimport { FormModel, FormUpdateCreateException } from './FormModel';\n\nexport type ERROR_DOCUMENT_UPDATE_EXCEPTION = CMS_PAGE_ERROR<\n 'DocumentUpdatedException',\n FormUpdateCreateException\n>;\n\nexport type ERROR_DOCUMENT_UPDATE_EXCEPTION_TYPES = ERROR_DOCUMENT_UPDATE_EXCEPTION | undefined;\n\nexport const REQ_GET_FORM = 'REQ_GET_FORM';\nexport const RCV_GET_FORM = 'RCV_GET_FORM';\nexport const ERR_GET_FORM = 'ERR_GET_FORM';\n\ntype REQ_GET_FORM_TYPE = BaseAction;\ntype RCV_GET_FORM_TYPE = BaseAction & {\n form: FormModel;\n};\ntype ERR_GET_FORM_TYPE = BaseAction;\n\nexport const REQ_GET_FORMS = 'REQ_GET_FORMS';\nexport const RCV_GET_FORMS = 'RCV_GET_FORMS';\nexport const ERR_GET_FORMS = 'ERR_GET_FORMS';\n\ntype REQ_GET_FORMS_TYPE = BaseAction;\ntype RCV_GET_FORMS_TYPE = BaseAction & {\n forms: FormModel[];\n};\ntype ERR_GET_FORMS_TYPE = BaseAction;\n\nexport const REQ_CREATE_FORM = 'REQ_CREATE_FORM';\nexport const RCV_CREATE_FORM = 'RCV_CREATE_FORM';\nexport const ERR_CREATE_FORM = 'ERR_CREATE_FORM';\n\ntype REQ_CREATE_FORM_TYPE = BaseAction;\ntype RCV_CREATE_FORM_TYPE = BaseAction & {\n form: FormModel;\n};\ntype ERR_CREATE_FORM_TYPE = BaseAction;\n\nexport const REQ_UPDATE_FORM = 'REQ_UPDATE_FORM';\nexport const RCV_UPDATE_FORM = 'RCV_UPDATE_FORM';\nexport const ERR_UPDATE_FORM = 'ERR_UPDATE_FORM';\nexport const ERR_UPDATE_FORM_RESET = 'ERR_UPDATE_FORM_RESET';\n\ntype REQ_UPDATE_FORM_TYPE = BaseAction;\ntype RCV_UPDATE_FORM_TYPE = BaseAction & {\n form: FormModel;\n};\ntype ERR_UPDATE_FORM_TYPE = BaseAction & {\n error?: ERROR_DOCUMENT_UPDATE_EXCEPTION_TYPES;\n};\ntype ERR_UPDATE_FORM_RESET_TYPE = BaseAction;\n\nexport const REQ_REMOVE_FORM = 'REQ_REMOVE_FORM';\nexport const RCV_REMOVE_FORM = 'RCV_REMOVE_FORM';\nexport const ERR_REMOVE_FORM = 'ERR_REMOVE_FORM';\n\ntype REQ_REMOVE_FORM_TYPE = BaseAction;\ntype RCV_REMOVE_FORM_TYPE = BaseAction & {\n id: string;\n};\ntype ERR_REMOVE_FORM_TYPE = BaseAction;\n\nexport const REQ_GET_FORM_PREVIEW = 'REQ_GET_FORM_PREVIEW';\nexport const RCV_GET_FORM_PREVIEW = 'RCV_GET_FORM_PREVIEW';\nexport const ERR_GET_FORM_PREVIEW = 'ERR_GET_FORM';\n\ntype REQ_GET_FORM_PREVIEW_TYPE = BaseAction;\ntype RCV_GET_FORM_PREVIEW_TYPE = BaseAction & {\n formPreview: string | null;\n};\ntype ERR_GET_FORM_PREVIEW_TYPE = BaseAction;\n\nexport const SET_CLEAR_FORM_PREVIEW = 'SET_CLEAR_FORM_PREVIEW';\ntype SET_CLEAR_FORM_PREVIEW_TYPE = BaseAction;\n\nexport const REQ_GET_UNHANDLED_SUBMISSIONS = 'REQ_GET_UNHANDLED_SUBMISSIONS';\nexport const RCV_GET_UNHANDLED_SUBMISSIONS = 'RCV_GET_UNHANDLED_SUBMISSIONS';\nexport const ERR_GET_UNHANDLED_SUBMISSIONS = 'ERR_GET_UNHANDLED_SUBMISSIONS';\n\ntype REQ_GET_UNHANDLED_SUBMISSIONS_TYPE = BaseAction & {\n silent?: boolean;\n};\ntype RCV_GET_UNHANDLED_SUBMISSIONS_TYPE = BaseAction & {\n unhandledSubmissions: number;\n};\ntype ERR_GET_UNHANDLED_SUBMISSIONS_TYPE = BaseAction;\n\nexport const REQ_DECREMENT_UNHANDLED_SUBMISSIONS = 'REQ_DECREMENT_UNHANDLED_SUBMISSIONS';\ntype REQ_DECREMENT_UNHANDLED_SUBMISSIONS_TYPE = BaseAction<\n typeof REQ_DECREMENT_UNHANDLED_SUBMISSIONS\n>;\n\nexport const REQ_RESET_FORM = 'REQ_RESET_FORM';\ntype REQ_RESET_FORM_TYPE = BaseAction;\n\ntype FormAction =\n | REQ_GET_FORM_TYPE\n | RCV_GET_FORM_TYPE\n | ERR_GET_FORM_TYPE\n | REQ_GET_FORMS_TYPE\n | RCV_GET_FORMS_TYPE\n | ERR_GET_FORMS_TYPE\n | REQ_CREATE_FORM_TYPE\n | RCV_CREATE_FORM_TYPE\n | ERR_CREATE_FORM_TYPE\n | REQ_UPDATE_FORM_TYPE\n | RCV_UPDATE_FORM_TYPE\n | ERR_UPDATE_FORM_TYPE\n | ERR_UPDATE_FORM_RESET_TYPE\n | REQ_REMOVE_FORM_TYPE\n | RCV_REMOVE_FORM_TYPE\n | ERR_REMOVE_FORM_TYPE\n | REQ_GET_FORM_PREVIEW_TYPE\n | RCV_GET_FORM_PREVIEW_TYPE\n | ERR_GET_FORM_PREVIEW_TYPE\n | SET_CLEAR_FORM_PREVIEW_TYPE\n | REQ_GET_UNHANDLED_SUBMISSIONS_TYPE\n | RCV_GET_UNHANDLED_SUBMISSIONS_TYPE\n | ERR_GET_UNHANDLED_SUBMISSIONS_TYPE\n | REQ_DECREMENT_UNHANDLED_SUBMISSIONS_TYPE\n | REQ_RESET_FORM_TYPE;\n\ninterface FormState {\n form?: FormModel;\n forms?: FormModel[];\n formPreview?: string;\n unhandledSubmissions?: number;\n requestGet: RequestState;\n requestGetAll: RequestState;\n requestCreate: RequestState;\n requestUpdate: RequestState;\n requestRemove: RequestState;\n requestUnhandledSubmissions: RequestState;\n requestGetPreview: RequestState;\n}\n\nexport const formReducerInitialState: FormState = {\n requestGet: requestIdle(),\n requestGetAll: requestIdle(),\n requestCreate: requestIdle(),\n requestUpdate: requestIdle(),\n requestRemove: requestIdle(),\n requestUnhandledSubmissions: requestIdle(),\n requestGetPreview: requestIdle(),\n};\n\nlet index: number | undefined;\n\nconst formReducer = (state: FormState, action: FormAction) => {\n const next = cloneDeep(state);\n switch (action.type) {\n case REQ_GET_FORM:\n next.requestGet = requestInit();\n return next;\n case RCV_GET_FORM:\n next.requestGet = requestSuccessful();\n next.form = action.form;\n return next;\n case ERR_GET_FORM:\n next.requestGet = requestError();\n return next;\n\n case REQ_GET_FORMS:\n next.requestGetAll = requestInit();\n return next;\n case RCV_GET_FORMS:\n next.requestGetAll = requestSuccessful();\n next.forms = action.forms;\n return next;\n case ERR_GET_FORMS:\n next.requestGetAll = requestError();\n return next;\n\n case REQ_CREATE_FORM:\n next.requestCreate = requestInit();\n return next;\n case RCV_CREATE_FORM:\n next.requestCreate = requestSuccessful();\n next.forms = [...(next.forms || []), action.form];\n next.form = action.form;\n return next;\n case ERR_CREATE_FORM:\n next.requestCreate = requestError();\n return next;\n\n case REQ_UPDATE_FORM:\n next.requestUpdate = requestInit();\n return next;\n case RCV_UPDATE_FORM:\n next.requestUpdate = requestSuccessful();\n index = next.forms?.findIndex((x) => x.id === action.form.id);\n if (next.forms && index !== undefined && index > -1) {\n next.forms[index] = action.form;\n }\n next.form = action.form;\n return next;\n case ERR_UPDATE_FORM:\n next.requestUpdate = requestError(action.error);\n return next;\n\n case ERR_UPDATE_FORM_RESET:\n next.requestUpdate = requestIdle();\n return next;\n\n case REQ_REMOVE_FORM:\n next.requestRemove = requestInit();\n return next;\n case RCV_REMOVE_FORM:\n next.requestRemove = requestSuccessful();\n index = next.forms?.findIndex((x) => x.id === action.id);\n if (next.forms && index !== undefined && index > -1) {\n next.forms.splice(index, 1);\n }\n return next;\n case ERR_REMOVE_FORM:\n next.requestRemove = requestError();\n return next;\n\n case REQ_GET_UNHANDLED_SUBMISSIONS:\n next.requestUnhandledSubmissions = requestInit();\n if (!action.silent) {\n next.unhandledSubmissions = undefined;\n }\n return next;\n case RCV_GET_UNHANDLED_SUBMISSIONS:\n next.requestUnhandledSubmissions = requestSuccessful();\n next.unhandledSubmissions = action.unhandledSubmissions;\n return next;\n case ERR_GET_UNHANDLED_SUBMISSIONS:\n next.requestUnhandledSubmissions = requestError();\n return next;\n\n case REQ_GET_FORM_PREVIEW:\n next.requestGetPreview = requestInit();\n next.formPreview = undefined;\n return next;\n case RCV_GET_FORM_PREVIEW:\n next.requestGetPreview = requestSuccessful();\n next.formPreview = action.formPreview || undefined;\n return next;\n case ERR_GET_FORM_PREVIEW:\n next.requestGetPreview = requestError();\n return next;\n\n case SET_CLEAR_FORM_PREVIEW:\n next.formPreview = undefined;\n return next;\n\n case REQ_DECREMENT_UNHANDLED_SUBMISSIONS:\n if (!!next.unhandledSubmissions) {\n next.unhandledSubmissions--;\n }\n\n if (\n next.form &&\n next.form?.submission_stats &&\n (next.form?.submission_stats?.unread_count || 0) > 0\n ) {\n next.form.submission_stats.unread_count--;\n }\n\n return next;\n\n case REQ_RESET_FORM:\n next.form = undefined;\n next.requestGet = requestIdle();\n\n return next;\n\n default:\n throw new Error(`Unsupported action type`);\n }\n};\n\nexport default formReducer;\n", "import React, { useReducer, useMemo, useCallback } from 'react';\nimport * as http from '../../http';\nimport jwt_decode from 'jwt-decode';\nimport {\n buildAuthorizedDeleteRequest,\n buildAuthorizedGetRequest,\n buildAuthorizedPatchRequest,\n} from '../../http/request-templates';\nimport { FormSubmissionContext, FormSubmissionContextProps } from './FormSubmissionContext';\nimport {\n FormSubmission,\n FormSubmissionModel,\n SubmissionViewInfo,\n SubmissionViewInfoPart,\n} from './FormSubmissionModel';\nimport formSubmissionReducer, {\n REQ_GET_ALL_SUBMISSIONS_SINGLE_FORM,\n RCV_GET_ALL_SUBMISSIONS_SINGLE_FORM,\n ERR_GET_ALL_SUBMISSIONS_SINGLE_FORM,\n REQ_REMOVE_FORM_SUBMISSION,\n RCV_REMOVE_FORM_SUBMISSION,\n ERR_REMOVE_FORM_SUBMISSION,\n REQ_SUBMISSION_REGISTER_VIEW_INFO,\n RCV_SUBMISSION_REGISTER_VIEW_INFO,\n ERR_SUBMISSION_REGISTER_VIEW_INFO,\n formSubmissionReducerInitialState,\n} from './FormSubmissionReducer';\nimport useForm from '../../hooks/useForm';\nimport * as settings from '../../helpers/settings';\n\ninterface FormSubmissionProviderProps {\n token: string;\n branchId: string;\n children: React.ReactNode;\n}\n\nconst FormSubmissionProvider = ({ token, branchId, children }: FormSubmissionProviderProps) => {\n const { decrementUnhandledSubmissions } = useForm();\n\n const [formState, dispatch] = useReducer(\n formSubmissionReducer,\n formSubmissionReducerInitialState,\n );\n\n const getFormSubmissionSingleForm = useCallback(\n async (id: string, continuationToken?: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_GET_ALL_SUBMISSIONS_SINGLE_FORM, continuationToken });\n const response = await http.rawJson(\n `${settings.get('cmsServiceUri')}/forms/${branchId}/${id}/submissions?item_count=20${\n continuationToken ? `&continuation_token=${continuationToken}` : ''\n }`,\n buildAuthorizedGetRequest(token),\n );\n dispatch({\n type: RCV_GET_ALL_SUBMISSIONS_SINGLE_FORM,\n formSubmissionsSingleForm: response,\n continuationToken,\n });\n } catch (e) {\n dispatch({ type: ERR_GET_ALL_SUBMISSIONS_SINGLE_FORM, continuationToken });\n }\n },\n [token, branchId],\n );\n\n const removeFormSubmission = useCallback(\n async (id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_REMOVE_FORM_SUBMISSION });\n await http.rawJson(\n `${settings.get('cmsServiceUri')}/forms/${branchId}/submissions/${id}`,\n buildAuthorizedDeleteRequest(token),\n );\n\n dispatch({\n type: RCV_REMOVE_FORM_SUBMISSION,\n id,\n });\n } catch (e) {\n dispatch({ type: ERR_REMOVE_FORM_SUBMISSION });\n }\n },\n [token, branchId],\n );\n\n const registerViewInfo = useCallback(\n async (id: string, _viewInfo: SubmissionViewInfoPart, initialView = false) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n const user_id = jwt_decode<{ sub: string }>(token).sub;\n const viewInfo: SubmissionViewInfo = {\n ..._viewInfo,\n user_id,\n viewed_at: new Date().toISOString(),\n };\n\n try {\n dispatch({ type: REQ_SUBMISSION_REGISTER_VIEW_INFO });\n const result = await http.rawJson(\n `${settings.get('cmsServiceUri')}/forms/${branchId}/submissions/${id}/view_info`,\n buildAuthorizedPatchRequest(token, viewInfo),\n );\n\n dispatch({\n type: RCV_SUBMISSION_REGISTER_VIEW_INFO,\n submission: result,\n });\n if (initialView) {\n decrementUnhandledSubmissions();\n }\n } catch (e) {\n dispatch({ type: ERR_SUBMISSION_REGISTER_VIEW_INFO });\n }\n },\n [token, branchId],\n );\n\n const value: FormSubmissionContextProps = useMemo(\n () => ({\n ...formState,\n branchId,\n getFormSubmissionSingleForm,\n removeFormSubmission,\n registerViewInfo,\n }),\n [formState, token],\n );\n\n return {children};\n};\n\nexport default FormSubmissionProvider;\n", "import { FormSubmissionModel, SubmissionViewInfoPart } from './FormSubmissionModel';\nimport { createContext } from 'react';\nimport { RequestState } from '../../http/request-state';\n\nexport interface FormSubmissionContextProps {\n branchId: string;\n formSubmissionsSingleForm?: FormSubmissionModel;\n requestGet: RequestState;\n requestGetLoadMore: RequestState;\n requestRemove: RequestState;\n requestRegisterViewInfo: RequestState;\n removeFormSubmission: (id: string) => void;\n getFormSubmissionSingleForm: (id: string, continuationToken?: string) => void;\n registerViewInfo: (id: string, viewInfo: SubmissionViewInfoPart, initialView: boolean) => void;\n}\n\nexport const FormSubmissionContext = createContext(\n undefined,\n);\n", "import cloneDeep from 'lodash.clonedeep';\nimport { BaseAction } from '../../@types/Action';\nimport {\n RequestState,\n requestInit,\n requestSuccessful,\n requestError,\n requestIdle,\n} from '../../http/request-state';\nimport { FormSubmission, FormSubmissionModel } from './FormSubmissionModel';\n\nexport const REQ_GET_ALL_SUBMISSIONS_SINGLE_FORM = 'REQ_GET_ALL_SUBMISSIONS_SINGLE_FORM';\nexport const RCV_GET_ALL_SUBMISSIONS_SINGLE_FORM = 'RCV_GET_ALL_SUBMISSIONS_SINGLE_FORM';\nexport const ERR_GET_ALL_SUBMISSIONS_SINGLE_FORM = 'ERR_GET_ALL_SUBMISSIONS_SINGLE_FORM';\n\ntype REQ_GET_ALL_SUBMISSIONS_SINGLE_FORM_TYPE = BaseAction<\n typeof REQ_GET_ALL_SUBMISSIONS_SINGLE_FORM\n> & {\n continuationToken?: string;\n};\ntype RCV_GET_ALL_SUBMISSIONS_SINGLE_FORM_TYPE = BaseAction<\n typeof RCV_GET_ALL_SUBMISSIONS_SINGLE_FORM\n> & {\n formSubmissionsSingleForm: FormSubmissionModel;\n continuationToken?: string;\n};\ntype ERR_GET_ALL_SUBMISSIONS_SINGLE_FORM_TYPE = BaseAction<\n typeof ERR_GET_ALL_SUBMISSIONS_SINGLE_FORM\n> & {\n continuationToken?: string;\n};\n\nexport const REQ_REMOVE_FORM_SUBMISSION = 'REQ_REMOVE_FORM_SUBMISSION';\nexport const RCV_REMOVE_FORM_SUBMISSION = 'RCV_REMOVE_FORM_SUBMISSION';\nexport const ERR_REMOVE_FORM_SUBMISSION = 'ERR_REMOVE_FORM_SUBMISSION';\n\ntype REQ_REMOVE_FORM_SUBMISSION_TYPE = BaseAction;\ntype RCV_REMOVE_FORM_SUBMISSION_TYPE = BaseAction & {\n id: string;\n};\ntype ERR_REMOVE_FORM_SUBMISSION_TYPE = BaseAction;\n\nexport const REQ_SUBMISSION_REGISTER_VIEW_INFO = 'REQ_SUBMISSION_REGISTER_VIEW_INFO';\nexport const RCV_SUBMISSION_REGISTER_VIEW_INFO = 'RCV_SUBMISSION_REGISTER_VIEW_INFO';\nexport const ERR_SUBMISSION_REGISTER_VIEW_INFO = 'ERR_SUBMISSION_REGISTER_VIEW_INFO';\n\ntype REQ_SUBMISSION_REGISTER_VIEW_INFO_TYPE = BaseAction;\ntype RCV_SUBMISSION_REGISTER_VIEW_INFO_TYPE = BaseAction<\n typeof RCV_SUBMISSION_REGISTER_VIEW_INFO\n> & {\n submission: FormSubmission;\n};\ntype ERR_SUBMISSION_REGISTER_VIEW_INFO_TYPE = BaseAction;\n\ntype FormSubmissionAction =\n | REQ_GET_ALL_SUBMISSIONS_SINGLE_FORM_TYPE\n | RCV_GET_ALL_SUBMISSIONS_SINGLE_FORM_TYPE\n | ERR_GET_ALL_SUBMISSIONS_SINGLE_FORM_TYPE\n | REQ_REMOVE_FORM_SUBMISSION_TYPE\n | RCV_REMOVE_FORM_SUBMISSION_TYPE\n | ERR_REMOVE_FORM_SUBMISSION_TYPE\n | REQ_SUBMISSION_REGISTER_VIEW_INFO_TYPE\n | RCV_SUBMISSION_REGISTER_VIEW_INFO_TYPE\n | ERR_SUBMISSION_REGISTER_VIEW_INFO_TYPE;\n\ninterface FormSubmissionState {\n formSubmissionsSingleForm?: FormSubmissionModel;\n requestGet: RequestState;\n requestGetLoadMore: RequestState;\n requestRemove: RequestState;\n requestRegisterViewInfo: RequestState;\n}\n\nexport const formSubmissionReducerInitialState: FormSubmissionState = {\n requestGet: requestIdle(),\n requestGetLoadMore: requestIdle(),\n requestRemove: requestIdle(),\n requestRegisterViewInfo: requestIdle(),\n};\n\nlet index: number;\n\nconst formSumissionReducer = (state: FormSubmissionState, action: FormSubmissionAction) => {\n const next = cloneDeep(state);\n switch (action.type) {\n case REQ_GET_ALL_SUBMISSIONS_SINGLE_FORM:\n if (action.continuationToken) {\n next.requestGetLoadMore = requestInit();\n } else {\n next.requestGet = requestInit();\n }\n return next;\n case RCV_GET_ALL_SUBMISSIONS_SINGLE_FORM:\n if (action.continuationToken) {\n next.requestGetLoadMore = requestSuccessful();\n if (next.formSubmissionsSingleForm) {\n next.formSubmissionsSingleForm.continuation_token =\n action.formSubmissionsSingleForm.continuation_token;\n next.formSubmissionsSingleForm.submissions = [\n ...next.formSubmissionsSingleForm.submissions,\n ...action.formSubmissionsSingleForm.submissions,\n ];\n }\n } else {\n next.requestGet = requestSuccessful();\n next.formSubmissionsSingleForm = action.formSubmissionsSingleForm;\n }\n return next;\n case ERR_GET_ALL_SUBMISSIONS_SINGLE_FORM:\n if (action.continuationToken) {\n next.requestGetLoadMore = requestError();\n } else {\n next.requestGet = requestError();\n }\n return next;\n\n case REQ_REMOVE_FORM_SUBMISSION:\n next.requestRemove = requestInit();\n return next;\n case RCV_REMOVE_FORM_SUBMISSION:\n next.requestRemove = requestSuccessful();\n\n if (next.formSubmissionsSingleForm) {\n index = next.formSubmissionsSingleForm.submissions.findIndex((x) => x.id === action.id);\n if (index > -1) {\n next.formSubmissionsSingleForm.submissions.splice(index, 1);\n }\n }\n return next;\n case ERR_REMOVE_FORM_SUBMISSION:\n next.requestRemove = requestError();\n return next;\n\n case REQ_SUBMISSION_REGISTER_VIEW_INFO:\n next.requestRegisterViewInfo = requestInit();\n return next;\n case RCV_SUBMISSION_REGISTER_VIEW_INFO:\n next.requestRegisterViewInfo = requestSuccessful();\n if (next.formSubmissionsSingleForm?.submissions) {\n index = next.formSubmissionsSingleForm.submissions.findIndex(\n (x) => x.id === action.submission.id,\n );\n if (index > -1) {\n next.formSubmissionsSingleForm.submissions[index] = { ...action.submission };\n }\n }\n\n return next;\n case ERR_SUBMISSION_REGISTER_VIEW_INFO:\n next.requestRegisterViewInfo = requestError();\n return next;\n\n default:\n throw new Error(`Unsupported action type`);\n }\n};\n\nexport default formSumissionReducer;\n", "import React, { useReducer, useMemo, useCallback } from 'react';\nimport {\n buildAuthorizedDeleteRequest,\n buildAuthorizedGetRequest,\n buildAuthorizedPostRequest,\n buildAuthorizedPutRequest,\n} from '../../http/request-templates';\nimport useHttp from '../../http/useHttp';\nimport { CampaignContext, CampaignContextProps } from './CampaignContext';\nimport { Campaign, CampaignCategory, CreateCampaign } from './CampaignModel';\nimport campaignReducer, {\n REQ_GET_CAMPAIGN,\n RCV_GET_CAMPAIGN,\n ERR_GET_CAMPAIGN,\n REQ_GET_CAMPAIGNS,\n RCV_GET_CAMPAIGNS,\n ERR_GET_CAMPAIGNS,\n REQ_CREATE_CAMPAIGN,\n RCV_CREATE_CAMPAIGN,\n ERR_CREATE_CAMPAIGN,\n REQ_UPDATE_CAMPAIGN,\n RCV_UPDATE_CAMPAIGN,\n ERR_UPDATE_CAMPAIGN,\n REQ_REMOVE_CAMPAIGN,\n RCV_REMOVE_CAMPAIGN,\n ERR_REMOVE_CAMPAIGN,\n REQ_GET_USED_CATEGORIES,\n RCV_GET_USED_CATEGORIES,\n ERR_GET_USED_CATEGORIES,\n REQ_UPDATE_CAMPAIGN_SORT_ORDER,\n RCV_UPDATE_CAMPAIGN_SORT_ORDER,\n ERR_UPDATE_CAMPAIGN_SORT_ORDER,\n campaignReducerInitialState,\n} from './CampaignReducer';\nimport * as settings from '../../helpers/settings';\n\ninterface CampaignProviderProps {\n token: string;\n branchId: string;\n children: React.ReactNode;\n}\n\nconst CampaignProvider = ({ token, branchId, children }: CampaignProviderProps) => {\n const { httpJson } = useHttp();\n const [campaignState, dispatch] = useReducer(campaignReducer, campaignReducerInitialState);\n\n const getCampaign = useCallback(\n async (id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_GET_CAMPAIGN });\n const response = await httpJson(\n `${settings.get('cmsServiceUri')}/campaigns/${branchId}/${id}`,\n buildAuthorizedGetRequest(token),\n );\n // http.validateResponse(response);\n dispatch({ type: RCV_GET_CAMPAIGN, campaign: response });\n } catch (e) {\n dispatch({ type: ERR_GET_CAMPAIGN });\n }\n },\n [token, branchId],\n );\n\n const getCampaigns = useCallback(async () => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_GET_CAMPAIGNS });\n const response = await httpJson(\n `${settings.get('cmsServiceUri')}/campaigns/${branchId}`,\n buildAuthorizedGetRequest(token),\n );\n // http.validateResponse(response);\n dispatch({ type: RCV_GET_CAMPAIGNS, campaigns: response });\n } catch (e) {\n dispatch({ type: ERR_GET_CAMPAIGNS });\n }\n }, [token, branchId]);\n\n const createCampaign = useCallback(\n async (campaign: CreateCampaign) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n /*\n if (!campaign.publish_date) {\n delete campaign.publish_date;\n }\n\n if (!campaign.unpublish_date) {\n delete campaign.unpublish_date;\n }\n */\n\n try {\n dispatch({ type: REQ_CREATE_CAMPAIGN });\n const response = await httpJson(\n `${settings.get('cmsServiceUri')}/campaigns/${branchId}`,\n buildAuthorizedPostRequest(token, campaign),\n );\n // http.validateResponse(response);\n dispatch({ type: RCV_CREATE_CAMPAIGN, campaign: response });\n } catch (e) {\n dispatch({ type: ERR_CREATE_CAMPAIGN });\n }\n },\n [token, branchId],\n );\n\n const updateCampaign = useCallback(\n async (campaign: CreateCampaign, id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n /*\n if (!campaign.publish_date) {\n delete campaign.publish_date;\n }\n\n if (!campaign.unpublish_date) {\n delete campaign.unpublish_date;\n }\n */\n\n try {\n dispatch({ type: REQ_UPDATE_CAMPAIGN });\n const response = await httpJson(\n `${settings.get('cmsServiceUri')}/campaigns/${branchId}/${id}`,\n buildAuthorizedPutRequest(token, campaign),\n );\n // http.validateResponse(response);\n dispatch({ type: RCV_UPDATE_CAMPAIGN, campaign: response });\n } catch (e) {\n dispatch({ type: ERR_UPDATE_CAMPAIGN });\n }\n },\n [token, branchId],\n );\n\n const updateSortOrder = useCallback(\n async (sort_order: { [key: string]: number | undefined }) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n try {\n dispatch({ type: REQ_UPDATE_CAMPAIGN_SORT_ORDER });\n await httpJson(`${settings.get('cmsServiceUri')}/campaigns/${branchId}/sort_order`, {\n ...buildAuthorizedPutRequest(token, { sort_order }),\n snackbarOptions: {\n onError: <>Ett fel uppstod och det gick inte att uppdatera sorteringsordningen.,\n },\n });\n // http.validateResponse(response);\n dispatch({ type: RCV_UPDATE_CAMPAIGN_SORT_ORDER, sort_order });\n } catch (e) {\n dispatch({ type: ERR_UPDATE_CAMPAIGN_SORT_ORDER });\n }\n },\n [token, branchId],\n );\n\n const removeCampaign = useCallback(\n async (id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n try {\n dispatch({ type: REQ_REMOVE_CAMPAIGN });\n await httpJson(\n `${settings.get('cmsServiceUri')}/campaigns/${branchId}/${id}`,\n buildAuthorizedDeleteRequest(token),\n );\n dispatch({ type: RCV_REMOVE_CAMPAIGN, id });\n } catch (e) {\n dispatch({ type: ERR_REMOVE_CAMPAIGN });\n }\n },\n [token, branchId],\n );\n\n const getusedCategories = useCallback(async () => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_GET_USED_CATEGORIES });\n const response = await httpJson(\n `${settings.get('cmsServiceUri')}/campaigns/${branchId}/categories/used`,\n buildAuthorizedGetRequest(token),\n );\n // http.validateResponse(response);\n dispatch({ type: RCV_GET_USED_CATEGORIES, usedCategories: response });\n } catch (e) {\n dispatch({ type: ERR_GET_USED_CATEGORIES });\n }\n }, [token, branchId]);\n\n const value: CampaignContextProps = useMemo(\n () => ({\n ...campaignState,\n branchId,\n getCampaign,\n getCampaigns,\n createCampaign,\n updateCampaign,\n removeCampaign,\n getusedCategories,\n updateSortOrder,\n }),\n [campaignState, token],\n );\n\n return {children};\n};\n\nexport default CampaignProvider;\n", "import cloneDeep from 'lodash.clonedeep';\nimport { BaseAction } from '../../@types/Action';\nimport {\n RequestState,\n requestInit,\n requestSuccessful,\n requestError,\n requestIdle,\n} from '../../http/request-state';\nimport { Campaign, CampaignCategory } from './CampaignModel';\n\nexport const REQ_GET_CAMPAIGN = 'REQ_GET_CAMPAIGN';\nexport const RCV_GET_CAMPAIGN = 'RCV_GET_CAMPAIGN';\nexport const ERR_GET_CAMPAIGN = 'ERR_GET_CAMPAIGN';\n\ntype REQ_GET_CAMPAIGN_TYPE = BaseAction;\ntype RCV_GET_CAMPAIGN_TYPE = BaseAction & {\n campaign: Campaign;\n};\ntype ERR_GET_CAMPAIGN_TYPE = BaseAction;\n\nexport const REQ_GET_CAMPAIGNS = 'REQ_GET_CAMPAIGNS';\nexport const RCV_GET_CAMPAIGNS = 'RCV_GET_CAMPAIGNS';\nexport const ERR_GET_CAMPAIGNS = 'ERR_GET_CAMPAIGNS';\n\ntype REQ_GET_CAMPAIGNS_TYPE = BaseAction;\ntype RCV_GET_CAMPAIGNS_TYPE = BaseAction & {\n campaigns: Campaign[];\n};\ntype ERR_GET_CAMPAIGNS_TYPE = BaseAction;\n\nexport const REQ_CREATE_CAMPAIGN = 'REQ_CREATE_CAMPAIGN';\nexport const RCV_CREATE_CAMPAIGN = 'RCV_CREATE_CAMPAIGN';\nexport const ERR_CREATE_CAMPAIGN = 'ERR_CREATE_CAMPAIGN';\n\ntype REQ_CREATE_CAMPAIGN_TYPE = BaseAction;\ntype RCV_CREATE_CAMPAIGN_TYPE = BaseAction & {\n campaign: Campaign;\n};\ntype ERR_CREATE_CAMPAIGN_TYPE = BaseAction;\n\nexport const REQ_UPDATE_CAMPAIGN = 'REQ_UPDATE_CAMPAIGN';\nexport const RCV_UPDATE_CAMPAIGN = 'RCV_UPDATE_CAMPAIGN';\nexport const ERR_UPDATE_CAMPAIGN = 'ERR_UPDATE_CAMPAIGN';\n\ntype REQ_UPDATE_CAMPAIGN_TYPE = BaseAction;\ntype RCV_UPDATE_CAMPAIGN_TYPE = BaseAction & {\n campaign: Campaign;\n};\ntype ERR_UPDATE_CAMPAIGN_TYPE = BaseAction;\n\nexport const REQ_REMOVE_CAMPAIGN = 'REQ_REMOVE_CAMPAIGN';\nexport const RCV_REMOVE_CAMPAIGN = 'RCV_REMOVE_CAMPAIGN';\nexport const ERR_REMOVE_CAMPAIGN = 'ERR_REMOVE_CAMPAIGN';\n\ntype REQ_REMOVE_CAMPAIGN_TYPE = BaseAction;\ntype RCV_REMOVE_CAMPAIGN_TYPE = BaseAction & {\n id: string;\n};\ntype ERR_REMOVE_CAMPAIGN_TYPE = BaseAction;\n\nexport const REQ_GET_USED_CATEGORIES = 'REQ_GET_USED_CATEGORIES';\nexport const RCV_GET_USED_CATEGORIES = 'RCV_GET_USED_CATEGORIES';\nexport const ERR_GET_USED_CATEGORIES = 'ERR_GET_USED_CATEGORIES';\n\ntype REQ_GET_USED_CATEGORIES_TYPE = BaseAction;\ntype RCV_GET_USED_CATEGORIES_TYPE = BaseAction & {\n usedCategories: CampaignCategory[];\n};\ntype ERR_GET_USED_CATEGORIES_TYPE = BaseAction;\n\nexport const REQ_UPDATE_CAMPAIGN_SORT_ORDER = 'REQ_UPDATE_CAMPAIGN_SORT_ORDER';\nexport const RCV_UPDATE_CAMPAIGN_SORT_ORDER = 'RCV_UPDATE_CAMPAIGN_SORT_ORDER';\nexport const ERR_UPDATE_CAMPAIGN_SORT_ORDER = 'ERR_UPDATE_CAMPAIGN_SORT_ORDER';\n\ntype REQ_UPDATE_CAMPAIGN_SORT_ORDER_TYPE = BaseAction;\ntype RCV_UPDATE_CAMPAIGN_SORT_ORDER_TYPE = BaseAction & {\n sort_order: { [key: string]: number | undefined };\n};\ntype ERR_UPDATE_CAMPAIGN_SORT_ORDER_TYPE = BaseAction;\n\ntype CampaignAction =\n | REQ_GET_CAMPAIGN_TYPE\n | RCV_GET_CAMPAIGN_TYPE\n | ERR_GET_CAMPAIGN_TYPE\n | REQ_GET_CAMPAIGNS_TYPE\n | RCV_GET_CAMPAIGNS_TYPE\n | ERR_GET_CAMPAIGNS_TYPE\n | REQ_CREATE_CAMPAIGN_TYPE\n | RCV_CREATE_CAMPAIGN_TYPE\n | ERR_CREATE_CAMPAIGN_TYPE\n | REQ_UPDATE_CAMPAIGN_TYPE\n | RCV_UPDATE_CAMPAIGN_TYPE\n | ERR_UPDATE_CAMPAIGN_TYPE\n | REQ_REMOVE_CAMPAIGN_TYPE\n | RCV_REMOVE_CAMPAIGN_TYPE\n | ERR_REMOVE_CAMPAIGN_TYPE\n | REQ_GET_USED_CATEGORIES_TYPE\n | RCV_GET_USED_CATEGORIES_TYPE\n | ERR_GET_USED_CATEGORIES_TYPE\n | REQ_UPDATE_CAMPAIGN_SORT_ORDER_TYPE\n | RCV_UPDATE_CAMPAIGN_SORT_ORDER_TYPE\n | ERR_UPDATE_CAMPAIGN_SORT_ORDER_TYPE;\n\ninterface CampaignState {\n campaign?: Campaign;\n campaigns?: Campaign[];\n usedCategories?: CampaignCategory[];\n requestGet: RequestState;\n requestGetAll: RequestState;\n requestCreate: RequestState;\n requestUpdate: RequestState;\n requestRemove: RequestState;\n requestGetusedCategories: RequestState;\n requestUpdateSortOrder: RequestState;\n}\n\nexport const campaignReducerInitialState: CampaignState = {\n requestGet: requestIdle(),\n requestGetAll: requestIdle(),\n requestCreate: requestIdle(),\n requestUpdate: requestIdle(),\n requestRemove: requestIdle(),\n requestGetusedCategories: requestIdle(),\n requestUpdateSortOrder: requestIdle(),\n};\n\nlet index: number | undefined;\n\nconst CAMPAIGNReducer = (state: CampaignState, action: CampaignAction) => {\n const next = cloneDeep(state);\n switch (action.type) {\n case REQ_GET_CAMPAIGN:\n next.requestGetAll = requestInit();\n return next;\n case RCV_GET_CAMPAIGN:\n next.requestGetAll = requestSuccessful();\n next.campaign = action.campaign;\n return next;\n case ERR_GET_CAMPAIGN:\n next.requestGetAll = requestError();\n return next;\n\n case REQ_GET_CAMPAIGNS:\n next.requestGetAll = requestInit();\n return next;\n case RCV_GET_CAMPAIGNS:\n next.requestGetAll = requestSuccessful();\n next.campaigns = action.campaigns;\n return next;\n case ERR_GET_CAMPAIGNS:\n next.requestGetAll = requestError();\n return next;\n\n case REQ_CREATE_CAMPAIGN:\n next.requestCreate = requestInit();\n return next;\n case RCV_CREATE_CAMPAIGN:\n next.requestCreate = requestSuccessful();\n next.campaign = action.campaign;\n next.campaigns = [...(next.campaigns || []), action.campaign];\n return next;\n case ERR_CREATE_CAMPAIGN:\n next.requestCreate = requestError();\n return next;\n\n case REQ_UPDATE_CAMPAIGN:\n next.requestUpdate = requestInit();\n return next;\n case RCV_UPDATE_CAMPAIGN:\n next.requestUpdate = requestSuccessful();\n next.campaign = action.campaign;\n\n if (next.campaigns) {\n index = next.campaigns?.findIndex((x) => x.id === action.campaign.id);\n if (index !== undefined && index > -1) {\n next.campaigns[index] = action.campaign;\n }\n }\n return next;\n case ERR_UPDATE_CAMPAIGN:\n next.requestUpdate = requestError();\n return next;\n\n case REQ_REMOVE_CAMPAIGN:\n next.requestRemove = requestInit();\n return next;\n case RCV_REMOVE_CAMPAIGN:\n next.requestRemove = requestSuccessful();\n\n if (next.campaigns) {\n index = next.campaigns?.findIndex((x) => x.id === action.id);\n if (index !== undefined && index > -1) {\n next.campaigns.splice(index, 1);\n }\n }\n return next;\n case ERR_REMOVE_CAMPAIGN:\n next.requestRemove = requestError();\n return next;\n\n case REQ_GET_USED_CATEGORIES:\n next.requestGetusedCategories = requestInit();\n return next;\n case RCV_GET_USED_CATEGORIES:\n next.requestGetusedCategories = requestSuccessful();\n next.usedCategories = action.usedCategories;\n return next;\n case ERR_GET_USED_CATEGORIES:\n next.requestGetusedCategories = requestError();\n return next;\n\n case REQ_UPDATE_CAMPAIGN_SORT_ORDER:\n next.requestUpdateSortOrder = requestInit();\n return next;\n case RCV_UPDATE_CAMPAIGN_SORT_ORDER:\n next.requestUpdateSortOrder = requestSuccessful();\n if (next.campaigns) {\n Object.keys(action.sort_order).forEach((key) => {\n const i = next.campaigns?.findIndex((y) => y.id === key);\n const order = action.sort_order[key];\n if (i !== undefined && i > -1 && next.campaigns?.[i] && order !== undefined) {\n next.campaigns[i].sort_order = order;\n }\n });\n next.campaigns.sort((a, b) => a.sort_order - b.sort_order);\n }\n return next;\n case ERR_UPDATE_CAMPAIGN_SORT_ORDER:\n next.requestUpdateSortOrder = requestError();\n return next;\n\n default:\n throw new Error(`Unsupported action type`);\n }\n};\n\nexport default CAMPAIGNReducer;\n", "import React, { useMemo } from 'react';\nimport jwt_decode from 'jwt-decode';\n\nimport { AuthContext, AuthContextProps } from './AuthContext';\nimport { Token } from '../../@types/Token';\n\ninterface AuthProviderProps {\n token: string;\n branchId: string;\n children: React.ReactNode;\n}\n\nconst AuthProvider = ({ token, branchId, children }: AuthProviderProps) => {\n const value: AuthContextProps = useMemo(\n () => ({\n token,\n branchId,\n decodedToken: token ? (jwt_decode(token) as Token) : undefined,\n }),\n [token, branchId],\n );\n\n return {children};\n};\n\nexport default AuthProvider;\n", "import React, { useReducer, useMemo, useCallback } from 'react';\nimport * as http from '../../http';\nimport {\n buildAuthorizedGetRequest,\n buildAuthorizedPostRequest,\n} from '../../http/request-templates';\nimport { UsersContext, UsersContextProps } from './UsersContext';\nimport { OrganizationUser, UserInformation } from './UsersModel';\nimport usersReducer, {\n REQ_GET_EXTENDED_USERS,\n RCV_GET_EXTENDED_USERS,\n ERR_GET_EXTENDED_USERS,\n usersReducerInitialState,\n} from './UsersReducer';\n\ninterface UsersProviderProps {\n token: string;\n branchId: string;\n children: React.ReactNode;\n}\n\nconst UsersProvider = ({ token, branchId, children }: UsersProviderProps) => {\n const [usersState, dispatch] = useReducer(usersReducer, usersReducerInitialState);\n\n const getExtendedUsers = useCallback(async () => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_GET_EXTENDED_USERS });\n const responseOrganizationUsers = await http.json(\n `/api/organisation/branches/${branchId}/users`,\n buildAuthorizedGetRequest(token),\n );\n\n const userIds = responseOrganizationUsers.response.map((x) => x.email);\n\n if (userIds) {\n const responseUserInformations = await http.json<{\n [key: string]: UserInformation | undefined;\n }>(`/api/user/info`, buildAuthorizedPostRequest(token, { userIds }));\n\n const extendedUsers = responseOrganizationUsers.response.map((x) => {\n const userInformation = Object.keys(responseUserInformations.response).find(\n (y) =>\n responseUserInformations.response?.[y]?.email.toLowerCase() === x.email.toLowerCase(),\n );\n if (userInformation) {\n return {\n ...x,\n userInformation: responseUserInformations.response[userInformation],\n };\n }\n return x;\n });\n\n dispatch({ type: RCV_GET_EXTENDED_USERS, extendedUsers });\n } else {\n dispatch({\n type: RCV_GET_EXTENDED_USERS,\n extendedUsers: responseOrganizationUsers.response,\n });\n }\n } catch (e) {\n dispatch({ type: ERR_GET_EXTENDED_USERS });\n }\n }, [token, branchId]);\n const value: UsersContextProps = useMemo(\n () => ({\n ...usersState,\n getExtendedUsers,\n }),\n [usersState, token],\n );\n\n return {children};\n};\n\nexport default UsersProvider;\n", "import cloneDeep from 'lodash.clonedeep';\nimport { BaseAction } from '../../@types/Action';\nimport {\n RequestState,\n requestInit,\n requestSuccessful,\n requestError,\n requestIdle,\n} from '../../http/request-state';\nimport { ExtendedUser } from './UsersModel';\n\nexport const REQ_GET_EXTENDED_USERS = 'REQ_GET_EXTENDED_USERS';\nexport const RCV_GET_EXTENDED_USERS = 'RCV_GET_EXTENDED_USERS';\nexport const ERR_GET_EXTENDED_USERS = 'ERR_GET_EXTENDED_USERS';\n\ntype REQ_GET_EXTENDED_USERS_TYPE = BaseAction;\ntype RCV_GET_EXTENDED_USERS_TYPE = BaseAction & {\n extendedUsers?: ExtendedUser[];\n};\ntype ERR_GET_EXTENDED_USERS_TYPE = BaseAction;\n\ntype SiteAction =\n | REQ_GET_EXTENDED_USERS_TYPE\n | RCV_GET_EXTENDED_USERS_TYPE\n | ERR_GET_EXTENDED_USERS_TYPE;\n\ninterface SiteState {\n extendedUsers?: ExtendedUser[];\n requestGetExtendedUsers: RequestState;\n}\n\nexport const usersReducerInitialState: SiteState = {\n requestGetExtendedUsers: requestIdle(),\n};\n\nconst usersReducer = (state: SiteState, action: SiteAction) => {\n const next = cloneDeep(state);\n switch (action.type) {\n case REQ_GET_EXTENDED_USERS:\n next.requestGetExtendedUsers = requestInit();\n return next;\n case RCV_GET_EXTENDED_USERS:\n next.requestGetExtendedUsers = requestSuccessful();\n next.extendedUsers = action.extendedUsers;\n return next;\n case ERR_GET_EXTENDED_USERS:\n next.requestGetExtendedUsers = requestError();\n return next;\n\n default:\n throw new Error(`Unsupported action type`);\n }\n};\n\nexport default usersReducer;\n", "import React, { useReducer, useMemo, useCallback } from 'react';\nimport * as http from '../../http';\nimport {\n buildAuthorizedDeleteRequest,\n buildAuthorizedFormPostRequest,\n buildAuthorizedGetRequest,\n buildAuthorizedPostRequest,\n buildAuthorizedPutRequest,\n} from '../../http/request-templates';\nimport { newGuid } from '../../utils/guid';\nimport { DocumentContext, DocumentContextProps } from './DocumentContext';\nimport { Document, DocumentSort, ExtendedDocument } from './DocumentModel';\nimport documentReducer, {\n REQ_GET_DOCUMENTS,\n RCV_GET_DOCUMENTS,\n ERR_GET_DOCUMENTS,\n REQ_UPLOAD_DOCUMENT,\n RCV_UPLOAD_DOCUMENT,\n ERR_UPLOAD_DOCUMENT,\n REQ_UPDATE_DOCUMENT,\n RCV_UPDATE_DOCUMENT,\n ERR_UPDATE_DOCUMENT,\n REQ_UPDATE_DOCUMENTS_SORT_ORDER,\n RCV_UPDATE_DOCUMENTS_SORT_ORDER,\n ERR_UPDATE_DOCUMENTS_SORT_ORDER,\n REQ_REMOVE_DOCUMENT,\n RCV_REMOVE_DOCUMENT,\n ERR_REMOVE_DOCUMENT,\n documentReducerInitialState,\n REQ_CLEAR_DOCUMENTS,\n REQ_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION,\n RCV_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION,\n ERR_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION,\n} from './DocumentReducer';\nimport * as settings from '../../helpers/settings';\n\ninterface DocumentProviderProps {\n token: string;\n branchId: string;\n children: React.ReactNode;\n}\n\nconst DocumentProvider = ({ token, branchId, children }: DocumentProviderProps) => {\n const [documentState, dispatch] = useReducer(documentReducer, documentReducerInitialState);\n\n const getDocuments = useCallback(\n async (id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_GET_DOCUMENTS });\n const response = await http.json(\n `${settings.get('documentServiceUri')}/document/${branchId}/${id}`,\n buildAuthorizedGetRequest(token),\n );\n\n dispatch({\n type: RCV_GET_DOCUMENTS,\n documents: response.response,\n });\n } catch (e) {\n dispatch({ type: ERR_GET_DOCUMENTS });\n }\n },\n [token, branchId],\n );\n\n const uploadDocument = useCallback(\n async (document: File, id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n const requestId = newGuid();\n const _document: ExtendedDocument = {\n category: null,\n contentType: document.type,\n name: document.name,\n id: requestId,\n file: document,\n url: (document as File & { preview: string }).preview,\n };\n\n const formData = new FormData();\n formData.append('File', document);\n\n try {\n dispatch({ type: REQ_UPLOAD_DOCUMENT, requestId, document: _document });\n const response = await http.json(\n `${settings.get('documentServiceUri')}/document/${branchId}/${id}`,\n buildAuthorizedFormPostRequest(token, formData),\n );\n\n dispatch({\n type: RCV_UPLOAD_DOCUMENT,\n document: response.response,\n requestId,\n });\n } catch (e) {\n dispatch({ type: ERR_UPLOAD_DOCUMENT, requestId });\n }\n },\n [token, branchId],\n );\n\n const updateDocument = useCallback(\n async (document: Document, id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n const body = {\n name: document.name,\n category: document.category,\n };\n\n try {\n dispatch({ type: REQ_UPDATE_DOCUMENT });\n const response = await http.json(\n `${settings.get('documentServiceUri')}/document/${branchId}/${id}/${document.id}`,\n buildAuthorizedPutRequest(token, body),\n );\n\n dispatch({\n type: RCV_UPDATE_DOCUMENT,\n document: response.response,\n });\n } catch (e) {\n dispatch({ type: ERR_UPDATE_DOCUMENT });\n }\n },\n [token, branchId],\n );\n\n const updateDocumentsSortOrder = useCallback(\n async (documents: Document[], id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n const body: DocumentSort[] = documents.map((x, i) => ({\n id: x.id,\n sortOrder: i + 1,\n }));\n\n try {\n dispatch({ type: REQ_UPDATE_DOCUMENTS_SORT_ORDER });\n await http.json(\n `${settings.get('documentServiceUri')}/document/${branchId}/${id}/order`,\n buildAuthorizedPutRequest(token, body),\n );\n\n dispatch({\n type: RCV_UPDATE_DOCUMENTS_SORT_ORDER,\n documents,\n });\n } catch (e) {\n dispatch({ type: ERR_UPDATE_DOCUMENTS_SORT_ORDER });\n }\n },\n [token, branchId],\n );\n\n const removeDocument = useCallback(\n async (documentId: string, id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n try {\n dispatch({ type: REQ_REMOVE_DOCUMENT, documentId });\n await http.json(\n `${settings.get('documentServiceUri')}/document/${branchId}/${id}/${documentId}`,\n buildAuthorizedDeleteRequest(token),\n );\n\n dispatch({\n type: RCV_REMOVE_DOCUMENT,\n documentId,\n });\n } catch (e) {\n dispatch({ type: ERR_REMOVE_DOCUMENT, documentId });\n }\n },\n [token, branchId],\n );\n\n const clearDocuments = useCallback(() => dispatch({ type: REQ_CLEAR_DOCUMENTS }), []);\n\n const tryToAddPossibleCarDeclaration = useCallback(\n async (id: string, regnr: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n\n try {\n dispatch({ type: REQ_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION });\n const response = await http.json(\n `${settings.get('documentServiceUri')}/document/declaration/${branchId}/${id}/${regnr}`,\n buildAuthorizedPostRequest(token),\n );\n\n dispatch({\n type: RCV_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION,\n document: response.response,\n });\n } catch (e) {\n dispatch({ type: ERR_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION });\n }\n },\n [token, branchId],\n );\n\n const value: DocumentContextProps = useMemo(\n () => ({\n ...documentState,\n getDocuments,\n uploadDocument,\n updateDocument,\n updateDocumentsSortOrder,\n removeDocument,\n clearDocuments,\n tryToAddPossibleCarDeclaration,\n }),\n [documentState, token],\n );\n\n return {children};\n};\n\nexport default DocumentProvider;\n", "export const newGuid = () =>\n 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c == 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n", "import cloneDeep from 'lodash.clonedeep';\nimport { BaseAction } from '../../@types/Action';\nimport {\n RequestState,\n requestInit,\n requestSuccessful,\n requestError,\n requestIdle,\n RequestCluster,\n requestClusterUpdate,\n} from '../../http/request-state';\nimport { Document, ExtendedDocument } from './DocumentModel';\n\nexport const REQ_GET_DOCUMENTS = 'REQ_GET_DOCUMENTS';\nexport const RCV_GET_DOCUMENTS = 'RCV_GET_DOCUMENTS';\nexport const ERR_GET_DOCUMENTS = 'ERR_GET_DOCUMENTS';\n\ntype REQ_GET_DOCUMENTS_TYPE = BaseAction;\ntype RCV_GET_DOCUMENTS_TYPE = BaseAction & {\n documents?: Document[];\n};\ntype ERR_GET_DOCUMENTS_TYPE = BaseAction;\n\nexport const REQ_UPLOAD_DOCUMENT = 'REQ_UPLOAD_DOCUMENT';\nexport const RCV_UPLOAD_DOCUMENT = 'RCV_UPLOAD_DOCUMENT';\nexport const ERR_UPLOAD_DOCUMENT = 'ERR_UPLOAD_DOCUMENT';\n\ntype REQ_UPLOAD_DOCUMENT_TYPE = BaseAction & {\n requestId: string;\n document: ExtendedDocument;\n};\ntype RCV_UPLOAD_DOCUMENT_TYPE = BaseAction & {\n document: Document;\n requestId: string;\n};\ntype ERR_UPLOAD_DOCUMENT_TYPE = BaseAction & {\n requestId: string;\n};\n\nexport const REQ_UPDATE_DOCUMENT = 'REQ_UPDATE_DOCUMENT';\nexport const RCV_UPDATE_DOCUMENT = 'RCV_UPDATE_DOCUMENT';\nexport const ERR_UPDATE_DOCUMENT = 'ERR_UPDATE_DOCUMENT';\n\ntype REQ_UPDATE_DOCUMENT_TYPE = BaseAction;\ntype RCV_UPDATE_DOCUMENT_TYPE = BaseAction & {\n document: Document;\n};\ntype ERR_UPDATE_DOCUMENT_TYPE = BaseAction;\n\nexport const REQ_UPDATE_DOCUMENTS_SORT_ORDER = 'REQ_UPDATE_DOCUMENTS_SORT_ORDER';\nexport const RCV_UPDATE_DOCUMENTS_SORT_ORDER = 'RCV_UPDATE_DOCUMENTS_SORT_ORDER';\nexport const ERR_UPDATE_DOCUMENTS_SORT_ORDER = 'ERR_UPDATE_DOCUMENTS_SORT_ORDER';\n\ntype REQ_UPDATE_DOCUMENTS_SORT_ORDER_TYPE = BaseAction;\ntype RCV_UPDATE_DOCUMENTS_SORT_ORDER_TYPE = BaseAction & {\n documents: Document[];\n};\ntype ERR_UPDATE_DOCUMENTS_SORT_ORDER_TYPE = BaseAction;\n\nexport const REQ_REMOVE_DOCUMENT = 'REQ_REMOVE_DOCUMENT';\nexport const RCV_REMOVE_DOCUMENT = 'RCV_REMOVE_DOCUMENT';\nexport const ERR_REMOVE_DOCUMENT = 'ERR_REMOVE_DOCUMENT';\n\ntype REQ_REMOVE_DOCUMENT_TYPE = BaseAction & {\n documentId: string;\n};\ntype RCV_REMOVE_DOCUMENT_TYPE = BaseAction & {\n documentId: string;\n};\ntype ERR_REMOVE_DOCUMENT_TYPE = BaseAction & {\n documentId: string;\n};\n\nexport const REQ_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION = 'REQ_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION';\nexport const RCV_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION = 'RCV_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION';\nexport const ERR_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION = 'ERR_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION';\n\ntype REQ_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION_TYPE = BaseAction<\n typeof REQ_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION\n>;\ntype RCV_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION_TYPE = BaseAction<\n typeof RCV_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION\n> & {\n document: Document;\n};\ntype ERR_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION_TYPE = BaseAction<\n typeof ERR_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION\n>;\n\nexport const REQ_CLEAR_DOCUMENTS = 'REQ_CLEAR_DOCUMENTS';\ntype REQ_CLEAR_DOCUMENTS_TYPE = BaseAction;\n\ntype SiteAction =\n | REQ_GET_DOCUMENTS_TYPE\n | RCV_GET_DOCUMENTS_TYPE\n | ERR_GET_DOCUMENTS_TYPE\n | REQ_UPLOAD_DOCUMENT_TYPE\n | RCV_UPLOAD_DOCUMENT_TYPE\n | ERR_UPLOAD_DOCUMENT_TYPE\n | REQ_UPDATE_DOCUMENT_TYPE\n | RCV_UPDATE_DOCUMENT_TYPE\n | ERR_UPDATE_DOCUMENT_TYPE\n | REQ_UPDATE_DOCUMENTS_SORT_ORDER_TYPE\n | RCV_UPDATE_DOCUMENTS_SORT_ORDER_TYPE\n | ERR_UPDATE_DOCUMENTS_SORT_ORDER_TYPE\n | REQ_REMOVE_DOCUMENT_TYPE\n | RCV_REMOVE_DOCUMENT_TYPE\n | ERR_REMOVE_DOCUMENT_TYPE\n | REQ_CLEAR_DOCUMENTS_TYPE\n | REQ_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION_TYPE\n | RCV_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION_TYPE\n | ERR_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION_TYPE;\n\ninterface SiteState {\n documents?: Document[];\n pendingUploads: ExtendedDocument[];\n requestGetDocuments: RequestState;\n requestUploadDocument: RequestCluster;\n requestUpdateDocument: RequestState;\n requestUpdateDocumentsSortOrder: RequestState;\n requestRemoveDocument: RequestCluster;\n requestTryToAddPossibleCarDeclaration: RequestState;\n}\n\nexport const documentReducerInitialState: SiteState = {\n pendingUploads: [],\n requestGetDocuments: requestIdle(),\n requestUploadDocument: {},\n requestUpdateDocument: requestIdle(),\n requestUpdateDocumentsSortOrder: requestIdle(),\n requestRemoveDocument: {},\n requestTryToAddPossibleCarDeclaration: requestIdle(),\n};\n\nconst documentReducer = (state: SiteState, action: SiteAction) => {\n const next = cloneDeep(state);\n switch (action.type) {\n case REQ_GET_DOCUMENTS:\n next.requestGetDocuments = requestInit();\n return next;\n case RCV_GET_DOCUMENTS:\n next.requestGetDocuments = requestSuccessful();\n next.documents = action.documents;\n return next;\n case ERR_GET_DOCUMENTS:\n next.requestGetDocuments = requestError();\n return next;\n\n case REQ_UPLOAD_DOCUMENT:\n next.pendingUploads = [...next.pendingUploads, action.document];\n next.requestUploadDocument = requestClusterUpdate(\n next.requestUploadDocument,\n action.requestId,\n requestInit,\n );\n return next;\n case RCV_UPLOAD_DOCUMENT:\n next.requestUploadDocument = requestClusterUpdate(\n next.requestUploadDocument,\n action.requestId,\n requestSuccessful,\n );\n next.documents = [...(next.documents || []), action.document];\n const indexUpload = next.pendingUploads.findIndex((x) => x.id === action.requestId);\n if (indexUpload !== undefined && indexUpload > -1) {\n next.pendingUploads.splice(indexUpload, 1);\n }\n return next;\n case ERR_UPLOAD_DOCUMENT:\n next.requestUploadDocument = requestClusterUpdate(\n next.requestUploadDocument,\n action.requestId,\n requestError,\n );\n return next;\n\n case REQ_UPDATE_DOCUMENT:\n next.requestUpdateDocument = requestInit();\n return next;\n case RCV_UPDATE_DOCUMENT:\n next.requestUpdateDocument = requestSuccessful();\n const indexUpdate = next.documents?.findIndex((x) => x.id === action.document.id);\n if (next.documents && indexUpdate !== undefined && indexUpdate > -1) {\n next.documents[indexUpdate] = action.document;\n }\n return next;\n case ERR_UPDATE_DOCUMENT:\n next.requestUpdateDocument = requestError();\n return next;\n\n case REQ_UPDATE_DOCUMENTS_SORT_ORDER:\n next.requestUpdateDocumentsSortOrder = requestInit();\n return next;\n case RCV_UPDATE_DOCUMENTS_SORT_ORDER:\n next.requestUpdateDocumentsSortOrder = requestSuccessful();\n next.documents = action.documents;\n return next;\n case ERR_UPDATE_DOCUMENTS_SORT_ORDER:\n next.requestUpdateDocumentsSortOrder = requestError();\n return next;\n\n case REQ_REMOVE_DOCUMENT:\n next.requestRemoveDocument = next.requestRemoveDocument = requestClusterUpdate(\n next.requestRemoveDocument,\n action.documentId,\n requestInit,\n );\n return next;\n case RCV_REMOVE_DOCUMENT:\n next.requestRemoveDocument = next.requestRemoveDocument = requestClusterUpdate(\n next.requestRemoveDocument,\n action.documentId,\n requestSuccessful,\n );\n\n const indexRemove = next.documents?.findIndex((x) => x.id === action.documentId);\n if (next.documents && indexRemove !== undefined && indexRemove > -1) {\n next.documents.splice(indexRemove, 1);\n }\n\n return next;\n case ERR_REMOVE_DOCUMENT:\n next.requestRemoveDocument = next.requestRemoveDocument = requestClusterUpdate(\n next.requestRemoveDocument,\n action.documentId,\n requestError,\n );\n return next;\n\n case REQ_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION:\n next.requestTryToAddPossibleCarDeclaration = requestInit();\n return next;\n case RCV_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION:\n next.requestTryToAddPossibleCarDeclaration = requestSuccessful();\n if (next.documents) {\n next.documents.push(action.document);\n } else {\n next.documents = [action.document];\n }\n\n return next;\n case ERR_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION:\n next.requestTryToAddPossibleCarDeclaration = requestError();\n return next;\n\n case REQ_CLEAR_DOCUMENTS:\n return { ...documentReducerInitialState };\n\n default:\n throw new Error(`Unsupported action type`);\n }\n};\n\nexport default documentReducer;\n", "import React, { useReducer, useMemo, useCallback } from 'react';\nimport * as http from '../../http';\nimport {\n buildAuthorizedGetRequest,\n buildAuthorizedPostRequest,\n} from '../../http/request-templates';\nimport { SocialBoostContext, SocialBoostContextProps } from './SocialBoostContext';\nimport {\n Insight,\n SocialBoostItem,\n SocialBoostSettings,\n SocialBoostSingleResponse,\n} from './SocialBoostModels';\nimport documentReducer, {\n REQ_GET_INSIGHT,\n RCV_GET_INSIGHT,\n ERR_GET_INSIGHT,\n REQ_GET_SETTINGS,\n RCV_GET_SETTINGS,\n ERR_GET_SETTINGS,\n REQ_BOOST_SINGLE,\n RCV_BOOST_SINGLE,\n ERR_BOOST_SINGLE,\n socialBoostReducerInitialState,\n} from './socialBoostReducer';\n\ninterface SocialBoostProviderProps {\n token: string;\n branchId: string;\n children: React.ReactNode;\n}\n\nconst SocialBoostProvider = ({ token, branchId, children }: SocialBoostProviderProps) => {\n const [socialBoostState, dispatch] = useReducer(documentReducer, socialBoostReducerInitialState);\n const getInsight = useCallback(\n async (id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_GET_INSIGHT });\n const response = await http.json(\n `/api/v2/social-boost/${branchId}/${id}/insight`,\n buildAuthorizedGetRequest(token),\n );\n\n dispatch({\n type: RCV_GET_INSIGHT,\n insight: response.response,\n });\n } catch (e) {\n dispatch({ type: ERR_GET_INSIGHT });\n }\n },\n [token, branchId],\n );\n\n const getSettings = useCallback(async () => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_GET_SETTINGS });\n const response = await http.json(\n `/api/v2/social-boost/${branchId}/settings`,\n buildAuthorizedGetRequest(token),\n );\n\n dispatch({\n type: RCV_GET_SETTINGS,\n settings: response.response,\n });\n } catch (e) {\n dispatch({ type: ERR_GET_SETTINGS });\n }\n }, [token, branchId]);\n\n const boostSingle = useCallback(\n async (body: SocialBoostItem) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_BOOST_SINGLE });\n await http.json(\n `/api/v2/social-boost/${branchId}/boost-single`,\n buildAuthorizedPostRequest(token, body),\n );\n\n dispatch({\n type: RCV_BOOST_SINGLE,\n });\n } catch (e) {\n dispatch({ type: ERR_BOOST_SINGLE });\n }\n },\n [token, branchId],\n );\n\n const value: SocialBoostContextProps = useMemo(\n () => ({\n ...socialBoostState,\n getInsight,\n getSettings,\n boostSingle,\n }),\n [socialBoostState, token],\n );\n\n return {children};\n};\n\nexport default SocialBoostProvider;\n", "import cloneDeep from 'lodash.clonedeep';\nimport { BaseAction } from '../../@types/Action';\nimport {\n RequestState,\n requestInit,\n requestSuccessful,\n requestError,\n requestIdle,\n} from '../../http/request-state';\nimport { Insight, SocialBoostSettings } from './SocialBoostModels';\n\nexport const REQ_GET_INSIGHT = 'REQ_GET_INSIGHT';\nexport const RCV_GET_INSIGHT = 'RCV_GET_INSIGHT';\nexport const ERR_GET_INSIGHT = 'ERR_GET_INSIGHT';\n\ntype REQ_GET_INSIGHT_TYPE = BaseAction;\ntype RCV_GET_INSIGHT_TYPE = BaseAction & {\n insight?: Insight;\n};\ntype ERR_GET_INSIGHT_TYPE = BaseAction;\n\nexport const REQ_GET_SETTINGS = 'REQ_GET_SETTINGS';\nexport const RCV_GET_SETTINGS = 'RCV_GET_SETTINGS';\nexport const ERR_GET_SETTINGS = 'ERR_GET_SETTINGS';\n\ntype REQ_GET_SETTINGS_TYPE = BaseAction;\ntype RCV_GET_SETTINGS_TYPE = BaseAction & {\n settings?: SocialBoostSettings;\n};\ntype ERR_GET_SETTINGS_TYPE = BaseAction;\n\nexport const REQ_BOOST_SINGLE = 'REQ_BOOST_SINGLE';\nexport const RCV_BOOST_SINGLE = 'RCV_BOOST_SINGLE';\nexport const ERR_BOOST_SINGLE = 'ERR_BOOST_SINGLE';\n\ntype REQ_BOOST_SINGLE_TYPE = BaseAction;\ntype RCV_BOOST_SINGLE_TYPE = BaseAction;\ntype ERR_BOOST_SINGLE_TYPE = BaseAction;\n\ntype SocialBoostAction =\n | REQ_GET_INSIGHT_TYPE\n | RCV_GET_INSIGHT_TYPE\n | ERR_GET_INSIGHT_TYPE\n | REQ_GET_SETTINGS_TYPE\n | RCV_GET_SETTINGS_TYPE\n | ERR_GET_SETTINGS_TYPE\n | REQ_BOOST_SINGLE_TYPE\n | RCV_BOOST_SINGLE_TYPE\n | ERR_BOOST_SINGLE_TYPE;\n\ninterface SocialBoostState {\n insight?: Insight;\n settings?: SocialBoostSettings;\n requestGetInsight: RequestState;\n requestGetSettings: RequestState;\n requestBoostSingle: RequestState;\n}\n\nconst newInsight = (): Insight => ({\n reach: 0,\n impressions: 0,\n clicks: 0,\n status: 'ACTIVE',\n days_remaining: 7,\n app_purchases: 0,\n site_purchases: 0,\n});\n\nexport const socialBoostReducerInitialState: SocialBoostState = {\n requestGetInsight: requestIdle(),\n requestGetSettings: requestIdle(),\n requestBoostSingle: requestIdle(),\n};\n\nconst socialBoostReducer = (state: SocialBoostState, action: SocialBoostAction) => {\n const next = cloneDeep(state);\n switch (action.type) {\n case REQ_GET_INSIGHT:\n next.requestGetInsight = requestInit();\n return next;\n case RCV_GET_INSIGHT:\n next.requestGetInsight = requestSuccessful();\n next.insight = action.insight;\n return next;\n case ERR_GET_INSIGHT:\n next.requestGetInsight = requestError();\n return next;\n\n case REQ_GET_SETTINGS:\n next.requestGetSettings = requestInit();\n return next;\n case RCV_GET_SETTINGS:\n next.requestGetSettings = requestSuccessful();\n next.settings = action.settings;\n return next;\n case ERR_GET_SETTINGS:\n next.requestGetSettings = requestError();\n return next;\n\n case REQ_BOOST_SINGLE:\n next.requestBoostSingle = requestInit();\n return next;\n case RCV_BOOST_SINGLE:\n next.requestBoostSingle = requestSuccessful();\n next.insight = newInsight();\n return next;\n case ERR_BOOST_SINGLE:\n next.requestBoostSingle = requestError();\n return next;\n\n default:\n throw new Error(`Unsupported action type`);\n }\n};\n\nexport default socialBoostReducer;\n", "import React, { useReducer, useMemo, useCallback } from 'react';\nimport * as http from '../../http';\nimport {\n buildAuthorizedGetRequest,\n buildAuthorizedPostRequest,\n} from '../../http/request-templates';\nimport { RenewAdContext, RenewAdContextProps } from './RenewAdContext';\nimport { RenewAdSettings, AdRenewItem, AdRenewSingleResponse } from './RenewAdModels';\nimport documentReducer, {\n REQ_GET_RENEW_AD_SETTINGS,\n RCV_GET_RENEW_AD_SETTINGS,\n ERR_GET_RENEW_AD_SETTINGS,\n REQ_RENEW_AD,\n RCV_RENEW_AD,\n ERR_RENEW_AD,\n socialBoostReducerInitialState,\n} from './renewAdReducer';\n\ninterface RenewAdProviderProps {\n token: string;\n branchId: string;\n children: React.ReactNode;\n}\n\nconst RenewAdProvider = ({ token, branchId, children }: RenewAdProviderProps) => {\n const [socialBoostState, dispatch] = useReducer(documentReducer, socialBoostReducerInitialState);\n const getRenewAdSettings = useCallback(\n async (id: string) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_GET_RENEW_AD_SETTINGS });\n const response = await http.json(\n `/api/vehicle/GetPublishedDateBatch?waykeIds=${id}`,\n buildAuthorizedGetRequest(token),\n );\n\n dispatch({\n type: RCV_GET_RENEW_AD_SETTINGS,\n renewAdSettings: response.response?.[0],\n });\n } catch (e) {\n dispatch({ type: ERR_GET_RENEW_AD_SETTINGS });\n }\n },\n [token, branchId],\n );\n\n const renewAd = useCallback(\n async (body: AdRenewItem) => {\n if (!token) {\n throw new Error('Missing token');\n }\n if (!branchId) {\n throw new Error('Missing branchId');\n }\n try {\n dispatch({ type: REQ_RENEW_AD });\n await http.json(\n `/api/v2/ad-boost/${branchId}/boost`,\n buildAuthorizedPostRequest(token, body),\n );\n\n dispatch({\n type: RCV_RENEW_AD,\n });\n } catch (e) {\n dispatch({ type: ERR_RENEW_AD });\n }\n },\n [token, branchId],\n );\n\n const value: RenewAdContextProps = useMemo(\n () => ({\n ...socialBoostState,\n getRenewAdSettings,\n renewAd,\n }),\n [socialBoostState, token],\n );\n\n return {children};\n};\n\nexport default RenewAdProvider;\n", "import cloneDeep from 'lodash.clonedeep';\nimport { BaseAction } from '../../@types/Action';\nimport {\n RequestState,\n requestInit,\n requestSuccessful,\n requestError,\n requestIdle,\n} from '../../http/request-state';\nimport { RenewAdSettings } from './RenewAdModels';\n\nexport const REQ_GET_RENEW_AD_SETTINGS = 'REQ_GET_RENEW_AD_SETTINGS';\nexport const RCV_GET_RENEW_AD_SETTINGS = 'RCV_GET_RENEW_AD_SETTINGS';\nexport const ERR_GET_RENEW_AD_SETTINGS = 'ERR_GET_RENEW_AD_SETTINGS';\n\ntype REQ_GET_RENEW_AD_SETTINGS_TYPE = BaseAction;\ntype RCV_GET_RENEW_AD_SETTINGS_TYPE = BaseAction & {\n renewAdSettings?: RenewAdSettings;\n};\ntype ERR_GET_RENEW_AD_SETTINGS_TYPE = BaseAction;\n\nexport const REQ_RENEW_AD = 'REQ_RENEW_AD';\nexport const RCV_RENEW_AD = 'RCV_RENEW_AD';\nexport const ERR_RENEW_AD = 'ERR_RENEW_AD';\n\ntype REQ_RENEW_AD_TYPE = BaseAction;\ntype RCV_RENEW_AD_TYPE = BaseAction;\ntype ERR_RENEW_AD_TYPE = BaseAction;\n\ntype RenewAdAction =\n | REQ_GET_RENEW_AD_SETTINGS_TYPE\n | RCV_GET_RENEW_AD_SETTINGS_TYPE\n | ERR_GET_RENEW_AD_SETTINGS_TYPE\n | REQ_RENEW_AD_TYPE\n | RCV_RENEW_AD_TYPE\n | ERR_RENEW_AD_TYPE;\n\ninterface RenewAdState {\n renewAdSettings?: RenewAdSettings;\n requestGetRenewAdSettings: RequestState;\n requestRenewAd: RequestState;\n}\n\nexport const socialBoostReducerInitialState: RenewAdState = {\n requestGetRenewAdSettings: requestIdle(),\n requestRenewAd: requestIdle(),\n};\n\nconst socialBoostReducer = (state: RenewAdState, action: RenewAdAction) => {\n const next = cloneDeep(state);\n switch (action.type) {\n case REQ_GET_RENEW_AD_SETTINGS:\n next.requestGetRenewAdSettings = requestInit();\n return next;\n case RCV_GET_RENEW_AD_SETTINGS:\n next.requestGetRenewAdSettings = requestSuccessful();\n next.renewAdSettings = action.renewAdSettings;\n return next;\n case ERR_GET_RENEW_AD_SETTINGS:\n next.requestGetRenewAdSettings = requestError();\n return next;\n\n case REQ_RENEW_AD:\n next.requestRenewAd = requestInit();\n return next;\n case RCV_RENEW_AD:\n next.requestRenewAd = requestSuccessful();\n return next;\n case ERR_RENEW_AD:\n next.requestRenewAd = requestError();\n return next;\n\n default:\n throw new Error(`Unsupported action type`);\n }\n};\n\nexport default socialBoostReducer;\n", "import React from 'react';\nimport { settings } from '../../helpers';\n\ninterface GtmObject {\n 'gtm.start': number;\n event: 'gtm.js';\n}\n\nconst GoogleTagManager = () => {\n React.useEffect(() => {\n const id = settings.get('GoogleTagManagerID');\n const auth = settings.get('GoogleTagManagerAuth');\n const preview = settings.get('GoogleTagManagerPreview');\n\n ((w: Window & typeof globalThis, d: Document, s: 'script', l: 'dataLayer') => {\n w[l] = w[l] || [];\n if (w[l]) {\n (w[l] as GtmObject[]).push({\n 'gtm.start': new Date().getTime(),\n event: 'gtm.js',\n });\n }\n\n const a = auth ? `>m_auth=${auth}` : '';\n const p = preview ? `>m_preview=${preview}` : '';\n\n const f = d.getElementsByTagName(s)[0];\n const j = d.createElement(s);\n const dl = l !== 'dataLayer' ? `&l=${l}` : '';\n\n j.async = true;\n j.src = `https://www.googletagmanager.com/gtm.js?id=${id}${dl}${a}${p}`;\n if (f.parentNode) {\n f.parentNode.insertBefore(j, f);\n }\n })(window, document, 'script', 'dataLayer');\n }, []);\n\n return null;\n};\n\nexport default GoogleTagManager;\n", "import React, { useCallback, useRef } from 'react';\nimport useSnackbar from '../../state/Snackbar/useSnackbar';\nimport SnackbarItem from './SnackbarItem';\n\nimport { Wrapper } from './wrapper';\n\nconst Snackbar = () => {\n const { snackbars, removeSnackbar } = useSnackbar();\n const ref = useRef(null);\n\n const transform = useCallback((height: number) => {\n if (ref.current) {\n ref.current.style.transform = `translateY(-${height + 8}px)`;\n ref.current.style.transition = 'transform 300ms ease';\n setTimeout(() => {\n if (ref.current) {\n ref.current.style.transform = '';\n ref.current.style.transition = '';\n }\n }, 300);\n }\n }, []);\n\n return (\n \n {snackbars.map((snackbar) => (\n \n ))}\n \n );\n};\n\nexport default Snackbar;\n", "import React, { useCallback, useEffect, useRef } from 'react';\nimport { Snackbar } from '../../state/Snackbar/SnackbarProvider';\n\nimport { Item, Content, Action, Close } from './wrapper';\nimport { IconClose } from '../../styled-components/components/Icon';\n\nconst TIMEOUT = 10000;\n\ninterface SnackbarItemProps {\n snackbar: Snackbar;\n removeSnackbar: (id: number) => void;\n transform: (height: number) => void;\n disableRemove?: boolean;\n}\n\nconst SnackbarItem = ({\n snackbar,\n removeSnackbar,\n transform,\n disableRemove,\n}: SnackbarItemProps) => {\n const onClick = useCallback(() => removeSnackbar(snackbar.id), []);\n const ref = useRef(null);\n\n if (!disableRemove) {\n useEffect(() => {\n setTimeout(() => {\n removeSnackbar(snackbar.id);\n }, TIMEOUT);\n\n setTimeout(() => {\n if (ref.current?.clientHeight) {\n transform(ref.current.clientHeight);\n }\n }, TIMEOUT - 300);\n\n setTimeout(() => {\n if (ref.current) {\n ref.current.style.opacity = '0';\n ref.current.style.transition = 'opacity 300ms ease';\n }\n }, TIMEOUT - 600);\n\n return () => {\n removeSnackbar(snackbar.id);\n };\n }, []);\n }\n\n return (\n \n {snackbar.reactNode}\n \n \n \n \n \n \n );\n};\n\nexport default SnackbarItem;\n", "import styled, { css } from 'styled-components';\n\nimport { size, rgba } from '../../styled-components/layout/helpers';\nimport { noTransform, fadeIn } from '../../styled-components/layout/keyframes';\nimport { ButtonReset } from '../../styled-components/layout/reset';\n\nexport const Wrapper = styled.div`\n position: fixed;\n top: ${size(1)};\n right: ${size(1)};\n z-index: ${(props) => props.theme.zindex.snackbar};\n`;\n\ntype ItemProps = React.DetailedHTMLProps, HTMLDivElement> & {\n isSuccess?: boolean;\n isDanger?: boolean;\n isWarning?: boolean;\n isInfo?: boolean;\n};\n\nexport const Item = styled.div.attrs(() => ({\n role: 'alert',\n}))`\n display: flex;\n align-items: flex-start;\n width: 400px;\n max-width: calc(100vw - ${size(2)});\n padding: ${size(3)};\n background-color: ${(props) => props.theme.color.bg.alt};\n color: ${(props) => props.theme.color.text.main};\n box-shadow: 0 4px 8px ${(props) => rgba(props.theme.color.overlay.main, 0.2)};\n border-left: ${size(1)} solid ${(props) => props.theme.color.border.main};\n transform: translateY(${size(1)});\n animation: ${noTransform} 300ms ease forwards, ${fadeIn} 300ms ease;\n\n & + & {\n margin-top: ${size(0.5)};\n }\n\n ${({ isSuccess }) =>\n isSuccess &&\n css`\n border-color: ${(props) => props.theme.color.semantic.success.text};\n `}\n\n ${({ isDanger }) =>\n isDanger &&\n css`\n border-color: ${(props) => props.theme.color.semantic.error.text};\n `}\n\n ${({ isWarning }) =>\n isWarning &&\n css`\n border-color: ${(props) => props.theme.color.semantic.warning.text};\n `}\n\n ${({ isInfo }) =>\n isInfo &&\n css`\n border-color: ${(props) => props.theme.color.semantic.info.text};\n `}\n`;\n\nexport const Content = styled.div`\n flex: 1 1 auto;\n font-size: 1rem;\n`;\n\nexport const Action = styled.div`\n flex-shrink: 0;\n padding-left: ${size(2)};\n`;\n\nexport const Close = styled(ButtonReset)`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n transform-origin: 50% 50%;\n transition: transform 200ms ease;\n\n :before {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: ${size(4)};\n height: ${size(4)};\n transform: translate(-50%, -50%);\n background-color: ${(props) => props.theme.color.bg.alt};\n border-radius: 50%;\n opacity: 0;\n transition: opacity 200ms ease;\n }\n\n :hover {\n :before {\n opacity: 1;\n }\n }\n\n :active {\n transform: scale(0.95);\n }\n\n > * {\n position: relative;\n z-index: 1;\n }\n`;\n", "import React from 'react';\nimport useEquipmentSettings from '../../data/useEquipmentSettings';\nimport Loader from '../../styled-components/components/Loader';\nimport { signOut } from '../../actions/auth';\nimport { closeNavigation } from '../../actions/event';\n\nimport { H1 } from '../../styled-components/components/Heading';\n\nimport Content from '../../styled-components/components/Content';\nimport { Link } from '../../styled-components/components/Link';\nimport { bindActionCreators } from 'redux';\nimport { useDispatch } from 'react-redux';\nimport { StackMedium } from '../../styled-components/components/Stack';\nimport { LinkButton } from '../../styled-components/components/LinkButton';\ninterface DealerV2CheckProps {\n selectedBranch: string | null;\n children: React.ReactNode;\n}\n\nconst DealerV2Check = ({ selectedBranch, children }: DealerV2CheckProps) => {\n const dispatch = useDispatch();\n const [equipment, requestEquipment] = useEquipmentSettings(selectedBranch);\n\n const actions = bindActionCreators(\n {\n signOut,\n closeNavigation,\n },\n dispatch,\n );\n\n const locationNewDealer = `https://${\n ['dealer.wayke.se', 'old-dealer.wayke.se'].includes(window.location.host)\n ? 'beta-dealer.wayke.se'\n : 'test-dealer.wayke.se'\n }`;\n\n if (requestEquipment.isLoading || !equipment) {\n return ;\n }\n\n if (equipment?.disabled) {\n return (\n <>\n
    \n
    \n \n

    Anl\u00E4ggning flyttad till Nya Dealer 🎉

    \n \n

    \n Den h\u00E4r anl\u00E4ggningen \u00E4r inte l\u00E4ngre tillg\u00E4nglig i gamla Dealer och kan nu enbart\n hanteras i Nya Dealer.{' '}\n \n G\u00E5 till Nya Dealer\n \n

    \n
    \n
    \n \n \n \n \n \n \n Logga ut\n \n \n \n
    \n
    \n \n );\n }\n\n return <>{children};\n};\n\nexport default DealerV2Check;\n", "import { useCallback } from 'react';\nimport { useQuery } from 'react-query';\n\nimport { RequestStateQuery } from '../@types/RequestStateQuery';\nimport { IApiResponse } from '../http';\nimport { buildAuthorizedGetRequest } from '../http/request-templates';\nimport useHttp from '../http/useHttp';\nimport useAuth from '../state/Auth/useAuth';\n\ninterface EquipmentSettings {\n disabled: boolean;\n}\n\nconst EQUIPMENT_SETTINGS_QUERY = '/api/equipment/settings/:branchId';\n\nconst useEquipmentSettings = (\n branchId?: string | null,\n): [EquipmentSettings | undefined, RequestStateQuery] => {\n const { token } = useAuth();\n const { httpJson } = useHttp();\n\n const get = useCallback(\n async () =>\n httpJson>(\n `/api/equipment/settings/${branchId}`,\n buildAuthorizedGetRequest(token),\n ),\n [token, branchId],\n );\n\n const { data, isLoading, isSuccess, isError } = useQuery>(\n [EQUIPMENT_SETTINGS_QUERY, branchId],\n get,\n {\n enabled: !!branchId,\n retry: false,\n refetchOnWindowFocus: false,\n },\n );\n return [data?.response, { isLoading, isSuccess, isError }];\n};\n\nexport default useEquipmentSettings;\n", "import { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nconst useScrollToTop = () => {\n const { pathname } = useLocation();\n\n useEffect(() => {\n const node = document.querySelector('.main-content');\n if (node) {\n node.scrollTo(0, 0);\n }\n\n window.scrollTo(0, 0);\n }, [pathname]);\n\n return null;\n};\n\nexport default useScrollToTop;\n", "import React from 'react';\n\nconst Imbox = () => (\n
    \n
    \n
    \n);\n\nexport default Imbox;\n", "import React, { lazy } from 'react';\nimport { Route, Routes as ReactRouterDomRoutes, useParams } from 'react-router-dom';\n\nconst Dashboard = lazy(() => import('./dashboard'));\nconst Users = lazy(() => import('./users'));\nconst Profile = lazy(() => import('./profile'));\nconst BankId = lazy(() => import('./bankid'));\nconst Dealer = lazy(() => import('./dealer'));\nconst Promo = lazy(() => import('./promo'));\nconst CentralStorage = lazy(() => import('./central-storage'));\nconst FAQ = lazy(() => import('./faq'));\nconst NewsList = lazy(() => import('./news'));\nconst News = lazy(() => import('./news/news-item'));\nconst Settings = lazy(() => import('./settings'));\nconst Packaging = lazy(() => import('./packaging'));\nconst TermsAndConditions = lazy(() => import('./terms-and-conditions'));\nconst WipSearch = lazy(() => import('./wip-search-page'));\nconst WipResult = lazy(() => import('./wip-result-page'));\nconst BlocketExport = lazy(() => import('./blocket-export'));\n\nconst WXR = lazy(() => import('./wxr'));\nconst Leads = lazy(() => import('./leads/leads'));\nconst Orders = lazy(() => import('./orders/orders'));\nconst Order = lazy(() => import('./orders/order'));\nconst EcomSetting = lazy(() => import('./ecom-setting'));\nconst Website = lazy(() => import('./website'));\nconst WebsitePage = lazy(() => import('./website-page'));\nconst WebsiteForms = lazy(() => import('./website-forms'));\nconst WebsiteFormSubmissionAnswer = lazy(\n () => import('./website-form/Submissions/SubmissionAnswer'),\n);\nconst WebsiteContacts = lazy(() => import('./website-contacts'));\nconst WebsiteSettings = lazy(() => import('./website-settings'));\nconst WebsiteImageBank = lazy(() => import('./website-image-bank'));\nconst WebsiteImageBankItem = lazy(() => import('./website-image-bank-item'));\nconst WebsiteForm = lazy(() => import('./website-form'));\nconst WebsiteCampaigns = lazy(() => import('./website-campaings'));\nconst Item = lazy(() => import('./item'));\nconst Items = lazy(() => import('./items'));\nconst Assignments = lazy(() => import('./assignments'));\nconst Assignment = lazy(() => import('./assignment'));\nconst Conversation = lazy(() => import('./conversation'));\nconst Conversations = lazy(() => import('./conversations'));\n\nimport { AssignmentCategoryType } from './assignments/Constants';\n\nconst Accessories = lazy(() => import('./accessories'));\nconst Accessory = lazy(() => import('./accessory'));\n\nconst ItemSelector = () => {\n const { id, page } = useParams<{ branchId: string; id: string; page: string }>();\n const itemPage =\n id &&\n (/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(id) ||\n /^[a-zA-Z]{3}[0-9]{2}[a-zA-Z0-9]{1}$/.test(id) ||\n id.length === 17);\n\n return <>{itemPage ? : };\n};\n\nconst AssignmentsSelector = () => {\n const { branchId, id, page } = useParams<{ branchId: string; id: string; page?: string }>();\n\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n id || '',\n ) ? (\n \n ) : (\n \n );\n};\n\nconst FaqSelector = () => {\n const { branchId, category } = useParams<{ branchId: string; category: string }>();\n return ;\n};\n\nconst NewsSingleSelector = () => {\n const { branchId, slug } = useParams<{ branchId: string; slug: string }>();\n return ;\n};\n\nconst NewsSelector = () => {\n const { branchId } = useParams<{ branchId: string }>();\n return ;\n};\n\nconst AccessoryParentSelector = () => {\n const { branchId, id } = useParams<{ branchId: string; id: string }>();\n return ;\n};\n\nconst AccessorySelector = () => {\n const { branchId, id } = useParams<{ branchId: string; id: string }>();\n return ;\n};\n\nconst AccessoriesSelector = () => {\n const { branchId } = useParams<{ branchId: string }>();\n return ;\n};\n\nconst LeadsSelector = () => {\n const { branchId } = useParams<{ branchId: string }>();\n return ;\n};\n\nconst ConversionSelector = () => {\n const { branchId, id } = useParams<{ branchId: string; id: string }>();\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n id || '',\n ) ? (\n \n ) : (\n \n );\n};\n\nconst UserSelector = () => {\n const { branchId } = useParams<{ branchId: string }>();\n return ;\n};\n\nconst OrderSelector = () => {\n const { id } = useParams<{ id: string }>();\n\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n id || '',\n ) ? (\n \n ) : (\n \n );\n};\n\nconst WebsitePageSelector = () => {\n const { branchId, id } = useParams<{ branchId: string; id: string }>();\n return ;\n};\n\nconst WebsiteFormSelector = () => {\n const { branchId, id, subId } = useParams<{ branchId: string; id: string; subId: string }>();\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n subId || '',\n ) ? (\n \n ) : (\n \n );\n};\n\nconst WebsiteFormsSelector = () => {\n const { branchId } = useParams<{ branchId: string; id: string }>();\n return ;\n};\n\nconst WebsiteContactPageSelector = () => {\n const { branchId, id } = useParams<{ branchId: string; id: string }>();\n return ;\n};\n\nconst WebsiteContactsSelector = () => {\n const { branchId } = useParams<{ branchId: string }>();\n return ;\n};\n\nconst WebsiteSitteingsSelector = () => {\n const { branchId } = useParams<{ branchId: string }>();\n return ;\n};\n\nconst WebsiteCampaignPageSelector = () => {\n const { branchId, id } = useParams<{ branchId: string; id: string }>();\n return ;\n};\n\nconst WebsiteCampaignsSelector = () => {\n const { branchId } = useParams<{ branchId: string; id: string }>();\n return ;\n};\n\nconst WebsiteImageBankItemSelector = () => {\n const { branchId, id } = useParams<{ branchId: string; id: string }>();\n return ;\n};\n\nconst WebsiteImageBankSelector = () => {\n const { branchId } = useParams<{ branchId: string; id: string }>();\n return ;\n};\n\nconst WebsiteSelector = () => {\n const { branchId } = useParams<{ branchId: string; id: string }>();\n return ;\n};\n\nexport const Routes = () => (\n \n } />\n }>\n }>\n } />\n \n \n } />\n } />\n } />\n } />\n } />\n } />\n }>\n } />\n \n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n\n }>\n } />\n \n } />\n } />\n } />\n } />\n } />\n\n } />\n } />\n } />\n } />\n } />\n }>\n } />\n \n } />\n\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n \n);\n", "import { createGlobalStyle } from 'styled-components';\nimport { Theme } from './theme';\n\nimport { customProperties } from './custom-properties';\nimport { fontFace, fontRegular } from './font';\n\nexport default createGlobalStyle<{ theme: Theme }>`\n ${customProperties};\n ${fontFace};\n\n *,\n *:before,\n *:after {\n box-sizing: border-box;\n }\n\n html,\n body {\n height: 100%;\n }\n\n html {\n font-size: 100%;\n -webkit-text-size-adjust: 100%;\n }\n\n body {\n ${fontRegular};\n margin: 0;\n background-color: ${(props) => props.theme.color.bg.main};\n color: ${(props) => props.theme.color.text.main};\n font-size: ${(props) => props.theme.font.size.regular};\n line-height: ${(props) => props.theme.font.lineHeight.main};\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n\n a img {\n border: 0;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin: 0;\n }\n\n abbr {\n text-decoration: none;\n }\n`;\n", "import { css } from 'styled-components';\n\nimport { size } from './helpers';\n\nconst mainGutter = size(2);\nconst mainGutterNegative = size(-2);\nconst mainGutterSm = size(5);\nconst mainGutterSmNegative = size(-5);\n\nexport const customProperties = css`\n :root {\n --main-gutter: ${mainGutter};\n --main-gutter-negative: ${mainGutterNegative};\n\n ${(props) => props.theme.breakpoint.Sm} {\n --main-gutter: ${mainGutterSm};\n --main-gutter-negative: ${mainGutterSmNegative};\n }\n }\n`;\n", "import { QueryClient } from 'react-query';\n\nconst queryClient = new QueryClient();\n\nexport default queryClient;\n"], "mappings": "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", "names": ["require_client", "__commonJSMin", "exports", "init_shim", "m", "i", "require_react_jsx_runtime_production_min", "__commonJSMin", "exports", "init_shim", "f", "k", "l", "m", "n", "p", "q", "c", "a", "g", "b", "d", "e", "h", "require_jsx_runtime", "__commonJSMin", "exports", "module", "init_shim", "init_shim", "import_react", "import_client", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "get", "obj", "path", "defaultValue", "split", "reduce", "a", "c", "without", "items", "item", "filter", "i", "isObject", "input", "xor", "itemsA", "itemsB", "map", "Map", "insertItem", "item", "set", "has", "get", "forEach", "result", "count", "key", "push", "intersection", "filter", "t", "indexOf", "init_shim", "init_shim", "INIT_COORDS", "BEGIN_DRAG", "PUBLISH_DRAG_SOURCE", "HOVER", "DROP", "END_DRAG", "setClientOffset", "clientOffset", "sourceClientOffset", "type", "INIT_COORDS", "payload", "ResetCoordinatesAction", "type", "INIT_COORDS", "payload", "clientOffset", "sourceClientOffset", "createBeginDrag", "manager", "sourceIds", "options", "publishSource", "getSourceClientOffset", "monitor", "getMonitor", "registry", "getRegistry", "dispatch", "setClientOffset", "verifyInvariants", "sourceId", "getDraggableSource", "Error", "verifyGetSourceClientOffsetIsFunction", "item", "getSource", "beginDrag", "verifyItemIsObject", "pinSource", "itemType", "getSourceType", "BEGIN_DRAG", "isSourcePublic", "invariant", "isDragging", "forEach", "isObject", "i", "length", "canDragSource", "init_shim", "_defineProperty", "obj", "key", "value", "createDrop", "manager", "options", "monitor", "getMonitor", "registry", "getRegistry", "verifyInvariants", "getDroppableTargets", "forEach", "targetId", "index", "dropResult", "determineDropResult", "action", "type", "DROP", "payload", "_objectSpread", "dispatch", "invariant", "isDragging", "didDrop", "target", "getTarget", "drop", "undefined", "verifyDropResultType", "getDropResult", "isObject", "targetIds", "getTargetIds", "filter", "canDropOnTarget", "reverse", "init_shim", "createEndDrag", "manager", "monitor", "getMonitor", "registry", "getRegistry", "verifyIsDragging", "sourceId", "getSourceId", "getSource", "endDrag", "unpinSource", "type", "END_DRAG", "invariant", "isDragging", "init_shim", "init_shim", "matchesType", "targetType", "draggedItemType", "Array", "isArray", "some", "t", "createHover", "manager", "targetIdsArg", "clientOffset", "verifyTargetIdsIsArray", "targetIds", "slice", "monitor", "getMonitor", "registry", "getRegistry", "draggedItemType", "getItemType", "removeNonMatchingTargetIds", "checkInvariants", "hoverAllTargets", "type", "HOVER", "payload", "invariant", "Array", "isArray", "isDragging", "didDrop", "i", "length", "targetId", "lastIndexOf", "target", "getTarget", "targetType", "getTargetType", "matchesType", "splice", "forEach", "hover", "init_shim", "createPublishDragSource", "manager", "getMonitor", "isDragging", "type", "PUBLISH_DRAG_SOURCE", "createDragDropActions", "manager", "beginDrag", "createBeginDrag", "publishDragSource", "createPublishDragSource", "hover", "createHover", "drop", "createDrop", "endDrag", "createEndDrag", "DragDropManagerImpl", "receiveBackend", "backend", "getMonitor", "monitor", "getBackend", "getRegistry", "registry", "getActions", "manager", "dispatch", "store", "bindActionCreator", "actionCreator", "args", "action", "apply", "actions", "createDragDropActions", "Object", "keys", "reduce", "boundActions", "key", "isSetUp", "handleRefCountChange", "shouldSetUp", "getState", "refCount", "setup", "teardown", "subscribe", "init_shim", "init_shim", "add", "a", "b", "x", "y", "subtract", "getSourceClientOffset", "state", "clientOffset", "initialClientOffset", "initialSourceClientOffset", "getDifferenceFromInitialOffset", "init_shim", "NONE", "ALL", "__IS_NONE__", "__IS_ALL__", "areDirty", "dirtyIds", "handlerIds", "intersection", "length", "DragDropMonitorImpl", "subscribeToStateChange", "listener", "options", "handlerIds", "invariant", "Array", "isArray", "prevStateId", "store", "getState", "stateId", "handleChange", "state", "currentStateId", "areDirty", "dirtyHandlerIds", "subscribe", "subscribeToOffsetChange", "previousState", "dragOffset", "nextState", "canDragSource", "sourceId", "source", "registry", "getSource", "isDragging", "canDrag", "canDropOnTarget", "targetId", "target", "getTarget", "didDrop", "targetType", "getTargetType", "draggedItemType", "getItemType", "matchesType", "canDrop", "Boolean", "isDraggingSource", "isSourcePublic", "sourceType", "getSourceType", "isOverTarget", "shallow", "targetIds", "getTargetIds", "length", "index", "indexOf", "dragOperation", "itemType", "getItem", "item", "getSourceId", "getDropResult", "dropResult", "getInitialClientOffset", "initialClientOffset", "getInitialSourceClientOffset", "initialSourceClientOffset", "getClientOffset", "clientOffset", "getSourceClientOffset", "getDifferenceFromInitialOffset", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "scope", "global", "self", "BrowserMutationObserver", "MutationObserver", "WebKitMutationObserver", "makeRequestCallFromTimer", "callback", "timeoutHandle", "setTimeout", "handleTimer", "intervalHandle", "setInterval", "clearTimeout", "clearInterval", "makeRequestCallFromMutationObserver", "toggle", "observer", "node", "document", "createTextNode", "observe", "characterData", "data", "makeRequestCall", "AsapQueue", "enqueueTask", "task", "queue", "q", "requestFlush", "length", "flushing", "pendingErrors", "index", "capacity", "flush", "currentIndex", "call", "scan", "newLength", "registerPendingError", "err", "push", "requestErrorThrow", "makeRequestCall", "makeRequestCallFromTimer", "shift", "init_shim", "init_shim", "RawTask", "call", "task", "error", "onError", "release", "TaskFactory", "create", "task", "tasks", "freeTasks", "t", "length", "pop", "RawTask", "onError", "asapQueue", "AsapQueue", "taskFactory", "TaskFactory", "registerPendingError", "asap", "task", "enqueueTask", "create", "init_shim", "init_shim", "ADD_SOURCE", "ADD_TARGET", "REMOVE_SOURCE", "REMOVE_TARGET", "addSource", "sourceId", "type", "payload", "addTarget", "targetId", "removeSource", "removeTarget", "init_shim", "validateSourceContract", "source", "invariant", "canDrag", "beginDrag", "endDrag", "validateTargetContract", "target", "canDrop", "hover", "drop", "validateType", "type", "allowArray", "Array", "isArray", "forEach", "t", "init_shim", "HandlerRole", "SOURCE", "TARGET", "init_shim", "nextUniqueId", "getNextUniqueId", "getNextHandlerId", "role", "id", "getNextUniqueId", "toString", "HandlerRole", "SOURCE", "TARGET", "Error", "parseRoleFromHandlerId", "handlerId", "mapContainsValue", "map", "searchValue", "entries", "isDone", "done", "value", "next", "HandlerRegistryImpl", "addSource", "type", "source", "validateType", "validateSourceContract", "sourceId", "addHandler", "store", "dispatch", "addTarget", "target", "validateTargetContract", "targetId", "containsHandler", "handler", "dragSources", "dropTargets", "getSource", "includePinned", "invariant", "isSourceId", "pinnedSourceId", "pinnedSource", "get", "getTarget", "isTargetId", "getSourceType", "types", "getTargetType", "removeSource", "asap", "delete", "removeTarget", "pinSource", "unpinSource", "set", "Map", "init_shim", "init_shim", "init_shim", "strictEquality", "a", "b", "areCoordsEqual", "offsetA", "offsetB", "x", "y", "areArraysEqual", "isEqual", "length", "i", "reduce", "_state", "NONE", "action", "type", "HOVER", "ADD_SOURCE", "ADD_TARGET", "REMOVE_TARGET", "REMOVE_SOURCE", "BEGIN_DRAG", "PUBLISH_DRAG_SOURCE", "END_DRAG", "DROP", "ALL", "targetIds", "prevTargetIds", "payload", "result", "xor", "length", "areArraysEqual", "prevInnermostTargetId", "innermostTargetId", "push", "init_shim", "_defineProperty", "obj", "key", "value", "initialState", "initialSourceClientOffset", "initialClientOffset", "clientOffset", "reduce", "state", "action", "payload", "type", "INIT_COORDS", "BEGIN_DRAG", "sourceClientOffset", "HOVER", "areCoordsEqual", "_objectSpread", "END_DRAG", "DROP", "init_shim", "_defineProperty", "obj", "key", "value", "initialState", "itemType", "item", "sourceId", "targetIds", "dropResult", "didDrop", "isSourcePublic", "reduce", "state", "action", "payload", "type", "BEGIN_DRAG", "_objectSpread", "PUBLISH_DRAG_SOURCE", "HOVER", "REMOVE_TARGET", "indexOf", "targetId", "without", "DROP", "END_DRAG", "init_shim", "reduce", "state", "action", "type", "ADD_SOURCE", "ADD_TARGET", "REMOVE_SOURCE", "REMOVE_TARGET", "init_shim", "reduce", "state", "_defineProperty", "obj", "key", "value", "reduce", "state", "action", "dirtyHandlerIds", "type", "payload", "_objectSpread", "prevTargetIds", "get", "dragOffset", "refCount", "dragOperation", "stateId", "createDragDropManager", "backendFactory", "globalContext", "undefined", "backendOptions", "debugMode", "store", "makeStoreInstance", "monitor", "DragDropMonitorImpl", "HandlerRegistryImpl", "manager", "DragDropManagerImpl", "backend", "receiveBackend", "reduxDevTools", "window", "__REDUX_DEVTOOLS_EXTENSION__", "createStore", "reduce", "name", "instanceId", "import_react", "_objectWithoutProperties", "source", "excluded", "refCount", "INSTANCE_SYM", "Symbol", "for", "DndProvider", "memo", "_param", "children", "props", "manager", "isGlobalInstance", "getDndContextValue", "useEffect", "context", "getGlobalContext", "_jsx", "DndContext", "Provider", "value", "getDndContextValue", "props", "dragDropManager", "manager", "createSingletonDndContext", "backend", "context", "options", "debugMode", "isGlobalInstance", "getGlobalContext", "ctx", "INSTANCE_SYM", "createDragDropManager", "global", "init_shim", "init_shim", "init_shim", "init_shim", "memoize", "fn", "result", "without", "items", "item", "filter", "i", "union", "itemsA", "itemsB", "set", "Set", "insertItem", "add", "forEach", "key", "push", "EnterLeaveCounter", "enter", "enteringNode", "previousLength", "entered", "length", "isNodeEntered", "node", "isNodeInDocument", "contains", "union", "filter", "leave", "leavingNode", "without", "reset", "init_shim", "init_shim", "NativeDragSource", "initializeExposedProperties", "Object", "keys", "config", "exposeProperties", "forEach", "property", "defineProperty", "item", "configurable", "enumerable", "get", "console", "warn", "loadDataTransfer", "dataTransfer", "newProperties", "propertyFn", "value", "matchesTypes", "defineProperties", "canDrag", "beginDrag", "isDragging", "monitor", "handle", "getSourceId", "endDrag", "init_shim", "NativeTypes_exports", "__export", "FILE", "HTML", "TEXT", "URL", "init_shim", "init_shim", "getDataFromDataTransfer", "dataTransfer", "typesToTry", "defaultValue", "result", "reduce", "resultSoFar", "typeToTry", "getData", "nativeTypesConfig", "FILE", "exposeProperties", "files", "dataTransfer", "Array", "prototype", "slice", "call", "items", "matchesTypes", "HTML", "html", "getDataFromDataTransfer", "URL", "urls", "split", "TEXT", "text", "createNativeDragSource", "type", "dataTransfer", "config", "nativeTypesConfig", "Error", "result", "NativeDragSource", "loadDataTransfer", "matchNativeItemType", "dataTransferTypes", "Array", "prototype", "slice", "call", "types", "Object", "keys", "filter", "nativeItemType", "typeConfig", "matchesTypes", "some", "t", "indexOf", "init_shim", "init_shim", "isFirefox", "memoize", "test", "navigator", "userAgent", "isSafari", "Boolean", "window", "safari", "init_shim", "MonotonicInterpolant", "interpolate", "x", "xs", "ys", "c1s", "c2s", "c3s", "i", "length", "low", "high", "mid", "Math", "floor", "xHere", "max", "diff", "diffSq", "indexes", "push", "sort", "a", "b", "dys", "dxs", "ms", "dx", "dy", "m2", "mNext", "dxNext", "common", "m", "c1", "invDx", "ELEMENT_NODE", "getNodeClientOffset", "node", "el", "nodeType", "parentElement", "top", "left", "getBoundingClientRect", "x", "y", "getEventClientOffset", "e", "clientX", "clientY", "isImageNode", "document", "nodeName", "isFirefox", "documentElement", "contains", "getDragPreviewSize", "isImage", "dragPreview", "sourceWidth", "sourceHeight", "dragPreviewWidth", "width", "dragPreviewHeight", "height", "isSafari", "window", "devicePixelRatio", "getDragPreviewOffset", "sourceNode", "clientOffset", "anchorPoint", "offsetPoint", "dragPreviewNodeOffsetFromClient", "offsetFromDragPreview", "offsetWidth", "offsetHeight", "anchorX", "anchorY", "calculateYOffset", "MonotonicInterpolant", "interpolate", "calculateXOffset", "offsetX", "offsetY", "isManualOffsetX", "isManualOffsetY", "init_shim", "OptionsReader", "window", "globalContext", "document", "ref", "rootElement", "optionsArgs", "options", "ownerDocument", "_defineProperty", "obj", "key", "value", "HTML5BackendImpl", "profile", "ref", "ref1", "sourcePreviewNodes", "size", "sourcePreviewNodeOptions", "sourceNodeOptions", "sourceNodes", "dragStartSourceIds", "length", "dropTargetIds", "dragEnterTargetIds", "dragOverTargetIds", "window", "options", "document", "rootElement", "setup", "root", "undefined", "__isReactDndBackendSetUp", "Error", "addEventListeners", "teardown", "removeEventListeners", "clearCurrentDragSourceNode", "asyncEndDragFrameId", "cancelAnimationFrame", "connectDragPreview", "sourceId", "node", "set", "delete", "connectDragSource", "handleDragStart", "e", "handleSelectStart", "setAttribute", "addEventListener", "removeEventListener", "connectDropTarget", "targetId", "handleDragEnter", "handleDragOver", "handleDrop", "target", "handleTopDragStart", "handleTopDragStartCapture", "handleTopDragEndCapture", "handleTopDragEnter", "handleTopDragEnterCapture", "handleTopDragLeaveCapture", "handleTopDragOver", "handleTopDragOverCapture", "handleTopDrop", "handleTopDropCapture", "getCurrentSourceNodeOptions", "monitor", "getSourceId", "get", "_objectSpread", "dropEffect", "altKeyPressed", "getCurrentDropEffect", "isDraggingNativeItem", "getCurrentSourcePreviewNodeOptions", "anchorX", "anchorY", "captureDraggingState", "itemType", "getItemType", "Object", "keys", "NativeTypes", "some", "beginDragNativeItem", "type", "dataTransfer", "currentNativeSource", "createNativeDragSource", "currentNativeHandle", "registry", "addSource", "actions", "beginDrag", "setCurrentDragSourceNode", "currentDragSourceNode", "MOUSE_MOVE_TIMEOUT", "mouseMoveTimeoutTimer", "setTimeout", "endDragIfSourceWasRemovedFromDOM", "clearTimeout", "defaultPrevented", "unshift", "_e", "manager", "globalContext", "Map", "lastClientOffset", "hoverRafId", "getSourceClientOffset", "source", "getNodeClientOffset", "endDragNativeItem", "endDrag", "removeSource", "isNodeInDocument", "Boolean", "body", "contains", "isDragging", "cancelHover", "scheduleHover", "requestAnimationFrame", "hover", "clientOffset", "getEventClientOffset", "publishSource", "nativeType", "matchNativeItemType", "setDragImage", "sourceNode", "dragPreview", "offsetX", "offsetY", "dragPreviewOffset", "getDragPreviewOffset", "x", "y", "setData", "publishDragSource", "types", "hasAttribute", "preventDefault", "loadDataTransfer", "enterLeaveCounter", "enter", "altKey", "canDropOnTarget", "leave", "reset", "drop", "dragDrop", "tagName", "isContentEditable", "OptionsReader", "getActions", "getMonitor", "getRegistry", "EnterLeaveCounter", "HTML5Backend", "manager", "context", "options", "HTML5BackendImpl", "import_react_datepicker", "init_shim", "init_shim", "createThunkMiddleware", "extraArgument", "middleware", "_ref", "dispatch", "getState", "next", "action", "thunk", "es_default", "init_shim", "init_shim", "initialState", "admin_default", "state", "action", "REQ_REFRESH_BRANCHES", "RCV_REFRESH_BRANCHES", "ERR_REFRESH_BRANCHES", "init_shim", "initialState", "requestStatus", "responseStatus", "Mock", "AnalyticsMock", "analyticsReducer", "state", "action", "REQ_ANALYTICS", "RCV_ANALYTICS", "analytics", "REQ_ANALYTICS_BRANCH_BATCH", "RCV_ANALYTICS_BRANCH_BATCH", "aBatchBranch", "x", "branchCount", "REQ_ANALYTICS_ITEM", "items", "RCV_ANALYTICS_ITEM", "items1", "REQ_ANALYTICS_ITEM_BATCH", "items2", "RCV_ANALYTICS_ITEM_BATCH", "items3", "_item3", "CLEAR_ANALYTICS_NAMESPACE", "REQ_FAILED", "items4", "analytics_default", "init_shim", "init_shim", "REQ_ASSIGNMENTS", "RCV_ASSIGNMENTS", "REQ_NOTIFICATION_COUNT", "RCV_NOTIFICATION_COUNT", "REQ_ASSIGNMENT_INTEREST", "RCV_ASSIGNMENT_INTEREST", "REQ_ASSIGNMENT_DECLINE", "RCV_ASSIGNMENT_DECLINE", "REQ_ASSIGNMENT_APPEND_NOTE", "RCV_ASSIGNMENT_APPEND_NOTE", "REQ_CLEAR_ASSIGNMENTS", "REQUEST_FAILED", "initialState", "requestStatus", "responseStatus", "updateAssignmentState", "documentList", "response", "d", "updateAssignmentRecipientState", "id", "updateNotificationCount", "assignment_default", "state", "action", "REQ_ASSIGNMENTS", "RCV_ASSIGNMENTS", "REQ_ASSIGNMENT_INTEREST", "RCV_ASSIGNMENT_INTEREST", "REQ_ASSIGNMENT_DECLINE", "RCV_ASSIGNMENT_DECLINE", "REQ_NOTIFICATION_COUNT", "RCV_NOTIFICATION_COUNT", "REQ_ASSIGNMENT_APPEND_NOTE", "RCV_ASSIGNMENT_APPEND_NOTE", "REQ_CLEAR_ASSIGNMENTS", "REQUEST_FAILED", "init_shim", "init_shim", "init_shim", "InvalidTokenError", "b64DecodeUnicode", "str", "m", "p", "code", "base64UrlDecode", "output", "jwtDecode", "token", "options", "pos", "part", "decoded", "e", "nopLogger", "level", "logger", "Log", "reset", "setLevel", "value", "setLogger", "Logger", "_Logger", "_name", "args", "err", "method", "methodLogger", "name", "staticMethod", "staticLogger", "prefix", "UUID_V4_TEMPLATE", "toBase64", "val", "chr", "CryptoUtils", "_CryptoUtils", "arr", "c", "code_verifier", "data", "hashed", "client_id", "client_secret", "Event", "cb", "idx", "ev", "JwtUtils", "token", "jwtDecode", "PopupUtils", "features", "_a", "_b", "_c", "width", "key", "Timer", "_Timer", "diff", "durationInSeconds", "expiration", "timerDurationInSeconds", "UrlUtils", "url", "responseMode", "params", "URL_STATE_DELIMITER", "ErrorResponse", "form", "ErrorTimeout", "message", "AccessTokenEvents", "container", "duration", "expiring", "expired", "CheckSessionIFrame", "_callback", "_client_id", "_intervalInSeconds", "_stopOnError", "e", "parsedUrl", "resolve", "session_state", "send", "InMemoryWebStorage", "index", "JsonService", "additionalContentTypes", "_jwtHandler", "_extraHeaders", "input", "init", "timeoutInSeconds", "initFetch", "controller", "timeoutId", "credentials", "headers", "response", "contentType", "item", "json", "body", "basicAuth", "initCredentials", "responseText", "customKeys", "protectedHeaders", "headerName", "content", "MetadataService", "_settings", "metadata", "optional", "jwks_uri", "keySet", "WebStorageStateStore", "store", "len", "keys", "DefaultResponseType", "DefaultScope", "DefaultClientAuthentication", "DefaultStaleStateAgeInSeconds", "OidcClientSettingsStore", "authority", "metadataUrl", "signingKeys", "metadataSeed", "response_type", "scope", "redirect_uri", "post_logout_redirect_uri", "client_authentication", "prompt", "display", "max_age", "ui_locales", "acr_values", "resource", "response_mode", "filterProtocolClaims", "loadUserInfo", "staleStateAgeInSeconds", "mergeClaimsStrategy", "disablePKCE", "stateStore", "revokeTokenAdditionalContentTypes", "fetchRequestCredentials", "refreshTokenAllowedScope", "extraQueryParams", "extraTokenParams", "extraHeaders", "UserInfoService", "_metadataService", "payload", "claims", "TokenClient", "grant_type", "param", "ResponseValidator", "_claimsService", "state", "skipUserInfo", "hasIdToken", "validateSub", "tokenResponse", "existingToken", "incoming", "existing", "State", "_State", "storageString", "storage", "age", "cutoff", "i", "remove", "SigninState", "_SigninState", "code_challenge", "_SigninRequest", "state_data", "request_type", "nonce", "url_state", "optionalParams", "stateParam", "r", "SigninRequest", "OidcScope", "SigninResponse", "splitState", "SignoutRequest", "id_token_hint", "SignoutResponse", "DefaultProtocolClaims", "InternalRequiredProtocolClaims", "ClaimsService", "result", "protocolClaims", "claim", "claims1", "claims2", "values", "mergedValues", "OidcClient", "settings", "metadataService", "request", "request_uri", "login_hint", "signinRequest", "signinState", "removeState", "storedStateString", "username", "password", "signinResponse", "allowableScopes", "s", "signoutState", "type", "SessionMonitor", "_userManager", "user", "intervalInSeconds", "stopOnError", "checkSessionIFrame", "timerHandle", "session", "tmpUser", "raiseEvent", "User", "_User", "expires_in", "messageSource", "AbstractChildWindow", "keepOpen", "reject", "listener", "origin", "reason", "dispose", "parent", "targetOrigin", "DefaultPopupWindowFeatures", "DefaultPopupTarget", "DefaultAccessTokenExpiringNotificationTimeInSeconds", "DefaultCheckSessionIntervalInSeconds", "DefaultSilentRequestTimeoutInSeconds", "UserManagerSettingsStore", "popup_redirect_uri", "popup_post_logout_redirect_uri", "popupWindowFeatures", "popupWindowTarget", "redirectMethod", "redirectTarget", "iframeNotifyParentOrigin", "iframeScriptOrigin", "silent_redirect_uri", "silentRequestTimeoutInSeconds", "automaticSilentRenew", "validateSubOnSilentRenew", "includeIdTokenInSilentRenew", "monitorSession", "monitorAnonymousSession", "checkSessionIntervalInSeconds", "query_status_response_type", "stopCheckSessionOnError", "revokeTokenTypes", "revokeTokensOnSignout", "includeIdTokenInSilentSignout", "accessTokenExpiringNotificationTimeInSeconds", "userStore", "IFrameWindow", "_IFrameWindow", "iframe", "timer", "frame", "IFrameNavigator", "checkForPopupClosedInterval", "second", "PopupWindow", "centeredPopup", "popupClosedInterval", "PopupNavigator", "RedirectNavigator", "targetWindow", "redirect", "abort", "promise", "UserManagerEvents", "SilentRenewService", "RefreshState", "UserManager", "redirectNavigator", "popupNavigator", "iframeNavigator", "requestArgs", "handle", "verifySub", "navResponse", "id_token", "signoutRequest", "signoutResponse", "types", "typesPresent", "AUTHORITY", "get", "CLIENT_ID", "CLIENT_ROOT", "RESPONSE_TYPE", "CLIENT_SCOPE", "REDIRECT_PATH", "REDIRECT_URL_KEY", "REQUIRED_SCOPES", "userManager", "UserManager", "WebStorageStateStore", "REQ_ACCESS_TOKEN", "RCV_ACCESS_TOKEN", "ERR_ACCESS_TOKEN", "currentUrlIsRedirectUrl", "verifyScopes", "userScopes", "signinRedirect", "getNumberOfTries", "clearNumberOfTries", "incrementNumberOfTries", "tries", "signIn", "navigate", "dispatch", "user", "redirectUrl", "signOut", "_dispatch", "_getState", "initialState", "requestStatus", "responseStatus", "authReducer", "state", "action", "REQ_ACCESS_TOKEN", "RCV_ACCESS_TOKEN", "ERR_ACCESS_TOKEN", "auth_default", "init_shim", "emptyList", "initialState", "requestStatus", "responseStatus", "buildErrorMessage", "actionType", "REQ_CERTIFICATE_LIST", "REQ_CREATE_CERTIFICATE", "REQ_DELETE_CERTIFICATE", "bankid_default", "state", "action", "RCV_CERTIFICATE_LIST", "RCV_CREATE_CERTIFICATE", "RCV_DELETE_CERTIFICATE", "x", "REQUEST_FAILED", "init_shim", "initialState", "requestStatus", "responseStatus", "financialInstitution", "state", "action", "REQ_GET_FINANCIAL_INSTITUTIONS", "RCV_GET_FINANCIAL_INSTITUTIONS", "REQ_FAILED", "financial_institution_default", "init_shim", "initialState", "requestStatus", "responseStatus", "manufacturersReducer", "state", "action", "REQ_GET_MANUFACTURERS", "RCV_GET_MANUFACTURERS", "REQ_FAILED", "manufacturers_default", "init_shim", "initialState", "requestIdle", "notification", "state", "action", "REQ_GET_NOTIFICATION_SETTINGS", "requestInit", "RCV_GET_NOTIFICATION_SETTINGS", "requestSuccessful", "ERR_GET_NOTIFICATION_SETTINGS", "requestError", "REQ_POST_NOTIFICATION_SETTINGS", "RCV_POST_NOTIFICATION_SETTINGS", "ERR_POST_NOTIFICATION_SETTINGS", "notification_default", "init_shim", "initialState", "requestStatus", "responseStatus", "organisationBranchReducer", "state", "action", "REQ_GET_BRANCHES", "RCV_GET_BRANCHES", "REQ_GET_BRANCH", "RCV_GET_BRANCH", "REQ_PUT_BRANCH", "RCV_PUT_BRANCH", "SET_BRANCH", "SET_SELECTED_BRANCH", "REQ_FAILED", "organisation_branch_default", "init_shim", "init_shim", "REQ_CUSTOM_IMAGE_SOURCE", "RCV_CUSTOM_IMAGE_SOURCE", "REQ_PUT_CUSTOM_IMAGE_SOURCE", "RCV_PUT_CUSTOM_IMAGE_SOURCE", "REQ_DELETE_CUSTOM_IMAGE_SOURCE", "RCV_DELETE_CUSTOM_IMAGE_SOURCE", "REQ_FAILED", "initialState", "requestStatus", "responseStatus", "organisationCustomImageSource", "state", "action", "REQ_CUSTOM_IMAGE_SOURCE", "RCV_CUSTOM_IMAGE_SOURCE", "REQ_PUT_CUSTOM_IMAGE_SOURCE", "RCV_PUT_CUSTOM_IMAGE_SOURCE", "REQ_DELETE_CUSTOM_IMAGE_SOURCE", "RCV_DELETE_CUSTOM_IMAGE_SOURCE", "REQ_FAILED", "organisation_custom_image_source_default", "init_shim", "initialState", "requestStatus", "responseStatus", "organisationOpeningHoursReducer", "state", "action", "RCV_GET_BRANCH", "REQ_GET_OPENING_HOURS", "RCV_GET_OPENING_HOURS", "oh", "REQ_SET_OPENING_HOURS", "RCV_SET_OPENING_HOURS", "REQ_FAILED", "organisation_opening_hours_default", "init_shim", "initialState", "requestStatus", "responseStatus", "organisationResellerPackage", "state", "action", "REQ_GET_RESELLER_PACKAGE", "RCV_GET_RESELLER_PACKAGE", "res", "resellerPackage", "REQ_PUT_RESELLER_PACKAGE", "RCV_PUT_RESELLER_PACKAGE", "res1", "resellerPackage1", "REQ_FAILED", "organisation_reseller_package_default", "init_shim", "initialState", "requestStatus", "responseStatus", "services", "index", "organisationServiceReducer", "state", "action", "REQ_GET_SERVICES", "RCV_GET_SERVICES", "REQ_POST_SERVICE", "RCV_POST_SERVICE", "REQ_PUT_SERVICE", "RCV_PUT_SERVICE", "i", "REQ_DELETE_SERVICE", "RCV_DELETE_SERVICE", "service", "REQ_FAILED", "organisation_service_default", "init_shim", "initialState", "requestStatus", "responseStatus", "organisationUserReducer", "state", "action", "REQ_GET_USER", "RCV_GET_USER", "user", "telephone", "REQ_PUT_USER", "RCV_PUT_USER", "REQ_GET_USERS", "RCV_GET_USERS", "SET_CLEAR_USERS", "REQ_FAILED", "organisation_user_default", "init_shim", "initialState", "requestStatus", "responseStatus", "defaultContactOption", "state", "action", "REQ_GET_DEFAULT_CONTACT_OPTION", "RCV_GET_DEFAULT_CONTACT_OPTION", "REQ_PUT_DEFAULT_CONTACT_OPTION", "RCV_PUT_DEFAULT_CONTACT_OPTION", "REQ_DELETE_DEFAULT_CONTACT_OPTION", "RCV_DELETE_DEFAULT_CONTACT_OPTION", "REQ_FAILED", "default_contact_options_default", "init_shim", "initialState", "requestStatus", "responseStatus", "profileReducer", "state", "action", "REQ_PROFILE", "RCV_PROFILE", "REQ_PROFILE_POST", "RCV_PROFILE_POST", "REQ_FAILED", "profile_default", "init_shim", "initialState", "requestStatus", "responseStatus", "resellerPackage", "state", "action", "REQ_GET_RESELLER_PACKAGES_I3", "RCV_GET_RESELLER_PACKAGES_I3", "REQ_CLEAR_RESELLER_PACKAGE", "REQ_FAILED", "reseller_package_default", "init_shim", "initialState", "requestStatus", "responseStatus", "userReducer", "state", "action", "REQ_USER_INFORMATION", "RCV_USER_INFORMATION", "REQ_USER_INFORMATION_BATCH", "RCV_USER_INFORMATION_BATCH", "usersInfo", "x", "id", "RCV_CONNECTED_USERS", "SET_CLEAR_USER_INFORMATIONS", "REQ_FAILED", "user_default", "init_shim", "init_shim", "REQ_GET_VEHICLES_OPTIONS", "RCV_GET_VEHICLES_OPTIONS", "REQ_FAILED", "initialState", "requestStatus", "responseStatus", "vehiclesOptionsReducer", "state", "action", "REQ_GET_VEHICLES_OPTIONS", "RCV_GET_VEHICLES_OPTIONS", "REQ_FAILED", "vehicles_options_default", "init_shim", "initialState", "requestStatus", "responseStatus", "wxrReducer", "state", "action", "REQ_WXR_STATISTICS", "RCV_WXR_STATISTICS", "REQ_WXR_STATISTICS_FAILED", "wxr_default", "init_shim", "init_shim", "REQ_GET_PDF_TEMPLATE", "RCV_GET_PDF_TEMPLATE", "REQ_GET_PDF_GENERATED", "RCV_GET_PDF_GENERATED", "REQ_FAILED", "initialState", "requestStatus", "responseStatus", "pdfTemplate", "state", "action", "REQ_GET_PDF_TEMPLATE", "RCV_GET_PDF_TEMPLATE", "REQ_GET_PDF_GENERATED", "RCV_GET_PDF_GENERATED", "saveAs", "format", "REQ_FAILED", "pdf_template_default", "init_shim", "init_shim", "REQ_GET_DOCUMENTS", "RCV_GET_DOCUMENTS", "REQ_POST_DOCUMENT", "RCV_POST_DOCUMENT", "REQ_UPDATE_DOCUMENT", "RCV_UPDATE_DOCUMENT", "REQ_UPDATE_DOCUMENT_SORT_ORDER", "RCV_UPDATE_DOCUMENT_SORT_ORDER", "REQ_DELETE_DOCUMENT", "RCV_DELETE_DOCUMENT", "SET_CLEAR_DOCUMENTS", "REQ_FAILED", "initialState", "requestStatus", "responseStatus", "documents", "index", "document", "state", "action", "REQ_GET_DOCUMENTS", "RCV_GET_DOCUMENTS", "REQ_POST_DOCUMENT", "RCV_POST_DOCUMENT", "clone_default", "REQ_UPDATE_DOCUMENT", "RCV_UPDATE_DOCUMENT", "x", "REQ_UPDATE_DOCUMENT_SORT_ORDER", "RCV_UPDATE_DOCUMENT_SORT_ORDER", "REQ_DELETE_DOCUMENT", "RCV_DELETE_DOCUMENT", "SET_CLEAR_DOCUMENTS", "REQ_FAILED", "document_default", "init_shim", "init_shim", "REQ_GET_DECLARATION_TEMPLATE", "RCV_GET_DECLARATION_TEMPLATE", "REQ_GET_DECLARATION", "RCV_GET_DECLARATION", "REQ_FAILED", "initialState", "requestStatus", "responseStatus", "declarationReducer", "state", "action", "REQ_GET_DECLARATION_TEMPLATE", "RCV_GET_DECLARATION_TEMPLATE", "REQ_GET_DECLARATION", "RCV_GET_DECLARATION", "saveAs", "format", "REQ_FAILED", "declaration_default", "init_shim", "initialState", "requestStatus", "responseStatus", "advertisementMediaReducer", "state", "action", "REQ_GET_ADVERTISEMENT_MEDIA", "RCV_GET_ADVERTISEMENT_MEDIA", "SET_CLEAR_ADVERTISEMENT_MEDIA", "REQ_FAILED", "advertisement_media_default", "init_shim", "initialState", "requestStatus", "responseStatus", "thumbnails", "advertisementsMediaReducer", "state", "action", "REQ_GET_ADVERTISEMENTS_THUMBNAILS", "RCV_GET_ADVERTISEMENTS_THUMBNAILS", "resultExist", "x", "item", "y", "advertisements_media_default", "init_shim", "initialState", "requestStatus", "responseStatus", "metadata", "advertisementMetadata", "state", "clone_default", "action", "REQ_GET_ADVERTISEMENT_METADATA_BATCH", "RCV_GET_ADVERTISEMENT_METADATA_BATCH", "x", "RCV_AD_BOOST_MULTIPLE", "item", "metadataItem", "date", "subHours", "getHours", "utcDate", "format", "REQ_FAILED", "advertisement_metadata_default", "init_shim", "initialState", "requestStatus", "responseStatus", "newLeasingPromo", "selected", "leasingPromosReducer", "state", "action", "REQ_GET_LEASING_PROMOS", "RCV_GET_LEASING_PROMOS", "REQ_UPDATE_LEASING_PROMOS", "RCV_UPDATE_LEASING_PROMOS", "SET_SELECT_LEASING_PROMO", "x", "SET_LEASING_PROMOS_SORTED", "CLEAR_LEASING_PROMOS_SORTED", "REQ_FAILED", "leasing_promos_default", "init_shim", "initialState", "requestStatus", "responseStatus", "modelSeriesReducer", "state", "action", "REQ_MODEL_SERIES_LIST", "RCV_MODEL_SERIES_LIST", "REQ_FAILED", "model_series_default", "init_shim", "initialState", "requestStatus", "responseStatus", "media", "mediaUploadReducer", "state", "action", "REQ_MEDIA_UPLOAD", "RCV_MEDIA_UPLOAD", "REQ_CLEAR_NAMESPACE", "REQ_FAILED", "media_upload_default", "init_shim", "initialState", "requestStatus", "responseStatus", "newFinancialOption", "DEFAULT_ITEM_SPECIFICATION", "selected", "financialOptionsReducer", "state", "action", "REQ_GET_FINANCIAL_OPTIONS", "RCV_GET_FINANCIAL_OPTIONS", "REQ_UPDATE_FINANCIAL_OPTIONS", "RCV_UPDATE_FINANCIAL_OPTIONS", "SET_SELECT_FINANCIAL_OPTIONS", "x", "SET_FINANCIAL_OPTIONS_SORTED", "CLEAR_FINANCIAL_OPTIONS_SORTED", "REQ_FAILED", "financial_options_default", "init_shim", "initialState", "requestStatus", "responseStatus", "newInsurance", "selected", "insurances", "insurancesReducer", "state", "action", "REQ_GET_INSURANCES", "RCV_GET_INSURANCES", "x", "REQ_UPDATE_INSURANCES", "RCV_UPDATE_INSURANCES", "SET_SELECT_INSURANCE", "SET_INSURANCES_SORTED", "CLEAR_INSURANCES_SORTED", "REQ_FAILED", "insurances_default", "init_shim", "initialState", "requestStatus", "responseStatus", "vehicleSearchReducer", "state", "action", "REQ_GET_PUBLISHED_VEHICLES", "RCV_GET_PUBLISHED_VEHICLES", "REQ_FAILED", "vehicle_search_default", "init_shim", "init_shim", "REQ_TOGGLE_NAVIGATION", "REQ_CLOSE_NAVIGATION", "toggleNavigation", "dispatch", "closeNavigation", "initialState", "eventReducer", "state", "action", "REQ_TOGGLE_NAVIGATION", "REQ_CLOSE_NAVIGATION", "event_default", "init_shim", "EmptyHistoryList", "EmptyStagedList", "initialState", "requestStatus", "responseStatus", "newInsight", "insights", "pendingInsights", "failedInsights", "staged", "index", "socialBoostReducer", "state", "action", "REQ_SOCIAL_BOOST_SINGLE", "RCV_SOCIAL_BOOST_SINGLE", "REQ_SOCIAL_BOOST_SINGLE_SILENT", "RCV_SOCIAL_BOOST_SINGLE_SILENT", "REQ_SOCIAL_BOOST_MULTIPLE", "RCV_SOCIAL_BOOST_MULTIPLE", "REQ_SOCIAL_BOOST_HISTORY", "RCV_SOCIAL_BOOST_HISTORY", "REQ_SOCIAL_BOOST_INSIGHTS", "obj", "objPendingInsights", "key", "RCV_SOCIAL_BOOST_INSIGHTS", "REQ_SOCIAL_BOOST_STAGE", "x", "REQ_SOCIAL_BOOST_CLEAR_STAGED", "RCV_GET_BRANCH", "REQ_FAILED", "social_boost_default", "init_shim", "initialState", "requestStatus", "responseStatus", "socialBoostSettingsReducer", "state", "action", "REQ_SOCIAL_BOOST_SETTINGS", "RCV_SOCIAL_BOOST_SETTINGS", "RCV_GET_BRANCH", "REQ_FAILED", "social_boost_settings_default", "init_shim", "EmptyList", "initialState", "requestStatus", "responseStatus", "leads", "index", "unread", "leadsReducer", "state", "action", "REQ_GET_LEADS", "RCV_GET_LEADS", "REQ_ADD_COMMENT_LEAD", "REQ_ADD_VIEW_INFO_LEAD", "RCV_ADD_COMMENT_LEAD", "RCV_ADD_VIEW_INFO_LEAD", "x", "REQ_REMOVE_LEAD", "RCV_REMOVE_LEAD", "REQ_UNREAD_LEAD_COUNT", "RCV_UNREAD_LEAD_COUNT", "REQ_CLEAR_LEADS", "REQ_FAILED", "leads_default", "init_shim", "init_shim", "REQ_GET_WIP_VEHICLE", "RCV_GET_WIP_VEHICLE", "REQ_RATE_WIP", "RCV_RATE_WIP", "REQ_CLEAR_WIP", "REQ_FAILED", "initialState", "requestStatus", "responseStatus", "wipReducer", "state", "action", "REQ_GET_WIP_VEHICLE", "RCV_GET_WIP_VEHICLE", "REQ_RATE_WIP", "RCV_RATE_WIP", "RCV_GET_BRANCH", "REQ_CLEAR_WIP", "REQ_FAILED", "statusCode", "wip_default", "init_shim", "EmptyHistoryList", "EmptyStagedList", "initialState", "requestStatus", "responseStatus", "staged", "index", "adBoostReducer", "state", "action", "REQ_AD_BOOST_MULTIPLE", "RCV_AD_BOOST_MULTIPLE", "REQ_AD_BOOST_HISTORY", "RCV_AD_BOOST_HISTORY", "REQ_AD_BOOST_STAGE", "x", "REQ_AD_BOOST_CLEAR_STAGED", "RCV_GET_BRANCH", "REQ_FAILED", "ad_boost_default", "init_shim", "init_shim", "REQ_VIMEO_THUMBNAIL", "RCV_VIMEO_THUMBNAIL", "REQ_FAILED", "initialState", "requestStatus", "responseStatus", "thumbnails", "vimeoReducer", "state", "action", "REQ_VIMEO_THUMBNAIL", "RCV_VIMEO_THUMBNAIL", "REQ_FAILED", "vimeo_default", "init_shim", "initialState", "requestStatus", "responseStatus", "orders", "limit", "skip", "statuses", "orderReducer", "state", "action", "REQ_GET_ORDERS", "RCV_GET_ORDERS", "RCV_GET_ORDER_COUNT", "REQ_GET_ORDER", "RCV_GET_ORDER", "REQ_UPDATE_ORDER_STATUS", "RCV_UPDATE_ORDER_STATUS", "REQ_FAILED", "order_default", "init_shim", "initialState", "orderLogsReducer", "state", "action", "REQ_GET_ORDER_LOGS", "RCV_GET_ORDER_LOGS", "ERR_GET_ORDER_LOGS", "order_logs_default", "init_shim", "initialState", "requestStatus", "responseStatus", "ecomSettingReducer", "state", "action", "REQ_GET_ECOM_ORDER_SETTING", "RCV_GET_ECOM_ORDER_SETTING", "REQ_UPDATE_ECOM_ORDER_SETTING", "RCV_UPDATE_ECOM_ORDER_SETTING", "REQ_CREATE_ECOM_ORDER_SETTING", "RCV_CREATE_ECOM_ORDER_SETTING", "REQ_FAILED", "ecom_setting_default", "init_shim", "init_shim", "REQ_GET_BRANCH_PERMISSIONS", "RCV_GET_BRANCH_PERMISSIONS", "ERR_GET_BRANCH_PERMISSIONS", "getPermissions", "dispatch", "getState", "auth", "organisationBranch", "request_cache_default", "response", "json", "buildAuthorizedGetRequest", "validateResponse", "initialState", "requestStatus", "responseStatus", "permissionsReducer", "state", "action", "REQ_GET_BRANCH_PERMISSIONS", "RCV_GET_BRANCH_PERMISSIONS", "ERR_GET_BRANCH_PERMISSIONS", "permissions_default", "init_shim", "initialState", "requestStatus", "responseStatus", "credentialsReducer", "state", "action", "REQ_GET_BRANCH_CREDENTIALS", "RCV_GET_BRANCH_CREDENTIALS", "REQ_GET_BRANCH_CREDENTIALS_STATUS", "RCV_GET_BRANCH_CREDENTIALS_STATUS", "REQ_UPDATE_BRANCH_CREDENTIALS", "RCV_UPDATE_BRANCH_CREDENTIALS", "REQ_UPDATE_BLOCKET_SETTING_ACTIVE", "RCV_UPDATE_BLOCKET_SETTING_ACTIVE", "REQ_FAILED", "credentials_default", "init_shim", "initialState", "requestStatus", "responseStatus", "facetsReducer", "state", "action", "REQ_GET_FACETS", "RCV_GET_FACETS", "ERR_GET_FACETS", "facets_default", "init_shim", "initialState", "requestStatus", "responseStatus", "reducer", "state", "action", "REQ_GET_EXPORT_FACETS", "RCV_GET_EXPORT_FACETS", "ERR_GET_EXPORT_FACETS", "export_facets_default", "init_shim", "initialState", "requestStatus", "responseStatus", "branch_facets_default", "state", "action", "REQ_GET_BRANCH_FACETS", "RCV_GET_BRANCH_FACETS", "ERR_GET_BRANCH_FACETS", "init_shim", "initialState", "requestStatus", "responseStatus", "branch_export_facets_default", "state", "action", "REQ_GET_BRANCH_EXPORT_FACETS", "RCV_GET_BRANCH_EXPORT_FACETS", "ERR_GET_BRANCH_EXPORT_FACETS", "init_shim", "initialState", "exportFilterReducer", "state", "action", "EXPORT_FILTER_SHOW_FILTER_INPUT_VISIBILITY", "EXPORT_FILTER_EDIT_FILTER", "RCV_UPDATE_BRANCH_CREDENTIALS", "REQ_GET_BRANCH_CREDENTIALS", "export_filter_default", "init_shim", "emptyList", "initialState", "requestStatus", "responseStatus", "system_clients_default", "state", "action", "REQ_GET_SYSTEMCLIENTS", "RCV_GET_SYSTEMCLIENTS", "init_shim", "emptyList", "initialState", "requestStatus", "responseStatus", "paymentOptionsReducer", "state", "action", "REQ_FETCH_PAYMENT_OPTIONS", "RCV_FETCH_PAYMENT_OPTIONS", "REQ_UPDATE_PAYMENT_OPTIONS", "RCV_UPDATE_PAYMENT_OPTIONS", "REQ_REMOVE_PAYMENT_OPTIONS", "RCV_REMOVE_PAYMENT_OPTIONS", "REQ_FAILED", "payment_options_default", "init_shim", "emptyList", "initialState", "requestStatus", "responseStatus", "brandingsReducer", "state", "action", "REQ_FETCH_BRANDINGS", "RCV_FETCH_BRANDINGS", "REQ_FAILED", "brandings_default", "init_shim", "initialState", "requestIdle", "customVideoSource", "state", "action", "REQ_CUSTOM_VIDEO_SOURCE", "requestInit", "RCV_CUSTOM_VIDEO_SOURCE", "requestSuccessful", "ERR_CUSTOM_VIDEO_SOURCE", "requestError", "REQ_PUT_CUSTOM_VIDEO_SOURCE", "RCV_PUT_CUSTOM_VIDEO_SOURCE", "ERR_PUT_CUSTOM_VIDEO_SOURCE", "REQ_DELETE_CUSTOM_VIDEO_SOURCE", "RCV_DELETE_CUSTOM_VIDEO_SOURCE", "ERR_DELETE_CUSTOM_VIDEO_SOURCE", "custom_video_source_default", "init_shim", "initialState", "requestIdle", "importMediaReducer", "state", "action", "REQ_GET_IMPORT_VIDEO", "requestInit", "RCV_GET_IMPORT_VIDEO", "requestSuccessful", "ERR_GET_IMPORT_VIDEO", "requestError", "REQ_GET_RENDER_VIDEO", "RCV_GET_RENDER_VIDEO", "ERR_GET_RENDER_VIDEO", "import_media_video_default", "init_shim", "initialState", "requestIdle", "customImageSource", "state", "action", "REQ_CUSTOM_IMAGE_SOURCE", "requestInit", "RCV_CUSTOM_IMAGE_SOURCE", "requestSuccessful", "ERR_CUSTOM_IMAGE_SOURCE", "requestError", "REQ_PUT_CUSTOM_IMAGE_SOURCE", "RCV_PUT_CUSTOM_IMAGE_SOURCE", "ERR_PUT_CUSTOM_IMAGE_SOURCE", "REQ_DELETE_CUSTOM_IMAGE_SOURCE", "RCV_DELETE_CUSTOM_IMAGE_SOURCE", "ERR_DELETE_CUSTOM_IMAGE_SOURCE", "custom_image_source_default", "init_shim", "initialState", "requestIdle", "importMediaReducer", "state", "action", "REQ_GET_IMPORT_IMAGE", "requestInit", "RCV_GET_IMPORT_IMAGE", "requestSuccessful", "ERR_GET_IMPORT_IMAGE", "requestError", "REQ_GET_RENDER_IMAGE", "RCV_GET_RENDER_IMAGE", "ERR_GET_RENDER_IMAGE", "import_media_image_default", "rootReducer", "combineReducers", "admin_default", "analytics_default", "assignment_default", "auth_default", "bankid_default", "financial_institution_default", "manufacturers_default", "notification_default", "organisation_branch_default", "organisation_custom_image_source_default", "organisation_opening_hours_default", "organisation_reseller_package_default", "organisation_service_default", "organisation_user_default", "default_contact_options_default", "profile_default", "reseller_package_default", "user_default", "vehicles_options_default", "wxr_default", "pdf_template_default", "document_default", "declaration_default", "advertisement_media_default", "advertisements_media_default", "advertisement_metadata_default", "leasing_promos_default", "model_series_default", "media_upload_default", "financial_options_default", "insurances_default", "vehicle_search_default", "event_default", "social_boost_default", "social_boost_settings_default", "leads_default", "wip_default", "ad_boost_default", "vimeo_default", "order_default", "order_logs_default", "ecom_setting_default", "permissions_default", "credentials_default", "facets_default", "export_facets_default", "branch_facets_default", "branch_export_facets_default", "export_filter_default", "system_clients_default", "payment_options_default", "brandings_default", "custom_video_source_default", "import_media_video_default", "custom_image_source_default", "import_media_image_default", "reducers_default", "serverState", "dte", "f", "store_default", "initialState", "createStore", "reducers_default", "compose", "applyMiddleware", "es_default", "init_shim", "import_react", "init_shim", "import_react", "init_shim", "import_react", "Header", "dispatch", "useDispatch", "toggleNavigation", "bindActionCreators", "React", "header_default", "init_shim", "import_react", "init_shim", "import_react", "Notification", "count", "icon", "maxCount", "badge", "React", "NavItem", "depricated", "to", "title", "notifications", "externalLink", "active", "beta", "actions", "maxNotificationCount", "onClick", "_customClick", "Link", "NavItem_default", "init_shim", "import_react", "isActiveStartsWith", "path", "name", "WebsiteNavigation", "selectedBranch", "actions", "site", "permission", "getSite", "useSite_default", "unhandledSubmissions", "getUnhandledSubmissions", "useForm_default", "React", "NavItem_default", "WebsiteNavigation_default", "init_shim", "import_react", "queryfilter", "useAssignmentsNotificationCount", "token", "branchId", "useAuth_default", "httpJson", "useHttp_default", "hasPermission", "useSelector", "s", "hasPermissionToAccessAssignment", "get", "buildAuthorizedGetRequest", "data", "useQuery", "ASSIGNMENTS_NOTIFICATION_QUERY", "useAssignmentsNotificationCount_default", "init_shim", "useUnreadConversationCount", "skip", "token", "branchId", "useAuth_default", "httpJson", "useHttp_default", "data", "isLoading", "isSuccess", "isError", "useQuery", "CONVERSATIONS_UNREAD_QUERY", "buildAuthorizedGetRequest", "useUnreadConversationCount_default", "isActive", "path", "name", "isOpen", "isActiveStartsWith", "regexGuid", "getSelectedBranchFromPath", "possibleGuid", "Navigation", "dispatch", "useDispatch", "useLocation", "unreadLeadCount", "useSelector", "s", "selectedBranch", "branch", "getSelectedBranch", "newlyCreatedOrderCount", "getOrderCountForCreated", "ecomIsEnabled", "hasEcomPermission", "hasPermissionToAccessEcom", "actions", "bindActionCreators", "selectBranch", "clearAnalyticsNamespace", "signOut", "closeNavigation", "newAssignmentsCount", "useAssignmentsNotificationCount_default", "unreadMessagesCount", "useUnreadConversationCount_default", "React", "NavItem_default", "WebsiteNavigation_default", "navigation_default", "init_shim", "import_react", "init_shim", "import_react", "init_shim", "getAnalyticsBranches", "createSelector", "state", "analytics", "a", "key", "getCurrentAnalyticsBranch", "selectedBranch", "init_shim", "import_react", "BranchItem", "analytics", "active", "branch", "onClick", "React", "branch_item_default", "BranchList", "dispatch", "useDispatch", "analytics", "useSelector", "getAnalyticsBranches", "branches", "s", "selectedBranch", "actions", "bindActionCreators", "getBranch", "getAnalytics", "selectBranch", "onBranchChange", "id", "React", "branch", "branch_item_default", "branch_list_default", "init_shim", "import_react", "Statistic", "analytics", "useSelector", "getCurrentAnalyticsBranch", "failed", "s", "responseStatus", "branch", "failedMarkup", "analyticsMarkup", "React", "exposures", "views", "microConversions", "conversions", "statistic_default", "init_shim", "import_react", "init_shim", "getProfile", "createSelector", "state", "profile", "getProfileImageUrl", "ProfileImage", "profileImageUrl", "useSelector", "getProfileImageUrl", "React", "urls_exports", "profile_image_default", "hasFetched", "timeout", "InformationBar", "dispatch", "useDispatch", "branches", "useSelector", "s", "selectedBranch", "actions", "bindActionCreators", "getAnalytics", "getAnalyticsForBranchBatch", "toggleNavigation", "isOpen", "setIsOpen", "markupVisible", "setMarkupVisible", "didMount", "toggleDropdown", "x", "React", "branch_list_default", "profile_image_default", "statistic_default", "information_bar_default", "init_shim", "import_react", "init_shim", "import_react", "init_shim", "import_lodash", "REQ_GET_PAGES", "RCV_GET_PAGES", "ERR_GET_PAGES", "REQ_GET_PAGE_COMPLETE", "RCV_GET_PAGE_COMPLETE", "ERR_GET_PAGE_COMPLETE", "REQ_CREATE_PAGE", "RCV_CREATE_PAGE", "ERR_CREATE_PAGE", "REQ_UPDATE_PAGE", "RCV_UPDATE_PAGE", "ERR_UPDATE_PAGE", "ERR_UPDATE_PAGE_RESET", "REQ_REMOVE_PAGE", "RCV_REMOVE_PAGE", "ERR_REMOVE_PAGE", "ERR_REMOVE_PAGE_RESET", "REQ_CLEAR_LOCAL_PAGE", "REQ_PUBLISH_PAGE", "RCV_PUBLISH_PAGE", "ERR_PUBLISH_PAGE", "ERR_PUBLISH_PAGE_RESET", "REQ_SCHEDULE_PAGE", "RCV_SCHEDULE_PAGE", "ERR_SCHEDULE_PAGE", "ERR_SCHEDULE_PAGE_RESET", "CLEAR_WARNING_PUBLISH_BROKEN_LINKS", "REQ_UNPUBLISH_PAGE", "RCV_UNPUBLISH_PAGE", "ERR_UNPUBLISH_PAGE", "ERR_UNPUBLISH_PAGE_RESET", "REQ_CREATE_BRANCH_PAGE", "RCV_CREATE_BRANCH_PAGE", "ERR_CREATE_BRANCH_PAGE", "REQ_GET_PAGE_LINKS", "RCV_GET_PAGE_LINKS", "ERR_GET_PAGE_LINKS", "SET_PAGE_STATUS", "REQ_GET_PAGE_PREVIEW", "RCV_GET_PAGE_PREVIEW", "ERR_GET_PAGE_PREVIEW", "SET_CLEAR_PAGE_PREVIEW", "findPage", "pages", "id", "p", "findInPage", "UpdatePageRecc", "page", "updateValue", "cloneDeep", "removePage", "i", "createInPages", "_pages", "match", "a", "b", "updateInPages", "removeInPages", "dash", "dashGenerator", "lvl", "reccursiveOptions", "tree", "arr", "x", "pageReducerInitialState", "requestIdle", "toPageComplete", "toPage", "index", "pageReducer", "state", "action", "next", "requestInit", "requestSuccessful", "requestError", "DefaultRequestErrorConverter", "PageReducer_default", "init_shim", "FormatOptionalLinkProperty", "module", "key", "FormatRequiredLinkProperty", "FormatRequiredLink", "link", "formatProperties", "card", "item", "PageProvider", "token", "branchId", "children", "pageState", "dispatch", "PageReducer_default", "pageReducerInitialState", "getPageComplete", "id", "REQ_GET_PAGE_COMPLETE", "response", "rawJson", "get", "buildAuthorizedGetRequest", "RCV_GET_PAGE_COMPLETE", "ERR_GET_PAGE_COMPLETE", "reloadPageComplete", "publishPage", "version", "REQ_PUBLISH_PAGE", "buildAuthorizedPostRequest", "RCV_PUBLISH_PAGE", "e", "ERR_PUBLISH_PAGE", "schedulePage", "publish_date", "unpublish_date", "REQ_SCHEDULE_PAGE", "RCV_SCHEDULE_PAGE", "ERR_SCHEDULE_PAGE", "unpublishPage", "REQ_UNPUBLISH_PAGE", "RCV_UNPUBLISH_PAGE", "ERR_UNPUBLISH_PAGE", "resetErrorUnpublish", "ERR_UNPUBLISH_PAGE_RESET", "resetErrorPublish", "ERR_PUBLISH_PAGE_RESET", "resetErrorSchedule", "ERR_SCHEDULE_PAGE_RESET", "getPages", "REQ_GET_PAGES", "RCV_GET_PAGES", "ERR_GET_PAGES", "getPageLinks", "REQ_GET_PAGE_LINKS", "RCV_GET_PAGE_LINKS", "ERR_GET_PAGE_LINKS", "createPage", "page", "REQ_CREATE_PAGE", "RCV_CREATE_PAGE", "ERR_CREATE_PAGE", "updatePage", "_page", "heading", "formatProperties", "REQ_UPDATE_PAGE", "buildAuthorizedPutRequest", "RCV_UPDATE_PAGE", "err", "ERR_UPDATE_PAGE", "removePage", "REQ_REMOVE_PAGE", "buildAuthorizedDeleteRequest", "RCV_REMOVE_PAGE", "ERR_REMOVE_PAGE", "resetErrorRemovePage", "ERR_REMOVE_PAGE_RESET", "createBranchPage", "branchPageId", "REQ_CREATE_BRANCH_PAGE", "RCV_CREATE_BRANCH_PAGE", "ERR_CREATE_BRANCH_PAGE", "getPagePreview", "REQ_GET_PAGE_PREVIEW", "rawTextHtml", "RCV_GET_PAGE_PREVIEW", "ERR_GET_PAGE_PREVIEW", "setPageStatusLocal", "status", "SET_PAGE_STATUS", "resetRequestUpdate", "ERR_UPDATE_PAGE_RESET", "clearLocalPage", "REQ_CLEAR_LOCAL_PAGE", "clearPagePreview", "SET_CLEAR_PAGE_PREVIEW", "clearWarningPublishBrokenLinks", "CLEAR_WARNING_PUBLISH_BROKEN_LINKS", "_pageState", "prev", "curr", "x", "value", "React", "PageContext", "PageProvider_default", "init_shim", "import_react", "init_shim", "import_lodash", "REQ_GET_SITE", "RCV_GET_SITE", "ERR_GET_SITE", "REQ_CREATE_SITE", "RCV_CREATE_SITE", "ERR_CREATE_SITE", "REQ_UPDATE_SITE", "RCV_UPDATE_SITE", "ERR_UPDATE_SITE", "ERR_UPDATE_SITE_RESET", "REQ_PUBLISH_SITE", "RCV_PUBLISH_SITE", "ERR_PUBLISH_SITE", "REQ_REMOVE_SITE", "RCV_REMOVE_SITE", "ERR_REMOVE_SITE", "REQ_GET_FONTS", "RCV_GET_FONTS", "ERR_GET_FONTS", "REQ_UPDATE_HOST", "RCV_UPDATE_HOST", "ERR_UPDATE_HOST", "REQ_REMOVE_HOST", "RCV_REMOVE_HOST", "ERR_REMOVE_HOST", "siteReducerInitialState", "requestIdle", "siteReducer", "state", "action", "next", "cloneDeep", "requestInit", "requestSuccessful", "requestError", "DefaultRequestErrorConverter", "value", "SiteReducer_default", "SiteProvider", "token", "branchId", "permission", "children", "siteState", "dispatch", "SiteReducer_default", "siteReducerInitialState", "getSite", "REQ_GET_SITE", "response", "rawJson", "get", "buildAuthorizedGetRequest", "RCV_GET_SITE", "e", "ERR_GET_SITE", "createSite", "REQ_CREATE_SITE", "buildAuthorizedPostRequest", "RCV_CREATE_SITE", "ERR_CREATE_SITE", "removeSite", "REQ_REMOVE_SITE", "buildAuthorizedDeleteRequest", "RCV_REMOVE_SITE", "ERR_REMOVE_SITE", "updateSite", "site", "nav", "REQ_UPDATE_SITE", "buildAuthorizedPutRequest", "RCV_UPDATE_SITE", "ERR_UPDATE_SITE", "resetErrorUpdate", "ERR_UPDATE_SITE_RESET", "publishSite", "REQ_PUBLISH_SITE", "RCV_PUBLISH_SITE", "ERR_PUBLISH_SITE", "getFonts", "REQ_GET_FONTS", "RCV_GET_FONTS", "ERR_GET_FONTS", "updateHost", "host", "REQ_UPDATE_HOST", "RCV_UPDATE_HOST", "ERR_UPDATE_HOST", "removeHost", "REQ_REMOVE_HOST", "RCV_REMOVE_HOST", "ERR_REMOVE_HOST", "value", "React", "SiteContext", "SiteProvider_default", "init_shim", "import_react", "init_shim", "import_lodash", "REQ_GET_CONTACTS", "RCV_GET_CONTACTS", "ERR_GET_CONTACTS", "REQ_GET_CONTACT_FILTERS", "RCV_GET_CONTACT_FILTERS", "ERR_GET_CONTACT_FILTERS", "REQ_CREATE_CONTACT", "RCV_CREATE_CONTACT", "ERR_CREATE_CONTACT", "REQ_UPDATE_CONTACT", "RCV_UPDATE_CONTACT", "ERR_UPDATE_CONTACT", "REQ_REMOVE_CONTACT", "RCV_REMOVE_CONTACT", "ERR_REMOVE_CONTACT", "REQ_UPDATE_CONTACT_SORT_ORDER", "RCV_UPDATE_CONTACT_SORT_ORDER", "ERR_UPDATE_CONTACT_SORT_ORDER", "contactReducerInitialState", "requestIdle", "index", "contactReducer", "state", "action", "next", "cloneDeep", "requestInit", "requestSuccessful", "requestError", "x", "key", "i", "y", "order", "a", "b", "ContactReducer_default", "ContactProvider", "token", "branchId", "children", "httpJson", "useHttp_default", "contactState", "dispatch", "ContactReducer_default", "contactReducerInitialState", "getContacts", "REQ_GET_CONTACTS", "response", "get", "buildAuthorizedGetRequest", "RCV_GET_CONTACTS", "ERR_GET_CONTACTS", "getContactFilters", "REQ_GET_CONTACT_FILTERS", "RCV_GET_CONTACT_FILTERS", "ERR_GET_CONTACT_FILTERS", "createContact", "contact", "REQ_CREATE_CONTACT", "buildAuthorizedPostRequest", "RCV_CREATE_CONTACT", "ERR_CREATE_CONTACT", "updateContact", "id", "REQ_UPDATE_CONTACT", "buildAuthorizedPutRequest", "RCV_UPDATE_CONTACT", "ERR_UPDATE_CONTACT", "updateSortOrder", "sort_order", "REQ_UPDATE_CONTACT_SORT_ORDER", "React", "RCV_UPDATE_CONTACT_SORT_ORDER", "ERR_UPDATE_CONTACT_SORT_ORDER", "removeContact", "REQ_REMOVE_CONTACT", "buildAuthorizedDeleteRequest", "RCV_REMOVE_CONTACT", "ERR_REMOVE_CONTACT", "value", "ContactContext", "ContactProvider_default", "init_shim", "import_react", "init_shim", "import_lodash", "REQ_MEDIA_UPLOAD", "RCV_MEDIA_UPLOAD", "ERR_MEDIA_UPLOAD", "REQ_GET_CONTENT_MEDIA", "RCV_GET_CONTENT_MEDIA", "ERR_GET_CONTENT_MEDIA", "REQ_REMOVE_MEDIA", "RCV_REMOVE_MEDIA", "ERR_REMOVE_MEDIA", "REQ_GET_MEDIA_SITE_USAGE", "RCV_GET_MEDIA_SITE_USAGE", "ERR_GET_MEDIA_SITE_USAGE", "mediaReducerInitialState", "requestIdle", "mediaUsageRequestId", "mediaReducer", "state", "action", "next", "cloneDeep", "requestInit", "requestSuccessful", "requestError", "x", "MediaReducer_default", "mediaUsageRequestId", "MediaProvider", "token", "branchId", "children", "mediaState", "dispatch", "MediaReducer_default", "mediaReducerInitialState", "uploadMediaContent", "file", "purpose", "formData", "REQ_MEDIA_UPLOAD", "response", "json", "get", "buildAuthorizedPostRequest", "validateResponse", "RCV_MEDIA_UPLOAD", "ERR_MEDIA_UPLOAD", "uploadMediaContentPromise", "rawJson", "getContentMedia", "REQ_GET_CONTENT_MEDIA", "buildAuthorizedGetRequest", "RCV_GET_CONTENT_MEDIA", "ERR_GET_CONTENT_MEDIA", "removeMedia", "id", "REQ_REMOVE_MEDIA", "buildAuthorizedDeleteRequest", "RCV_REMOVE_MEDIA", "ERR_REMOVE_MEDIA", "getMediamediaUsage", "url", "requestId", "REQ_GET_MEDIA_SITE_USAGE", "RCV_GET_MEDIA_SITE_USAGE", "ERR_GET_MEDIA_SITE_USAGE", "value", "React", "MediaContext", "MediaProvider_default", "init_shim", "import_react", "init_shim", "import_react", "UnsavedChangesContext", "UnsavedChangesProvider", "children", "section", "_setSection", "setSection", "s", "clearSection", "value", "React", "UnsavedChangesContext", "UnsavedChangesProvider_default", "init_shim", "import_react", "init_shim", "import_lodash", "REQ_GET_CUSTOM_FONTS", "RCV_GET_CUSTOM_FONTS", "ERR_GET_CUSTOM_FONTS", "REQ_CREATE_CUSTOM_FONTS", "RCV_CREATE_CUSTOM_FONTS", "ERR_CREATE_CUSTOM_FONTS", "REQ_REMOVE_CUSTOM_FONTS", "RCV_REMOVE_CUSTOM_FONTS", "ERR_REMOVE_CUSTOM_FONTS", "REQ_REMOVE_MULTIPLE_FONTS", "RCV_REMOVE_MULTIPLE_FONTS", "ERR_REMOVE_MULTIPLE_FONTS", "SET_REMOVE_CUSTOM_FONT_QUEUE", "CLEAR_REMOVE_CUSTOM_FONT_QUEUE", "fontReducerInitialState", "requestIdle", "fontReducer", "state", "action", "next", "cloneDeep", "requestInit", "requestSuccessful", "requestError", "x", "index", "f", "FontReducer_default", "FontProvider", "token", "branchId", "children", "fontState", "dispatch", "FontReducer_default", "fontReducerInitialState", "localFonts", "f", "x", "getFonts", "REQ_GET_CUSTOM_FONTS", "response", "rawJson", "get", "buildAuthorizedGetRequest", "RCV_GET_CUSTOM_FONTS", "e", "ERR_GET_CUSTOM_FONTS", "createFont", "file", "fontType", "REQ_CREATE_CUSTOM_FONTS", "formData", "buildAuthorizedFormPostRequest", "RCV_CREATE_CUSTOM_FONTS", "ERR_CREATE_CUSTOM_FONTS", "removeFont", "id", "REQ_REMOVE_CUSTOM_FONTS", "buildAuthorizedDeleteRequest", "RCV_REMOVE_CUSTOM_FONTS", "ERR_REMOVE_CUSTOM_FONTS", "removeFontRemoveQueue", "REQ_REMOVE_MULTIPLE_FONTS", "buildAuthorizedPostRequest", "RCV_REMOVE_MULTIPLE_FONTS", "ERR_REMOVE_MULTIPLE_FONTS", "addFontRemoveToQueue", "font_type", "SET_REMOVE_CUSTOM_FONT_QUEUE", "clearFontRemoveQueue", "CLEAR_REMOVE_CUSTOM_FONT_QUEUE", "value", "React", "FontContext", "FontProvider_default", "init_shim", "import_react", "init_shim", "import_lodash", "REQ_GET_FORM", "RCV_GET_FORM", "ERR_GET_FORM", "REQ_GET_FORMS", "RCV_GET_FORMS", "ERR_GET_FORMS", "REQ_CREATE_FORM", "RCV_CREATE_FORM", "ERR_CREATE_FORM", "REQ_UPDATE_FORM", "RCV_UPDATE_FORM", "ERR_UPDATE_FORM", "ERR_UPDATE_FORM_RESET", "REQ_REMOVE_FORM", "RCV_REMOVE_FORM", "ERR_REMOVE_FORM", "REQ_GET_FORM_PREVIEW", "RCV_GET_FORM_PREVIEW", "ERR_GET_FORM_PREVIEW", "SET_CLEAR_FORM_PREVIEW", "REQ_GET_UNHANDLED_SUBMISSIONS", "RCV_GET_UNHANDLED_SUBMISSIONS", "ERR_GET_UNHANDLED_SUBMISSIONS", "REQ_DECREMENT_UNHANDLED_SUBMISSIONS", "REQ_RESET_FORM", "formReducerInitialState", "requestIdle", "index", "formReducer", "state", "action", "next", "cloneDeep", "requestInit", "requestSuccessful", "requestError", "x", "FormReducer_default", "FormProvider", "token", "branchId", "children", "formState", "dispatch", "FormReducer_default", "formReducerInitialState", "getForm", "id", "REQ_GET_FORM", "response", "rawJson", "get", "buildAuthorizedGetRequest", "RCV_GET_FORM", "ERR_GET_FORM", "getForms", "REQ_GET_FORMS", "RCV_GET_FORMS", "ERR_GET_FORMS", "createForm", "form", "REQ_CREATE_FORM", "buildAuthorizedPostRequest", "RCV_CREATE_FORM", "ERR_CREATE_FORM", "updateForm", "REQ_UPDATE_FORM", "buildAuthorizedPutRequest", "RCV_UPDATE_FORM", "e", "err", "ERR_UPDATE_FORM", "removeForm", "REQ_REMOVE_FORM", "buildAuthorizedDeleteRequest", "RCV_REMOVE_FORM", "ERR_REMOVE_FORM", "getUnhandledSubmissions", "silent", "REQ_GET_UNHANDLED_SUBMISSIONS", "result", "RCV_GET_UNHANDLED_SUBMISSIONS", "ERR_GET_UNHANDLED_SUBMISSIONS", "getFormPreview", "REQ_GET_FORM_PREVIEW", "rawTextHtml", "RCV_GET_FORM_PREVIEW", "ERR_GET_FORM_PREVIEW", "decrementUnhandledSubmissions", "REQ_DECREMENT_UNHANDLED_SUBMISSIONS", "resetRequestUpdate", "ERR_UPDATE_FORM_RESET", "resetForm", "REQ_RESET_FORM", "clearFormPreview", "SET_CLEAR_FORM_PREVIEW", "value", "React", "FormContext", "FormProvider_default", "init_shim", "import_react", "init_shim", "import_react", "FormSubmissionContext", "init_shim", "import_lodash", "REQ_GET_ALL_SUBMISSIONS_SINGLE_FORM", "RCV_GET_ALL_SUBMISSIONS_SINGLE_FORM", "ERR_GET_ALL_SUBMISSIONS_SINGLE_FORM", "REQ_REMOVE_FORM_SUBMISSION", "RCV_REMOVE_FORM_SUBMISSION", "ERR_REMOVE_FORM_SUBMISSION", "REQ_SUBMISSION_REGISTER_VIEW_INFO", "RCV_SUBMISSION_REGISTER_VIEW_INFO", "ERR_SUBMISSION_REGISTER_VIEW_INFO", "formSubmissionReducerInitialState", "requestIdle", "index", "formSumissionReducer", "state", "action", "next", "cloneDeep", "requestInit", "requestSuccessful", "requestError", "x", "FormSubmissionReducer_default", "FormSubmissionProvider", "token", "branchId", "children", "decrementUnhandledSubmissions", "useForm_default", "formState", "dispatch", "FormSubmissionReducer_default", "formSubmissionReducerInitialState", "getFormSubmissionSingleForm", "id", "continuationToken", "REQ_GET_ALL_SUBMISSIONS_SINGLE_FORM", "response", "rawJson", "get", "buildAuthorizedGetRequest", "RCV_GET_ALL_SUBMISSIONS_SINGLE_FORM", "ERR_GET_ALL_SUBMISSIONS_SINGLE_FORM", "removeFormSubmission", "REQ_REMOVE_FORM_SUBMISSION", "buildAuthorizedDeleteRequest", "RCV_REMOVE_FORM_SUBMISSION", "ERR_REMOVE_FORM_SUBMISSION", "registerViewInfo", "_viewInfo", "initialView", "user_id", "jwt_decode_esm_default", "viewInfo", "REQ_SUBMISSION_REGISTER_VIEW_INFO", "result", "buildAuthorizedPatchRequest", "RCV_SUBMISSION_REGISTER_VIEW_INFO", "ERR_SUBMISSION_REGISTER_VIEW_INFO", "value", "React", "FormSubmissionContext", "FormSubmissionProvider_default", "init_shim", "import_react", "init_shim", "import_lodash", "REQ_GET_CAMPAIGN", "RCV_GET_CAMPAIGN", "ERR_GET_CAMPAIGN", "REQ_GET_CAMPAIGNS", "RCV_GET_CAMPAIGNS", "ERR_GET_CAMPAIGNS", "REQ_CREATE_CAMPAIGN", "RCV_CREATE_CAMPAIGN", "ERR_CREATE_CAMPAIGN", "REQ_UPDATE_CAMPAIGN", "RCV_UPDATE_CAMPAIGN", "ERR_UPDATE_CAMPAIGN", "REQ_REMOVE_CAMPAIGN", "RCV_REMOVE_CAMPAIGN", "ERR_REMOVE_CAMPAIGN", "REQ_GET_USED_CATEGORIES", "RCV_GET_USED_CATEGORIES", "ERR_GET_USED_CATEGORIES", "REQ_UPDATE_CAMPAIGN_SORT_ORDER", "RCV_UPDATE_CAMPAIGN_SORT_ORDER", "ERR_UPDATE_CAMPAIGN_SORT_ORDER", "campaignReducerInitialState", "requestIdle", "index", "CAMPAIGNReducer", "state", "action", "next", "cloneDeep", "requestInit", "requestSuccessful", "requestError", "x", "key", "i", "y", "order", "a", "b", "CampaignReducer_default", "CampaignProvider", "token", "branchId", "children", "httpJson", "useHttp_default", "campaignState", "dispatch", "CampaignReducer_default", "campaignReducerInitialState", "getCampaign", "id", "REQ_GET_CAMPAIGN", "response", "get", "buildAuthorizedGetRequest", "RCV_GET_CAMPAIGN", "ERR_GET_CAMPAIGN", "getCampaigns", "REQ_GET_CAMPAIGNS", "RCV_GET_CAMPAIGNS", "ERR_GET_CAMPAIGNS", "createCampaign", "campaign", "REQ_CREATE_CAMPAIGN", "buildAuthorizedPostRequest", "RCV_CREATE_CAMPAIGN", "ERR_CREATE_CAMPAIGN", "updateCampaign", "REQ_UPDATE_CAMPAIGN", "buildAuthorizedPutRequest", "RCV_UPDATE_CAMPAIGN", "ERR_UPDATE_CAMPAIGN", "updateSortOrder", "sort_order", "REQ_UPDATE_CAMPAIGN_SORT_ORDER", "React", "RCV_UPDATE_CAMPAIGN_SORT_ORDER", "ERR_UPDATE_CAMPAIGN_SORT_ORDER", "removeCampaign", "REQ_REMOVE_CAMPAIGN", "buildAuthorizedDeleteRequest", "RCV_REMOVE_CAMPAIGN", "ERR_REMOVE_CAMPAIGN", "getusedCategories", "REQ_GET_USED_CATEGORIES", "RCV_GET_USED_CATEGORIES", "ERR_GET_USED_CATEGORIES", "value", "CampaignContext", "CampaignProvider_default", "init_shim", "import_react", "AuthProvider", "token", "branchId", "children", "value", "jwt_decode_esm_default", "React", "AuthContext", "AuthProvider_default", "init_shim", "import_react", "init_shim", "import_lodash", "REQ_GET_EXTENDED_USERS", "RCV_GET_EXTENDED_USERS", "ERR_GET_EXTENDED_USERS", "usersReducerInitialState", "requestIdle", "usersReducer", "state", "action", "next", "cloneDeep", "requestInit", "requestSuccessful", "requestError", "UsersReducer_default", "UsersProvider", "token", "branchId", "children", "usersState", "dispatch", "UsersReducer_default", "usersReducerInitialState", "getExtendedUsers", "REQ_GET_EXTENDED_USERS", "responseOrganizationUsers", "json", "buildAuthorizedGetRequest", "userIds", "x", "responseUserInformations", "buildAuthorizedPostRequest", "extendedUsers", "userInformation", "y", "RCV_GET_EXTENDED_USERS", "ERR_GET_EXTENDED_USERS", "value", "React", "UsersContext", "UsersProvider_default", "init_shim", "import_react", "init_shim", "newGuid", "c", "r", "init_shim", "import_lodash", "REQ_GET_DOCUMENTS", "RCV_GET_DOCUMENTS", "ERR_GET_DOCUMENTS", "REQ_UPLOAD_DOCUMENT", "RCV_UPLOAD_DOCUMENT", "ERR_UPLOAD_DOCUMENT", "REQ_UPDATE_DOCUMENT", "RCV_UPDATE_DOCUMENT", "ERR_UPDATE_DOCUMENT", "REQ_UPDATE_DOCUMENTS_SORT_ORDER", "RCV_UPDATE_DOCUMENTS_SORT_ORDER", "ERR_UPDATE_DOCUMENTS_SORT_ORDER", "REQ_REMOVE_DOCUMENT", "RCV_REMOVE_DOCUMENT", "ERR_REMOVE_DOCUMENT", "REQ_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION", "RCV_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION", "ERR_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION", "REQ_CLEAR_DOCUMENTS", "documentReducerInitialState", "requestIdle", "documentReducer", "state", "action", "next", "cloneDeep", "requestInit", "requestSuccessful", "requestError", "requestClusterUpdate", "indexUpload", "x", "indexUpdate", "indexRemove", "DocumentReducer_default", "DocumentProvider", "token", "branchId", "children", "documentState", "dispatch", "DocumentReducer_default", "documentReducerInitialState", "getDocuments", "id", "REQ_GET_DOCUMENTS", "response", "json", "get", "buildAuthorizedGetRequest", "RCV_GET_DOCUMENTS", "ERR_GET_DOCUMENTS", "uploadDocument", "document", "requestId", "newGuid", "_document", "formData", "REQ_UPLOAD_DOCUMENT", "buildAuthorizedFormPostRequest", "RCV_UPLOAD_DOCUMENT", "ERR_UPLOAD_DOCUMENT", "updateDocument", "body", "REQ_UPDATE_DOCUMENT", "buildAuthorizedPutRequest", "RCV_UPDATE_DOCUMENT", "ERR_UPDATE_DOCUMENT", "updateDocumentsSortOrder", "documents", "x", "i", "REQ_UPDATE_DOCUMENTS_SORT_ORDER", "RCV_UPDATE_DOCUMENTS_SORT_ORDER", "ERR_UPDATE_DOCUMENTS_SORT_ORDER", "removeDocument", "documentId", "REQ_REMOVE_DOCUMENT", "buildAuthorizedDeleteRequest", "RCV_REMOVE_DOCUMENT", "ERR_REMOVE_DOCUMENT", "clearDocuments", "REQ_CLEAR_DOCUMENTS", "tryToAddPossibleCarDeclaration", "regnr", "REQ_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION", "buildAuthorizedPostRequest", "RCV_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION", "ERR_TRY_TO_ADD_POSSIBLE_CAR_DECLARATION", "value", "React", "DocumentContext", "DocumentProvider_default", "init_shim", "import_react", "init_shim", "import_lodash", "REQ_GET_INSIGHT", "RCV_GET_INSIGHT", "ERR_GET_INSIGHT", "REQ_GET_SETTINGS", "RCV_GET_SETTINGS", "ERR_GET_SETTINGS", "REQ_BOOST_SINGLE", "RCV_BOOST_SINGLE", "ERR_BOOST_SINGLE", "newInsight", "socialBoostReducerInitialState", "requestIdle", "socialBoostReducer", "state", "action", "next", "cloneDeep", "requestInit", "requestSuccessful", "requestError", "socialBoostReducer_default", "SocialBoostProvider", "token", "branchId", "children", "socialBoostState", "dispatch", "socialBoostReducer_default", "socialBoostReducerInitialState", "getInsight", "id", "REQ_GET_INSIGHT", "response", "json", "buildAuthorizedGetRequest", "RCV_GET_INSIGHT", "ERR_GET_INSIGHT", "getSettings", "REQ_GET_SETTINGS", "RCV_GET_SETTINGS", "ERR_GET_SETTINGS", "boostSingle", "body", "REQ_BOOST_SINGLE", "buildAuthorizedPostRequest", "RCV_BOOST_SINGLE", "ERR_BOOST_SINGLE", "value", "React", "SocialBoostContext", "SocialBoostProvider_default", "init_shim", "import_react", "init_shim", "import_lodash", "REQ_GET_RENEW_AD_SETTINGS", "RCV_GET_RENEW_AD_SETTINGS", "ERR_GET_RENEW_AD_SETTINGS", "REQ_RENEW_AD", "RCV_RENEW_AD", "ERR_RENEW_AD", "socialBoostReducerInitialState", "requestIdle", "socialBoostReducer", "state", "action", "next", "cloneDeep", "requestInit", "requestSuccessful", "requestError", "renewAdReducer_default", "RenewAdProvider", "token", "branchId", "children", "socialBoostState", "dispatch", "renewAdReducer_default", "socialBoostReducerInitialState", "getRenewAdSettings", "id", "REQ_GET_RENEW_AD_SETTINGS", "response", "json", "buildAuthorizedGetRequest", "RCV_GET_RENEW_AD_SETTINGS", "ERR_GET_RENEW_AD_SETTINGS", "renewAd", "body", "REQ_RENEW_AD", "buildAuthorizedPostRequest", "RCV_RENEW_AD", "ERR_RENEW_AD", "value", "React", "RenewAdContext", "RenewAdProvider_default", "GlobalProviders", "rawToken", "selectedBranch", "hasWebsitePermission", "children", "React", "SnackbarProvider_default", "AuthProvider_default", "DocumentProvider_default", "SocialBoostProvider_default", "RenewAdProvider_default", "UsersProvider_default", "MediaProvider_default", "SiteProvider_default", "PageProvider_default", "FontProvider_default", "FormProvider_default", "FormSubmissionProvider_default", "CampaignProvider_default", "ContactProvider_default", "UnsavedChangesProvider_default", "GlobalProviders_default", "init_shim", "import_react", "GoogleTagManager", "React", "id", "settings_exports", "auth", "preview", "w", "d", "s", "l", "a", "p", "f", "j", "dl", "GoogleTagManager_default", "init_shim", "import_react", "init_shim", "import_react", "init_shim", "Wrapper", "styled_components_browser_esm_default", "size", "props", "Item", "rgba", "noTransform", "fadeIn", "isSuccess", "Ae", "isDanger", "isWarning", "isInfo", "Content", "Action", "Close", "ButtonReset", "TIMEOUT", "SnackbarItem", "snackbar", "removeSnackbar", "transform", "disableRemove", "onClick", "ref", "React", "Item", "Content", "Action", "Close", "IconClose", "SnackbarItem_default", "Snackbar", "snackbars", "removeSnackbar", "useSnackbar_default", "ref", "transform", "height", "React", "Wrapper", "snackbar", "SnackbarItem_default", "Snackbar_default", "init_shim", "import_react", "init_shim", "import_react", "EQUIPMENT_SETTINGS_QUERY", "useEquipmentSettings", "branchId", "token", "useAuth_default", "httpJson", "useHttp_default", "get", "buildAuthorizedGetRequest", "data", "isLoading", "isSuccess", "isError", "useQuery", "useEquipmentSettings_default", "DealerV2Check", "selectedBranch", "children", "dispatch", "useDispatch", "equipment", "requestEquipment", "useEquipmentSettings_default", "actions", "bindActionCreators", "signOut", "closeNavigation", "locationNewDealer", "React", "Loader_default", "StackMedium", "H1", "Content_default", "Link", "LinkButton", "DealerV2Check_default", "dissallowedPathOrganization", "dissallowedPathCentralStorage", "dissallowedPathWithGuidCentralStorage", "dissallowedPathRegular", "isNotValidPath", "path", "dissallowedPaths", "x", "pollTime", "interval", "App", "token", "children", "dispatch", "useDispatch", "location", "useLocation", "navigate", "useNavigate", "selectedBranch", "useSelector", "s", "branch", "navigationIsOpen", "hasPermissionsRequestFailure", "responseStatus", "isPermissionsPending", "requestStatus", "hasFetchedPermissions", "permissionsBranchId", "hasEcomPermission", "hasPermissionToAccessEcom", "hasWebsitePermission", "hasPermissionToWebsite", "actions", "bindActionCreators", "getProfile", "getCreatedOrderCount", "clearUsers", "clearUserInformations", "toggleNavigation", "getUnreadCount", "getSetting", "clear", "getPermissions", "getOrders", "getUser", "tokenRef", "hasEcomPermissionRef", "startInterval", "email", "jwt_decode_esm_default", "pathGuid", "pathRest", "routeGuidSupport", "prevPath", "extensionMatch", "ext", "React", "spinner_overlay_default", "alert_default", "pathIsConversation", "GlobalProviders_default", "Snackbar_default", "information_bar_default", "DealerV2Check_default", "header_default", "navigation_default", "GoogleTagManager_default", "PortalElement_default", "PortalNamespace_exports", "app_default", "init_shim", "import_react", "useScrollToTop", "pathname", "useLocation", "node", "useScrollToTop_default", "init_shim", "import_react", "Imbox", "React", "imbox_default", "regexGuid", "getSelectedBranchFromPath", "possibleGuid", "selectedBranchCookieName", "getSelectedBranchFromCookie", "match", "x", "PreApp", "children", "dispatch", "useDispatch", "navigate", "useNavigate", "token", "useSelector", "s", "branches", "branch", "selectedBranch", "actions", "bindActionCreators", "getBranches", "getBranch", "setBranch", "signOut", "signIn", "noBranches", "setNoBranches", "initBranch", "setInitBranch", "useScrollToTop_default", "React", "app_default", "spinner_overlay_default", "imbox_default", "PreApp_default", "init_shim", "import_react", "Dashboard", "Users", "Profile", "BankId", "Dealer", "Promo", "CentralStorage", "FAQ", "NewsList", "News", "Settings", "Packaging", "TermsAndConditions", "WipSearch", "WipResult", "BlocketExport", "WXR", "Leads", "Orders", "Order", "EcomSetting", "Website", "WebsitePage", "WebsiteForms", "WebsiteFormSubmissionAnswer", "WebsiteContacts", "WebsiteSettings", "WebsiteImageBank", "WebsiteImageBankItem", "WebsiteForm", "WebsiteCampaigns", "Item", "Items", "Assignments", "Assignment", "Conversation", "Conversations", "Accessories", "Accessory", "ItemSelector", "id", "page", "useParams", "itemPage", "React", "AssignmentsSelector", "branchId", "FaqSelector", "category", "NewsSingleSelector", "slug", "NewsSelector", "AccessoryParentSelector", "AccessorySelector", "AccessoriesSelector", "LeadsSelector", "ConversionSelector", "UserSelector", "OrderSelector", "WebsitePageSelector", "WebsiteFormSelector", "subId", "WebsiteFormsSelector", "WebsiteContactPageSelector", "WebsiteContactsSelector", "WebsiteSitteingsSelector", "WebsiteCampaignPageSelector", "WebsiteCampaignsSelector", "WebsiteImageBankItemSelector", "WebsiteImageBankSelector", "WebsiteSelector", "Routes", "Route", "init_shim", "init_shim", "mainGutter", "size", "mainGutterNegative", "mainGutterSm", "mainGutterSmNegative", "customProperties", "Ae", "props", "global_style_default", "$e", "customProperties", "fontFace", "fontRegular", "props", "init_shim", "queryClient", "QueryClient", "QueryClient_default", "sv_default", "store", "store_default", "element", "React", "Le", "theme_default", "global_style_default", "Provider_default", "QueryClientProvider", "QueryClient_default", "DndProvider", "HTML5Backend", "BrowserRouter", "PreApp_default", "spinner_block_default", "Routes"] }