@zengenti/contensis-react-base 3.0.0-beta.44 → 3.0.0-beta.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,7 @@
1
1
  import { RequestHandler } from 'express';
2
- export declare const bundleManipulationMiddleware: ({ appRootPath, maxage, staticRoutePath, }: {
2
+ export declare const bundleManipulationMiddleware: ({ appRootPath, maxage, staticFolderPath, staticRoutePath, }: {
3
3
  appRootPath: string;
4
4
  maxage: string;
5
+ staticFolderPath: string;
5
6
  staticRoutePath: string;
6
7
  }) => RequestHandler;
package/package-lock.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zengenti/contensis-react-base",
3
- "version": "3.0.0-beta.44",
3
+ "version": "3.0.0-beta.47",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
@@ -6810,6 +6810,11 @@
6810
6810
  "mimic-response": "^1.0.0"
6811
6811
  }
6812
6812
  },
6813
+ "deep-cleaner": {
6814
+ "version": "1.2.1",
6815
+ "resolved": "https://registry.npmjs.org/deep-cleaner/-/deep-cleaner-1.2.1.tgz",
6816
+ "integrity": "sha512-/WLL2O+GnNA/t9DRagOBT7ckJnfz5wV/8TqLo5bHykcBlXPH0+PeUzd0/s2MzOQ3IiRRIFpcWVe016rCqQIhMA=="
6817
+ },
6813
6818
  "deep-equal": {
6814
6819
  "version": "2.0.5",
6815
6820
  "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz",
@@ -10491,9 +10496,9 @@
10491
10496
  }
10492
10497
  },
10493
10498
  "lodash": {
10494
- "version": "4.17.15",
10495
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
10496
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
10499
+ "version": "4.17.21",
10500
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
10501
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
10497
10502
  },
10498
10503
  "lodash.clonedeep": {
10499
10504
  "version": "4.5.0",
@@ -14006,7 +14011,7 @@
14006
14011
  }
14007
14012
  },
14008
14013
  "zengenti-search-package": {
14009
- "version": "git+https://gitlab+deploy-token-5:XKRGRE1p2PrFAxnWwLNz@gitlab.zengenti.com/zengenti-packages/search.git#54752f7aae904e585507ff637056326cd8f104be",
14014
+ "version": "git+https://gitlab+deploy-token-5:XKRGRE1p2PrFAxnWwLNz@gitlab.zengenti.com/zengenti-packages/search.git#58b0216048e83785df6b6825646413313d028c49",
14010
14015
  "from": "git+https://gitlab+deploy-token-5:XKRGRE1p2PrFAxnWwLNz@gitlab.zengenti.com/zengenti-packages/search.git#immer",
14011
14016
  "dev": true,
14012
14017
  "requires": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zengenti/contensis-react-base",
3
- "version": "3.0.0-beta.44",
3
+ "version": "3.0.0-beta.47",
4
4
  "repository": "https://github.com/zengenti/contensis-react-base",
5
5
  "license": "None",
6
6
  "description": "Turbocharge your React web apps with Contensis. This package handles all dependencies for creating full featured web apps in React with Contensis and Site View. Routing is driven by Site View, Redux is used for global state management and server-side rendering (SSR) is handled for you. Also taking care of intricate hosting issues such as cache invalidation and supporting authenticated content where required.",
@@ -98,6 +98,7 @@
98
98
  "contensis-delivery-api": "^1.1.8",
99
99
  "contensis-management-api": "^2.0.3",
100
100
  "custom-env": "^2.0.1",
101
+ "deep-cleaner": "^1.2.1",
101
102
  "deep-equal": "^2.0.5",
102
103
  "deepmerge": "^4.2.2",
103
104
  "express": "^4.17.1",
@@ -107,6 +108,7 @@
107
108
  "isomorphic-fetch": "^3.0.0",
108
109
  "js-cookie": "^3.0.1",
109
110
  "jsonpath-mapper": "^1.1.0",
111
+ "lodash": "^4.17.21",
110
112
  "loglevel": "^1.7.1",
111
113
  "minify-css-string": "^1.0.0",
112
114
  "oidc-client": "^1.11.5",
@@ -1 +0,0 @@
1
- {"version":3,"file":"RouteLoader-2ed14766.js","sources":["../src/routing/components/NotFound.tsx","../src/routing/components/Status.tsx","../src/routing/components/RouteLoader.tsx"],"sourcesContent":["import React from 'react';\n\nconst NotFound = ({\n statusCode,\n statusText,\n}: {\n statusCode: number;\n statusText: string;\n}) => (\n <>\n <header>\n <h1>{statusCode || '404'} Page Not Found</h1>\n {statusText && (\n <h2\n style={{\n background: '#eee',\n color: '#666',\n fontSize: '100%',\n padding: '10px',\n }}\n >\n {statusText}\n </h2>\n )}\n </header>\n </>\n);\n\nexport default NotFound;\n","import React, { PropsWithChildren } from 'react';\nimport { Route } from 'react-router-dom';\n\nexport const Status = ({\n code,\n children,\n}: PropsWithChildren<{ code: number }>) => {\n return (\n <Route\n render={({ staticContext }) => {\n if (staticContext) staticContext.statusCode = code;\n return children;\n }}\n />\n );\n};\n","import React, { useEffect, useCallback } from 'react';\nimport { connect } from 'react-redux';\nimport { hot } from 'react-hot-loader';\nimport { Redirect, useLocation } from 'react-router-dom';\nimport { renderRoutes, matchRoutes, RouteConfig } from 'react-router-config';\nimport { createSelector } from 'reselect';\n\nimport NotFound from './NotFound';\nimport { Status } from './Status';\n\nimport {\n selectCurrentPath,\n selectCurrentProject,\n selectIsNotFound,\n selectMappedEntry,\n selectRouteEntry,\n selectRouteEntryContentTypeId,\n selectRouteErrorMessage,\n selectRouteIsError,\n selectRouteLoading,\n selectRouteStatusCode,\n} from '../redux/selectors';\nimport { setNavigationPath } from '../redux/actions';\n\nimport {\n selectUserGroups,\n selectUserIsAuthenticated,\n} from '~/user/redux/selectors';\nimport { matchUserGroup } from '~/user/util/matchGroups';\n\nimport { toJS } from '~/util/ToJs';\nimport { Entry } from 'contensis-delivery-api/lib/models';\nimport { AppRootProps, RouteComponentProps, RouteLoaderProps } from '../routes';\n\nconst getTrimmedPath = path => {\n if (path !== '/') {\n const nextPath = path.replace(/\\/\\//, '/');\n const lastChar = nextPath[nextPath.length - 1];\n if (lastChar === '/') {\n return nextPath.substring(0, nextPath.length - 1);\n }\n }\n return path;\n};\n\ninterface IReduxProps {\n contentTypeId: string | null;\n entry: Entry | null;\n isError: boolean;\n isNotFound: boolean;\n isLoading: boolean;\n isLoggedIn: boolean;\n mappedEntry: any;\n projectId: string;\n setNavigationPath: typeof setNavigationPath;\n statePath: string;\n statusCode: any;\n statusText: string;\n userGroups: any;\n}\n\nconst RouteLoader = ({\n contentTypeId,\n entry,\n isError,\n isLoading,\n isLoggedIn,\n isNotFound,\n loadingComponent,\n mappedEntry,\n notFoundComponent,\n projectId,\n routes,\n setNavigationPath,\n statePath,\n statusCode,\n statusText,\n userGroups,\n withEvents,\n}: AppRootProps & RouteLoaderProps & IReduxProps) => {\n const location = useLocation();\n // Always ensure paths are trimmed of trailing slashes so urls are always unique\n const trimmedPath = getTrimmedPath(location.pathname);\n\n // Match any Static Routes a developer has defined\n const matchedStaticRoute = () =>\n matchRoutes(routes.StaticRoutes as RouteConfig[], location.pathname);\n const isStaticRoute = () => matchedStaticRoute().length > 0;\n\n const staticRoute = isStaticRoute() && matchedStaticRoute()[0];\n const routeRequiresLogin = staticRoute && staticRoute.route.requireLogin;\n\n const setPath = useCallback(() => {\n // Use serverPath to control the path we send to siteview node api to resolve a route\n let serverPath = '';\n if (staticRoute && staticRoute.match && staticRoute.match.isExact) {\n const { match, route } = staticRoute;\n\n if (route.path?.includes('*')) {\n // Send the whole url to api if we have matched route containing wildcard\n serverPath = match.url;\n } else if (typeof route.fetchNodeLevel === 'number') {\n // Send all url parts to a specified level to api\n serverPath = match.url\n .split('/')\n .splice(0, route.fetchNodeLevel + 1)\n .join('/');\n } else {\n // Send all non-parameterised url parts to api\n serverPath = (route.path as string)\n ?.split('/')\n .filter(p => !p.startsWith(':'))\n .join('/');\n }\n }\n\n setNavigationPath(\n serverPath || trimmedPath,\n location,\n staticRoute,\n withEvents,\n statePath,\n routes\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n setNavigationPath,\n // staticRoute,\n withEvents,\n location,\n routes,\n // statePath,\n trimmedPath,\n ]);\n\n if (typeof window == 'undefined') setPath();\n\n useEffect(() => {\n setPath();\n }, [location, setPath]);\n\n // Need to redirect when url endswith a /\n if (location.pathname.length > trimmedPath.length) {\n return <Redirect to={trimmedPath} />;\n }\n\n // Render any Static Routes a developer has defined\n if (isStaticRoute() && !(!isLoggedIn && routeRequiresLogin)) {\n if (matchUserGroup(userGroups, routeRequiresLogin))\n return renderRoutes(\n routes.StaticRoutes as RouteConfig[],\n {\n projectId,\n contentTypeId,\n entry,\n mappedEntry,\n isLoggedIn,\n } as RouteComponentProps\n );\n }\n\n // Render a supplied Loading component if the route\n // is not a static route and is in a loading state\n if (isLoading && !isNotFound && loadingComponent) {\n const LoadingComponent = loadingComponent;\n return <LoadingComponent />;\n }\n\n // Match any defined Content Type Mappings\n if (contentTypeId && !(!isLoggedIn && routeRequiresLogin)) {\n const MatchedComponent = routes.ContentTypeMappings.find(\n item => item.contentTypeID === contentTypeId\n );\n\n if (MatchedComponent && !(MatchedComponent.requireLogin && !isLoggedIn)) {\n if (matchUserGroup(userGroups, MatchedComponent.requireLogin))\n return (\n <MatchedComponent.component\n projectId={projectId}\n contentTypeId={contentTypeId}\n entry={entry}\n mappedEntry={mappedEntry}\n isLoggedIn={isLoggedIn}\n />\n );\n }\n }\n\n const NotFoundComponent = notFoundComponent ? notFoundComponent : NotFound;\n if (isNotFound || isError) {\n return (\n <Status code={statusCode}>\n <NotFoundComponent statusCode={statusCode} statusText={statusText} />\n </Status>\n );\n }\n\n return null;\n};\nconst mapStateToPropsMemoized = createSelector(\n selectRouteEntryContentTypeId,\n selectRouteEntry,\n selectRouteIsError,\n selectIsNotFound,\n selectRouteLoading,\n selectUserIsAuthenticated,\n selectMappedEntry,\n selectCurrentProject,\n selectCurrentPath,\n selectRouteStatusCode,\n selectRouteErrorMessage,\n selectUserGroups,\n (\n contentTypeId,\n entry,\n isError,\n isNotFound,\n isLoading,\n isLoggedIn,\n mappedEntry,\n projectId,\n statePath,\n statusCode,\n statusText,\n userGroups\n ) => ({\n contentTypeId,\n entry,\n isError,\n isNotFound,\n isLoading,\n isLoggedIn,\n mappedEntry,\n projectId,\n statePath,\n statusCode,\n statusText,\n userGroups,\n })\n);\n\n// const mapStateToProps = state => {\n// return {\n// contentTypeId: selectRouteEntryContentTypeId(state),\n// entry: selectRouteEntry(state),\n// isError: selectRouteIsError(state),\n// isNotFound: selectIsNotFound(state),\n// isLoading: selectRouteLoading(state),\n// isLoggedIn: selectUserIsAuthenticated(state),\n// mappedEntry: selectMappedEntry(state),\n// projectId: selectCurrentProject(state),\n// statePath: selectCurrentPath(state),\n// statusCode: selectRouteStatusCode(state),\n// statusText: selectRouteErrorMessage(state),\n// userGroups: selectUserGroups(state),\n// };\n// };\n\nconst mapDispatchToProps = {\n setNavigationPath,\n};\n\nexport default hot(module)(\n connect(mapStateToPropsMemoized, mapDispatchToProps)(toJS(RouteLoader))\n);\n"],"names":["NotFound","statusCode","statusText","React","background","color","fontSize","padding","Status","code","children","Route","staticContext","getTrimmedPath","path","nextPath","replace","lastChar","length","substring","RouteLoader","contentTypeId","entry","isError","isLoading","isLoggedIn","isNotFound","loadingComponent","mappedEntry","notFoundComponent","projectId","routes","setNavigationPath","statePath","userGroups","withEvents","location","useLocation","trimmedPath","pathname","matchedStaticRoute","matchRoutes","StaticRoutes","isStaticRoute","staticRoute","routeRequiresLogin","route","requireLogin","setPath","useCallback","serverPath","match","isExact","includes","url","fetchNodeLevel","split","splice","join","filter","p","startsWith","window","useEffect","Redirect","matchUserGroup","renderRoutes","LoadingComponent","MatchedComponent","ContentTypeMappings","find","item","contentTypeID","NotFoundComponent","mapStateToPropsMemoized","createSelector","selectRouteEntryContentTypeId","selectRouteEntry","selectRouteIsError","selectIsNotFound","selectRouteLoading","selectUserIsAuthenticated","selectMappedEntry","selectCurrentProject","selectCurrentPath","selectRouteStatusCode","selectRouteErrorMessage","selectUserGroups","mapDispatchToProps","hot","module","connect","toJS"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"RouteLoader-d4b4d320.js","sources":["../src/routing/components/NotFound.tsx","../src/routing/components/Status.tsx","../src/routing/components/RouteLoader.tsx"],"sourcesContent":["import React from 'react';\n\nconst NotFound = ({\n statusCode,\n statusText,\n}: {\n statusCode: number;\n statusText: string;\n}) => (\n <>\n <header>\n <h1>{statusCode || '404'} Page Not Found</h1>\n {statusText && (\n <h2\n style={{\n background: '#eee',\n color: '#666',\n fontSize: '100%',\n padding: '10px',\n }}\n >\n {statusText}\n </h2>\n )}\n </header>\n </>\n);\n\nexport default NotFound;\n","import React, { PropsWithChildren } from 'react';\nimport { Route } from 'react-router-dom';\n\nexport const Status = ({\n code,\n children,\n}: PropsWithChildren<{ code: number }>) => {\n return (\n <Route\n render={({ staticContext }) => {\n if (staticContext) staticContext.statusCode = code;\n return children;\n }}\n />\n );\n};\n","import React, { useEffect, useCallback } from 'react';\nimport { connect } from 'react-redux';\nimport { hot } from 'react-hot-loader';\nimport { Redirect, useLocation } from 'react-router-dom';\nimport { renderRoutes, matchRoutes, RouteConfig } from 'react-router-config';\nimport { createSelector } from 'reselect';\n\nimport NotFound from './NotFound';\nimport { Status } from './Status';\n\nimport {\n selectCurrentPath,\n selectCurrentProject,\n selectIsNotFound,\n selectMappedEntry,\n selectRouteEntry,\n selectRouteEntryContentTypeId,\n selectRouteErrorMessage,\n selectRouteIsError,\n selectRouteLoading,\n selectRouteStatusCode,\n} from '../redux/selectors';\nimport { setNavigationPath } from '../redux/actions';\n\nimport {\n selectUserGroups,\n selectUserIsAuthenticated,\n} from '~/user/redux/selectors';\nimport { matchUserGroup } from '~/user/util/matchGroups';\n\nimport { toJS } from '~/util/ToJs';\nimport { Entry } from 'contensis-delivery-api/lib/models';\nimport { AppRootProps, RouteComponentProps, RouteLoaderProps } from '../routes';\n\nconst getTrimmedPath = path => {\n if (path !== '/') {\n const nextPath = path.replace(/\\/\\//, '/');\n const lastChar = nextPath[nextPath.length - 1];\n if (lastChar === '/') {\n return nextPath.substring(0, nextPath.length - 1);\n }\n }\n return path;\n};\n\ninterface IReduxProps {\n contentTypeId: string | null;\n entry: Entry | null;\n isError: boolean;\n isNotFound: boolean;\n isLoading: boolean;\n isLoggedIn: boolean;\n mappedEntry: any;\n projectId: string;\n setNavigationPath: typeof setNavigationPath;\n statePath: string;\n statusCode: any;\n statusText: string;\n userGroups: any;\n}\n\nconst RouteLoader = ({\n contentTypeId,\n entry,\n isError,\n isLoading,\n isLoggedIn,\n isNotFound,\n loadingComponent,\n mappedEntry,\n notFoundComponent,\n projectId,\n routes,\n setNavigationPath,\n statePath,\n statusCode,\n statusText,\n userGroups,\n withEvents,\n}: AppRootProps & RouteLoaderProps & IReduxProps) => {\n const location = useLocation();\n // Always ensure paths are trimmed of trailing slashes so urls are always unique\n const trimmedPath = getTrimmedPath(location.pathname);\n\n // Match any Static Routes a developer has defined\n const matchedStaticRoute = () =>\n matchRoutes(routes.StaticRoutes as RouteConfig[], location.pathname);\n const isStaticRoute = () => matchedStaticRoute().length > 0;\n\n const staticRoute = isStaticRoute() && matchedStaticRoute()[0];\n const routeRequiresLogin = staticRoute && staticRoute.route.requireLogin;\n\n const setPath = useCallback(() => {\n // Use serverPath to control the path we send to siteview node api to resolve a route\n let serverPath = '';\n if (staticRoute && staticRoute.match && staticRoute.match.isExact) {\n const { match, route } = staticRoute;\n\n if (route.path?.includes('*')) {\n // Send the whole url to api if we have matched route containing wildcard\n serverPath = match.url;\n } else if (typeof route.fetchNodeLevel === 'number') {\n // Send all url parts to a specified level to api\n serverPath = match.url\n .split('/')\n .splice(0, route.fetchNodeLevel + 1)\n .join('/');\n } else {\n // Send all non-parameterised url parts to api\n serverPath = (route.path as string)\n ?.split('/')\n .filter(p => !p.startsWith(':'))\n .join('/');\n }\n }\n\n setNavigationPath(\n serverPath || trimmedPath,\n location,\n staticRoute,\n withEvents,\n statePath,\n routes\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n setNavigationPath,\n // staticRoute,\n withEvents,\n location,\n routes,\n // statePath,\n trimmedPath,\n ]);\n\n if (typeof window == 'undefined') setPath();\n\n useEffect(() => {\n setPath();\n }, [location, setPath]);\n\n // Need to redirect when url endswith a /\n if (location.pathname.length > trimmedPath.length) {\n return <Redirect to={trimmedPath} />;\n }\n\n // Render any Static Routes a developer has defined\n if (isStaticRoute() && !(!isLoggedIn && routeRequiresLogin)) {\n if (matchUserGroup(userGroups, routeRequiresLogin))\n return renderRoutes(\n routes.StaticRoutes as RouteConfig[],\n {\n projectId,\n contentTypeId,\n entry,\n mappedEntry,\n isLoggedIn,\n } as RouteComponentProps\n );\n }\n\n // Render a supplied Loading component if the route\n // is not a static route and is in a loading state\n if (isLoading && !isNotFound && loadingComponent) {\n const LoadingComponent = loadingComponent;\n return <LoadingComponent />;\n }\n\n // Match any defined Content Type Mappings\n if (contentTypeId && !(!isLoggedIn && routeRequiresLogin)) {\n const MatchedComponent = routes.ContentTypeMappings.find(\n item => item.contentTypeID === contentTypeId\n );\n\n if (MatchedComponent && !(MatchedComponent.requireLogin && !isLoggedIn)) {\n if (matchUserGroup(userGroups, MatchedComponent.requireLogin))\n return (\n <MatchedComponent.component\n projectId={projectId}\n contentTypeId={contentTypeId}\n entry={entry}\n mappedEntry={mappedEntry}\n isLoggedIn={isLoggedIn}\n />\n );\n }\n }\n\n const NotFoundComponent = notFoundComponent ? notFoundComponent : NotFound;\n if (isNotFound || isError) {\n return (\n <Status code={statusCode}>\n <NotFoundComponent statusCode={statusCode} statusText={statusText} />\n </Status>\n );\n }\n\n return null;\n};\nconst mapStateToPropsMemoized = createSelector(\n selectRouteEntryContentTypeId,\n selectRouteEntry,\n selectRouteIsError,\n selectIsNotFound,\n selectRouteLoading,\n selectUserIsAuthenticated,\n selectMappedEntry,\n selectCurrentProject,\n selectCurrentPath,\n selectRouteStatusCode,\n selectRouteErrorMessage,\n selectUserGroups,\n (\n contentTypeId,\n entry,\n isError,\n isNotFound,\n isLoading,\n isLoggedIn,\n mappedEntry,\n projectId,\n statePath,\n statusCode,\n statusText,\n userGroups\n ) => ({\n contentTypeId,\n entry,\n isError,\n isNotFound,\n isLoading,\n isLoggedIn,\n mappedEntry,\n projectId,\n statePath,\n statusCode,\n statusText,\n userGroups,\n })\n);\n\n// const mapStateToProps = state => {\n// return {\n// contentTypeId: selectRouteEntryContentTypeId(state),\n// entry: selectRouteEntry(state),\n// isError: selectRouteIsError(state),\n// isNotFound: selectIsNotFound(state),\n// isLoading: selectRouteLoading(state),\n// isLoggedIn: selectUserIsAuthenticated(state),\n// mappedEntry: selectMappedEntry(state),\n// projectId: selectCurrentProject(state),\n// statePath: selectCurrentPath(state),\n// statusCode: selectRouteStatusCode(state),\n// statusText: selectRouteErrorMessage(state),\n// userGroups: selectUserGroups(state),\n// };\n// };\n\nconst mapDispatchToProps = {\n setNavigationPath,\n};\n\nexport default hot(module)(\n connect(mapStateToPropsMemoized, mapDispatchToProps)(toJS(RouteLoader))\n);\n"],"names":["NotFound","statusCode","statusText","background","color","fontSize","padding","Status","code","children","staticContext","getTrimmedPath","path","nextPath","replace","lastChar","length","substring","RouteLoader","contentTypeId","entry","isError","isLoading","isLoggedIn","isNotFound","loadingComponent","mappedEntry","notFoundComponent","projectId","routes","setNavigationPath","statePath","userGroups","withEvents","location","useLocation","trimmedPath","pathname","matchedStaticRoute","matchRoutes","StaticRoutes","isStaticRoute","staticRoute","routeRequiresLogin","route","requireLogin","setPath","useCallback","serverPath","match","isExact","includes","url","fetchNodeLevel","split","splice","join","filter","p","startsWith","window","useEffect","matchUserGroup","renderRoutes","LoadingComponent","MatchedComponent","ContentTypeMappings","find","item","contentTypeID","NotFoundComponent","mapStateToPropsMemoized","createSelector","selectRouteEntryContentTypeId","selectRouteEntry","selectRouteIsError","selectIsNotFound","selectRouteLoading","selectUserIsAuthenticated","selectMappedEntry","selectCurrentProject","selectCurrentPath","selectRouteStatusCode","selectRouteErrorMessage","selectUserGroups","mapDispatchToProps","hot","module","connect","toJS"],"mappings":"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"}