@zengenti/contensis-react-base 2.5.0 → 2.5.1-beta.0

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.
package/package-lock.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zengenti/contensis-react-base",
3
- "version": "2.5.0",
3
+ "version": "2.5.1-beta.0",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
@@ -3460,14 +3460,13 @@
3460
3460
  }
3461
3461
  },
3462
3462
  "@hot-loader/react-dom": {
3463
- "version": "16.11.0",
3464
- "resolved": "https://registry.npmjs.org/@hot-loader/react-dom/-/react-dom-16.11.0.tgz",
3465
- "integrity": "sha512-cIOVB8YgT4EVCNiXK+gGuYl6adW/TKlW3N7GvgY5QgpL2NTWagF/oJxVscHSdR3O7NjJsoxdseB5spqwCHNIhA==",
3463
+ "version": "17.0.1",
3464
+ "resolved": "https://registry.npmjs.org/@hot-loader/react-dom/-/react-dom-17.0.1.tgz",
3465
+ "integrity": "sha512-QttzEibkIFkl/WV1dsLXg73YIweNo9ySbB0/26068RqFGWyv7pKyictWsaQXqSj1y66/BDn3kglCHgroGrv3vA==",
3466
3466
  "requires": {
3467
3467
  "loose-envify": "^1.1.0",
3468
3468
  "object-assign": "^4.1.1",
3469
- "prop-types": "^15.6.2",
3470
- "scheduler": "^0.17.0"
3469
+ "scheduler": "^0.20.1"
3471
3470
  }
3472
3471
  },
3473
3472
  "@humanwhocodes/config-array": {
@@ -3568,6 +3567,58 @@
3568
3567
  }
3569
3568
  }
3570
3569
  },
3570
+ "@loadable/babel-plugin": {
3571
+ "version": "5.13.2",
3572
+ "resolved": "https://registry.npmjs.org/@loadable/babel-plugin/-/babel-plugin-5.13.2.tgz",
3573
+ "integrity": "sha512-vSZUVeTH1S1sDbk8Tzft0plZSkN7W4zmVR5w/Bmy4UmvBiu9lin7ztrDpoUTUzxpoups+OJbTc/OosvN0aMXWg==",
3574
+ "dev": true,
3575
+ "requires": {
3576
+ "@babel/plugin-syntax-dynamic-import": "^7.7.4"
3577
+ }
3578
+ },
3579
+ "@loadable/component": {
3580
+ "version": "5.15.0",
3581
+ "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.15.0.tgz",
3582
+ "integrity": "sha512-g63rQzypPOZi0BeGsK4ST2MYhsFR+i7bhL8k/McUoWDNMDuTTdUlQ2GACKxqh5sI/dNC/6nVoPrycMnSylnAgQ==",
3583
+ "requires": {
3584
+ "@babel/runtime": "^7.7.7",
3585
+ "hoist-non-react-statics": "^3.3.1",
3586
+ "react-is": "^16.12.0"
3587
+ },
3588
+ "dependencies": {
3589
+ "hoist-non-react-statics": {
3590
+ "version": "3.3.2",
3591
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
3592
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
3593
+ "requires": {
3594
+ "react-is": "^16.7.0"
3595
+ }
3596
+ },
3597
+ "react-is": {
3598
+ "version": "16.13.1",
3599
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
3600
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
3601
+ }
3602
+ }
3603
+ },
3604
+ "@loadable/server": {
3605
+ "version": "5.15.1",
3606
+ "resolved": "https://registry.npmjs.org/@loadable/server/-/server-5.15.1.tgz",
3607
+ "integrity": "sha512-LdwzskjMtCMDJoz73JhbkBzTfaopx8U/Bfb0uKkqTxrsjH0uC+h4+cPo5mqKYyHz/dwPRf7aJsvQNcLQZdKHHw==",
3608
+ "requires": {
3609
+ "lodash": "^4.17.15"
3610
+ }
3611
+ },
3612
+ "@mrmlnc/readdir-enhanced": {
3613
+ "version": "2.2.1",
3614
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
3615
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
3616
+ "dev": true,
3617
+ "requires": {
3618
+ "call-me-maybe": "^1.0.1",
3619
+ "glob-to-regexp": "^0.3.0"
3620
+ }
3621
+ },
3571
3622
  "@nicolo-ribaudo/chokidar-2": {
3572
3623
  "version": "2.1.8-no-fsevents.2",
3573
3624
  "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.2.tgz",
@@ -4565,6 +4616,15 @@
4565
4616
  "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
4566
4617
  "dev": true
4567
4618
  },
4619
+ "@types/loadable__component": {
4620
+ "version": "5.13.4",
4621
+ "resolved": "https://registry.npmjs.org/@types/loadable__component/-/loadable__component-5.13.4.tgz",
4622
+ "integrity": "sha512-YhoCCxyuvP2XeZNbHbi8Wb9EMaUJuA2VGHxJffcQYrJKIKSkymJrhbzsf9y4zpTmr5pExAAEh5hbF628PAZ8Dg==",
4623
+ "dev": true,
4624
+ "requires": {
4625
+ "@types/react": "*"
4626
+ }
4627
+ },
4568
4628
  "@types/mime": {
4569
4629
  "version": "1.3.2",
4570
4630
  "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
@@ -4628,9 +4688,9 @@
4628
4688
  }
4629
4689
  },
4630
4690
  "@types/react": {
4631
- "version": "17.0.19",
4632
- "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.19.tgz",
4633
- "integrity": "sha512-sX1HisdB1/ZESixMTGnMxH9TDe8Sk709734fEQZzCV/4lSu9kJCPbo2PbTRoZM+53Pp0P10hYVyReUueGwUi4A==",
4691
+ "version": "17.0.21",
4692
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.21.tgz",
4693
+ "integrity": "sha512-GzzXCpOthOjXvrAUFQwU/svyxu658cwu00Q9ugujS4qc1zXgLFaO0kS2SLOaMWLt2Jik781yuHCWB7UcYdGAeQ==",
4634
4694
  "dev": true,
4635
4695
  "requires": {
4636
4696
  "@types/prop-types": "*",
@@ -7769,9 +7829,9 @@
7769
7829
  }
7770
7830
  },
7771
7831
  "csstype": {
7772
- "version": "3.0.8",
7773
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz",
7774
- "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==",
7832
+ "version": "3.0.9",
7833
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz",
7834
+ "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==",
7775
7835
  "dev": true
7776
7836
  },
7777
7837
  "cuint": {
@@ -13415,13 +13475,12 @@
13415
13475
  }
13416
13476
  },
13417
13477
  "react": {
13418
- "version": "16.11.0",
13419
- "resolved": "https://registry.npmjs.org/react/-/react-16.11.0.tgz",
13420
- "integrity": "sha512-M5Y8yITaLmU0ynd0r1Yvfq98Rmll6q8AxaEe88c8e7LxO8fZ2cNgmFt0aGAS9wzf1Ao32NKXtCl+/tVVtkxq6g==",
13478
+ "version": "17.0.2",
13479
+ "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
13480
+ "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
13421
13481
  "requires": {
13422
13482
  "loose-envify": "^1.1.0",
13423
- "object-assign": "^4.1.1",
13424
- "prop-types": "^15.6.2"
13483
+ "object-assign": "^4.1.1"
13425
13484
  }
13426
13485
  },
13427
13486
  "react-colorful": {
@@ -13431,14 +13490,13 @@
13431
13490
  "dev": true
13432
13491
  },
13433
13492
  "react-dom": {
13434
- "version": "16.11.0",
13435
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.11.0.tgz",
13436
- "integrity": "sha512-nrRyIUE1e7j8PaXSPtyRKtz+2y9ubW/ghNgqKFHHAHaeP0fpF5uXR+sq8IMRHC+ZUxw7W9NyCDTBtwWxvkb0iA==",
13493
+ "version": "17.0.2",
13494
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
13495
+ "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
13437
13496
  "requires": {
13438
13497
  "loose-envify": "^1.1.0",
13439
13498
  "object-assign": "^4.1.1",
13440
- "prop-types": "^15.6.2",
13441
- "scheduler": "^0.17.0"
13499
+ "scheduler": "^0.20.2"
13442
13500
  }
13443
13501
  },
13444
13502
  "react-fast-compare": {
@@ -13490,6 +13548,14 @@
13490
13548
  "prop-types": "^15.5.0"
13491
13549
  }
13492
13550
  },
13551
+ "react-loadable-ssr-addon": {
13552
+ "version": "1.0.1",
13553
+ "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon/-/react-loadable-ssr-addon-1.0.1.tgz",
13554
+ "integrity": "sha512-bQz8MK19EFWKrhU/X7cItEFvvKnDcXbfiAUL56Y8zK5ii4qeqe1v9XndvHpG4pvP+giVp7VYNt2kFM97dIgNag==",
13555
+ "requires": {
13556
+ "@babel/runtime": "^7.10.3"
13557
+ }
13558
+ },
13493
13559
  "react-popper": {
13494
13560
  "version": "2.2.5",
13495
13561
  "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.2.5.tgz",
@@ -14299,9 +14365,9 @@
14299
14365
  "dev": true
14300
14366
  },
14301
14367
  "scheduler": {
14302
- "version": "0.17.0",
14303
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.17.0.tgz",
14304
- "integrity": "sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==",
14368
+ "version": "0.20.2",
14369
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
14370
+ "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
14305
14371
  "requires": {
14306
14372
  "loose-envify": "^1.1.0",
14307
14373
  "object-assign": "^4.1.1"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zengenti/contensis-react-base",
3
- "version": "2.5.0",
3
+ "version": "2.5.1-beta.0",
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.",
@@ -10,6 +10,7 @@
10
10
  "scripts": {
11
11
  "prepare": "ts-patch install -s",
12
12
  "start": "npm run roll:watch",
13
+ "debug:server": "npm start",
13
14
  "build": "npm run clean:lib && tsc && npm run copymodels && npm run roll:lib",
14
15
  "build:lib": "npm i zengenti-search-package zengenti-forms-package && npm run build",
15
16
  "roll:lib": "cross-env NODE_ENV=production rollup -c rollup/rollup.config.lib.js",
@@ -40,6 +41,7 @@
40
41
  "@babel/preset-react": "^7.14.5",
41
42
  "@babel/preset-typescript": "^7.15.0",
42
43
  "@babel/runtime": "^7.15.3",
44
+ "@loadable/babel-plugin": "^5.13.2",
43
45
  "@rollup/plugin-alias": "^3.1.1",
44
46
  "@rollup/plugin-babel": "^5.2.1",
45
47
  "@rollup/plugin-commonjs": "^15.0.0",
@@ -48,8 +50,10 @@
48
50
  "@types/babel__template": "^7.4.1",
49
51
  "@types/events": "^3.0.0",
50
52
  "@types/express": "^4.17.13",
53
+ "@types/loadable__component": "^5.13.4",
51
54
  "@types/node": "^16.7.10",
52
55
  "@types/query-string": "^5.1.0",
56
+ "@types/react": "^17.0.21",
53
57
  "@types/react-redux": "^7.1.18",
54
58
  "@types/react-router-config": "^5.0.3",
55
59
  "@types/react-router-dom": "^5.1.8",
@@ -87,7 +91,9 @@
87
91
  "zengenti-search-package": "git+https://gitlab+deploy-token-5:XKRGRE1p2PrFAxnWwLNz@gitlab.zengenti.com/zengenti-packages/search.git"
88
92
  },
89
93
  "dependencies": {
90
- "@hot-loader/react-dom": "16.11.0",
94
+ "@hot-loader/react-dom": "^17.0.1",
95
+ "@loadable/component": "^5.15.0",
96
+ "@loadable/server": "^5.15.1",
91
97
  "app-root-path": "^3.0.0",
92
98
  "await-to-js": "^2.1.1",
93
99
  "contensis-delivery-api": "^1.1.7",
@@ -106,11 +112,12 @@
106
112
  "oidc-client": "^1.5.4",
107
113
  "patch-package": "^6.2.2",
108
114
  "query-string": "^5.1.1",
109
- "react": "16.11.0",
110
- "react-dom": "16.11.0",
115
+ "react": "^17.0.2",
116
+ "react-dom": "^17.0.2",
111
117
  "react-helmet": "5.2.1",
112
118
  "react-hot-loader": "^4.11.0",
113
119
  "react-loadable": "^5.5.0",
120
+ "react-loadable-ssr-addon": "^1.0.1",
114
121
  "react-redux": "7.1.0",
115
122
  "react-router-config": "^5.1.1",
116
123
  "react-router-dom": "^5.1.1",
@@ -1 +0,0 @@
1
- {"version":3,"file":"RouteLoader-f67bbf9e.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 } from 'react-router-config';\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, 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;\n entry: Entry;\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, 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\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(routes.StaticRoutes, {\n projectId,\n contentTypeId,\n entry,\n mappedEntry,\n isLoggedIn,\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 // debugger;\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};\n\nconst 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(mapStateToProps, 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","mapStateToProps","state","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-dedcc835.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 } from 'react-router-config';\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, 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;\n entry: Entry;\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, 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\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(routes.StaticRoutes, {\n projectId,\n contentTypeId,\n entry,\n mappedEntry,\n isLoggedIn,\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 // debugger;\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};\n\nconst 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(mapStateToProps, 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","mapStateToProps","state","selectRouteEntryContentTypeId","selectRouteEntry","selectRouteIsError","selectIsNotFound","selectRouteLoading","selectUserIsAuthenticated","selectMappedEntry","selectCurrentProject","selectCurrentPath","selectRouteStatusCode","selectRouteErrorMessage","selectUserGroups","mapDispatchToProps","hot","module","connect","toJS"],"mappings":"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"}