@blaze-cms/nextjs-tools 0.146.0-node18-tooltips.32 → 0.146.0-node18-core-styles-tooltips.41
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/CHANGELOG.md +105 -29
- package/README.md +7 -8
- package/example.env +1 -1
- package/lib/components/HashObserver.js +15 -0
- package/lib/components/HashObserver.js.map +1 -0
- package/lib/components/index.js +7 -0
- package/lib/components/index.js.map +1 -1
- package/lib/helpers/check-url.js +1 -1
- package/lib/helpers/check-url.js.map +1 -1
- package/lib/hoc/withBlaze.js +2 -1
- package/lib/hoc/withBlaze.js.map +1 -1
- package/lib/hooks/use-hash-observer.js +107 -0
- package/lib/hooks/use-hash-observer.js.map +1 -0
- package/lib-es/components/HashObserver.js +7 -0
- package/lib-es/components/HashObserver.js.map +1 -0
- package/lib-es/components/index.js +2 -1
- package/lib-es/components/index.js.map +1 -1
- package/lib-es/helpers/check-url.js +1 -1
- package/lib-es/helpers/check-url.js.map +1 -1
- package/lib-es/hoc/withBlaze.js +2 -1
- package/lib-es/hoc/withBlaze.js.map +1 -1
- package/lib-es/hooks/use-hash-observer.js +94 -0
- package/lib-es/hooks/use-hash-observer.js.map +1 -0
- package/package.json +18 -18
- package/src/components/HashObserver.js +8 -0
- package/src/components/index.js +2 -1
- package/src/helpers/check-url.js +1 -1
- package/src/hoc/withBlaze.js +2 -0
- package/src/hooks/use-hash-observer.js +119 -0
- package/tests/unit/src/hooks/use-hash-observer.test.js +260 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.object.define-property.js");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
require("core-js/modules/es.array.index-of.js");
|
|
10
|
+
require("core-js/modules/es.array.slice.js");
|
|
11
|
+
require("core-js/modules/es.string.starts-with.js");
|
|
12
|
+
require("core-js/modules/web.timers.js");
|
|
13
|
+
var _react = require("react");
|
|
14
|
+
var _router = _interopRequireDefault(require("next/router"));
|
|
15
|
+
var DEFAULT_TIMEOUT = 3000;
|
|
16
|
+
function useHashObserver() {
|
|
17
|
+
var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_TIMEOUT;
|
|
18
|
+
(0, _react.useEffect)(function () {
|
|
19
|
+
if (typeof window === 'undefined') return undefined;
|
|
20
|
+
var observer = null;
|
|
21
|
+
var timeoutId = null;
|
|
22
|
+
var currentHash = null;
|
|
23
|
+
var isObserving = false;
|
|
24
|
+
var scrollToElement = function scrollToElement(hash) {
|
|
25
|
+
if (!hash) return false;
|
|
26
|
+
var id = hash.startsWith('#') ? hash.slice(1) : hash;
|
|
27
|
+
var element = document.getElementById(id);
|
|
28
|
+
if (element) {
|
|
29
|
+
element.scrollIntoView();
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
return false;
|
|
33
|
+
};
|
|
34
|
+
var stopObserving = function stopObserving() {
|
|
35
|
+
if (observer) {
|
|
36
|
+
observer.disconnect();
|
|
37
|
+
observer = null;
|
|
38
|
+
}
|
|
39
|
+
if (timeoutId) {
|
|
40
|
+
clearTimeout(timeoutId);
|
|
41
|
+
timeoutId = null;
|
|
42
|
+
}
|
|
43
|
+
isObserving = false;
|
|
44
|
+
currentHash = null;
|
|
45
|
+
};
|
|
46
|
+
var startObserving = function startObserving(hash) {
|
|
47
|
+
if (isObserving) {
|
|
48
|
+
stopObserving();
|
|
49
|
+
}
|
|
50
|
+
currentHash = hash;
|
|
51
|
+
isObserving = true;
|
|
52
|
+
if (scrollToElement(hash)) {
|
|
53
|
+
stopObserving();
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
observer = new MutationObserver(function () {
|
|
57
|
+
if (scrollToElement(currentHash)) {
|
|
58
|
+
stopObserving();
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
var targetNode = document.getElementById('__next') || document.getElementById('root') || document.body;
|
|
62
|
+
observer.observe(targetNode, {
|
|
63
|
+
childList: true,
|
|
64
|
+
subtree: true
|
|
65
|
+
});
|
|
66
|
+
timeoutId = setTimeout(function () {
|
|
67
|
+
stopObserving();
|
|
68
|
+
}, timeout);
|
|
69
|
+
};
|
|
70
|
+
var handleRouteChange = function handleRouteChange(url) {
|
|
71
|
+
var hashIndex = url.indexOf('#');
|
|
72
|
+
if (hashIndex === -1) {
|
|
73
|
+
stopObserving();
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
var hash = url.slice(hashIndex);
|
|
77
|
+
if (hash) {
|
|
78
|
+
startObserving(hash);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
var handleHashChange = function handleHashChange(url) {
|
|
82
|
+
var hashIndex = url.indexOf('#');
|
|
83
|
+
if (hashIndex === -1) {
|
|
84
|
+
stopObserving();
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
var hash = url.slice(hashIndex);
|
|
88
|
+
if (hash) {
|
|
89
|
+
startObserving(hash);
|
|
90
|
+
} else {
|
|
91
|
+
stopObserving();
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
_router["default"].events.on('routeChangeComplete', handleRouteChange);
|
|
95
|
+
_router["default"].events.on('hashChangeComplete', handleHashChange);
|
|
96
|
+
if (window.location.hash) {
|
|
97
|
+
startObserving(window.location.hash);
|
|
98
|
+
}
|
|
99
|
+
return function () {
|
|
100
|
+
stopObserving();
|
|
101
|
+
_router["default"].events.off('routeChangeComplete', handleRouteChange);
|
|
102
|
+
_router["default"].events.off('hashChangeComplete', handleHashChange);
|
|
103
|
+
};
|
|
104
|
+
}, [timeout]);
|
|
105
|
+
}
|
|
106
|
+
var _default = exports["default"] = useHashObserver;
|
|
107
|
+
//# sourceMappingURL=use-hash-observer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-hash-observer.js","names":["_react","require","_router","_interopRequireDefault","DEFAULT_TIMEOUT","useHashObserver","timeout","arguments","length","undefined","useEffect","window","observer","timeoutId","currentHash","isObserving","scrollToElement","hash","id","startsWith","slice","element","document","getElementById","scrollIntoView","stopObserving","disconnect","clearTimeout","startObserving","MutationObserver","targetNode","body","observe","childList","subtree","setTimeout","handleRouteChange","url","hashIndex","indexOf","handleHashChange","Router","events","on","location","off","_default","exports"],"sources":["../../src/hooks/use-hash-observer.js"],"sourcesContent":["import { useEffect } from 'react';\nimport Router from 'next/router';\n\nconst DEFAULT_TIMEOUT = 3000;\n\nfunction useHashObserver(timeout = DEFAULT_TIMEOUT) {\n useEffect(\n () => {\n if (typeof window === 'undefined') return undefined;\n\n let observer = null;\n let timeoutId = null;\n let currentHash = null;\n let isObserving = false;\n\n const scrollToElement = hash => {\n if (!hash) return false;\n\n const id = hash.startsWith('#') ? hash.slice(1) : hash;\n const element = document.getElementById(id);\n\n if (element) {\n element.scrollIntoView();\n return true;\n }\n\n return false;\n };\n\n const stopObserving = () => {\n if (observer) {\n observer.disconnect();\n observer = null;\n }\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n isObserving = false;\n currentHash = null;\n };\n\n const startObserving = hash => {\n if (isObserving) {\n stopObserving();\n }\n\n currentHash = hash;\n isObserving = true;\n\n if (scrollToElement(hash)) {\n stopObserving();\n return;\n }\n\n observer = new MutationObserver(() => {\n if (scrollToElement(currentHash)) {\n stopObserving();\n }\n });\n\n const targetNode =\n document.getElementById('__next') || document.getElementById('root') || document.body;\n observer.observe(targetNode, {\n childList: true,\n subtree: true\n });\n\n timeoutId = setTimeout(() => {\n stopObserving();\n }, timeout);\n };\n\n const handleRouteChange = url => {\n const hashIndex = url.indexOf('#');\n if (hashIndex === -1) {\n stopObserving();\n return;\n }\n\n const hash = url.slice(hashIndex);\n if (hash) {\n startObserving(hash);\n }\n };\n\n const handleHashChange = url => {\n const hashIndex = url.indexOf('#');\n if (hashIndex === -1) {\n stopObserving();\n return;\n }\n\n const hash = url.slice(hashIndex);\n if (hash) {\n startObserving(hash);\n } else {\n stopObserving();\n }\n };\n\n Router.events.on('routeChangeComplete', handleRouteChange);\n Router.events.on('hashChangeComplete', handleHashChange);\n\n if (window.location.hash) {\n startObserving(window.location.hash);\n }\n\n return () => {\n stopObserving();\n Router.events.off('routeChangeComplete', handleRouteChange);\n Router.events.off('hashChangeComplete', handleHashChange);\n };\n },\n [timeout]\n );\n}\n\nexport default useHashObserver;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HashObserver.js","names":["useHashObserver","HashObserver"],"sources":["../../src/components/HashObserver.js"],"sourcesContent":["import useHashObserver from '../hooks/use-hash-observer';\n\nfunction HashObserver() {\n useHashObserver();\n return null;\n}\n\nexport default HashObserver;\n"],"mappings":"AAAA,OAAOA,eAAe,MAAM,4BAA4B;AAExD,SAASC,YAAYA,CAAA,EAAG;EACtBD,eAAe,CAAC,CAAC;EACjB,OAAO,IAAI;AACb;AAEA,eAAeC,YAAY","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["DebugSidebar"],"sources":["../../src/components/index.js"],"sourcesContent":["import DebugSidebar from './DebugSidebar';\n\nexport { DebugSidebar };\n"],"mappings":"AAAA,OAAOA,YAAY,MAAM,gBAAgB;AAEzC,
|
|
1
|
+
{"version":3,"file":"index.js","names":["DebugSidebar","HashObserver"],"sources":["../../src/components/index.js"],"sourcesContent":["import DebugSidebar from './DebugSidebar';\nimport HashObserver from './HashObserver';\n\nexport { DebugSidebar, HashObserver };\n"],"mappings":"AAAA,OAAOA,YAAY,MAAM,gBAAgB;AACzC,OAAOC,YAAY,MAAM,gBAAgB;AAEzC,SAASD,YAAY,EAAEC,YAAY","ignoreList":[]}
|
|
@@ -11,7 +11,7 @@ import checkPreviewUrl from './check-preview-url';
|
|
|
11
11
|
import handleStaticRoutes from './handle-static-routes';
|
|
12
12
|
import getPageData from './get-page-data';
|
|
13
13
|
import getRootSelectorClasses from './get-root-selector-classes';
|
|
14
|
-
const getRootClassesLimit = () => Number(process.env.BLAZE_ROOT_SELECTOR_CLASSES_LIMIT);
|
|
14
|
+
const getRootClassesLimit = () => Number(process.env.BLAZE_ROOT_SELECTOR_CLASSES_LIMIT || 1);
|
|
15
15
|
const checkUrl = async props => {
|
|
16
16
|
const {
|
|
17
17
|
asPath,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-url.js","names":["parseUrl","getUnpublishedEntityName","checkAccessToken","HTTPS","DOUBLE_SLASH","COLON","NOT_FOUND_STATUS_CODE","BLAZE_X_FRAME_OPTIONS_DEFAULT","ROUTE_REGEX","ERROR_URLS","checkUrlQuery","checkParent","checkPreviewUrl","handleStaticRoutes","getPageData","getRootSelectorClasses","getRootClassesLimit","Number","process","env","BLAZE_ROOT_SELECTOR_CLASSES_LIMIT","checkUrl","props","asPath","apolloClient","res","req","query","blazeApp","disableSsr","fullUrl","getFullUrl","url","BLAZE_STATUS_URL","isStatusPage","handler","getHandler","setHeader","BLAZE_X_FRAME_OPTIONS","getHeader","BLAZE_CACHE_CONTROL_HEADER","previewData","_objectSpread","Object","keys","cache","extract","length","getPreviewData","urlCheckOptions","result","doUrlCheck","handle404Error","pageData","rootSelectorClasses","isPreview","getHost","headers","BLAZE_FRONTEND_HOST","host","location","protocol","hostname","port","window","urlPort","args","errorCheckCode","test","Error","data","itemId","itemEntity","urlTo","variables","setCustomCacheControlHeaders","handleRedirect","events","emit","message","statusCode","err","handleUrlError","handleError","error","networkError","writeHead","write","end","graphQLErrors","errorCode","errorMessage","customError","redirectUrl","BLAZE_DISABLE_REDIRECT_WITH_QUERY","queryString","split","doRedirect","cacheControlMaxAge","Location","href","redirecting","custom404","parentUrl","parentPATH"],"sources":["../../src/helpers/check-url.js"],"sourcesContent":["import { parseUrl } from 'query-string';\nimport { getUnpublishedEntityName } from '@blaze-cms/react-page-builder';\nimport { checkAccessToken } from '@blaze-cms/core-auth-ui';\nimport {\n HTTPS,\n DOUBLE_SLASH,\n COLON,\n NOT_FOUND_STATUS_CODE,\n BLAZE_X_FRAME_OPTIONS_DEFAULT,\n ROUTE_REGEX,\n ERROR_URLS\n} from '../constants';\nimport { checkUrlQuery } from '../application/query';\nimport checkParent from './check-parent';\nimport checkPreviewUrl from './check-preview-url';\nimport handleStaticRoutes from './handle-static-routes';\nimport getPageData from './get-page-data';\nimport getRootSelectorClasses from './get-root-selector-classes';\n\nconst getRootClassesLimit = () => Number(process.env.BLAZE_ROOT_SELECTOR_CLASSES_LIMIT);\n\nconst checkUrl = async props => {\n const { asPath, apolloClient, res, req, query, blazeApp, disableSsr } = props;\n const fullUrl = getFullUrl(req, asPath);\n const { url } = parseUrl(asPath);\n\n if (process.env.BLAZE_STATUS_URL && url === process.env.BLAZE_STATUS_URL) {\n return { isStatusPage: true };\n }\n\n if (res) {\n const handler = handleStaticRoutes.getHandler(asPath);\n\n res.setHeader(\n 'X-Frame-Options',\n process.env.BLAZE_X_FRAME_OPTIONS || BLAZE_X_FRAME_OPTIONS_DEFAULT\n );\n\n if (!res.getHeader('Cache-Control')) {\n res.setHeader('Cache-Control', process.env.BLAZE_CACHE_CONTROL_HEADER || ' ');\n }\n\n if (handler) {\n return handler(props);\n }\n }\n\n const previewData = checkPreviewUrl(url, query);\n\n if (!previewData && disableSsr) return { disableSsr: true };\n\n await checkAccessToken(apolloClient, {\n ...props,\n disableSsr: !Object.keys(apolloClient.cache.extract()).length // empty cache means SSR was disabled\n });\n\n if (previewData) return getPreviewData(previewData, apolloClient);\n const urlCheckOptions = { asPath, url, apolloClient, res };\n const result = await doUrlCheck({\n ...urlCheckOptions,\n handle404Error: true,\n blazeApp\n });\n return { ...result, fullUrl } || {};\n};\n\nconst getPreviewData = async (previewData, apolloClient) => {\n const result = await getPageData({ ...previewData, apolloClient });\n const { pageData: { url } = {} } = result;\n const rootSelectorClasses = getRootSelectorClasses(url, getRootClassesLimit());\n return { ...previewData, rootSelectorClasses, ...result, isPreview: true };\n};\n\nconst getHost = ({ headers = {} }) =>\n process.env.BLAZE_FRONTEND_HOST ||\n headers['x-request-host'] ||\n headers['x-forwarded-host'] ||\n headers.host;\n\nconst getFullUrl = (req, asPath) => {\n if (req) {\n return `${HTTPS}${getHost(req)}${asPath}`;\n }\n const {\n location: { protocol, hostname, port }\n } = window;\n const urlPort = port ? `${COLON}${port}` : '';\n\n return `${protocol}${DOUBLE_SLASH}${hostname}${urlPort}${asPath}`;\n};\n\nconst doUrlCheck = async args => {\n const { asPath, url, apolloClient, res, blazeApp, errorCheckCode = false } = args;\n try {\n if (!ROUTE_REGEX.test(url)) {\n throw Error('Invalid URL');\n }\n const { data: { checkUrl: { itemId, itemEntity, urlTo, pageData = {} } = {} } = {} } =\n await apolloClient.query({\n query: checkUrlQuery,\n variables: { url }\n });\n\n setCustomCacheControlHeaders(pageData, res);\n\n if (urlTo && (urlTo !== url || errorCheckCode)) {\n return handleRedirect({ errorCheckCode, url, urlTo, asPath, res });\n }\n const rootSelectorClasses = getRootSelectorClasses(url, getRootClassesLimit());\n\n if (errorCheckCode) {\n blazeApp.events.emit('monitor:log', { message: `Serving custom ${errorCheckCode} page` });\n if (res) res.statusCode = errorCheckCode;\n }\n\n return {\n pageData,\n rootSelectorClasses,\n itemId,\n itemEntity: getUnpublishedEntityName(itemEntity)\n };\n } catch (err) {\n return handleUrlError(err, args);\n }\n};\n\nconst handleError = (err, res, handle404Error, blazeApp) => {\n blazeApp.events.emit('monitor:log', { error: err });\n if (!res) return {};\n if (err.networkError) {\n res.writeHead(500, { 'Content-Type': 'text/plain' });\n res.write('500 Internal Server Error\\n');\n res.end();\n } else if (handle404Error && err.graphQLErrors && err.graphQLErrors.length) {\n res.statusCode = NOT_FOUND_STATUS_CODE;\n return { errorCode: NOT_FOUND_STATUS_CODE };\n }\n\n return {};\n};\n\nfunction handleRedirect({ errorCheckCode, url, urlTo, asPath, res }) {\n if (errorCheckCode) {\n const errorMessage = `Cannot redirect ${url}`;\n const customError = new Error(errorMessage);\n customError.graphQLErrors = [errorMessage];\n throw customError;\n }\n let redirectUrl = urlTo;\n if (process.env.BLAZE_DISABLE_REDIRECT_WITH_QUERY !== 'true') {\n const queryString = asPath.split('?')[1];\n redirectUrl = queryString ? `${urlTo}?${queryString}` : urlTo;\n }\n\n return doRedirect(res, redirectUrl);\n}\n\nfunction setCustomCacheControlHeaders(pageData, res) {\n const { cacheControlMaxAge = null } = pageData || {};\n\n if (res && cacheControlMaxAge !== null && cacheControlMaxAge >= 0) {\n res.setHeader('Cache-Control', `max-age=${cacheControlMaxAge}`);\n }\n}\n\nfunction doRedirect(res, redirectUrl) {\n if (res) {\n res.writeHead(301, { Location: redirectUrl });\n res.end();\n } else {\n window.location.href = redirectUrl;\n }\n\n return { redirecting: true };\n}\n\nasync function handleUrlError(err, args) {\n const { asPath, res, handle404Error, blazeApp, errorCheckCode } = args;\n if (!err.graphQLErrors || !err.graphQLErrors.length) {\n return handleError(err, res, handle404Error, blazeApp);\n }\n\n if (!errorCheckCode) {\n const result = await doUrlCheck({\n ...args,\n url: ERROR_URLS.custom404,\n errorCheckCode: NOT_FOUND_STATUS_CODE\n });\n\n if (handle404Error) {\n const parentUrl = checkParent(asPath);\n if (parentUrl) {\n return doRedirect(res, parentUrl);\n }\n }\n return result;\n }\n\n const parentPATH = checkParent(asPath);\n if (handle404Error && parentPATH) {\n return doRedirect(res, parentPATH);\n }\n\n return handleError(err, res, handle404Error, blazeApp);\n}\n\nexport default checkUrl;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"check-url.js","names":["parseUrl","getUnpublishedEntityName","checkAccessToken","HTTPS","DOUBLE_SLASH","COLON","NOT_FOUND_STATUS_CODE","BLAZE_X_FRAME_OPTIONS_DEFAULT","ROUTE_REGEX","ERROR_URLS","checkUrlQuery","checkParent","checkPreviewUrl","handleStaticRoutes","getPageData","getRootSelectorClasses","getRootClassesLimit","Number","process","env","BLAZE_ROOT_SELECTOR_CLASSES_LIMIT","checkUrl","props","asPath","apolloClient","res","req","query","blazeApp","disableSsr","fullUrl","getFullUrl","url","BLAZE_STATUS_URL","isStatusPage","handler","getHandler","setHeader","BLAZE_X_FRAME_OPTIONS","getHeader","BLAZE_CACHE_CONTROL_HEADER","previewData","_objectSpread","Object","keys","cache","extract","length","getPreviewData","urlCheckOptions","result","doUrlCheck","handle404Error","pageData","rootSelectorClasses","isPreview","getHost","headers","BLAZE_FRONTEND_HOST","host","location","protocol","hostname","port","window","urlPort","args","errorCheckCode","test","Error","data","itemId","itemEntity","urlTo","variables","setCustomCacheControlHeaders","handleRedirect","events","emit","message","statusCode","err","handleUrlError","handleError","error","networkError","writeHead","write","end","graphQLErrors","errorCode","errorMessage","customError","redirectUrl","BLAZE_DISABLE_REDIRECT_WITH_QUERY","queryString","split","doRedirect","cacheControlMaxAge","Location","href","redirecting","custom404","parentUrl","parentPATH"],"sources":["../../src/helpers/check-url.js"],"sourcesContent":["import { parseUrl } from 'query-string';\nimport { getUnpublishedEntityName } from '@blaze-cms/react-page-builder';\nimport { checkAccessToken } from '@blaze-cms/core-auth-ui';\nimport {\n HTTPS,\n DOUBLE_SLASH,\n COLON,\n NOT_FOUND_STATUS_CODE,\n BLAZE_X_FRAME_OPTIONS_DEFAULT,\n ROUTE_REGEX,\n ERROR_URLS\n} from '../constants';\nimport { checkUrlQuery } from '../application/query';\nimport checkParent from './check-parent';\nimport checkPreviewUrl from './check-preview-url';\nimport handleStaticRoutes from './handle-static-routes';\nimport getPageData from './get-page-data';\nimport getRootSelectorClasses from './get-root-selector-classes';\n\nconst getRootClassesLimit = () => Number(process.env.BLAZE_ROOT_SELECTOR_CLASSES_LIMIT || 1);\n\nconst checkUrl = async props => {\n const { asPath, apolloClient, res, req, query, blazeApp, disableSsr } = props;\n const fullUrl = getFullUrl(req, asPath);\n const { url } = parseUrl(asPath);\n\n if (process.env.BLAZE_STATUS_URL && url === process.env.BLAZE_STATUS_URL) {\n return { isStatusPage: true };\n }\n\n if (res) {\n const handler = handleStaticRoutes.getHandler(asPath);\n\n res.setHeader(\n 'X-Frame-Options',\n process.env.BLAZE_X_FRAME_OPTIONS || BLAZE_X_FRAME_OPTIONS_DEFAULT\n );\n\n if (!res.getHeader('Cache-Control')) {\n res.setHeader('Cache-Control', process.env.BLAZE_CACHE_CONTROL_HEADER || ' ');\n }\n\n if (handler) {\n return handler(props);\n }\n }\n\n const previewData = checkPreviewUrl(url, query);\n\n if (!previewData && disableSsr) return { disableSsr: true };\n\n await checkAccessToken(apolloClient, {\n ...props,\n disableSsr: !Object.keys(apolloClient.cache.extract()).length // empty cache means SSR was disabled\n });\n\n if (previewData) return getPreviewData(previewData, apolloClient);\n const urlCheckOptions = { asPath, url, apolloClient, res };\n const result = await doUrlCheck({\n ...urlCheckOptions,\n handle404Error: true,\n blazeApp\n });\n return { ...result, fullUrl } || {};\n};\n\nconst getPreviewData = async (previewData, apolloClient) => {\n const result = await getPageData({ ...previewData, apolloClient });\n const { pageData: { url } = {} } = result;\n const rootSelectorClasses = getRootSelectorClasses(url, getRootClassesLimit());\n return { ...previewData, rootSelectorClasses, ...result, isPreview: true };\n};\n\nconst getHost = ({ headers = {} }) =>\n process.env.BLAZE_FRONTEND_HOST ||\n headers['x-request-host'] ||\n headers['x-forwarded-host'] ||\n headers.host;\n\nconst getFullUrl = (req, asPath) => {\n if (req) {\n return `${HTTPS}${getHost(req)}${asPath}`;\n }\n const {\n location: { protocol, hostname, port }\n } = window;\n const urlPort = port ? `${COLON}${port}` : '';\n\n return `${protocol}${DOUBLE_SLASH}${hostname}${urlPort}${asPath}`;\n};\n\nconst doUrlCheck = async args => {\n const { asPath, url, apolloClient, res, blazeApp, errorCheckCode = false } = args;\n try {\n if (!ROUTE_REGEX.test(url)) {\n throw Error('Invalid URL');\n }\n const { data: { checkUrl: { itemId, itemEntity, urlTo, pageData = {} } = {} } = {} } =\n await apolloClient.query({\n query: checkUrlQuery,\n variables: { url }\n });\n\n setCustomCacheControlHeaders(pageData, res);\n\n if (urlTo && (urlTo !== url || errorCheckCode)) {\n return handleRedirect({ errorCheckCode, url, urlTo, asPath, res });\n }\n const rootSelectorClasses = getRootSelectorClasses(url, getRootClassesLimit());\n\n if (errorCheckCode) {\n blazeApp.events.emit('monitor:log', { message: `Serving custom ${errorCheckCode} page` });\n if (res) res.statusCode = errorCheckCode;\n }\n\n return {\n pageData,\n rootSelectorClasses,\n itemId,\n itemEntity: getUnpublishedEntityName(itemEntity)\n };\n } catch (err) {\n return handleUrlError(err, args);\n }\n};\n\nconst handleError = (err, res, handle404Error, blazeApp) => {\n blazeApp.events.emit('monitor:log', { error: err });\n if (!res) return {};\n if (err.networkError) {\n res.writeHead(500, { 'Content-Type': 'text/plain' });\n res.write('500 Internal Server Error\\n');\n res.end();\n } else if (handle404Error && err.graphQLErrors && err.graphQLErrors.length) {\n res.statusCode = NOT_FOUND_STATUS_CODE;\n return { errorCode: NOT_FOUND_STATUS_CODE };\n }\n\n return {};\n};\n\nfunction handleRedirect({ errorCheckCode, url, urlTo, asPath, res }) {\n if (errorCheckCode) {\n const errorMessage = `Cannot redirect ${url}`;\n const customError = new Error(errorMessage);\n customError.graphQLErrors = [errorMessage];\n throw customError;\n }\n let redirectUrl = urlTo;\n if (process.env.BLAZE_DISABLE_REDIRECT_WITH_QUERY !== 'true') {\n const queryString = asPath.split('?')[1];\n redirectUrl = queryString ? `${urlTo}?${queryString}` : urlTo;\n }\n\n return doRedirect(res, redirectUrl);\n}\n\nfunction setCustomCacheControlHeaders(pageData, res) {\n const { cacheControlMaxAge = null } = pageData || {};\n\n if (res && cacheControlMaxAge !== null && cacheControlMaxAge >= 0) {\n res.setHeader('Cache-Control', `max-age=${cacheControlMaxAge}`);\n }\n}\n\nfunction doRedirect(res, redirectUrl) {\n if (res) {\n res.writeHead(301, { Location: redirectUrl });\n res.end();\n } else {\n window.location.href = redirectUrl;\n }\n\n return { redirecting: true };\n}\n\nasync function handleUrlError(err, args) {\n const { asPath, res, handle404Error, blazeApp, errorCheckCode } = args;\n if (!err.graphQLErrors || !err.graphQLErrors.length) {\n return handleError(err, res, handle404Error, blazeApp);\n }\n\n if (!errorCheckCode) {\n const result = await doUrlCheck({\n ...args,\n url: ERROR_URLS.custom404,\n errorCheckCode: NOT_FOUND_STATUS_CODE\n });\n\n if (handle404Error) {\n const parentUrl = checkParent(asPath);\n if (parentUrl) {\n return doRedirect(res, parentUrl);\n }\n }\n return result;\n }\n\n const parentPATH = checkParent(asPath);\n if (handle404Error && parentPATH) {\n return doRedirect(res, parentPATH);\n }\n\n return handleError(err, res, handle404Error, blazeApp);\n}\n\nexport default checkUrl;\n"],"mappings":"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","ignoreList":[]}
|
package/lib-es/hoc/withBlaze.js
CHANGED
|
@@ -12,6 +12,7 @@ import dynamic from 'next/dynamic'; // Next.js dynamic
|
|
|
12
12
|
import { AppContext } from '@blaze-cms/nextjs-components';
|
|
13
13
|
import blazeConfig from '../blaze.config';
|
|
14
14
|
import { getErrorMessage } from '../helpers';
|
|
15
|
+
import HashObserver from '../components/HashObserver';
|
|
15
16
|
const ErrorBoundary = dynamic(() => import('@blaze-cms/core-errors-ui'));
|
|
16
17
|
const APP_LOG_NAMESPACE_MAIN = 'main';
|
|
17
18
|
function getWrappedApp(isSsr, config, blazeApp, App) {
|
|
@@ -117,7 +118,7 @@ function getWrappedApp(isSsr, config, blazeApp, App) {
|
|
|
117
118
|
this.setApolloClient();
|
|
118
119
|
return /*#__PURE__*/React.createElement(ErrorBoundary, {
|
|
119
120
|
app: this.blazeApp
|
|
120
|
-
}, /*#__PURE__*/React.createElement(AppContext.Provider, {
|
|
121
|
+
}, /*#__PURE__*/React.createElement(HashObserver, null), /*#__PURE__*/React.createElement(AppContext.Provider, {
|
|
121
122
|
value: {
|
|
122
123
|
blazeApp: this.blazeApp
|
|
123
124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withBlaze.js","names":["React","Component","getDataFromTree","getBlazeUi","setupCheckAccessToken","PropTypes","dynamic","AppContext","blazeConfig","getErrorMessage","ErrorBoundary","APP_LOG_NAMESPACE_MAIN","getWrappedApp","isSsr","config","blazeApp","App","_Class","getApolloClient","ctx","requestApp","apolloClient","getClient","createClient","getRequestApp","getInitialProps","context","_Component","router","AppTree","appProps","errorProps","req","res","init","events","emit","pageProps","mainProps","_objectSpread","renderAndCheckPromises","createElement","_extends","openQueryChecker","checkOpenQueries","Promise","race","error","errorCode","statusCode","log","apolloState","cache","extract","sortedState","Object","keys","sort","reduce","acc","key","processedBlazeEntities","getProcessedEntities","constructor","props","state","appLoaded","initComplete","componentDidMount","setState","setApolloClient","render","app","Provider","value","_defineProperty","object","undefined","withBlaze","buildConfig","forceSsr","window","logNameSpace"],"sources":["../../src/hoc/withBlaze.js"],"sourcesContent":["// see: https://github.com/zeit/next.js/blob/canary/examples/with-apollo-auth/lib/withApollo.js\nimport React, { Component } from 'react';\nimport { getDataFromTree } from '@apollo/client/react/ssr';\nimport getBlazeUi from '@blaze-cms/core-ui';\nimport { setupCheckAccessToken } from '@blaze-cms/core-auth-ui';\nimport PropTypes from 'prop-types';\nimport dynamic from 'next/dynamic'; // Next.js dynamic\nimport { AppContext } from '@blaze-cms/nextjs-components';\nimport blazeConfig from '../blaze.config';\nimport { getErrorMessage } from '../helpers';\n\nconst ErrorBoundary = dynamic(() => import('@blaze-cms/core-errors-ui'));\n\nconst APP_LOG_NAMESPACE_MAIN = 'main';\n\nfunction getWrappedApp(isSsr, config, blazeApp, App) {\n function getApolloClient(ctx, requestApp) {\n return ctx.apolloClient || requestApp.getClient() || requestApp.createClient();\n }\n\n function getRequestApp(requestApp) {\n return !requestApp && isSsr ? getBlazeUi({ config }) : blazeApp;\n }\n return class extends Component {\n static displayName = 'withBlaze(App)';\n\n static propTypes = {\n apolloState: PropTypes.object,\n apolloClient: PropTypes.object,\n processedBlazeEntities: PropTypes.object\n };\n\n static defaultProps = {\n apolloState: {},\n apolloClient: null,\n processedBlazeEntities: undefined\n };\n\n static async getInitialProps(context) {\n const { Component: _Component, router, AppTree, ctx } = context;\n let appProps = {};\n let errorProps = {};\n\n let requestApp = ctx.blazeApp;\n requestApp = getRequestApp(requestApp);\n\n requestApp.ctx.router = router;\n requestApp.ctx.req = ctx.req;\n requestApp.ctx.res = ctx.res;\n\n await blazeApp.init();\n await requestApp.init();\n\n const apolloClient = getApolloClient(ctx, requestApp);\n\n ctx.apolloClient = apolloClient;\n ctx.blazeApp = requestApp;\n\n requestApp.events.emit('page-load:get-initial-props:before', { ctx });\n\n if (App.getInitialProps) {\n appProps = await App.getInitialProps(context);\n }\n\n const { pageProps = {} } = appProps;\n const mainProps = {\n ...appProps,\n pageProps: { ...pageProps, ...errorProps }\n };\n\n if (!isSsr) return mainProps;\n\n try {\n const renderAndCheckPromises = [\n getDataFromTree(\n <AppTree\n {...appProps}\n Component={_Component}\n router={router}\n apolloClient={apolloClient}\n />\n ),\n requestApp.openQueryChecker.checkOpenQueries()\n ];\n // race is so that if getDataFromTree gets stuck the checkOpenQueries will resolve when outstanding queries are done\n await Promise.race(renderAndCheckPromises);\n } catch (error) {\n errorProps = getErrorMessage(error);\n if (errorProps.errorCode) ctx.res.statusCode = errorProps.errorCode;\n ctx.blazeApp.events.emit('monitor:log', { error });\n requestApp.log.error('Error while running `getDataFromTree`', error);\n }\n\n const apolloState = apolloClient.cache.extract();\n const sortedState = Object.keys(apolloState)\n .sort()\n .reduce((acc, key) => {\n acc[key] = apolloState[key];\n return acc;\n }, {});\n\n return {\n ...mainProps,\n pageProps: { ...mainProps.pageProps, ...errorProps },\n apolloState: sortedState,\n processedBlazeEntities: blazeApp.getProcessedEntities()\n };\n }\n\n constructor(props) {\n super(props);\n this.apolloClient = props.apolloClient;\n this.state = {\n appLoaded: isSsr || blazeApp.initComplete()\n };\n this.blazeApp = blazeApp;\n }\n\n async componentDidMount() {\n if (blazeApp.initComplete()) return;\n\n await blazeApp.init();\n\n this.setState({\n appLoaded: blazeApp.initComplete()\n });\n }\n\n setApolloClient() {\n if (!this.apolloClient) {\n const { apolloState, processedBlazeEntities } = this.props;\n this.apolloClient = blazeApp.createClient(apolloState, processedBlazeEntities);\n setupCheckAccessToken(this.apolloClient);\n }\n }\n\n render() {\n const { appLoaded } = this.state;\n\n if (!appLoaded && !isSsr) return '...loading';\n\n this.setApolloClient();\n\n return (\n <ErrorBoundary app={this.blazeApp}>\n <AppContext.Provider value={{ blazeApp: this.blazeApp }}>\n <App {...this.props} apolloClient={this.apolloClient} blazeApp={this.blazeApp} />\n </AppContext.Provider>\n </ErrorBoundary>\n );\n }\n };\n}\n\nconst withBlaze = (App, buildConfig, { forceSsr = false } = {}) => {\n const isSsr = forceSsr || typeof window === 'undefined';\n const config = buildConfig ? buildConfig(blazeConfig) : blazeConfig;\n const blazeApp = getBlazeUi({ config, logNameSpace: APP_LOG_NAMESPACE_MAIN });\n blazeApp.init();\n\n return getWrappedApp(isSsr, config, blazeApp, App);\n};\n\nexport default withBlaze;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"withBlaze.js","names":["React","Component","getDataFromTree","getBlazeUi","setupCheckAccessToken","PropTypes","dynamic","AppContext","blazeConfig","getErrorMessage","HashObserver","ErrorBoundary","APP_LOG_NAMESPACE_MAIN","getWrappedApp","isSsr","config","blazeApp","App","_Class","getApolloClient","ctx","requestApp","apolloClient","getClient","createClient","getRequestApp","getInitialProps","context","_Component","router","AppTree","appProps","errorProps","req","res","init","events","emit","pageProps","mainProps","_objectSpread","renderAndCheckPromises","createElement","_extends","openQueryChecker","checkOpenQueries","Promise","race","error","errorCode","statusCode","log","apolloState","cache","extract","sortedState","Object","keys","sort","reduce","acc","key","processedBlazeEntities","getProcessedEntities","constructor","props","state","appLoaded","initComplete","componentDidMount","setState","setApolloClient","render","app","Provider","value","_defineProperty","object","undefined","withBlaze","buildConfig","forceSsr","window","logNameSpace"],"sources":["../../src/hoc/withBlaze.js"],"sourcesContent":["// see: https://github.com/zeit/next.js/blob/canary/examples/with-apollo-auth/lib/withApollo.js\nimport React, { Component } from 'react';\nimport { getDataFromTree } from '@apollo/client/react/ssr';\nimport getBlazeUi from '@blaze-cms/core-ui';\nimport { setupCheckAccessToken } from '@blaze-cms/core-auth-ui';\nimport PropTypes from 'prop-types';\nimport dynamic from 'next/dynamic'; // Next.js dynamic\nimport { AppContext } from '@blaze-cms/nextjs-components';\nimport blazeConfig from '../blaze.config';\nimport { getErrorMessage } from '../helpers';\nimport HashObserver from '../components/HashObserver';\n\nconst ErrorBoundary = dynamic(() => import('@blaze-cms/core-errors-ui'));\n\nconst APP_LOG_NAMESPACE_MAIN = 'main';\n\nfunction getWrappedApp(isSsr, config, blazeApp, App) {\n function getApolloClient(ctx, requestApp) {\n return ctx.apolloClient || requestApp.getClient() || requestApp.createClient();\n }\n\n function getRequestApp(requestApp) {\n return !requestApp && isSsr ? getBlazeUi({ config }) : blazeApp;\n }\n return class extends Component {\n static displayName = 'withBlaze(App)';\n\n static propTypes = {\n apolloState: PropTypes.object,\n apolloClient: PropTypes.object,\n processedBlazeEntities: PropTypes.object\n };\n\n static defaultProps = {\n apolloState: {},\n apolloClient: null,\n processedBlazeEntities: undefined\n };\n\n static async getInitialProps(context) {\n const { Component: _Component, router, AppTree, ctx } = context;\n let appProps = {};\n let errorProps = {};\n\n let requestApp = ctx.blazeApp;\n requestApp = getRequestApp(requestApp);\n\n requestApp.ctx.router = router;\n requestApp.ctx.req = ctx.req;\n requestApp.ctx.res = ctx.res;\n\n await blazeApp.init();\n await requestApp.init();\n\n const apolloClient = getApolloClient(ctx, requestApp);\n\n ctx.apolloClient = apolloClient;\n ctx.blazeApp = requestApp;\n\n requestApp.events.emit('page-load:get-initial-props:before', { ctx });\n\n if (App.getInitialProps) {\n appProps = await App.getInitialProps(context);\n }\n\n const { pageProps = {} } = appProps;\n const mainProps = {\n ...appProps,\n pageProps: { ...pageProps, ...errorProps }\n };\n\n if (!isSsr) return mainProps;\n\n try {\n const renderAndCheckPromises = [\n getDataFromTree(\n <AppTree\n {...appProps}\n Component={_Component}\n router={router}\n apolloClient={apolloClient}\n />\n ),\n requestApp.openQueryChecker.checkOpenQueries()\n ];\n // race is so that if getDataFromTree gets stuck the checkOpenQueries will resolve when outstanding queries are done\n await Promise.race(renderAndCheckPromises);\n } catch (error) {\n errorProps = getErrorMessage(error);\n if (errorProps.errorCode) ctx.res.statusCode = errorProps.errorCode;\n ctx.blazeApp.events.emit('monitor:log', { error });\n requestApp.log.error('Error while running `getDataFromTree`', error);\n }\n\n const apolloState = apolloClient.cache.extract();\n const sortedState = Object.keys(apolloState)\n .sort()\n .reduce((acc, key) => {\n acc[key] = apolloState[key];\n return acc;\n }, {});\n\n return {\n ...mainProps,\n pageProps: { ...mainProps.pageProps, ...errorProps },\n apolloState: sortedState,\n processedBlazeEntities: blazeApp.getProcessedEntities()\n };\n }\n\n constructor(props) {\n super(props);\n this.apolloClient = props.apolloClient;\n this.state = {\n appLoaded: isSsr || blazeApp.initComplete()\n };\n this.blazeApp = blazeApp;\n }\n\n async componentDidMount() {\n if (blazeApp.initComplete()) return;\n\n await blazeApp.init();\n\n this.setState({\n appLoaded: blazeApp.initComplete()\n });\n }\n\n setApolloClient() {\n if (!this.apolloClient) {\n const { apolloState, processedBlazeEntities } = this.props;\n this.apolloClient = blazeApp.createClient(apolloState, processedBlazeEntities);\n setupCheckAccessToken(this.apolloClient);\n }\n }\n\n render() {\n const { appLoaded } = this.state;\n\n if (!appLoaded && !isSsr) return '...loading';\n\n this.setApolloClient();\n\n return (\n <ErrorBoundary app={this.blazeApp}>\n <HashObserver />\n <AppContext.Provider value={{ blazeApp: this.blazeApp }}>\n <App {...this.props} apolloClient={this.apolloClient} blazeApp={this.blazeApp} />\n </AppContext.Provider>\n </ErrorBoundary>\n );\n }\n };\n}\n\nconst withBlaze = (App, buildConfig, { forceSsr = false } = {}) => {\n const isSsr = forceSsr || typeof window === 'undefined';\n const config = buildConfig ? buildConfig(blazeConfig) : blazeConfig;\n const blazeApp = getBlazeUi({ config, logNameSpace: APP_LOG_NAMESPACE_MAIN });\n blazeApp.init();\n\n return getWrappedApp(isSsr, config, blazeApp, App);\n};\n\nexport default withBlaze;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import Router from 'next/router';
|
|
3
|
+
const DEFAULT_TIMEOUT = 3000;
|
|
4
|
+
function useHashObserver(timeout = DEFAULT_TIMEOUT) {
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
if (typeof window === 'undefined') return undefined;
|
|
7
|
+
let observer = null;
|
|
8
|
+
let timeoutId = null;
|
|
9
|
+
let currentHash = null;
|
|
10
|
+
let isObserving = false;
|
|
11
|
+
const scrollToElement = hash => {
|
|
12
|
+
if (!hash) return false;
|
|
13
|
+
const id = hash.startsWith('#') ? hash.slice(1) : hash;
|
|
14
|
+
const element = document.getElementById(id);
|
|
15
|
+
if (element) {
|
|
16
|
+
element.scrollIntoView();
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
return false;
|
|
20
|
+
};
|
|
21
|
+
const stopObserving = () => {
|
|
22
|
+
if (observer) {
|
|
23
|
+
observer.disconnect();
|
|
24
|
+
observer = null;
|
|
25
|
+
}
|
|
26
|
+
if (timeoutId) {
|
|
27
|
+
clearTimeout(timeoutId);
|
|
28
|
+
timeoutId = null;
|
|
29
|
+
}
|
|
30
|
+
isObserving = false;
|
|
31
|
+
currentHash = null;
|
|
32
|
+
};
|
|
33
|
+
const startObserving = hash => {
|
|
34
|
+
if (isObserving) {
|
|
35
|
+
stopObserving();
|
|
36
|
+
}
|
|
37
|
+
currentHash = hash;
|
|
38
|
+
isObserving = true;
|
|
39
|
+
if (scrollToElement(hash)) {
|
|
40
|
+
stopObserving();
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
observer = new MutationObserver(() => {
|
|
44
|
+
if (scrollToElement(currentHash)) {
|
|
45
|
+
stopObserving();
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
const targetNode = document.getElementById('__next') || document.getElementById('root') || document.body;
|
|
49
|
+
observer.observe(targetNode, {
|
|
50
|
+
childList: true,
|
|
51
|
+
subtree: true
|
|
52
|
+
});
|
|
53
|
+
timeoutId = setTimeout(() => {
|
|
54
|
+
stopObserving();
|
|
55
|
+
}, timeout);
|
|
56
|
+
};
|
|
57
|
+
const handleRouteChange = url => {
|
|
58
|
+
const hashIndex = url.indexOf('#');
|
|
59
|
+
if (hashIndex === -1) {
|
|
60
|
+
stopObserving();
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const hash = url.slice(hashIndex);
|
|
64
|
+
if (hash) {
|
|
65
|
+
startObserving(hash);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
const handleHashChange = url => {
|
|
69
|
+
const hashIndex = url.indexOf('#');
|
|
70
|
+
if (hashIndex === -1) {
|
|
71
|
+
stopObserving();
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const hash = url.slice(hashIndex);
|
|
75
|
+
if (hash) {
|
|
76
|
+
startObserving(hash);
|
|
77
|
+
} else {
|
|
78
|
+
stopObserving();
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
Router.events.on('routeChangeComplete', handleRouteChange);
|
|
82
|
+
Router.events.on('hashChangeComplete', handleHashChange);
|
|
83
|
+
if (window.location.hash) {
|
|
84
|
+
startObserving(window.location.hash);
|
|
85
|
+
}
|
|
86
|
+
return () => {
|
|
87
|
+
stopObserving();
|
|
88
|
+
Router.events.off('routeChangeComplete', handleRouteChange);
|
|
89
|
+
Router.events.off('hashChangeComplete', handleHashChange);
|
|
90
|
+
};
|
|
91
|
+
}, [timeout]);
|
|
92
|
+
}
|
|
93
|
+
export default useHashObserver;
|
|
94
|
+
//# sourceMappingURL=use-hash-observer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-hash-observer.js","names":["useEffect","Router","DEFAULT_TIMEOUT","useHashObserver","timeout","window","undefined","observer","timeoutId","currentHash","isObserving","scrollToElement","hash","id","startsWith","slice","element","document","getElementById","scrollIntoView","stopObserving","disconnect","clearTimeout","startObserving","MutationObserver","targetNode","body","observe","childList","subtree","setTimeout","handleRouteChange","url","hashIndex","indexOf","handleHashChange","events","on","location","off"],"sources":["../../src/hooks/use-hash-observer.js"],"sourcesContent":["import { useEffect } from 'react';\nimport Router from 'next/router';\n\nconst DEFAULT_TIMEOUT = 3000;\n\nfunction useHashObserver(timeout = DEFAULT_TIMEOUT) {\n useEffect(\n () => {\n if (typeof window === 'undefined') return undefined;\n\n let observer = null;\n let timeoutId = null;\n let currentHash = null;\n let isObserving = false;\n\n const scrollToElement = hash => {\n if (!hash) return false;\n\n const id = hash.startsWith('#') ? hash.slice(1) : hash;\n const element = document.getElementById(id);\n\n if (element) {\n element.scrollIntoView();\n return true;\n }\n\n return false;\n };\n\n const stopObserving = () => {\n if (observer) {\n observer.disconnect();\n observer = null;\n }\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n isObserving = false;\n currentHash = null;\n };\n\n const startObserving = hash => {\n if (isObserving) {\n stopObserving();\n }\n\n currentHash = hash;\n isObserving = true;\n\n if (scrollToElement(hash)) {\n stopObserving();\n return;\n }\n\n observer = new MutationObserver(() => {\n if (scrollToElement(currentHash)) {\n stopObserving();\n }\n });\n\n const targetNode =\n document.getElementById('__next') || document.getElementById('root') || document.body;\n observer.observe(targetNode, {\n childList: true,\n subtree: true\n });\n\n timeoutId = setTimeout(() => {\n stopObserving();\n }, timeout);\n };\n\n const handleRouteChange = url => {\n const hashIndex = url.indexOf('#');\n if (hashIndex === -1) {\n stopObserving();\n return;\n }\n\n const hash = url.slice(hashIndex);\n if (hash) {\n startObserving(hash);\n }\n };\n\n const handleHashChange = url => {\n const hashIndex = url.indexOf('#');\n if (hashIndex === -1) {\n stopObserving();\n return;\n }\n\n const hash = url.slice(hashIndex);\n if (hash) {\n startObserving(hash);\n } else {\n stopObserving();\n }\n };\n\n Router.events.on('routeChangeComplete', handleRouteChange);\n Router.events.on('hashChangeComplete', handleHashChange);\n\n if (window.location.hash) {\n startObserving(window.location.hash);\n }\n\n return () => {\n stopObserving();\n Router.events.off('routeChangeComplete', handleRouteChange);\n Router.events.off('hashChangeComplete', handleHashChange);\n };\n },\n [timeout]\n );\n}\n\nexport default useHashObserver;\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blaze-cms/nextjs-tools",
|
|
3
|
-
"version": "0.146.0-node18-tooltips.
|
|
3
|
+
"version": "0.146.0-node18-core-styles-tooltips.41",
|
|
4
4
|
"description": "Blaze nextjs tools",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib-es/index.js",
|
|
@@ -28,22 +28,22 @@
|
|
|
28
28
|
"license": "GPL-3.0",
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@apollo/client": "^3.9.2",
|
|
31
|
-
"@blaze-cms/core-auth-ui": "0.146.0-node18-tooltips.
|
|
32
|
-
"@blaze-cms/core-errors": "0.146.0-node18-tooltips.
|
|
33
|
-
"@blaze-cms/core-errors-ui": "0.146.0-node18-tooltips.
|
|
34
|
-
"@blaze-cms/core-ui": "0.146.0-node18-tooltips.
|
|
35
|
-
"@blaze-cms/nextjs-components": "0.146.0-node18-tooltips.32",
|
|
36
|
-
"@blaze-cms/plugin-auth-fe": "0.146.0-node18-tooltips.
|
|
37
|
-
"@blaze-cms/plugin-auth-local-fe": "0.146.0-node18-tooltips.
|
|
38
|
-
"@blaze-cms/plugin-chart": "0.146.0-node18-tooltips.
|
|
39
|
-
"@blaze-cms/plugin-google-maps-fe": "0.146.0-node18-tooltips.
|
|
40
|
-
"@blaze-cms/plugin-gtm-fe": "0.146.0-node18-tooltips.
|
|
41
|
-
"@blaze-cms/plugin-page-builder-fe": "0.146.0-node18-tooltips.
|
|
42
|
-
"@blaze-cms/plugin-preview-fe": "0.146.0-node18-tooltips.
|
|
43
|
-
"@blaze-cms/plugin-search-ui": "0.146.0-node18-tooltips.
|
|
44
|
-
"@blaze-cms/plugin-structured-data-fe": "0.146.0-node18-tooltips.
|
|
45
|
-
"@blaze-cms/react-page-builder": "0.146.0-node18-tooltips.
|
|
46
|
-
"@blaze-cms/setup-ui": "0.146.0-node18-tooltips.
|
|
31
|
+
"@blaze-cms/core-auth-ui": "0.146.0-node18-core-styles-tooltips.38",
|
|
32
|
+
"@blaze-cms/core-errors": "0.146.0-node18-core-styles-tooltips.3",
|
|
33
|
+
"@blaze-cms/core-errors-ui": "0.146.0-node18-core-styles-tooltips.3",
|
|
34
|
+
"@blaze-cms/core-ui": "0.146.0-node18-core-styles-tooltips.38",
|
|
35
|
+
"@blaze-cms/nextjs-components": "0.146.0-node18-core-styles-tooltips.32",
|
|
36
|
+
"@blaze-cms/plugin-auth-fe": "0.146.0-node18-core-styles-tooltips.38",
|
|
37
|
+
"@blaze-cms/plugin-auth-local-fe": "0.146.0-node18-core-styles-tooltips.38",
|
|
38
|
+
"@blaze-cms/plugin-chart": "0.146.0-node18-core-styles-tooltips.31",
|
|
39
|
+
"@blaze-cms/plugin-google-maps-fe": "0.146.0-node18-core-styles-tooltips.41",
|
|
40
|
+
"@blaze-cms/plugin-gtm-fe": "0.146.0-node18-core-styles-tooltips.41",
|
|
41
|
+
"@blaze-cms/plugin-page-builder-fe": "0.146.0-node18-core-styles-tooltips.41",
|
|
42
|
+
"@blaze-cms/plugin-preview-fe": "0.146.0-node18-core-styles-tooltips.38",
|
|
43
|
+
"@blaze-cms/plugin-search-ui": "0.146.0-node18-core-styles-tooltips.41",
|
|
44
|
+
"@blaze-cms/plugin-structured-data-fe": "0.146.0-node18-core-styles-tooltips.24",
|
|
45
|
+
"@blaze-cms/react-page-builder": "0.146.0-node18-core-styles-tooltips.41",
|
|
46
|
+
"@blaze-cms/setup-ui": "0.146.0-node18-core-styles-tooltips.3",
|
|
47
47
|
"@blaze-react/switches": "0.8.0-alpha.112",
|
|
48
48
|
"autoprefixer": "^10.2.3",
|
|
49
49
|
"core-js": "^3.2.1",
|
|
@@ -71,5 +71,5 @@
|
|
|
71
71
|
"lib/*",
|
|
72
72
|
"lib-es/*"
|
|
73
73
|
],
|
|
74
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "ef33d6731843b4197118098cacf51e5034d4858b"
|
|
75
75
|
}
|
package/src/components/index.js
CHANGED
package/src/helpers/check-url.js
CHANGED
|
@@ -17,7 +17,7 @@ import handleStaticRoutes from './handle-static-routes';
|
|
|
17
17
|
import getPageData from './get-page-data';
|
|
18
18
|
import getRootSelectorClasses from './get-root-selector-classes';
|
|
19
19
|
|
|
20
|
-
const getRootClassesLimit = () => Number(process.env.BLAZE_ROOT_SELECTOR_CLASSES_LIMIT);
|
|
20
|
+
const getRootClassesLimit = () => Number(process.env.BLAZE_ROOT_SELECTOR_CLASSES_LIMIT || 1);
|
|
21
21
|
|
|
22
22
|
const checkUrl = async props => {
|
|
23
23
|
const { asPath, apolloClient, res, req, query, blazeApp, disableSsr } = props;
|
package/src/hoc/withBlaze.js
CHANGED
|
@@ -8,6 +8,7 @@ import dynamic from 'next/dynamic'; // Next.js dynamic
|
|
|
8
8
|
import { AppContext } from '@blaze-cms/nextjs-components';
|
|
9
9
|
import blazeConfig from '../blaze.config';
|
|
10
10
|
import { getErrorMessage } from '../helpers';
|
|
11
|
+
import HashObserver from '../components/HashObserver';
|
|
11
12
|
|
|
12
13
|
const ErrorBoundary = dynamic(() => import('@blaze-cms/core-errors-ui'));
|
|
13
14
|
|
|
@@ -143,6 +144,7 @@ function getWrappedApp(isSsr, config, blazeApp, App) {
|
|
|
143
144
|
|
|
144
145
|
return (
|
|
145
146
|
<ErrorBoundary app={this.blazeApp}>
|
|
147
|
+
<HashObserver />
|
|
146
148
|
<AppContext.Provider value={{ blazeApp: this.blazeApp }}>
|
|
147
149
|
<App {...this.props} apolloClient={this.apolloClient} blazeApp={this.blazeApp} />
|
|
148
150
|
</AppContext.Provider>
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import Router from 'next/router';
|
|
3
|
+
|
|
4
|
+
const DEFAULT_TIMEOUT = 3000;
|
|
5
|
+
|
|
6
|
+
function useHashObserver(timeout = DEFAULT_TIMEOUT) {
|
|
7
|
+
useEffect(
|
|
8
|
+
() => {
|
|
9
|
+
if (typeof window === 'undefined') return undefined;
|
|
10
|
+
|
|
11
|
+
let observer = null;
|
|
12
|
+
let timeoutId = null;
|
|
13
|
+
let currentHash = null;
|
|
14
|
+
let isObserving = false;
|
|
15
|
+
|
|
16
|
+
const scrollToElement = hash => {
|
|
17
|
+
if (!hash) return false;
|
|
18
|
+
|
|
19
|
+
const id = hash.startsWith('#') ? hash.slice(1) : hash;
|
|
20
|
+
const element = document.getElementById(id);
|
|
21
|
+
|
|
22
|
+
if (element) {
|
|
23
|
+
element.scrollIntoView();
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return false;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const stopObserving = () => {
|
|
31
|
+
if (observer) {
|
|
32
|
+
observer.disconnect();
|
|
33
|
+
observer = null;
|
|
34
|
+
}
|
|
35
|
+
if (timeoutId) {
|
|
36
|
+
clearTimeout(timeoutId);
|
|
37
|
+
timeoutId = null;
|
|
38
|
+
}
|
|
39
|
+
isObserving = false;
|
|
40
|
+
currentHash = null;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const startObserving = hash => {
|
|
44
|
+
if (isObserving) {
|
|
45
|
+
stopObserving();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
currentHash = hash;
|
|
49
|
+
isObserving = true;
|
|
50
|
+
|
|
51
|
+
if (scrollToElement(hash)) {
|
|
52
|
+
stopObserving();
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
observer = new MutationObserver(() => {
|
|
57
|
+
if (scrollToElement(currentHash)) {
|
|
58
|
+
stopObserving();
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
const targetNode =
|
|
63
|
+
document.getElementById('__next') || document.getElementById('root') || document.body;
|
|
64
|
+
observer.observe(targetNode, {
|
|
65
|
+
childList: true,
|
|
66
|
+
subtree: true
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
timeoutId = setTimeout(() => {
|
|
70
|
+
stopObserving();
|
|
71
|
+
}, timeout);
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const handleRouteChange = url => {
|
|
75
|
+
const hashIndex = url.indexOf('#');
|
|
76
|
+
if (hashIndex === -1) {
|
|
77
|
+
stopObserving();
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const hash = url.slice(hashIndex);
|
|
82
|
+
if (hash) {
|
|
83
|
+
startObserving(hash);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const handleHashChange = url => {
|
|
88
|
+
const hashIndex = url.indexOf('#');
|
|
89
|
+
if (hashIndex === -1) {
|
|
90
|
+
stopObserving();
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const hash = url.slice(hashIndex);
|
|
95
|
+
if (hash) {
|
|
96
|
+
startObserving(hash);
|
|
97
|
+
} else {
|
|
98
|
+
stopObserving();
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
Router.events.on('routeChangeComplete', handleRouteChange);
|
|
103
|
+
Router.events.on('hashChangeComplete', handleHashChange);
|
|
104
|
+
|
|
105
|
+
if (window.location.hash) {
|
|
106
|
+
startObserving(window.location.hash);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return () => {
|
|
110
|
+
stopObserving();
|
|
111
|
+
Router.events.off('routeChangeComplete', handleRouteChange);
|
|
112
|
+
Router.events.off('hashChangeComplete', handleHashChange);
|
|
113
|
+
};
|
|
114
|
+
},
|
|
115
|
+
[timeout]
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export default useHashObserver;
|